diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000000..709b5a4b10 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,14 @@ +{ + // Используйте IntelliSense, чтобы узнать о возможных атрибутах. + // Наведите указатель мыши, чтобы просмотреть описания существующих атрибутов. + // Для получения дополнительной информации посетите: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "type": "node", + "request": "launch", + "name": "Launch Program", + "program": "${workspaceFolder}\\server.js" + } + ] +} \ No newline at end of file diff --git a/benchmark/index.html b/benchmark/index.html new file mode 100644 index 0000000000..4c89ec5ede --- /dev/null +++ b/benchmark/index.html @@ -0,0 +1,275 @@ + + + + + + + + + + diff --git a/examples/cyclejs/.babelrc b/examples/cyclejs/.babelrc new file mode 100644 index 0000000000..831f20a8e5 --- /dev/null +++ b/examples/cyclejs/.babelrc @@ -0,0 +1,4 @@ +{ + "presets": ["es2015"], + "plugins": ["transform-object-rest-spread"] +} diff --git a/examples/cyclejs/.editorconfig b/examples/cyclejs/.editorconfig new file mode 100644 index 0000000000..442d28d0cf --- /dev/null +++ b/examples/cyclejs/.editorconfig @@ -0,0 +1,7 @@ +; editorconfig.org +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = LF \ No newline at end of file diff --git a/examples/cyclejs/.gitignore b/examples/cyclejs/.gitignore new file mode 100644 index 0000000000..30caf22711 --- /dev/null +++ b/examples/cyclejs/.gitignore @@ -0,0 +1,4 @@ +.idea/ +ignore/ +node_modules/ +npm-debug.log diff --git a/examples/cyclejs/LICENSE b/examples/cyclejs/LICENSE new file mode 100644 index 0000000000..76dc4b5250 --- /dev/null +++ b/examples/cyclejs/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2014 André Staltz + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + diff --git a/examples/cyclejs/README.md b/examples/cyclejs/README.md new file mode 100644 index 0000000000..6181be490f --- /dev/null +++ b/examples/cyclejs/README.md @@ -0,0 +1,10 @@ +TodoMVC in Cycle.js +=================== + +TodoMVC example implemented in [Cycle.js](http://cycle.js.org). + +[Open the app]( http://cycle.js.org/todomvc-cycle/ ) + +- - - + +To see a version of this codebase using Immutable.js, [click here](https://github.com/cyclejs/todomvc-cycle/pull/9/files). diff --git a/examples/cyclejs/index.html b/examples/cyclejs/index.html new file mode 100644 index 0000000000..5be41b1ad1 --- /dev/null +++ b/examples/cyclejs/index.html @@ -0,0 +1,19 @@ + + + + + Cycle • TodoMVC + + + + +
+ + + + + diff --git a/examples/cyclejs/js/app.js b/examples/cyclejs/js/app.js new file mode 100644 index 0000000000..d4ad604ff0 --- /dev/null +++ b/examples/cyclejs/js/app.js @@ -0,0 +1,12327 @@ +(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o 0) { + topNode = this.isolateModule.getIsolatedElement(scope) || rootElement; + if (selector && matchesSelector(topNode, selector)) { + topNodeMatches.push(topNode); + } + } + return toElArray(topNode.querySelectorAll(selector)) + .filter(scopeChecker.isStrictlyInRootScope, scopeChecker) + .concat(topNodeMatches); + }; + return ElementFinder; +}()); +exports.ElementFinder = ElementFinder; + +},{"./ScopeChecker":6,"./utils":19,"matches-selector":21}],3:[function(require,module,exports){ +"use strict"; +var ScopeChecker_1 = require('./ScopeChecker'); +var utils_1 = require('./utils'); +var matchesSelector; +try { + matchesSelector = require("matches-selector"); +} +catch (e) { + matchesSelector = Function.prototype; +} +/** + * Attaches an actual event listener to the DOM root element, + * handles "destinations" (interested DOMSource output subjects), and bubbling. + */ +var EventDelegator = (function () { + function EventDelegator(topElement, eventType, useCapture, isolateModule) { + var _this = this; + this.topElement = topElement; + this.eventType = eventType; + this.useCapture = useCapture; + this.isolateModule = isolateModule; + this.destinations = []; + this.roof = topElement.parentElement; + if (useCapture) { + this.domListener = function (ev) { return _this.capture(ev); }; + } + else { + this.domListener = function (ev) { return _this.bubble(ev); }; + } + topElement.addEventListener(eventType, this.domListener, useCapture); + } + EventDelegator.prototype.bubble = function (rawEvent) { + if (!document.body.contains(rawEvent.currentTarget)) { + return; + } + var ev = this.patchEvent(rawEvent); + for (var el = ev.target; el && el !== this.roof; el = el.parentElement) { + if (ev.propagationHasBeenStopped) { + return; + } + this.matchEventAgainstDestinations(el, ev); + } + }; + EventDelegator.prototype.matchEventAgainstDestinations = function (el, ev) { + for (var i = 0, n = this.destinations.length; i < n; i++) { + var dest = this.destinations[i]; + if (!dest.scopeChecker.isStrictlyInRootScope(el)) { + continue; + } + if (matchesSelector(el, dest.selector)) { + this.mutateEventCurrentTarget(ev, el); + dest.subject._n(ev); + } + } + }; + EventDelegator.prototype.capture = function (ev) { + for (var i = 0, n = this.destinations.length; i < n; i++) { + var dest = this.destinations[i]; + if (matchesSelector(ev.target, dest.selector)) { + dest.subject._n(ev); + } + } + }; + EventDelegator.prototype.addDestination = function (subject, namespace) { + var scope = utils_1.getScope(namespace); + var selector = utils_1.getSelectors(namespace); + var scopeChecker = new ScopeChecker_1.ScopeChecker(scope, this.isolateModule); + this.destinations.push({ subject: subject, scopeChecker: scopeChecker, selector: selector }); + }; + EventDelegator.prototype.patchEvent = function (event) { + var pEvent = event; + pEvent.propagationHasBeenStopped = false; + var oldStopPropagation = pEvent.stopPropagation; + pEvent.stopPropagation = function stopPropagation() { + oldStopPropagation.call(this); + this.propagationHasBeenStopped = true; + }; + return pEvent; + }; + EventDelegator.prototype.mutateEventCurrentTarget = function (event, currentTargetElement) { + try { + Object.defineProperty(event, "currentTarget", { + value: currentTargetElement, + configurable: true, + }); + } + catch (err) { + console.log("please use event.ownerTarget"); + } + event.ownerTarget = currentTargetElement; + }; + EventDelegator.prototype.updateTopElement = function (newTopElement) { + this.topElement.removeEventListener(this.eventType, this.domListener, this.useCapture); + newTopElement.addEventListener(this.eventType, this.domListener, this.useCapture); + this.topElement = newTopElement; + }; + return EventDelegator; +}()); +exports.EventDelegator = EventDelegator; + +},{"./ScopeChecker":6,"./utils":19,"matches-selector":21}],4:[function(require,module,exports){ +"use strict"; +var xstream_1 = require('xstream'); +var xstream_adapter_1 = require('@cycle/xstream-adapter'); +var HTMLSource = (function () { + function HTMLSource(html$, runSA) { + this.runSA = runSA; + this._html$ = html$; + this._empty$ = runSA.adapt(xstream_1.default.empty(), xstream_adapter_1.default.streamSubscribe); + } + HTMLSource.prototype.elements = function () { + return this.runSA.adapt(this._html$, xstream_adapter_1.default.streamSubscribe); + }; + HTMLSource.prototype.select = function (selector) { + return new HTMLSource(xstream_1.default.empty(), this.runSA); + }; + HTMLSource.prototype.events = function (eventType, options) { + return this._empty$; + }; + return HTMLSource; +}()); +exports.HTMLSource = HTMLSource; + +},{"@cycle/xstream-adapter":20,"xstream":115}],5:[function(require,module,exports){ +"use strict"; +var xstream_adapter_1 = require('@cycle/xstream-adapter'); +var xstream_1 = require('xstream'); +var ElementFinder_1 = require('./ElementFinder'); +var fromEvent_1 = require('./fromEvent'); +var isolate_1 = require('./isolate'); +var EventDelegator_1 = require('./EventDelegator'); +var utils_1 = require('./utils'); +var matchesSelector; +try { + matchesSelector = require("matches-selector"); +} +catch (e) { + matchesSelector = Function.prototype; +} +var eventTypesThatDontBubble = [ + "load", + "unload", + "focus", + "blur", + "mouseenter", + "mouseleave", + "submit", + "change", + "reset", + "timeupdate", + "playing", + "waiting", + "seeking", + "seeked", + "ended", + "loadedmetadata", + "loadeddata", + "canplay", + "canplaythrough", + "durationchange", + "play", + "pause", + "ratechange", + "volumechange", + "suspend", + "emptied", + "stalled", +]; +function determineUseCapture(eventType, options) { + var result = false; + if (typeof options.useCapture === "boolean") { + result = options.useCapture; + } + if (eventTypesThatDontBubble.indexOf(eventType) !== -1) { + result = true; + } + return result; +} +var MainDOMSource = (function () { + function MainDOMSource(_rootElement$, _runStreamAdapter, _namespace, _isolateModule, _delegators) { + if (_namespace === void 0) { _namespace = []; } + this._rootElement$ = _rootElement$; + this._runStreamAdapter = _runStreamAdapter; + this._namespace = _namespace; + this._isolateModule = _isolateModule; + this._delegators = _delegators; + this.isolateSource = isolate_1.isolateSource; + this.isolateSink = isolate_1.isolateSink; + } + MainDOMSource.prototype.elements = function () { + var output$; + if (this._namespace.length === 0) { + output$ = this._rootElement$; + } + else { + var elementFinder_1 = new ElementFinder_1.ElementFinder(this._namespace, this._isolateModule); + output$ = this._rootElement$.map(function (el) { return elementFinder_1.call(el); }); + } + var runSA = this._runStreamAdapter; + return runSA.remember(runSA.adapt(output$, xstream_adapter_1.default.streamSubscribe)); + }; + Object.defineProperty(MainDOMSource.prototype, "namespace", { + get: function () { + return this._namespace; + }, + enumerable: true, + configurable: true + }); + MainDOMSource.prototype.select = function (selector) { + if (typeof selector !== 'string') { + throw new Error("DOM driver's select() expects the argument to be a " + + "string as a CSS selector"); + } + var trimmedSelector = selector.trim(); + var childNamespace = trimmedSelector === ":root" ? + this._namespace : + this._namespace.concat(trimmedSelector); + return new MainDOMSource(this._rootElement$, this._runStreamAdapter, childNamespace, this._isolateModule, this._delegators); + }; + MainDOMSource.prototype.events = function (eventType, options) { + if (options === void 0) { options = {}; } + if (typeof eventType !== "string") { + throw new Error("DOM driver's events() expects argument to be a " + + "string representing the event type to listen for."); + } + var useCapture = determineUseCapture(eventType, options); + var namespace = this._namespace; + var scope = utils_1.getScope(namespace); + var keyParts = [eventType, useCapture]; + if (scope) { + keyParts.push(scope); + } + var key = keyParts.join('~'); + var domSource = this; + var rootElement$; + if (scope) { + var hadIsolated_mutable_1 = false; + rootElement$ = this._rootElement$ + .filter(function (rootElement) { + var hasIsolated = !!domSource._isolateModule.getIsolatedElement(scope); + var shouldPass = hasIsolated && !hadIsolated_mutable_1; + hadIsolated_mutable_1 = hasIsolated; + return shouldPass; + }); + } + else { + rootElement$ = this._rootElement$.take(2); + } + var event$ = rootElement$ + .map(function setupEventDelegatorOnTopElement(rootElement) { + // Event listener just for the root element + if (!namespace || namespace.length === 0) { + return fromEvent_1.fromEvent(rootElement, eventType, useCapture); + } + // Event listener on the top element as an EventDelegator + var delegators = domSource._delegators; + var top = scope + ? domSource._isolateModule.getIsolatedElement(scope) + : rootElement; + var delegator; + if (delegators.has(key)) { + delegator = delegators.get(key); + delegator.updateTopElement(top); + } + else { + delegator = new EventDelegator_1.EventDelegator(top, eventType, useCapture, domSource._isolateModule); + delegators.set(key, delegator); + } + var subject = xstream_1.default.create(); + if (scope) { + domSource._isolateModule.addEventDelegator(scope, delegator); + } + delegator.addDestination(subject, namespace); + return subject; + }) + .flatten(); + return this._runStreamAdapter.adapt(event$, xstream_adapter_1.default.streamSubscribe); + }; + MainDOMSource.prototype.dispose = function () { + this._isolateModule.reset(); + }; + return MainDOMSource; +}()); +exports.MainDOMSource = MainDOMSource; + +},{"./ElementFinder":2,"./EventDelegator":3,"./fromEvent":8,"./isolate":12,"./utils":19,"@cycle/xstream-adapter":20,"matches-selector":21,"xstream":115}],6:[function(require,module,exports){ +"use strict"; +var ScopeChecker = (function () { + function ScopeChecker(scope, isolateModule) { + this.scope = scope; + this.isolateModule = isolateModule; + } + ScopeChecker.prototype.isStrictlyInRootScope = function (leaf) { + for (var el = leaf; el; el = el.parentElement) { + var scope = this.isolateModule.isIsolatedElement(el); + if (scope && scope !== this.scope) { + return false; + } + if (scope) { + return true; + } + } + return true; + }; + return ScopeChecker; +}()); +exports.ScopeChecker = ScopeChecker; + +},{}],7:[function(require,module,exports){ +"use strict"; +var hyperscript_1 = require('./hyperscript'); +var classNameFromVNode_1 = require('snabbdom-selector/lib/classNameFromVNode'); +var selectorParser_1 = require('snabbdom-selector/lib/selectorParser'); +var VNodeWrapper = (function () { + function VNodeWrapper(rootElement) { + this.rootElement = rootElement; + } + VNodeWrapper.prototype.call = function (vnode) { + var _a = selectorParser_1.default(vnode.sel), selectorTagName = _a.tagName, selectorId = _a.id; + var vNodeClassName = classNameFromVNode_1.default(vnode); + var vNodeData = vnode.data || {}; + var vNodeDataProps = vNodeData.props || {}; + var _b = vNodeDataProps.id, vNodeId = _b === void 0 ? selectorId : _b; + var isVNodeAndRootElementIdentical = vNodeId.toUpperCase() === this.rootElement.id.toUpperCase() && + selectorTagName.toUpperCase() === this.rootElement.tagName.toUpperCase() && + vNodeClassName.toUpperCase() === this.rootElement.className.toUpperCase(); + if (isVNodeAndRootElementIdentical) { + return vnode; + } + var _c = this.rootElement, tagName = _c.tagName, id = _c.id, className = _c.className; + var elementId = id ? "#" + id : ""; + var elementClassName = className ? + "." + className.split(" ").join(".") : ""; + return hyperscript_1.h("" + tagName + elementId + elementClassName, {}, [vnode]); + }; + return VNodeWrapper; +}()); +exports.VNodeWrapper = VNodeWrapper; + +},{"./hyperscript":10,"snabbdom-selector/lib/classNameFromVNode":22,"snabbdom-selector/lib/selectorParser":23}],8:[function(require,module,exports){ +"use strict"; +var xstream_1 = require('xstream'); +function fromEvent(element, eventName, useCapture) { + if (useCapture === void 0) { useCapture = false; } + return xstream_1.Stream.create({ + element: element, + next: null, + start: function start(listener) { + this.next = function next(event) { listener.next(event); }; + this.element.addEventListener(eventName, this.next, useCapture); + }, + stop: function stop() { + this.element.removeEventListener(eventName, this.next, useCapture); + } + }); +} +exports.fromEvent = fromEvent; + +},{"xstream":115}],9:[function(require,module,exports){ +"use strict"; +var hyperscript_1 = require('./hyperscript'); +function isValidString(param) { + return typeof param === 'string' && param.length > 0; +} +function isSelector(param) { + return isValidString(param) && (param[0] === '.' || param[0] === '#'); +} +function createTagFunction(tagName) { + return function hyperscript(first, b, c) { + if (isSelector(first)) { + if (!!b && !!c) { + return hyperscript_1.h(tagName + first, b, c); + } + else if (!!b) { + return hyperscript_1.h(tagName + first, b); + } + else { + return hyperscript_1.h(tagName + first, {}); + } + } + else if (!!b) { + return hyperscript_1.h(tagName, first, b); + } + else if (!!first) { + return hyperscript_1.h(tagName, first); + } + else { + return hyperscript_1.h(tagName, {}); + } + }; +} +var SVG_TAG_NAMES = [ + 'a', 'altGlyph', 'altGlyphDef', 'altGlyphItem', 'animate', 'animateColor', + 'animateMotion', 'animateTransform', 'circle', 'clipPath', 'colorProfile', + 'cursor', 'defs', 'desc', 'ellipse', 'feBlend', 'feColorMatrix', + 'feComponentTransfer', 'feComposite', 'feConvolveMatrix', 'feDiffuseLighting', + 'feDisplacementMap', 'feDistantLight', 'feFlood', 'feFuncA', 'feFuncB', + 'feFuncG', 'feFuncR', 'feGaussianBlur', 'feImage', 'feMerge', 'feMergeNode', + 'feMorphology', 'feOffset', 'fePointLight', 'feSpecularLighting', + 'feSpotlight', 'feTile', 'feTurbulence', 'filter', 'font', 'fontFace', + 'fontFaceFormat', 'fontFaceName', 'fontFaceSrc', 'fontFaceUri', + 'foreignObject', 'g', 'glyph', 'glyphRef', 'hkern', 'image', 'line', + 'linearGradient', 'marker', 'mask', 'metadata', 'missingGlyph', 'mpath', + 'path', 'pattern', 'polygon', 'polyling', 'radialGradient', 'rect', 'script', + 'set', 'stop', 'style', 'switch', 'symbol', 'text', 'textPath', 'title', + 'tref', 'tspan', 'use', 'view', 'vkern' +]; +var svg = createTagFunction('svg'); +SVG_TAG_NAMES.forEach(function (tag) { + svg[tag] = createTagFunction(tag); +}); +var TAG_NAMES = [ + 'a', 'abbr', 'address', 'area', 'article', 'aside', 'audio', 'b', 'base', + 'bdi', 'bdo', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', + 'cite', 'code', 'col', 'colgroup', 'dd', 'del', 'dfn', 'dir', 'div', 'dl', + 'dt', 'em', 'embed', 'fieldset', 'figcaption', 'figure', 'footer', 'form', + 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', + 'i', 'iframe', 'img', 'input', 'ins', 'kbd', 'keygen', 'label', 'legend', + 'li', 'link', 'main', 'map', 'mark', 'menu', 'meta', 'nav', 'noscript', + 'object', 'ol', 'optgroup', 'option', 'p', 'param', 'pre', 'progress', 'q', + 'rp', 'rt', 'ruby', 's', 'samp', 'script', 'section', 'select', 'small', + 'source', 'span', 'strong', 'style', 'sub', 'sup', 'table', 'tbody', 'td', + 'textarea', 'tfoot', 'th', 'thead', 'title', 'tr', 'u', 'ul', 'video' +]; +var exported = { SVG_TAG_NAMES: SVG_TAG_NAMES, TAG_NAMES: TAG_NAMES, svg: svg, isSelector: isSelector, createTagFunction: createTagFunction }; +TAG_NAMES.forEach(function (n) { + exported[n] = createTagFunction(n); +}); +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = exported; + +},{"./hyperscript":10}],10:[function(require,module,exports){ +"use strict"; +var is = require('snabbdom/is'); +var vnode = require('snabbdom/vnode'); +function isGenericStream(x) { + return !Array.isArray(x) && typeof x.map === "function"; +} +function mutateStreamWithNS(vNode) { + addNS(vNode.data, vNode.children); + return vNode; +} +function addNS(data, children) { + data.ns = "http://www.w3.org/2000/svg"; + if (typeof children !== "undefined" && is.array(children)) { + for (var i = 0; i < children.length; ++i) { + if (isGenericStream(children[i])) { + children[i] = children[i].map(mutateStreamWithNS); + } + else { + addNS(children[i].data, children[i].children); + } + } + } +} +function h(sel, b, c) { + var data = {}; + var children; + var text; + var i; + if (arguments.length === 3) { + data = b; + if (is.array(c)) { + children = c; + } + else if (is.primitive(c)) { + text = c; + } + } + else if (arguments.length === 2) { + if (is.array(b)) { + children = b; + } + else if (is.primitive(b)) { + text = b; + } + else { + data = b; + } + } + if (is.array(children)) { + children = children.filter(function (x) { return x; }); + for (i = 0; i < children.length; ++i) { + if (is.primitive(children[i])) { + children[i] = vnode(undefined, undefined, undefined, children[i]); + } + } + } + if (sel[0] === 's' && sel[1] === 'v' && sel[2] === 'g') { + addNS(data, children); + } + return vnode(sel, data, children, text, undefined); +} +exports.h = h; +; + +},{"snabbdom/is":59,"snabbdom/vnode":68}],11:[function(require,module,exports){ +"use strict"; +var thunk = require('snabbdom/thunk'); +exports.thunk = thunk; +var makeDOMDriver_1 = require('./makeDOMDriver'); +exports.makeDOMDriver = makeDOMDriver_1.makeDOMDriver; +var makeHTMLDriver_1 = require('./makeHTMLDriver'); +exports.makeHTMLDriver = makeHTMLDriver_1.makeHTMLDriver; +var mockDOMSource_1 = require('./mockDOMSource'); +exports.mockDOMSource = mockDOMSource_1.mockDOMSource; +var hyperscript_1 = require('./hyperscript'); +exports.h = hyperscript_1.h; +var hyperscript_helpers_1 = require('./hyperscript-helpers'); +exports.svg = hyperscript_helpers_1.default.svg; +exports.a = hyperscript_helpers_1.default.a; +exports.abbr = hyperscript_helpers_1.default.abbr; +exports.address = hyperscript_helpers_1.default.address; +exports.area = hyperscript_helpers_1.default.area; +exports.article = hyperscript_helpers_1.default.article; +exports.aside = hyperscript_helpers_1.default.aside; +exports.audio = hyperscript_helpers_1.default.audio; +exports.b = hyperscript_helpers_1.default.b; +exports.base = hyperscript_helpers_1.default.base; +exports.bdi = hyperscript_helpers_1.default.bdi; +exports.bdo = hyperscript_helpers_1.default.bdo; +exports.blockquote = hyperscript_helpers_1.default.blockquote; +exports.body = hyperscript_helpers_1.default.body; +exports.br = hyperscript_helpers_1.default.br; +exports.button = hyperscript_helpers_1.default.button; +exports.canvas = hyperscript_helpers_1.default.canvas; +exports.caption = hyperscript_helpers_1.default.caption; +exports.cite = hyperscript_helpers_1.default.cite; +exports.code = hyperscript_helpers_1.default.code; +exports.col = hyperscript_helpers_1.default.col; +exports.colgroup = hyperscript_helpers_1.default.colgroup; +exports.dd = hyperscript_helpers_1.default.dd; +exports.del = hyperscript_helpers_1.default.del; +exports.dfn = hyperscript_helpers_1.default.dfn; +exports.dir = hyperscript_helpers_1.default.dir; +exports.div = hyperscript_helpers_1.default.div; +exports.dl = hyperscript_helpers_1.default.dl; +exports.dt = hyperscript_helpers_1.default.dt; +exports.em = hyperscript_helpers_1.default.em; +exports.embed = hyperscript_helpers_1.default.embed; +exports.fieldset = hyperscript_helpers_1.default.fieldset; +exports.figcaption = hyperscript_helpers_1.default.figcaption; +exports.figure = hyperscript_helpers_1.default.figure; +exports.footer = hyperscript_helpers_1.default.footer; +exports.form = hyperscript_helpers_1.default.form; +exports.h1 = hyperscript_helpers_1.default.h1; +exports.h2 = hyperscript_helpers_1.default.h2; +exports.h3 = hyperscript_helpers_1.default.h3; +exports.h4 = hyperscript_helpers_1.default.h4; +exports.h5 = hyperscript_helpers_1.default.h5; +exports.h6 = hyperscript_helpers_1.default.h6; +exports.head = hyperscript_helpers_1.default.head; +exports.header = hyperscript_helpers_1.default.header; +exports.hgroup = hyperscript_helpers_1.default.hgroup; +exports.hr = hyperscript_helpers_1.default.hr; +exports.html = hyperscript_helpers_1.default.html; +exports.i = hyperscript_helpers_1.default.i; +exports.iframe = hyperscript_helpers_1.default.iframe; +exports.img = hyperscript_helpers_1.default.img; +exports.input = hyperscript_helpers_1.default.input; +exports.ins = hyperscript_helpers_1.default.ins; +exports.kbd = hyperscript_helpers_1.default.kbd; +exports.keygen = hyperscript_helpers_1.default.keygen; +exports.label = hyperscript_helpers_1.default.label; +exports.legend = hyperscript_helpers_1.default.legend; +exports.li = hyperscript_helpers_1.default.li; +exports.link = hyperscript_helpers_1.default.link; +exports.main = hyperscript_helpers_1.default.main; +exports.map = hyperscript_helpers_1.default.map; +exports.mark = hyperscript_helpers_1.default.mark; +exports.menu = hyperscript_helpers_1.default.menu; +exports.meta = hyperscript_helpers_1.default.meta; +exports.nav = hyperscript_helpers_1.default.nav; +exports.noscript = hyperscript_helpers_1.default.noscript; +exports.object = hyperscript_helpers_1.default.object; +exports.ol = hyperscript_helpers_1.default.ol; +exports.optgroup = hyperscript_helpers_1.default.optgroup; +exports.option = hyperscript_helpers_1.default.option; +exports.p = hyperscript_helpers_1.default.p; +exports.param = hyperscript_helpers_1.default.param; +exports.pre = hyperscript_helpers_1.default.pre; +exports.progress = hyperscript_helpers_1.default.progress; +exports.q = hyperscript_helpers_1.default.q; +exports.rp = hyperscript_helpers_1.default.rp; +exports.rt = hyperscript_helpers_1.default.rt; +exports.ruby = hyperscript_helpers_1.default.ruby; +exports.s = hyperscript_helpers_1.default.s; +exports.samp = hyperscript_helpers_1.default.samp; +exports.script = hyperscript_helpers_1.default.script; +exports.section = hyperscript_helpers_1.default.section; +exports.select = hyperscript_helpers_1.default.select; +exports.small = hyperscript_helpers_1.default.small; +exports.source = hyperscript_helpers_1.default.source; +exports.span = hyperscript_helpers_1.default.span; +exports.strong = hyperscript_helpers_1.default.strong; +exports.style = hyperscript_helpers_1.default.style; +exports.sub = hyperscript_helpers_1.default.sub; +exports.sup = hyperscript_helpers_1.default.sup; +exports.table = hyperscript_helpers_1.default.table; +exports.tbody = hyperscript_helpers_1.default.tbody; +exports.td = hyperscript_helpers_1.default.td; +exports.textarea = hyperscript_helpers_1.default.textarea; +exports.tfoot = hyperscript_helpers_1.default.tfoot; +exports.th = hyperscript_helpers_1.default.th; +exports.thead = hyperscript_helpers_1.default.thead; +exports.title = hyperscript_helpers_1.default.title; +exports.tr = hyperscript_helpers_1.default.tr; +exports.u = hyperscript_helpers_1.default.u; +exports.ul = hyperscript_helpers_1.default.ul; +exports.video = hyperscript_helpers_1.default.video; + +},{"./hyperscript":10,"./hyperscript-helpers":9,"./makeDOMDriver":14,"./makeHTMLDriver":15,"./mockDOMSource":16,"snabbdom/thunk":67}],12:[function(require,module,exports){ +"use strict"; +var utils_1 = require('./utils'); +function isolateSource(source, scope) { + return source.select(utils_1.SCOPE_PREFIX + scope); +} +exports.isolateSource = isolateSource; +function isolateSink(sink, scope) { + return sink.map(function (vTree) { + if (vTree.data.isolate) { + var existingScope = parseInt(vTree.data.isolate.split(utils_1.SCOPE_PREFIX + 'cycle')[1]); + var _scope = parseInt(scope.split('cycle')[1]); + if (Number.isNaN(existingScope) || + Number.isNaN(_scope) || + existingScope > _scope) { + return vTree; + } + } + vTree.data.isolate = utils_1.SCOPE_PREFIX + scope; + return vTree; + }); +} +exports.isolateSink = isolateSink; + +},{"./utils":19}],13:[function(require,module,exports){ +"use strict"; +var IsolateModule = (function () { + function IsolateModule(isolatedElements) { + this.isolatedElements = isolatedElements; + this.eventDelegators = new Map(); + } + IsolateModule.prototype.setScope = function (elm, scope) { + this.isolatedElements.set(scope, elm); + }; + IsolateModule.prototype.removeScope = function (scope) { + this.isolatedElements.delete(scope); + }; + IsolateModule.prototype.getIsolatedElement = function (scope) { + return this.isolatedElements.get(scope); + }; + IsolateModule.prototype.isIsolatedElement = function (elm) { + var elements = Array.from(this.isolatedElements.entries()); + for (var i = 0; i < elements.length; ++i) { + if (elm === elements[i][1]) { + return elements[i][0]; + } + } + return false; + }; + IsolateModule.prototype.addEventDelegator = function (scope, eventDelegator) { + var delegators = this.eventDelegators.get(scope); + if (!delegators) { + delegators = []; + this.eventDelegators.set(scope, delegators); + } + delegators[delegators.length] = eventDelegator; + }; + IsolateModule.prototype.reset = function () { + this.isolatedElements.clear(); + }; + IsolateModule.prototype.createModule = function () { + var self = this; + return { + create: function (oldVNode, vNode) { + var _a = oldVNode.data, oldData = _a === void 0 ? {} : _a; + var elm = vNode.elm, _b = vNode.data, data = _b === void 0 ? {} : _b; + var oldScope = oldData.isolate || ""; + var scope = data.isolate || ""; + if (scope) { + if (oldScope) { + self.removeScope(oldScope); + } + self.setScope(elm, scope); + var delegators = self.eventDelegators.get(scope); + if (delegators) { + for (var i = 0, len = delegators.length; i < len; ++i) { + delegators[i].updateTopElement(elm); + } + } + else if (delegators === void 0) { + self.eventDelegators.set(scope, []); + } + } + if (oldScope && !scope) { + self.removeScope(scope); + } + }, + update: function (oldVNode, vNode) { + var _a = oldVNode.data, oldData = _a === void 0 ? {} : _a; + var elm = vNode.elm, _b = vNode.data, data = _b === void 0 ? {} : _b; + var oldScope = oldData.isolate || ""; + var scope = data.isolate || ""; + if (scope) { + if (oldScope) { + self.removeScope(oldScope); + } + self.setScope(elm, scope); + } + if (oldScope && !scope) { + self.removeScope(scope); + } + }, + remove: function (_a, cb) { + var data = _a.data; + data = data || {}; + var scope = data.isolate; + if (scope) { + self.removeScope(scope); + if (self.eventDelegators.get(scope)) { + self.eventDelegators.set(scope, []); + } + } + cb(); + }, + destroy: function (_a) { + var data = _a.data; + data = data || {}; + var scope = data.isolate; + if (scope) { + self.removeScope(scope); + if (self.eventDelegators.get(scope)) { + self.eventDelegators.set(scope, []); + } + } + } + }; + }; + return IsolateModule; +}()); +exports.IsolateModule = IsolateModule; + +},{}],14:[function(require,module,exports){ +"use strict"; +var snabbdom_1 = require('snabbdom'); +var xstream_1 = require('xstream'); +var MainDOMSource_1 = require('./MainDOMSource'); +var VNodeWrapper_1 = require('./VNodeWrapper'); +var utils_1 = require('./utils'); +var modules_1 = require('./modules'); +var isolateModule_1 = require('./isolateModule'); +var transposition_1 = require('./transposition'); +var xstream_adapter_1 = require('@cycle/xstream-adapter'); +function makeDOMDriverInputGuard(modules) { + if (!Array.isArray(modules)) { + throw new Error("Optional modules option must be " + + "an array for snabbdom modules"); + } +} +function domDriverInputGuard(view$) { + if (!view$ + || typeof view$.addListener !== "function" + || typeof view$.fold !== "function") { + throw new Error("The DOM driver function expects as input a Stream of " + + "virtual DOM elements"); + } +} +function makeDOMDriver(container, options) { + if (!options) { + options = {}; + } + var transposition = options.transposition || false; + var modules = options.modules || modules_1.default; + var isolateModule = new isolateModule_1.IsolateModule((new Map())); + var patch = snabbdom_1.init([isolateModule.createModule()].concat(modules)); + var rootElement = utils_1.getElement(container); + var vnodeWrapper = new VNodeWrapper_1.VNodeWrapper(rootElement); + var delegators = new Map(); + makeDOMDriverInputGuard(modules); + function DOMDriver(vnode$, runStreamAdapter) { + domDriverInputGuard(vnode$); + var transposeVNode = transposition_1.makeTransposeVNode(runStreamAdapter); + var preprocessedVNode$ = (transposition ? vnode$.map(transposeVNode).flatten() : vnode$); + var rootElement$ = preprocessedVNode$ + .map(function (vnode) { return vnodeWrapper.call(vnode); }) + .fold(patch, rootElement) + .drop(1) + .map(function unwrapElementFromVNode(vnode) { return vnode.elm; }) + .compose(function (stream) { return xstream_1.default.merge(stream, xstream_1.default.never()); }) // don't complete this stream + .startWith(rootElement); + /* tslint:disable:no-empty */ + rootElement$.addListener({ next: function () { }, error: function () { }, complete: function () { } }); + /* tslint:enable:no-empty */ + return new MainDOMSource_1.MainDOMSource(rootElement$, runStreamAdapter, [], isolateModule, delegators); + } + ; + DOMDriver.streamAdapter = xstream_adapter_1.default; + return DOMDriver; +} +exports.makeDOMDriver = makeDOMDriver; + +},{"./MainDOMSource":5,"./VNodeWrapper":7,"./isolateModule":13,"./modules":17,"./transposition":18,"./utils":19,"@cycle/xstream-adapter":20,"snabbdom":66,"xstream":115}],15:[function(require,module,exports){ +"use strict"; +var xstream_adapter_1 = require('@cycle/xstream-adapter'); +var transposition_1 = require('./transposition'); +var HTMLSource_1 = require('./HTMLSource'); +var toHTML = require('snabbdom-to-html'); +/* tslint:disable:no-empty */ +var noop = function () { }; +/* tslint:enable:no-empty */ +function makeHTMLDriver(effect, options) { + if (!options) { + options = {}; + } + var transposition = options.transposition || false; + function htmlDriver(vnode$, runStreamAdapter) { + var transposeVNode = transposition_1.makeTransposeVNode(runStreamAdapter); + var preprocessedVNode$ = (transposition ? vnode$.map(transposeVNode).flatten() : vnode$); + var html$ = preprocessedVNode$.last().map(toHTML); + html$.addListener({ + next: effect || noop, + error: noop, + complete: noop, + }); + return new HTMLSource_1.HTMLSource(html$, runStreamAdapter); + } + ; + htmlDriver.streamAdapter = xstream_adapter_1.default; + return htmlDriver; +} +exports.makeHTMLDriver = makeHTMLDriver; + +},{"./HTMLSource":4,"./transposition":18,"@cycle/xstream-adapter":20,"snabbdom-to-html":26}],16:[function(require,module,exports){ +"use strict"; +var xstream_adapter_1 = require('@cycle/xstream-adapter'); +var xstream_1 = require('xstream'); +var MockedDOMSource = (function () { + function MockedDOMSource(_streamAdapter, _mockConfig) { + this._streamAdapter = _streamAdapter; + this._mockConfig = _mockConfig; + if (_mockConfig.elements) { + this._elements = _mockConfig.elements; + } + else { + this._elements = _streamAdapter.adapt(xstream_1.default.empty(), xstream_adapter_1.default.streamSubscribe); + } + } + MockedDOMSource.prototype.elements = function () { + return this._elements; + }; + MockedDOMSource.prototype.events = function (eventType, options) { + var mockConfig = this._mockConfig; + var keys = Object.keys(mockConfig); + var keysLen = keys.length; + for (var i = 0; i < keysLen; i++) { + var key = keys[i]; + if (key === eventType) { + return mockConfig[key]; + } + } + return this._streamAdapter.adapt(xstream_1.default.empty(), xstream_adapter_1.default.streamSubscribe); + }; + MockedDOMSource.prototype.select = function (selector) { + var mockConfig = this._mockConfig; + var keys = Object.keys(mockConfig); + var keysLen = keys.length; + for (var i = 0; i < keysLen; i++) { + var key = keys[i]; + if (key === selector) { + return new MockedDOMSource(this._streamAdapter, mockConfig[key]); + } + } + return new MockedDOMSource(this._streamAdapter, {}); + }; + return MockedDOMSource; +}()); +exports.MockedDOMSource = MockedDOMSource; +function mockDOMSource(streamAdapter, mockConfig) { + return new MockedDOMSource(streamAdapter, mockConfig); +} +exports.mockDOMSource = mockDOMSource; + +},{"@cycle/xstream-adapter":20,"xstream":115}],17:[function(require,module,exports){ +"use strict"; +var ClassModule = require('snabbdom/modules/class'); +exports.ClassModule = ClassModule; +var PropsModule = require('snabbdom/modules/props'); +exports.PropsModule = PropsModule; +var AttrsModule = require('snabbdom/modules/attributes'); +exports.AttrsModule = AttrsModule; +var EventsModule = require('snabbdom/modules/eventlisteners'); +exports.EventsModule = EventsModule; +var StyleModule = require('snabbdom/modules/style'); +exports.StyleModule = StyleModule; +var HeroModule = require('snabbdom/modules/hero'); +exports.HeroModule = HeroModule; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = [StyleModule, ClassModule, PropsModule, AttrsModule]; + +},{"snabbdom/modules/attributes":60,"snabbdom/modules/class":61,"snabbdom/modules/eventlisteners":62,"snabbdom/modules/hero":63,"snabbdom/modules/props":64,"snabbdom/modules/style":65}],18:[function(require,module,exports){ +"use strict"; +var xstream_adapter_1 = require('@cycle/xstream-adapter'); +var xstream_1 = require('xstream'); +function createVTree(vnode, children) { + return { + sel: vnode.sel, + data: vnode.data, + text: vnode.text, + elm: vnode.elm, + key: vnode.key, + children: children, + }; +} +function makeTransposeVNode(runStreamAdapter) { + return function transposeVNode(vnode) { + if (!vnode) { + return null; + } + else if (vnode && typeof vnode.data === "object" && vnode.data.static) { + return xstream_1.default.of(vnode); + } + else if (runStreamAdapter.isValidStream(vnode)) { + var xsStream = xstream_adapter_1.default.adapt(vnode, runStreamAdapter.streamSubscribe); + return xsStream.map(transposeVNode).flatten(); + } + else if (typeof vnode === "object") { + if (!vnode.children || vnode.children.length === 0) { + return xstream_1.default.of(vnode); + } + var vnodeChildren = vnode.children + .map(transposeVNode) + .filter(function (x) { return x !== null; }); + if (vnodeChildren.length === 0) { + return xstream_1.default.of(createVTree(vnode, [])); + } + else { + return xstream_1.default.combine.apply(xstream_1.default, vnodeChildren) + .map(function (children) { return createVTree(vnode, children.slice()); }); + } + } + else { + throw new Error("Unhandled vTree Value"); + } + }; +} +exports.makeTransposeVNode = makeTransposeVNode; + +},{"@cycle/xstream-adapter":20,"xstream":115}],19:[function(require,module,exports){ +"use strict"; +function isElement(obj) { + return typeof HTMLElement === "object" ? + obj instanceof HTMLElement || obj instanceof DocumentFragment : + obj && typeof obj === "object" && obj !== null && + (obj.nodeType === 1 || obj.nodeType === 11) && + typeof obj.nodeName === "string"; +} +exports.SCOPE_PREFIX = "$$CYCLEDOM$$-"; +function getElement(selectors) { + var domElement = (typeof selectors === "string" ? + document.querySelector(selectors) : + selectors); + if (typeof selectors === "string" && domElement === null) { + throw new Error("Cannot render into unknown element `" + selectors + "`"); + } + else if (!isElement(domElement)) { + throw new Error("Given container is not a DOM element neither a " + + "selector string."); + } + return domElement; +} +exports.getElement = getElement; +function getScope(namespace) { + return namespace + .filter(function (c) { return c.indexOf(exports.SCOPE_PREFIX) > -1; }) + .slice(-1) // only need the latest, most specific, isolated boundary + .join(""); +} +exports.getScope = getScope; +function getSelectors(namespace) { + return namespace.filter(function (c) { return c.indexOf(exports.SCOPE_PREFIX) === -1; }).join(" "); +} +exports.getSelectors = getSelectors; + +},{}],20:[function(require,module,exports){ +"use strict"; +var xstream_1 = require('xstream'); +var XStreamAdapter = { + adapt: function (originStream, originStreamSubscribe) { + if (XStreamAdapter.isValidStream(originStream)) { + return originStream; + } + ; + var dispose = null; + return xstream_1.default.create({ + start: function (out) { + var observer = out; + dispose = originStreamSubscribe(originStream, observer); + }, + stop: function () { + if (typeof dispose === 'function') { + dispose(); + } + } + }); + }, + makeSubject: function () { + var stream = xstream_1.default.create(); + var observer = { + next: function (x) { stream.shamefullySendNext(x); }, + error: function (err) { stream.shamefullySendError(err); }, + complete: function () { stream.shamefullySendComplete(); } + }; + return { observer: observer, stream: stream }; + }, + remember: function (stream) { + return stream.remember(); + }, + isValidStream: function (stream) { + return (typeof stream.addListener === 'function' && + typeof stream.shamefullySendNext === 'function'); + }, + streamSubscribe: function (stream, observer) { + stream.addListener(observer); + return function () { return stream.removeListener(observer); }; + } +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = XStreamAdapter; + +},{"xstream":115}],21:[function(require,module,exports){ +'use strict'; + +var proto = Element.prototype; +var vendor = proto.matches + || proto.matchesSelector + || proto.webkitMatchesSelector + || proto.mozMatchesSelector + || proto.msMatchesSelector + || proto.oMatchesSelector; + +module.exports = match; + +/** + * Match `el` to `selector`. + * + * @param {Element} el + * @param {String} selector + * @return {Boolean} + * @api public + */ + +function match(el, selector) { + if (vendor) return vendor.call(el, selector); + var nodes = el.parentNode.querySelectorAll(selector); + for (var i = 0; i < nodes.length; i++) { + if (nodes[i] == el) return true; + } + return false; +} +},{}],22:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = classNameFromVNode; + +var _selectorParser2 = require('./selectorParser'); + +var _selectorParser3 = _interopRequireDefault(_selectorParser2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function classNameFromVNode(vNode) { + var _selectorParser = (0, _selectorParser3.default)(vNode.sel); + + var cn = _selectorParser.className; + + if (!vNode.data) { + return cn; + } + + var _vNode$data = vNode.data; + var dataClass = _vNode$data.class; + var props = _vNode$data.props; + + if (dataClass) { + var c = Object.keys(vNode.data.class).filter(function (cl) { + return vNode.data.class[cl]; + }); + cn += ' ' + c.join(' '); + } + + if (props && props.className) { + cn += ' ' + props.className; + } + + return cn.trim(); +} +},{"./selectorParser":23}],23:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = selectorParser; + +var _browserSplit = require('browser-split'); + +var _browserSplit2 = _interopRequireDefault(_browserSplit); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var classIdSplit = /([\.#]?[a-zA-Z0-9\u007F-\uFFFF_:-]+)/; +var notClassId = /^\.|#/; + +function selectorParser() { + var selector = arguments.length <= 0 || arguments[0] === undefined ? '' : arguments[0]; + + var tagName = undefined; + var id = ''; + var classes = []; + + var tagParts = (0, _browserSplit2.default)(selector, classIdSplit); + + if (notClassId.test(tagParts[1]) || selector === '') { + tagName = 'div'; + } + + var part = undefined; + var type = undefined; + var i = undefined; + + for (i = 0; i < tagParts.length; i++) { + part = tagParts[i]; + + if (!part) { + continue; + } + + type = part.charAt(0); + + if (!tagName) { + tagName = part; + } else if (type === '.') { + classes.push(part.substring(1, part.length)); + } else if (type === '#') { + id = part.substring(1, part.length); + } + } + + return { + tagName: tagName, + id: id, + className: classes.join(' ') + }; +} +},{"browser-split":24}],24:[function(require,module,exports){ +/*! + * Cross-Browser Split 1.1.1 + * Copyright 2007-2012 Steven Levithan + * Available under the MIT License + * ECMAScript compliant, uniform cross-browser split method + */ + +/** + * Splits a string into an array of strings using a regex or string separator. Matches of the + * separator are not included in the result array. However, if `separator` is a regex that contains + * capturing groups, backreferences are spliced into the result each time `separator` is matched. + * Fixes browser bugs compared to the native `String.prototype.split` and can be used reliably + * cross-browser. + * @param {String} str String to split. + * @param {RegExp|String} separator Regex or string to use for separating the string. + * @param {Number} [limit] Maximum number of items to include in the result array. + * @returns {Array} Array of substrings. + * @example + * + * // Basic use + * split('a b c d', ' '); + * // -> ['a', 'b', 'c', 'd'] + * + * // With limit + * split('a b c d', ' ', 2); + * // -> ['a', 'b'] + * + * // Backreferences in result array + * split('..word1 word2..', /([a-z]+)(\d+)/i); + * // -> ['..', 'word', '1', ' ', 'word', '2', '..'] + */ +module.exports = (function split(undef) { + + var nativeSplit = String.prototype.split, + compliantExecNpcg = /()??/.exec("")[1] === undef, + // NPCG: nonparticipating capturing group + self; + + self = function(str, separator, limit) { + // If `separator` is not a regex, use `nativeSplit` + if (Object.prototype.toString.call(separator) !== "[object RegExp]") { + return nativeSplit.call(str, separator, limit); + } + var output = [], + flags = (separator.ignoreCase ? "i" : "") + (separator.multiline ? "m" : "") + (separator.extended ? "x" : "") + // Proposed for ES6 + (separator.sticky ? "y" : ""), + // Firefox 3+ + lastLastIndex = 0, + // Make `global` and avoid `lastIndex` issues by working with a copy + separator = new RegExp(separator.source, flags + "g"), + separator2, match, lastIndex, lastLength; + str += ""; // Type-convert + if (!compliantExecNpcg) { + // Doesn't need flags gy, but they don't hurt + separator2 = new RegExp("^" + separator.source + "$(?!\\s)", flags); + } + /* Values for `limit`, per the spec: + * If undefined: 4294967295 // Math.pow(2, 32) - 1 + * If 0, Infinity, or NaN: 0 + * If positive number: limit = Math.floor(limit); if (limit > 4294967295) limit -= 4294967296; + * If negative number: 4294967296 - Math.floor(Math.abs(limit)) + * If other: Type-convert, then use the above rules + */ + limit = limit === undef ? -1 >>> 0 : // Math.pow(2, 32) - 1 + limit >>> 0; // ToUint32(limit) + while (match = separator.exec(str)) { + // `separator.lastIndex` is not reliable cross-browser + lastIndex = match.index + match[0].length; + if (lastIndex > lastLastIndex) { + output.push(str.slice(lastLastIndex, match.index)); + // Fix browsers whose `exec` methods don't consistently return `undefined` for + // nonparticipating capturing groups + if (!compliantExecNpcg && match.length > 1) { + match[0].replace(separator2, function() { + for (var i = 1; i < arguments.length - 2; i++) { + if (arguments[i] === undef) { + match[i] = undef; + } + } + }); + } + if (match.length > 1 && match.index < str.length) { + Array.prototype.push.apply(output, match.slice(1)); + } + lastLength = match[0].length; + lastLastIndex = lastIndex; + if (output.length >= limit) { + break; + } + } + if (separator.lastIndex === match.index) { + separator.lastIndex++; // Avoid an infinite loop + } + } + if (lastLastIndex === str.length) { + if (lastLength || !separator.test("")) { + output.push(""); + } + } else { + output.push(str.slice(lastLastIndex)); + } + return output.length > limit ? output.slice(0, limit) : output; + }; + + return self; +})(); + +},{}],25:[function(require,module,exports){ + +// All SVG children elements, not in this list, should self-close + +module.exports = { + // http://www.w3.org/TR/SVG/intro.html#TermContainerElement + 'a': true, + 'defs': true, + 'glyph': true, + 'g': true, + 'marker': true, + 'mask': true, + 'missing-glyph': true, + 'pattern': true, + 'svg': true, + 'switch': true, + 'symbol': true, + + // http://www.w3.org/TR/SVG/intro.html#TermDescriptiveElement + 'desc': true, + 'metadata': true, + 'title': true +}; +},{}],26:[function(require,module,exports){ + +var init = require('./init'); + +module.exports = init([require('./modules/attributes'), require('./modules/style')]); +},{"./init":27,"./modules/attributes":28,"./modules/style":29}],27:[function(require,module,exports){ + +var parseSelector = require('./parse-selector'); +var VOID_ELEMENTS = require('./void-elements'); +var CONTAINER_ELEMENTS = require('./container-elements'); + +module.exports = function init(modules) { + function parse(data) { + return modules.reduce(function (arr, fn) { + arr.push(fn(data)); + return arr; + }, []).filter(function (result) { + return result !== ''; + }); + } + + return function renderToString(vnode) { + if (!vnode.sel && vnode.text) { + return vnode.text; + } + + vnode.data = vnode.data || {}; + + // Support thunks + if (typeof vnode.sel === 'string' && vnode.sel.slice(0, 5) === 'thunk') { + vnode = vnode.data.fn.apply(null, vnode.data.args); + } + + var tagName = parseSelector(vnode.sel).tagName; + var attributes = parse(vnode); + var svg = vnode.data.ns === 'http://www.w3.org/2000/svg'; + var tag = []; + + // Open tag + tag.push('<' + tagName); + if (attributes.length) { + tag.push(' ' + attributes.join(' ')); + } + if (svg && CONTAINER_ELEMENTS[tagName] !== true) { + tag.push(' /'); + } + tag.push('>'); + + // Close tag, if needed + if (VOID_ELEMENTS[tagName] !== true && !svg || svg && CONTAINER_ELEMENTS[tagName] === true) { + if (vnode.data.props && vnode.data.props.innerHTML) { + tag.push(vnode.data.props.innerHTML); + } else if (vnode.text) { + tag.push(vnode.text); + } else if (vnode.children) { + vnode.children.forEach(function (child) { + tag.push(renderToString(child)); + }); + } + tag.push(''); + } + + return tag.join(''); + }; +}; +},{"./container-elements":25,"./parse-selector":30,"./void-elements":31}],28:[function(require,module,exports){ + +var forOwn = require('lodash.forown'); +var escape = require('lodash.escape'); +var union = require('lodash.union'); + +var parseSelector = require('../parse-selector'); + +// data.attrs, data.props, data.class + +module.exports = function attributes(vnode) { + var selector = parseSelector(vnode.sel); + var parsedClasses = selector.className.split(' '); + + var attributes = []; + var classes = []; + var values = {}; + + if (selector.id) { + values.id = selector.id; + } + + setAttributes(vnode.data.props, values); + setAttributes(vnode.data.attrs, values); // `attrs` override `props`, not sure if this is good so + + if (vnode.data.class) { + // Omit `className` attribute if `class` is set on vnode + values.class = undefined; + } + forOwn(vnode.data.class, function (value, key) { + if (value === true) { + classes.push(key); + } + }); + classes = union(classes, values.class, parsedClasses).filter(function (x) { + return x !== ''; + }); + + if (classes.length) { + values.class = classes.join(' '); + } + + forOwn(values, function (value, key) { + attributes.push(value === true ? key : key + '="' + escape(value) + '"'); + }); + + return attributes.length ? attributes.join(' ') : ''; +}; + +function setAttributes(values, target) { + forOwn(values, function (value, key) { + if (key === 'htmlFor') { + target['for'] = value; + return; + } + if (key === 'className') { + target['class'] = value.split(' '); + return; + } + if (key === 'innerHTML') { + return; + } + target[key] = value; + }); +} +},{"../parse-selector":30,"lodash.escape":33,"lodash.forown":35,"lodash.union":47}],29:[function(require,module,exports){ +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + +var forOwn = require('lodash.forown'); +var escape = require('lodash.escape'); +var kebabCase = require('lodash.kebabcase'); + +// data.style + +module.exports = function style(vnode) { + var styles = []; + var style = vnode.data.style || {}; + + // merge in `delayed` properties + if (style.delayed) { + _extends(style, style.delayed); + } + + forOwn(style, function (value, key) { + // omit hook objects + if (typeof value === 'string') { + styles.push(kebabCase(key) + ': ' + escape(value)); + } + }); + + return styles.length ? 'style="' + styles.join('; ') + '"' : ''; +}; +},{"lodash.escape":33,"lodash.forown":35,"lodash.kebabcase":42}],30:[function(require,module,exports){ + +// https://github.com/Matt-Esch/virtual-dom/blob/master/virtual-hyperscript/parse-tag.js + +var split = require('browser-split'); + +var classIdSplit = /([\.#]?[a-zA-Z0-9\u007F-\uFFFF_:-]+)/; +var notClassId = /^\.|#/; + +module.exports = function parseSelector(selector, upper) { + selector = selector || ''; + var tagName; + var id = ''; + var classes = []; + + var tagParts = split(selector, classIdSplit); + + if (notClassId.test(tagParts[1]) || selector === '') { + tagName = 'div'; + } + + var part, type, i; + + for (i = 0; i < tagParts.length; i++) { + part = tagParts[i]; + + if (!part) { + continue; + } + + type = part.charAt(0); + + if (!tagName) { + tagName = part; + } else if (type === '.') { + classes.push(part.substring(1, part.length)); + } else if (type === '#') { + id = part.substring(1, part.length); + } + } + + return { + tagName: upper === true ? tagName.toUpperCase() : tagName, + id: id, + className: classes.join(' ') + }; +}; +},{"browser-split":32}],31:[function(require,module,exports){ + +// http://www.w3.org/html/wg/drafts/html/master/syntax.html#void-elements + +module.exports = { + area: true, + base: true, + br: true, + col: true, + embed: true, + hr: true, + img: true, + input: true, + keygen: true, + link: true, + meta: true, + param: true, + source: true, + track: true, + wbr: true +}; +},{}],32:[function(require,module,exports){ +arguments[4][24][0].apply(exports,arguments) +},{"dup":24}],33:[function(require,module,exports){ +/** + * lodash 3.2.0 (Custom Build) + * Build: `lodash modularize exports="npm" -o ./` + * Copyright 2012-2016 The Dojo Foundation + * Based on Underscore.js 1.8.3 + * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license + */ +var root = require('lodash._root'); + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** `Object#toString` result references. */ +var symbolTag = '[object Symbol]'; + +/** Used to match HTML entities and HTML characters. */ +var reUnescapedHtml = /[&<>"'`]/g, + reHasUnescapedHtml = RegExp(reUnescapedHtml.source); + +/** Used to map characters to HTML entities. */ +var htmlEscapes = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''', + '`': '`' +}; + +/** + * Used by `_.escape` to convert characters to HTML entities. + * + * @private + * @param {string} chr The matched character to escape. + * @returns {string} Returns the escaped character. + */ +function escapeHtmlChar(chr) { + return htmlEscapes[chr]; +} + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** + * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) + * of values. + */ +var objectToString = objectProto.toString; + +/** Built-in value references. */ +var Symbol = root.Symbol; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = Symbol ? Symbol.prototype : undefined, + symbolToString = Symbol ? symbolProto.toString : undefined; + +/** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ +function isObjectLike(value) { + return !!value && typeof value == 'object'; +} + +/** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ +function isSymbol(value) { + return typeof value == 'symbol' || + (isObjectLike(value) && objectToString.call(value) == symbolTag); +} + +/** + * Converts `value` to a string if it's not one. An empty string is returned + * for `null` and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to process. + * @returns {string} Returns the string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ +function toString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if (value == null) { + return ''; + } + if (isSymbol(value)) { + return Symbol ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/** + * Converts the characters "&", "<", ">", '"', "'", and "\`" in `string` to + * their corresponding HTML entities. + * + * **Note:** No other characters are escaped. To escape additional + * characters use a third-party library like [_he_](https://mths.be/he). + * + * Though the ">" character is escaped for symmetry, characters like + * ">" and "/" don't need escaping in HTML and have no special meaning + * unless they're part of a tag or unquoted attribute value. + * See [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands) + * (under "semi-related fun fact") for more details. + * + * Backticks are escaped because in IE < 9, they can break out of + * attribute values or HTML comments. See [#59](https://html5sec.org/#59), + * [#102](https://html5sec.org/#102), [#108](https://html5sec.org/#108), and + * [#133](https://html5sec.org/#133) of the [HTML5 Security Cheatsheet](https://html5sec.org/) + * for more details. + * + * When working with HTML you should always [quote attribute values](http://wonko.com/post/html-escaping) + * to reduce XSS vectors. + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to escape. + * @returns {string} Returns the escaped string. + * @example + * + * _.escape('fred, barney, & pebbles'); + * // => 'fred, barney, & pebbles' + */ +function escape(string) { + string = toString(string); + return (string && reHasUnescapedHtml.test(string)) + ? string.replace(reUnescapedHtml, escapeHtmlChar) + : string; +} + +module.exports = escape; + +},{"lodash._root":34}],34:[function(require,module,exports){ +(function (global){ +/** + * lodash 3.0.1 (Custom Build) + * Build: `lodash modularize exports="npm" -o ./` + * Copyright 2012-2016 The Dojo Foundation + * Based on Underscore.js 1.8.3 + * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license + */ + +/** Used to determine if values are of the language type `Object`. */ +var objectTypes = { + 'function': true, + 'object': true +}; + +/** Detect free variable `exports`. */ +var freeExports = (objectTypes[typeof exports] && exports && !exports.nodeType) + ? exports + : undefined; + +/** Detect free variable `module`. */ +var freeModule = (objectTypes[typeof module] && module && !module.nodeType) + ? module + : undefined; + +/** Detect free variable `global` from Node.js. */ +var freeGlobal = checkGlobal(freeExports && freeModule && typeof global == 'object' && global); + +/** Detect free variable `self`. */ +var freeSelf = checkGlobal(objectTypes[typeof self] && self); + +/** Detect free variable `window`. */ +var freeWindow = checkGlobal(objectTypes[typeof window] && window); + +/** Detect `this` as the global object. */ +var thisGlobal = checkGlobal(objectTypes[typeof this] && this); + +/** + * Used as a reference to the global object. + * + * The `this` value is used if it's the global object to avoid Greasemonkey's + * restricted `window` object, otherwise the `window` object is used. + */ +var root = freeGlobal || + ((freeWindow !== (thisGlobal && thisGlobal.window)) && freeWindow) || + freeSelf || thisGlobal || Function('return this')(); + +/** + * Checks if `value` is a global object. + * + * @private + * @param {*} value The value to check. + * @returns {null|Object} Returns `value` if it's a global object, else `null`. + */ +function checkGlobal(value) { + return (value && value.Object === Object) ? value : null; +} + +module.exports = root; + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) + +},{}],35:[function(require,module,exports){ +/** + * lodash 3.0.2 (Custom Build) + * Build: `lodash modern modularize exports="npm" -o ./` + * Copyright 2012-2015 The Dojo Foundation + * Based on Underscore.js 1.8.3 + * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license + */ +var baseFor = require('lodash._basefor'), + bindCallback = require('lodash._bindcallback'), + keys = require('lodash.keys'); + +/** + * The base implementation of `_.forOwn` without support for callback + * shorthands and `this` binding. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ +function baseForOwn(object, iteratee) { + return baseFor(object, iteratee, keys); +} + +/** + * Creates a function for `_.forOwn` or `_.forOwnRight`. + * + * @private + * @param {Function} objectFunc The function to iterate over an object. + * @returns {Function} Returns the new each function. + */ +function createForOwn(objectFunc) { + return function(object, iteratee, thisArg) { + if (typeof iteratee != 'function' || thisArg !== undefined) { + iteratee = bindCallback(iteratee, thisArg, 3); + } + return objectFunc(object, iteratee); + }; +} + +/** + * Iterates over own enumerable properties of an object invoking `iteratee` + * for each property. The `iteratee` is bound to `thisArg` and invoked with + * three arguments: (value, key, object). Iteratee functions may exit iteration + * early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Object} Returns `object`. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forOwn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => logs 'a' and 'b' (iteration order is not guaranteed) + */ +var forOwn = createForOwn(baseForOwn); + +module.exports = forOwn; + +},{"lodash._basefor":36,"lodash._bindcallback":37,"lodash.keys":38}],36:[function(require,module,exports){ +/** + * lodash 3.0.3 (Custom Build) + * Build: `lodash modularize exports="npm" -o ./` + * Copyright 2012-2016 The Dojo Foundation + * Based on Underscore.js 1.8.3 + * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license + */ + +/** + * The base implementation of `baseForIn` and `baseForOwn` which iterates + * over `object` properties returned by `keysFunc` invoking `iteratee` for + * each property. Iteratee functions may exit iteration early by explicitly + * returning `false`. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */ +var baseFor = createBaseFor(); + +/** + * Creates a base function for methods like `_.forIn`. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ +function createBaseFor(fromRight) { + return function(object, iteratee, keysFunc) { + var index = -1, + iterable = Object(object), + props = keysFunc(object), + length = props.length; + + while (length--) { + var key = props[fromRight ? length : ++index]; + if (iteratee(iterable[key], key, iterable) === false) { + break; + } + } + return object; + }; +} + +module.exports = baseFor; + +},{}],37:[function(require,module,exports){ +/** + * lodash 3.0.1 (Custom Build) + * Build: `lodash modern modularize exports="npm" -o ./` + * Copyright 2012-2015 The Dojo Foundation + * Based on Underscore.js 1.8.3 + * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license + */ + +/** + * A specialized version of `baseCallback` which only supports `this` binding + * and specifying the number of arguments to provide to `func`. + * + * @private + * @param {Function} func The function to bind. + * @param {*} thisArg The `this` binding of `func`. + * @param {number} [argCount] The number of arguments to provide to `func`. + * @returns {Function} Returns the callback. + */ +function bindCallback(func, thisArg, argCount) { + if (typeof func != 'function') { + return identity; + } + if (thisArg === undefined) { + return func; + } + switch (argCount) { + case 1: return function(value) { + return func.call(thisArg, value); + }; + case 3: return function(value, index, collection) { + return func.call(thisArg, value, index, collection); + }; + case 4: return function(accumulator, value, index, collection) { + return func.call(thisArg, accumulator, value, index, collection); + }; + case 5: return function(value, other, key, object, source) { + return func.call(thisArg, value, other, key, object, source); + }; + } + return function() { + return func.apply(thisArg, arguments); + }; +} + +/** + * This method returns the first argument provided to it. + * + * @static + * @memberOf _ + * @category Utility + * @param {*} value Any value. + * @returns {*} Returns `value`. + * @example + * + * var object = { 'user': 'fred' }; + * + * _.identity(object) === object; + * // => true + */ +function identity(value) { + return value; +} + +module.exports = bindCallback; + +},{}],38:[function(require,module,exports){ +/** + * lodash 3.1.2 (Custom Build) + * Build: `lodash modern modularize exports="npm" -o ./` + * Copyright 2012-2015 The Dojo Foundation + * Based on Underscore.js 1.8.3 + * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license + */ +var getNative = require('lodash._getnative'), + isArguments = require('lodash.isarguments'), + isArray = require('lodash.isarray'); + +/** Used to detect unsigned integer values. */ +var reIsUint = /^\d+$/; + +/** Used for native method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/* Native method references for those with the same name as other `lodash` methods. */ +var nativeKeys = getNative(Object, 'keys'); + +/** + * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer) + * of an array-like value. + */ +var MAX_SAFE_INTEGER = 9007199254740991; + +/** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new function. + */ +function baseProperty(key) { + return function(object) { + return object == null ? undefined : object[key]; + }; +} + +/** + * Gets the "length" property value of `object`. + * + * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792) + * that affects Safari on at least iOS 8.1-8.3 ARM64. + * + * @private + * @param {Object} object The object to query. + * @returns {*} Returns the "length" value. + */ +var getLength = baseProperty('length'); + +/** + * Checks if `value` is array-like. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + */ +function isArrayLike(value) { + return value != null && isLength(getLength(value)); +} + +/** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ +function isIndex(value, length) { + value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1; + length = length == null ? MAX_SAFE_INTEGER : length; + return value > -1 && value % 1 == 0 && value < length; +} + +/** + * Checks if `value` is a valid array-like length. + * + * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength). + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + */ +function isLength(value) { + return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; +} + +/** + * A fallback implementation of `Object.keys` which creates an array of the + * own enumerable property names of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ +function shimKeys(object) { + var props = keysIn(object), + propsLength = props.length, + length = propsLength && object.length; + + var allowIndexes = !!length && isLength(length) && + (isArray(object) || isArguments(object)); + + var index = -1, + result = []; + + while (++index < propsLength) { + var key = props[index]; + if ((allowIndexes && isIndex(key, length)) || hasOwnProperty.call(object, key)) { + result.push(key); + } + } + return result; +} + +/** + * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`. + * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(1); + * // => false + */ +function isObject(value) { + // Avoid a V8 JIT bug in Chrome 19-20. + // See https://code.google.com/p/v8/issues/detail?id=2291 for more details. + var type = typeof value; + return !!value && (type == 'object' || type == 'function'); +} + +/** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/6.0/#sec-object.keys) + * for more details. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ +var keys = !nativeKeys ? shimKeys : function(object) { + var Ctor = object == null ? undefined : object.constructor; + if ((typeof Ctor == 'function' && Ctor.prototype === object) || + (typeof object != 'function' && isArrayLike(object))) { + return shimKeys(object); + } + return isObject(object) ? nativeKeys(object) : []; +}; + +/** + * Creates an array of the own and inherited enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keysIn(new Foo); + * // => ['a', 'b', 'c'] (iteration order is not guaranteed) + */ +function keysIn(object) { + if (object == null) { + return []; + } + if (!isObject(object)) { + object = Object(object); + } + var length = object.length; + length = (length && isLength(length) && + (isArray(object) || isArguments(object)) && length) || 0; + + var Ctor = object.constructor, + index = -1, + isProto = typeof Ctor == 'function' && Ctor.prototype === object, + result = Array(length), + skipIndexes = length > 0; + + while (++index < length) { + result[index] = (index + ''); + } + for (var key in object) { + if (!(skipIndexes && isIndex(key, length)) && + !(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { + result.push(key); + } + } + return result; +} + +module.exports = keys; + +},{"lodash._getnative":39,"lodash.isarguments":40,"lodash.isarray":41}],39:[function(require,module,exports){ +/** + * lodash 3.9.1 (Custom Build) + * Build: `lodash modern modularize exports="npm" -o ./` + * Copyright 2012-2015 The Dojo Foundation + * Based on Underscore.js 1.8.3 + * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license + */ + +/** `Object#toString` result references. */ +var funcTag = '[object Function]'; + +/** Used to detect host constructors (Safari > 5). */ +var reIsHostCtor = /^\[object .+?Constructor\]$/; + +/** + * Checks if `value` is object-like. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + */ +function isObjectLike(value) { + return !!value && typeof value == 'object'; +} + +/** Used for native method references. */ +var objectProto = Object.prototype; + +/** Used to resolve the decompiled source of functions. */ +var fnToString = Function.prototype.toString; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) + * of values. + */ +var objToString = objectProto.toString; + +/** Used to detect if a method is native. */ +var reIsNative = RegExp('^' + + fnToString.call(hasOwnProperty).replace(/[\\^$.*+?()[\]{}|]/g, '\\$&') + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' +); + +/** + * Gets the native function at `key` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. + */ +function getNative(object, key) { + var value = object == null ? undefined : object[key]; + return isNative(value) ? value : undefined; +} + +/** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ +function isFunction(value) { + // The use of `Object#toString` avoids issues with the `typeof` operator + // in older versions of Chrome and Safari which return 'function' for regexes + // and Safari 8 equivalents which return 'object' for typed array constructors. + return isObject(value) && objToString.call(value) == funcTag; +} + +/** + * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`. + * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(1); + * // => false + */ +function isObject(value) { + // Avoid a V8 JIT bug in Chrome 19-20. + // See https://code.google.com/p/v8/issues/detail?id=2291 for more details. + var type = typeof value; + return !!value && (type == 'object' || type == 'function'); +} + +/** + * Checks if `value` is a native function. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, else `false`. + * @example + * + * _.isNative(Array.prototype.push); + * // => true + * + * _.isNative(_); + * // => false + */ +function isNative(value) { + if (value == null) { + return false; + } + if (isFunction(value)) { + return reIsNative.test(fnToString.call(value)); + } + return isObjectLike(value) && reIsHostCtor.test(value); +} + +module.exports = getNative; + +},{}],40:[function(require,module,exports){ +/** + * lodash (Custom Build) + * Build: `lodash modularize exports="npm" -o ./` + * Copyright jQuery Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */ + +/** Used as references for various `Number` constants. */ +var MAX_SAFE_INTEGER = 9007199254740991; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]'; + +/** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function baseProperty(key) { + return function(object) { + return object == null ? undefined : object[key]; + }; +} + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) + * of values. + */ +var objectToString = objectProto.toString; + +/** Built-in value references. */ +var propertyIsEnumerable = objectProto.propertyIsEnumerable; + +/** + * Gets the "length" property value of `object`. + * + * **Note:** This function is used to avoid a + * [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792) that affects + * Safari on at least iOS 8.1-8.3 ARM64. + * + * @private + * @param {Object} object The object to query. + * @returns {*} Returns the "length" value. + */ +var getLength = baseProperty('length'); + +/** + * Checks if `value` is likely an `arguments` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + * else `false`. + * @example + * + * _.isArguments(function() { return arguments; }()); + * // => true + * + * _.isArguments([1, 2, 3]); + * // => false + */ +function isArguments(value) { + // Safari 8.1 incorrectly makes `arguments.callee` enumerable in strict mode. + return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') && + (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag); +} + +/** + * Checks if `value` is array-like. A value is considered array-like if it's + * not a function and has a `value.length` that's an integer greater than or + * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + * @example + * + * _.isArrayLike([1, 2, 3]); + * // => true + * + * _.isArrayLike(document.body.children); + * // => true + * + * _.isArrayLike('abc'); + * // => true + * + * _.isArrayLike(_.noop); + * // => false + */ +function isArrayLike(value) { + return value != null && isLength(getLength(value)) && !isFunction(value); +} + +/** + * This method is like `_.isArrayLike` except that it also checks if `value` + * is an object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array-like object, + * else `false`. + * @example + * + * _.isArrayLikeObject([1, 2, 3]); + * // => true + * + * _.isArrayLikeObject(document.body.children); + * // => true + * + * _.isArrayLikeObject('abc'); + * // => false + * + * _.isArrayLikeObject(_.noop); + * // => false + */ +function isArrayLikeObject(value) { + return isObjectLike(value) && isArrayLike(value); +} + +/** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ +function isFunction(value) { + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 8 which returns 'object' for typed array and weak map constructors, + // and PhantomJS 1.9 which returns 'function' for `NodeList` instances. + var tag = isObject(value) ? objectToString.call(value) : ''; + return tag == funcTag || tag == genTag; +} + +/** + * Checks if `value` is a valid array-like length. + * + * **Note:** This function is loosely based on + * [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, + * else `false`. + * @example + * + * _.isLength(3); + * // => true + * + * _.isLength(Number.MIN_VALUE); + * // => false + * + * _.isLength(Infinity); + * // => false + * + * _.isLength('3'); + * // => false + */ +function isLength(value) { + return typeof value == 'number' && + value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; +} + +/** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/6.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ +function isObject(value) { + var type = typeof value; + return !!value && (type == 'object' || type == 'function'); +} + +/** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ +function isObjectLike(value) { + return !!value && typeof value == 'object'; +} + +module.exports = isArguments; + +},{}],41:[function(require,module,exports){ +/** + * lodash 3.0.4 (Custom Build) + * Build: `lodash modern modularize exports="npm" -o ./` + * Copyright 2012-2015 The Dojo Foundation + * Based on Underscore.js 1.8.3 + * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license + */ + +/** `Object#toString` result references. */ +var arrayTag = '[object Array]', + funcTag = '[object Function]'; + +/** Used to detect host constructors (Safari > 5). */ +var reIsHostCtor = /^\[object .+?Constructor\]$/; + +/** + * Checks if `value` is object-like. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + */ +function isObjectLike(value) { + return !!value && typeof value == 'object'; +} + +/** Used for native method references. */ +var objectProto = Object.prototype; + +/** Used to resolve the decompiled source of functions. */ +var fnToString = Function.prototype.toString; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) + * of values. + */ +var objToString = objectProto.toString; + +/** Used to detect if a method is native. */ +var reIsNative = RegExp('^' + + fnToString.call(hasOwnProperty).replace(/[\\^$.*+?()[\]{}|]/g, '\\$&') + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' +); + +/* Native method references for those with the same name as other `lodash` methods. */ +var nativeIsArray = getNative(Array, 'isArray'); + +/** + * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer) + * of an array-like value. + */ +var MAX_SAFE_INTEGER = 9007199254740991; + +/** + * Gets the native function at `key` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. + */ +function getNative(object, key) { + var value = object == null ? undefined : object[key]; + return isNative(value) ? value : undefined; +} + +/** + * Checks if `value` is a valid array-like length. + * + * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength). + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + */ +function isLength(value) { + return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; +} + +/** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(function() { return arguments; }()); + * // => false + */ +var isArray = nativeIsArray || function(value) { + return isObjectLike(value) && isLength(value.length) && objToString.call(value) == arrayTag; +}; + +/** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ +function isFunction(value) { + // The use of `Object#toString` avoids issues with the `typeof` operator + // in older versions of Chrome and Safari which return 'function' for regexes + // and Safari 8 equivalents which return 'object' for typed array constructors. + return isObject(value) && objToString.call(value) == funcTag; +} + +/** + * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`. + * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(1); + * // => false + */ +function isObject(value) { + // Avoid a V8 JIT bug in Chrome 19-20. + // See https://code.google.com/p/v8/issues/detail?id=2291 for more details. + var type = typeof value; + return !!value && (type == 'object' || type == 'function'); +} + +/** + * Checks if `value` is a native function. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, else `false`. + * @example + * + * _.isNative(Array.prototype.push); + * // => true + * + * _.isNative(_); + * // => false + */ +function isNative(value) { + if (value == null) { + return false; + } + if (isFunction(value)) { + return reIsNative.test(fnToString.call(value)); + } + return isObjectLike(value) && reIsHostCtor.test(value); +} + +module.exports = isArray; + +},{}],42:[function(require,module,exports){ +/** + * lodash 3.1.1 (Custom Build) + * Build: `lodash modularize exports="npm" -o ./` + * Copyright 2012-2016 The Dojo Foundation + * Based on Underscore.js 1.8.3 + * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license + */ +var deburr = require('lodash.deburr'), + words = require('lodash.words'); + +/** + * A specialized version of `_.reduce` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initAccum] Specify using the first element of `array` as the initial value. + * @returns {*} Returns the accumulated value. + */ +function arrayReduce(array, iteratee, accumulator, initAccum) { + var index = -1, + length = array.length; + + if (initAccum && length) { + accumulator = array[++index]; + } + while (++index < length) { + accumulator = iteratee(accumulator, array[index], index, array); + } + return accumulator; +} + +/** + * Creates a function like `_.camelCase`. + * + * @private + * @param {Function} callback The function to combine each word. + * @returns {Function} Returns the new compounder function. + */ +function createCompounder(callback) { + return function(string) { + return arrayReduce(words(deburr(string)), callback, ''); + }; +} + +/** + * Converts `string` to [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles). + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the kebab cased string. + * @example + * + * _.kebabCase('Foo Bar'); + * // => 'foo-bar' + * + * _.kebabCase('fooBar'); + * // => 'foo-bar' + * + * _.kebabCase('__foo_bar__'); + * // => 'foo-bar' + */ +var kebabCase = createCompounder(function(result, word, index) { + return result + (index ? '-' : '') + word.toLowerCase(); +}); + +module.exports = kebabCase; + +},{"lodash.deburr":43,"lodash.words":45}],43:[function(require,module,exports){ +/** + * lodash 3.2.0 (Custom Build) + * Build: `lodash modularize exports="npm" -o ./` + * Copyright 2012-2016 The Dojo Foundation + * Based on Underscore.js 1.8.3 + * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license + */ +var root = require('lodash._root'); + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** `Object#toString` result references. */ +var symbolTag = '[object Symbol]'; + +/** Used to match latin-1 supplementary letters (excluding mathematical operators). */ +var reLatin1 = /[\xc0-\xd6\xd8-\xde\xdf-\xf6\xf8-\xff]/g; + +/** Used to compose unicode character classes. */ +var rsComboMarksRange = '\\u0300-\\u036f\\ufe20-\\ufe23', + rsComboSymbolsRange = '\\u20d0-\\u20f0'; + +/** Used to compose unicode capture groups. */ +var rsCombo = '[' + rsComboMarksRange + rsComboSymbolsRange + ']'; + +/** + * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and + * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols). + */ +var reComboMark = RegExp(rsCombo, 'g'); + +/** Used to map latin-1 supplementary letters to basic latin letters. */ +var deburredLetters = { + '\xc0': 'A', '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A', + '\xe0': 'a', '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a', + '\xc7': 'C', '\xe7': 'c', + '\xd0': 'D', '\xf0': 'd', + '\xc8': 'E', '\xc9': 'E', '\xca': 'E', '\xcb': 'E', + '\xe8': 'e', '\xe9': 'e', '\xea': 'e', '\xeb': 'e', + '\xcC': 'I', '\xcd': 'I', '\xce': 'I', '\xcf': 'I', + '\xeC': 'i', '\xed': 'i', '\xee': 'i', '\xef': 'i', + '\xd1': 'N', '\xf1': 'n', + '\xd2': 'O', '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O', + '\xf2': 'o', '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o', + '\xd9': 'U', '\xda': 'U', '\xdb': 'U', '\xdc': 'U', + '\xf9': 'u', '\xfa': 'u', '\xfb': 'u', '\xfc': 'u', + '\xdd': 'Y', '\xfd': 'y', '\xff': 'y', + '\xc6': 'Ae', '\xe6': 'ae', + '\xde': 'Th', '\xfe': 'th', + '\xdf': 'ss' +}; + +/** + * Used by `_.deburr` to convert latin-1 supplementary letters to basic latin letters. + * + * @private + * @param {string} letter The matched letter to deburr. + * @returns {string} Returns the deburred letter. + */ +function deburrLetter(letter) { + return deburredLetters[letter]; +} + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** + * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) + * of values. + */ +var objectToString = objectProto.toString; + +/** Built-in value references. */ +var Symbol = root.Symbol; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = Symbol ? Symbol.prototype : undefined, + symbolToString = Symbol ? symbolProto.toString : undefined; + +/** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ +function isObjectLike(value) { + return !!value && typeof value == 'object'; +} + +/** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ +function isSymbol(value) { + return typeof value == 'symbol' || + (isObjectLike(value) && objectToString.call(value) == symbolTag); +} + +/** + * Converts `value` to a string if it's not one. An empty string is returned + * for `null` and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to process. + * @returns {string} Returns the string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ +function toString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if (value == null) { + return ''; + } + if (isSymbol(value)) { + return Symbol ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/** + * Deburrs `string` by converting [latin-1 supplementary letters](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table) + * to basic latin letters and removing [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks). + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to deburr. + * @returns {string} Returns the deburred string. + * @example + * + * _.deburr('déjà vu'); + * // => 'deja vu' + */ +function deburr(string) { + string = toString(string); + return string && string.replace(reLatin1, deburrLetter).replace(reComboMark, ''); +} + +module.exports = deburr; + +},{"lodash._root":44}],44:[function(require,module,exports){ +(function (global){ +/** + * lodash 3.0.1 (Custom Build) + * Build: `lodash modularize exports="npm" -o ./` + * Copyright 2012-2016 The Dojo Foundation + * Based on Underscore.js 1.8.3 + * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license + */ + +/** Used to determine if values are of the language type `Object`. */ +var objectTypes = { + 'function': true, + 'object': true +}; + +/** Detect free variable `exports`. */ +var freeExports = (objectTypes[typeof exports] && exports && !exports.nodeType) + ? exports + : undefined; + +/** Detect free variable `module`. */ +var freeModule = (objectTypes[typeof module] && module && !module.nodeType) + ? module + : undefined; + +/** Detect free variable `global` from Node.js. */ +var freeGlobal = checkGlobal(freeExports && freeModule && typeof global == 'object' && global); + +/** Detect free variable `self`. */ +var freeSelf = checkGlobal(objectTypes[typeof self] && self); + +/** Detect free variable `window`. */ +var freeWindow = checkGlobal(objectTypes[typeof window] && window); + +/** Detect `this` as the global object. */ +var thisGlobal = checkGlobal(objectTypes[typeof this] && this); + +/** + * Used as a reference to the global object. + * + * The `this` value is used if it's the global object to avoid Greasemonkey's + * restricted `window` object, otherwise the `window` object is used. + */ +var root = freeGlobal || + ((freeWindow !== (thisGlobal && thisGlobal.window)) && freeWindow) || + freeSelf || thisGlobal || Function('return this')(); + +/** + * Checks if `value` is a global object. + * + * @private + * @param {*} value The value to check. + * @returns {null|Object} Returns `value` if it's a global object, else `null`. + */ +function checkGlobal(value) { + return (value && value.Object === Object) ? value : null; +} + +module.exports = root; + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) + +},{}],45:[function(require,module,exports){ +/** + * lodash 3.2.0 (Custom Build) + * Build: `lodash modularize exports="npm" -o ./` + * Copyright 2012-2016 The Dojo Foundation + * Based on Underscore.js 1.8.3 + * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license + */ +var root = require('lodash._root'); + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** `Object#toString` result references. */ +var symbolTag = '[object Symbol]'; + +/** Used to compose unicode character classes. */ +var rsAstralRange = '\\ud800-\\udfff', + rsComboMarksRange = '\\u0300-\\u036f\\ufe20-\\ufe23', + rsComboSymbolsRange = '\\u20d0-\\u20f0', + rsDingbatRange = '\\u2700-\\u27bf', + rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff', + rsMathOpRange = '\\xac\\xb1\\xd7\\xf7', + rsNonCharRange = '\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf', + rsQuoteRange = '\\u2018\\u2019\\u201c\\u201d', + rsSpaceRange = ' \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000', + rsUpperRange = 'A-Z\\xc0-\\xd6\\xd8-\\xde', + rsVarRange = '\\ufe0e\\ufe0f', + rsBreakRange = rsMathOpRange + rsNonCharRange + rsQuoteRange + rsSpaceRange; + +/** Used to compose unicode capture groups. */ +var rsBreak = '[' + rsBreakRange + ']', + rsCombo = '[' + rsComboMarksRange + rsComboSymbolsRange + ']', + rsDigits = '\\d+', + rsDingbat = '[' + rsDingbatRange + ']', + rsLower = '[' + rsLowerRange + ']', + rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']', + rsFitz = '\\ud83c[\\udffb-\\udfff]', + rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', + rsNonAstral = '[^' + rsAstralRange + ']', + rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', + rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', + rsUpper = '[' + rsUpperRange + ']', + rsZWJ = '\\u200d'; + +/** Used to compose unicode regexes. */ +var rsLowerMisc = '(?:' + rsLower + '|' + rsMisc + ')', + rsUpperMisc = '(?:' + rsUpper + '|' + rsMisc + ')', + reOptMod = rsModifier + '?', + rsOptVar = '[' + rsVarRange + ']?', + rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', + rsSeq = rsOptVar + reOptMod + rsOptJoin, + rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq; + +/** Used to match non-compound words composed of alphanumeric characters. */ +var reBasicWord = /[a-zA-Z0-9]+/g; + +/** Used to match complex or compound words. */ +var reComplexWord = RegExp([ + rsUpper + '?' + rsLower + '+(?=' + [rsBreak, rsUpper, '$'].join('|') + ')', + rsUpperMisc + '+(?=' + [rsBreak, rsUpper + rsLowerMisc, '$'].join('|') + ')', + rsUpper + '?' + rsLowerMisc + '+', + rsUpper + '+', + rsDigits, + rsEmoji +].join('|'), 'g'); + +/** Used to detect strings that need a more robust regexp to match words. */ +var reHasComplexWord = /[a-z][A-Z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** + * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) + * of values. + */ +var objectToString = objectProto.toString; + +/** Built-in value references. */ +var Symbol = root.Symbol; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = Symbol ? Symbol.prototype : undefined, + symbolToString = Symbol ? symbolProto.toString : undefined; + +/** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ +function isObjectLike(value) { + return !!value && typeof value == 'object'; +} + +/** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ +function isSymbol(value) { + return typeof value == 'symbol' || + (isObjectLike(value) && objectToString.call(value) == symbolTag); +} + +/** + * Converts `value` to a string if it's not one. An empty string is returned + * for `null` and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to process. + * @returns {string} Returns the string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ +function toString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if (value == null) { + return ''; + } + if (isSymbol(value)) { + return Symbol ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/** + * Splits `string` into an array of its words. + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to inspect. + * @param {RegExp|string} [pattern] The pattern to match words. + * @param- {Object} [guard] Enables use as an iteratee for functions like `_.map`. + * @returns {Array} Returns the words of `string`. + * @example + * + * _.words('fred, barney, & pebbles'); + * // => ['fred', 'barney', 'pebbles'] + * + * _.words('fred, barney, & pebbles', /[^, ]+/g); + * // => ['fred', 'barney', '&', 'pebbles'] + */ +function words(string, pattern, guard) { + string = toString(string); + pattern = guard ? undefined : pattern; + + if (pattern === undefined) { + pattern = reHasComplexWord.test(string) ? reComplexWord : reBasicWord; + } + return string.match(pattern) || []; +} + +module.exports = words; + +},{"lodash._root":46}],46:[function(require,module,exports){ +(function (global){ +/** + * lodash 3.0.1 (Custom Build) + * Build: `lodash modularize exports="npm" -o ./` + * Copyright 2012-2016 The Dojo Foundation + * Based on Underscore.js 1.8.3 + * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license + */ + +/** Used to determine if values are of the language type `Object`. */ +var objectTypes = { + 'function': true, + 'object': true +}; + +/** Detect free variable `exports`. */ +var freeExports = (objectTypes[typeof exports] && exports && !exports.nodeType) + ? exports + : undefined; + +/** Detect free variable `module`. */ +var freeModule = (objectTypes[typeof module] && module && !module.nodeType) + ? module + : undefined; + +/** Detect free variable `global` from Node.js. */ +var freeGlobal = checkGlobal(freeExports && freeModule && typeof global == 'object' && global); + +/** Detect free variable `self`. */ +var freeSelf = checkGlobal(objectTypes[typeof self] && self); + +/** Detect free variable `window`. */ +var freeWindow = checkGlobal(objectTypes[typeof window] && window); + +/** Detect `this` as the global object. */ +var thisGlobal = checkGlobal(objectTypes[typeof this] && this); + +/** + * Used as a reference to the global object. + * + * The `this` value is used if it's the global object to avoid Greasemonkey's + * restricted `window` object, otherwise the `window` object is used. + */ +var root = freeGlobal || + ((freeWindow !== (thisGlobal && thisGlobal.window)) && freeWindow) || + freeSelf || thisGlobal || Function('return this')(); + +/** + * Checks if `value` is a global object. + * + * @private + * @param {*} value The value to check. + * @returns {null|Object} Returns `value` if it's a global object, else `null`. + */ +function checkGlobal(value) { + return (value && value.Object === Object) ? value : null; +} + +module.exports = root; + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) + +},{}],47:[function(require,module,exports){ +/** + * lodash 3.1.0 (Custom Build) + * Build: `lodash modern modularize exports="npm" -o ./` + * Copyright 2012-2015 The Dojo Foundation + * Based on Underscore.js 1.8.2 + * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license + */ +var baseFlatten = require('lodash._baseflatten'), + baseUniq = require('lodash._baseuniq'), + restParam = require('lodash.restparam'); + +/** + * Creates an array of unique values, in order, of the provided arrays using + * `SameValueZero` for equality comparisons. + * + * **Note:** [`SameValueZero`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-samevaluezero) + * comparisons are like strict equality comparisons, e.g. `===`, except that + * `NaN` matches `NaN`. + * + * @static + * @memberOf _ + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of combined values. + * @example + * + * _.union([1, 2], [4, 2], [2, 1]); + * // => [1, 2, 4] + */ +var union = restParam(function(arrays) { + return baseUniq(baseFlatten(arrays, false, true)); +}); + +module.exports = union; + +},{"lodash._baseflatten":48,"lodash._baseuniq":51,"lodash.restparam":56}],48:[function(require,module,exports){ +/** + * lodash 3.1.4 (Custom Build) + * Build: `lodash modern modularize exports="npm" -o ./` + * Copyright 2012-2015 The Dojo Foundation + * Based on Underscore.js 1.8.3 + * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license + */ +var isArguments = require('lodash.isarguments'), + isArray = require('lodash.isarray'); + +/** + * Checks if `value` is object-like. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + */ +function isObjectLike(value) { + return !!value && typeof value == 'object'; +} + +/** + * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer) + * of an array-like value. + */ +var MAX_SAFE_INTEGER = 9007199254740991; + +/** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ +function arrayPush(array, values) { + var index = -1, + length = values.length, + offset = array.length; + + while (++index < length) { + array[offset + index] = values[index]; + } + return array; +} + +/** + * The base implementation of `_.flatten` with added support for restricting + * flattening and specifying the start index. + * + * @private + * @param {Array} array The array to flatten. + * @param {boolean} [isDeep] Specify a deep flatten. + * @param {boolean} [isStrict] Restrict flattening to arrays-like objects. + * @param {Array} [result=[]] The initial result value. + * @returns {Array} Returns the new flattened array. + */ +function baseFlatten(array, isDeep, isStrict, result) { + result || (result = []); + + var index = -1, + length = array.length; + + while (++index < length) { + var value = array[index]; + if (isObjectLike(value) && isArrayLike(value) && + (isStrict || isArray(value) || isArguments(value))) { + if (isDeep) { + // Recursively flatten arrays (susceptible to call stack limits). + baseFlatten(value, isDeep, isStrict, result); + } else { + arrayPush(result, value); + } + } else if (!isStrict) { + result[result.length] = value; + } + } + return result; +} + +/** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new function. + */ +function baseProperty(key) { + return function(object) { + return object == null ? undefined : object[key]; + }; +} + +/** + * Gets the "length" property value of `object`. + * + * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792) + * that affects Safari on at least iOS 8.1-8.3 ARM64. + * + * @private + * @param {Object} object The object to query. + * @returns {*} Returns the "length" value. + */ +var getLength = baseProperty('length'); + +/** + * Checks if `value` is array-like. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + */ +function isArrayLike(value) { + return value != null && isLength(getLength(value)); +} + +/** + * Checks if `value` is a valid array-like length. + * + * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength). + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + */ +function isLength(value) { + return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; +} + +module.exports = baseFlatten; + +},{"lodash.isarguments":49,"lodash.isarray":50}],49:[function(require,module,exports){ +arguments[4][40][0].apply(exports,arguments) +},{"dup":40}],50:[function(require,module,exports){ +arguments[4][41][0].apply(exports,arguments) +},{"dup":41}],51:[function(require,module,exports){ +/** + * lodash 3.0.3 (Custom Build) + * Build: `lodash modern modularize exports="npm" -o ./` + * Copyright 2012-2015 The Dojo Foundation + * Based on Underscore.js 1.8.3 + * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license + */ +var baseIndexOf = require('lodash._baseindexof'), + cacheIndexOf = require('lodash._cacheindexof'), + createCache = require('lodash._createcache'); + +/** Used as the size to enable large array optimizations. */ +var LARGE_ARRAY_SIZE = 200; + +/** + * The base implementation of `_.uniq` without support for callback shorthands + * and `this` binding. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The function invoked per iteration. + * @returns {Array} Returns the new duplicate-value-free array. + */ +function baseUniq(array, iteratee) { + var index = -1, + indexOf = baseIndexOf, + length = array.length, + isCommon = true, + isLarge = isCommon && length >= LARGE_ARRAY_SIZE, + seen = isLarge ? createCache() : null, + result = []; + + if (seen) { + indexOf = cacheIndexOf; + isCommon = false; + } else { + isLarge = false; + seen = iteratee ? [] : result; + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value, index, array) : value; + + if (isCommon && value === value) { + var seenIndex = seen.length; + while (seenIndex--) { + if (seen[seenIndex] === computed) { + continue outer; + } + } + if (iteratee) { + seen.push(computed); + } + result.push(value); + } + else if (indexOf(seen, computed, 0) < 0) { + if (iteratee || isLarge) { + seen.push(computed); + } + result.push(value); + } + } + return result; +} + +module.exports = baseUniq; + +},{"lodash._baseindexof":52,"lodash._cacheindexof":53,"lodash._createcache":54}],52:[function(require,module,exports){ +/** + * lodash 3.1.0 (Custom Build) + * Build: `lodash modern modularize exports="npm" -o ./` + * Copyright 2012-2015 The Dojo Foundation + * Based on Underscore.js 1.8.2 + * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license + */ + +/** + * The base implementation of `_.indexOf` without support for binary searches. + * + * @private + * @param {Array} array The array to search. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseIndexOf(array, value, fromIndex) { + if (value !== value) { + return indexOfNaN(array, fromIndex); + } + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (array[index] === value) { + return index; + } + } + return -1; +} + +/** + * Gets the index at which the first occurrence of `NaN` is found in `array`. + * If `fromRight` is provided elements of `array` are iterated from right to left. + * + * @private + * @param {Array} array The array to search. + * @param {number} fromIndex The index to search from. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched `NaN`, else `-1`. + */ +function indexOfNaN(array, fromIndex, fromRight) { + var length = array.length, + index = fromIndex + (fromRight ? 0 : -1); + + while ((fromRight ? index-- : ++index < length)) { + var other = array[index]; + if (other !== other) { + return index; + } + } + return -1; +} + +module.exports = baseIndexOf; + +},{}],53:[function(require,module,exports){ +/** + * lodash 3.0.2 (Custom Build) + * Build: `lodash modern modularize exports="npm" -o ./` + * Copyright 2012-2015 The Dojo Foundation + * Based on Underscore.js 1.8.3 + * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license + */ + +/** + * Checks if `value` is in `cache` mimicking the return signature of + * `_.indexOf` by returning `0` if the value is found, else `-1`. + * + * @private + * @param {Object} cache The cache to search. + * @param {*} value The value to search for. + * @returns {number} Returns `0` if `value` is found, else `-1`. + */ +function cacheIndexOf(cache, value) { + var data = cache.data, + result = (typeof value == 'string' || isObject(value)) ? data.set.has(value) : data.hash[value]; + + return result ? 0 : -1; +} + +/** + * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`. + * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(1); + * // => false + */ +function isObject(value) { + // Avoid a V8 JIT bug in Chrome 19-20. + // See https://code.google.com/p/v8/issues/detail?id=2291 for more details. + var type = typeof value; + return !!value && (type == 'object' || type == 'function'); +} + +module.exports = cacheIndexOf; + +},{}],54:[function(require,module,exports){ +(function (global){ +/** + * lodash 3.1.2 (Custom Build) + * Build: `lodash modern modularize exports="npm" -o ./` + * Copyright 2012-2015 The Dojo Foundation + * Based on Underscore.js 1.8.3 + * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license + */ +var getNative = require('lodash._getnative'); + +/** Native method references. */ +var Set = getNative(global, 'Set'); + +/* Native method references for those with the same name as other `lodash` methods. */ +var nativeCreate = getNative(Object, 'create'); + +/** + * + * Creates a cache object to store unique values. + * + * @private + * @param {Array} [values] The values to cache. + */ +function SetCache(values) { + var length = values ? values.length : 0; + + this.data = { 'hash': nativeCreate(null), 'set': new Set }; + while (length--) { + this.push(values[length]); + } +} + +/** + * Adds `value` to the cache. + * + * @private + * @name push + * @memberOf SetCache + * @param {*} value The value to cache. + */ +function cachePush(value) { + var data = this.data; + if (typeof value == 'string' || isObject(value)) { + data.set.add(value); + } else { + data.hash[value] = true; + } +} + +/** + * Creates a `Set` cache object to optimize linear searches of large arrays. + * + * @private + * @param {Array} [values] The values to cache. + * @returns {null|Object} Returns the new cache object if `Set` is supported, else `null`. + */ +function createCache(values) { + return (nativeCreate && Set) ? new SetCache(values) : null; +} + +/** + * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`. + * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(1); + * // => false + */ +function isObject(value) { + // Avoid a V8 JIT bug in Chrome 19-20. + // See https://code.google.com/p/v8/issues/detail?id=2291 for more details. + var type = typeof value; + return !!value && (type == 'object' || type == 'function'); +} + +// Add functions to the `Set` cache. +SetCache.prototype.push = cachePush; + +module.exports = createCache; + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) + +},{"lodash._getnative":55}],55:[function(require,module,exports){ +arguments[4][39][0].apply(exports,arguments) +},{"dup":39}],56:[function(require,module,exports){ +/** + * lodash 3.6.1 (Custom Build) + * Build: `lodash modern modularize exports="npm" -o ./` + * Copyright 2012-2015 The Dojo Foundation + * Based on Underscore.js 1.8.3 + * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license + */ + +/** Used as the `TypeError` message for "Functions" methods. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/* Native method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * Creates a function that invokes `func` with the `this` binding of the + * created function and arguments from `start` and beyond provided as an array. + * + * **Note:** This method is based on the [rest parameter](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/rest_parameters). + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @returns {Function} Returns the new function. + * @example + * + * var say = _.restParam(function(what, names) { + * return what + ' ' + _.initial(names).join(', ') + + * (_.size(names) > 1 ? ', & ' : '') + _.last(names); + * }); + * + * say('hello', 'fred', 'barney', 'pebbles'); + * // => 'hello fred, barney, & pebbles' + */ +function restParam(func, start) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + start = nativeMax(start === undefined ? (func.length - 1) : (+start || 0), 0); + return function() { + var args = arguments, + index = -1, + length = nativeMax(args.length - start, 0), + rest = Array(length); + + while (++index < length) { + rest[index] = args[start + index]; + } + switch (start) { + case 0: return func.call(this, rest); + case 1: return func.call(this, args[0], rest); + case 2: return func.call(this, args[0], args[1], rest); + } + var otherArgs = Array(start + 1); + index = -1; + while (++index < start) { + otherArgs[index] = args[index]; + } + otherArgs[start] = rest; + return func.apply(this, otherArgs); + }; +} + +module.exports = restParam; + +},{}],57:[function(require,module,exports){ +var VNode = require('./vnode'); +var is = require('./is'); + +function addNS(data, children) { + data.ns = 'http://www.w3.org/2000/svg'; + if (children !== undefined) { + for (var i = 0; i < children.length; ++i) { + addNS(children[i].data, children[i].children); + } + } +} + +module.exports = function h(sel, b, c) { + var data = {}, children, text, i; + if (arguments.length === 3) { + data = b; + if (is.array(c)) { children = c; } + else if (is.primitive(c)) { text = c; } + } else if (arguments.length === 2) { + if (is.array(b)) { children = b; } + else if (is.primitive(b)) { text = b; } + else { data = b; } + } + if (is.array(children)) { + for (i = 0; i < children.length; ++i) { + if (is.primitive(children[i])) children[i] = VNode(undefined, undefined, undefined, children[i]); + } + } + if (sel[0] === 's' && sel[1] === 'v' && sel[2] === 'g') { + addNS(data, children); + } + return VNode(sel, data, children, text, undefined); +}; + +},{"./is":59,"./vnode":68}],58:[function(require,module,exports){ +function createElement(tagName){ + return document.createElement(tagName); +} + +function createElementNS(namespaceURI, qualifiedName){ + return document.createElementNS(namespaceURI, qualifiedName); +} + +function createTextNode(text){ + return document.createTextNode(text); +} + + +function insertBefore(parentNode, newNode, referenceNode){ + parentNode.insertBefore(newNode, referenceNode); +} + + +function removeChild(node, child){ + node.removeChild(child); +} + +function appendChild(node, child){ + node.appendChild(child); +} + +function parentNode(node){ + return node.parentElement; +} + +function nextSibling(node){ + return node.nextSibling; +} + +function tagName(node){ + return node.tagName; +} + +function setTextContent(node, text){ + node.textContent = text; +} + +module.exports = { + createElement: createElement, + createElementNS: createElementNS, + createTextNode: createTextNode, + appendChild: appendChild, + removeChild: removeChild, + insertBefore: insertBefore, + parentNode: parentNode, + nextSibling: nextSibling, + tagName: tagName, + setTextContent: setTextContent +}; + +},{}],59:[function(require,module,exports){ +module.exports = { + array: Array.isArray, + primitive: function(s) { return typeof s === 'string' || typeof s === 'number'; }, +}; + +},{}],60:[function(require,module,exports){ +var booleanAttrs = ["allowfullscreen", "async", "autofocus", "autoplay", "checked", "compact", "controls", "declare", + "default", "defaultchecked", "defaultmuted", "defaultselected", "defer", "disabled", "draggable", + "enabled", "formnovalidate", "hidden", "indeterminate", "inert", "ismap", "itemscope", "loop", "multiple", + "muted", "nohref", "noresize", "noshade", "novalidate", "nowrap", "open", "pauseonexit", "readonly", + "required", "reversed", "scoped", "seamless", "selected", "sortable", "spellcheck", "translate", + "truespeed", "typemustmatch", "visible"]; + +var booleanAttrsDict = {}; +for(var i=0, len = booleanAttrs.length; i < len; i++) { + booleanAttrsDict[booleanAttrs[i]] = true; +} + +function updateAttrs(oldVnode, vnode) { + var key, cur, old, elm = vnode.elm, + oldAttrs = oldVnode.data.attrs || {}, attrs = vnode.data.attrs || {}; + + // update modified attributes, add new attributes + for (key in attrs) { + cur = attrs[key]; + old = oldAttrs[key]; + if (old !== cur) { + // TODO: add support to namespaced attributes (setAttributeNS) + if(!cur && booleanAttrsDict[key]) + elm.removeAttribute(key); + else + elm.setAttribute(key, cur); + } + } + //remove removed attributes + // use `in` operator since the previous `for` iteration uses it (.i.e. add even attributes with undefined value) + // the other option is to remove all attributes with value == undefined + for (key in oldAttrs) { + if (!(key in attrs)) { + elm.removeAttribute(key); + } + } +} + +module.exports = {create: updateAttrs, update: updateAttrs}; + +},{}],61:[function(require,module,exports){ +function updateClass(oldVnode, vnode) { + var cur, name, elm = vnode.elm, + oldClass = oldVnode.data.class || {}, + klass = vnode.data.class || {}; + for (name in oldClass) { + if (!klass[name]) { + elm.classList.remove(name); + } + } + for (name in klass) { + cur = klass[name]; + if (cur !== oldClass[name]) { + elm.classList[cur ? 'add' : 'remove'](name); + } + } +} + +module.exports = {create: updateClass, update: updateClass}; + +},{}],62:[function(require,module,exports){ +var is = require('../is'); + +function arrInvoker(arr) { + return function() { + // Special case when length is two, for performance + arr.length === 2 ? arr[0](arr[1]) : arr[0].apply(undefined, arr.slice(1)); + }; +} + +function fnInvoker(o) { + return function(ev) { o.fn(ev); }; +} + +function updateEventListeners(oldVnode, vnode) { + var name, cur, old, elm = vnode.elm, + oldOn = oldVnode.data.on || {}, on = vnode.data.on; + if (!on) return; + for (name in on) { + cur = on[name]; + old = oldOn[name]; + if (old === undefined) { + if (is.array(cur)) { + elm.addEventListener(name, arrInvoker(cur)); + } else { + cur = {fn: cur}; + on[name] = cur; + elm.addEventListener(name, fnInvoker(cur)); + } + } else if (is.array(old)) { + // Deliberately modify old array since it's captured in closure created with `arrInvoker` + old.length = cur.length; + for (var i = 0; i < old.length; ++i) old[i] = cur[i]; + on[name] = old; + } else { + old.fn = cur; + on[name] = old; + } + } +} + +module.exports = {create: updateEventListeners, update: updateEventListeners}; + +},{"../is":59}],63:[function(require,module,exports){ +var raf = (typeof window !== 'undefined' && window.requestAnimationFrame) || setTimeout; +var nextFrame = function(fn) { raf(function() { raf(fn); }); }; + +function setNextFrame(obj, prop, val) { + nextFrame(function() { obj[prop] = val; }); +} + +function getTextNodeRect(textNode) { + var rect; + if (document.createRange) { + var range = document.createRange(); + range.selectNodeContents(textNode); + if (range.getBoundingClientRect) { + rect = range.getBoundingClientRect(); + } + } + return rect; +} + +function calcTransformOrigin(isTextNode, textRect, boundingRect) { + if (isTextNode) { + if (textRect) { + //calculate pixels to center of text from left edge of bounding box + var relativeCenterX = textRect.left + textRect.width/2 - boundingRect.left; + var relativeCenterY = textRect.top + textRect.height/2 - boundingRect.top; + return relativeCenterX + 'px ' + relativeCenterY + 'px'; + } + } + return '0 0'; //top left +} + +function getTextDx(oldTextRect, newTextRect) { + if (oldTextRect && newTextRect) { + return ((oldTextRect.left + oldTextRect.width/2) - (newTextRect.left + newTextRect.width/2)); + } + return 0; +} +function getTextDy(oldTextRect, newTextRect) { + if (oldTextRect && newTextRect) { + return ((oldTextRect.top + oldTextRect.height/2) - (newTextRect.top + newTextRect.height/2)); + } + return 0; +} + +function isTextElement(elm) { + return elm.childNodes.length === 1 && elm.childNodes[0].nodeType === 3; +} + +var removed, created; + +function pre(oldVnode, vnode) { + removed = {}; + created = []; +} + +function create(oldVnode, vnode) { + var hero = vnode.data.hero; + if (hero && hero.id) { + created.push(hero.id); + created.push(vnode); + } +} + +function destroy(vnode) { + var hero = vnode.data.hero; + if (hero && hero.id) { + var elm = vnode.elm; + vnode.isTextNode = isTextElement(elm); //is this a text node? + vnode.boundingRect = elm.getBoundingClientRect(); //save the bounding rectangle to a new property on the vnode + vnode.textRect = vnode.isTextNode ? getTextNodeRect(elm.childNodes[0]) : null; //save bounding rect of inner text node + var computedStyle = window.getComputedStyle(elm, null); //get current styles (includes inherited properties) + vnode.savedStyle = JSON.parse(JSON.stringify(computedStyle)); //save a copy of computed style values + removed[hero.id] = vnode; + } +} + +function post() { + var i, id, newElm, oldVnode, oldElm, hRatio, wRatio, + oldRect, newRect, dx, dy, origTransform, origTransition, + newStyle, oldStyle, newComputedStyle, isTextNode, + newTextRect, oldTextRect; + for (i = 0; i < created.length; i += 2) { + id = created[i]; + newElm = created[i+1].elm; + oldVnode = removed[id]; + if (oldVnode) { + isTextNode = oldVnode.isTextNode && isTextElement(newElm); //Are old & new both text? + newStyle = newElm.style; + newComputedStyle = window.getComputedStyle(newElm, null); //get full computed style for new element + oldElm = oldVnode.elm; + oldStyle = oldElm.style; + //Overall element bounding boxes + newRect = newElm.getBoundingClientRect(); + oldRect = oldVnode.boundingRect; //previously saved bounding rect + //Text node bounding boxes & distances + if (isTextNode) { + newTextRect = getTextNodeRect(newElm.childNodes[0]); + oldTextRect = oldVnode.textRect; + dx = getTextDx(oldTextRect, newTextRect); + dy = getTextDy(oldTextRect, newTextRect); + } else { + //Calculate distances between old & new positions + dx = oldRect.left - newRect.left; + dy = oldRect.top - newRect.top; + } + hRatio = newRect.height / (Math.max(oldRect.height, 1)); + wRatio = isTextNode ? hRatio : newRect.width / (Math.max(oldRect.width, 1)); //text scales based on hRatio + // Animate new element + origTransform = newStyle.transform; + origTransition = newStyle.transition; + if (newComputedStyle.display === 'inline') //inline elements cannot be transformed + newStyle.display = 'inline-block'; //this does not appear to have any negative side effects + newStyle.transition = origTransition + 'transform 0s'; + newStyle.transformOrigin = calcTransformOrigin(isTextNode, newTextRect, newRect); + newStyle.opacity = '0'; + newStyle.transform = origTransform + 'translate('+dx+'px, '+dy+'px) ' + + 'scale('+1/wRatio+', '+1/hRatio+')'; + setNextFrame(newStyle, 'transition', origTransition); + setNextFrame(newStyle, 'transform', origTransform); + setNextFrame(newStyle, 'opacity', '1'); + // Animate old element + for (var key in oldVnode.savedStyle) { //re-apply saved inherited properties + if (parseInt(key) != key) { + var ms = key.substring(0,2) === 'ms'; + var moz = key.substring(0,3) === 'moz'; + var webkit = key.substring(0,6) === 'webkit'; + if (!ms && !moz && !webkit) //ignore prefixed style properties + oldStyle[key] = oldVnode.savedStyle[key]; + } + } + oldStyle.position = 'absolute'; + oldStyle.top = oldRect.top + 'px'; //start at existing position + oldStyle.left = oldRect.left + 'px'; + oldStyle.width = oldRect.width + 'px'; //Needed for elements who were sized relative to their parents + oldStyle.height = oldRect.height + 'px'; //Needed for elements who were sized relative to their parents + oldStyle.margin = 0; //Margin on hero element leads to incorrect positioning + oldStyle.transformOrigin = calcTransformOrigin(isTextNode, oldTextRect, oldRect); + oldStyle.transform = ''; + oldStyle.opacity = '1'; + document.body.appendChild(oldElm); + setNextFrame(oldStyle, 'transform', 'translate('+ -dx +'px, '+ -dy +'px) scale('+wRatio+', '+hRatio+')'); //scale must be on far right for translate to be correct + setNextFrame(oldStyle, 'opacity', '0'); + oldElm.addEventListener('transitionend', function(ev) { + if (ev.propertyName === 'transform') + document.body.removeChild(ev.target); + }); + } + } + removed = created = undefined; +} + +module.exports = {pre: pre, create: create, destroy: destroy, post: post}; + +},{}],64:[function(require,module,exports){ +function updateProps(oldVnode, vnode) { + var key, cur, old, elm = vnode.elm, + oldProps = oldVnode.data.props || {}, props = vnode.data.props || {}; + for (key in oldProps) { + if (!props[key]) { + delete elm[key]; + } + } + for (key in props) { + cur = props[key]; + old = oldProps[key]; + if (old !== cur && (key !== 'value' || elm[key] !== cur)) { + elm[key] = cur; + } + } +} + +module.exports = {create: updateProps, update: updateProps}; + +},{}],65:[function(require,module,exports){ +var raf = (typeof window !== 'undefined' && window.requestAnimationFrame) || setTimeout; +var nextFrame = function(fn) { raf(function() { raf(fn); }); }; + +function setNextFrame(obj, prop, val) { + nextFrame(function() { obj[prop] = val; }); +} + +function updateStyle(oldVnode, vnode) { + var cur, name, elm = vnode.elm, + oldStyle = oldVnode.data.style || {}, + style = vnode.data.style || {}, + oldHasDel = 'delayed' in oldStyle; + for (name in oldStyle) { + if (!style[name]) { + elm.style[name] = ''; + } + } + for (name in style) { + cur = style[name]; + if (name === 'delayed') { + for (name in style.delayed) { + cur = style.delayed[name]; + if (!oldHasDel || cur !== oldStyle.delayed[name]) { + setNextFrame(elm.style, name, cur); + } + } + } else if (name !== 'remove' && cur !== oldStyle[name]) { + elm.style[name] = cur; + } + } +} + +function applyDestroyStyle(vnode) { + var style, name, elm = vnode.elm, s = vnode.data.style; + if (!s || !(style = s.destroy)) return; + for (name in style) { + elm.style[name] = style[name]; + } +} + +function applyRemoveStyle(vnode, rm) { + var s = vnode.data.style; + if (!s || !s.remove) { + rm(); + return; + } + var name, elm = vnode.elm, idx, i = 0, maxDur = 0, + compStyle, style = s.remove, amount = 0, applied = []; + for (name in style) { + applied.push(name); + elm.style[name] = style[name]; + } + compStyle = getComputedStyle(elm); + var props = compStyle['transition-property'].split(', '); + for (; i < props.length; ++i) { + if(applied.indexOf(props[i]) !== -1) amount++; + } + elm.addEventListener('transitionend', function(ev) { + if (ev.target === elm) --amount; + if (amount === 0) rm(); + }); +} + +module.exports = {create: updateStyle, update: updateStyle, destroy: applyDestroyStyle, remove: applyRemoveStyle}; + +},{}],66:[function(require,module,exports){ +// jshint newcap: false +/* global require, module, document, Node */ +'use strict'; + +var VNode = require('./vnode'); +var is = require('./is'); +var domApi = require('./htmldomapi.js'); + +function isUndef(s) { return s === undefined; } +function isDef(s) { return s !== undefined; } + +var emptyNode = VNode('', {}, [], undefined, undefined); + +function sameVnode(vnode1, vnode2) { + return vnode1.key === vnode2.key && vnode1.sel === vnode2.sel; +} + +function createKeyToOldIdx(children, beginIdx, endIdx) { + var i, map = {}, key; + for (i = beginIdx; i <= endIdx; ++i) { + key = children[i].key; + if (isDef(key)) map[key] = i; + } + return map; +} + +var hooks = ['create', 'update', 'remove', 'destroy', 'pre', 'post']; + +function init(modules, api) { + var i, j, cbs = {}; + + if (isUndef(api)) api = domApi; + + for (i = 0; i < hooks.length; ++i) { + cbs[hooks[i]] = []; + for (j = 0; j < modules.length; ++j) { + if (modules[j][hooks[i]] !== undefined) cbs[hooks[i]].push(modules[j][hooks[i]]); + } + } + + function emptyNodeAt(elm) { + return VNode(api.tagName(elm).toLowerCase(), {}, [], undefined, elm); + } + + function createRmCb(childElm, listeners) { + return function() { + if (--listeners === 0) { + var parent = api.parentNode(childElm); + api.removeChild(parent, childElm); + } + }; + } + + function createElm(vnode, insertedVnodeQueue) { + var i, thunk, data = vnode.data; + if (isDef(data)) { + if (isDef(i = data.hook) && isDef(i = i.init)) i(vnode); + if (isDef(i = data.vnode)) { + thunk = vnode; + vnode = i; + } + } + var elm, children = vnode.children, sel = vnode.sel; + if (isDef(sel)) { + // Parse selector + var hashIdx = sel.indexOf('#'); + var dotIdx = sel.indexOf('.', hashIdx); + var hash = hashIdx > 0 ? hashIdx : sel.length; + var dot = dotIdx > 0 ? dotIdx : sel.length; + var tag = hashIdx !== -1 || dotIdx !== -1 ? sel.slice(0, Math.min(hash, dot)) : sel; + elm = vnode.elm = isDef(data) && isDef(i = data.ns) ? api.createElementNS(i, tag) + : api.createElement(tag); + if (hash < dot) elm.id = sel.slice(hash + 1, dot); + if (dotIdx > 0) elm.className = sel.slice(dot+1).replace(/\./g, ' '); + if (is.array(children)) { + for (i = 0; i < children.length; ++i) { + api.appendChild(elm, createElm(children[i], insertedVnodeQueue)); + } + } else if (is.primitive(vnode.text)) { + api.appendChild(elm, api.createTextNode(vnode.text)); + } + for (i = 0; i < cbs.create.length; ++i) cbs.create[i](emptyNode, vnode); + i = vnode.data.hook; // Reuse variable + if (isDef(i)) { + if (i.create) i.create(emptyNode, vnode); + if (i.insert) insertedVnodeQueue.push(vnode); + } + } else { + elm = vnode.elm = api.createTextNode(vnode.text); + } + if (isDef(thunk)) thunk.elm = vnode.elm; + return vnode.elm; + } + + function addVnodes(parentElm, before, vnodes, startIdx, endIdx, insertedVnodeQueue) { + for (; startIdx <= endIdx; ++startIdx) { + api.insertBefore(parentElm, createElm(vnodes[startIdx], insertedVnodeQueue), before); + } + } + + function invokeDestroyHook(vnode) { + var i, j, data = vnode.data; + if (isDef(data)) { + if (isDef(i = data.hook) && isDef(i = i.destroy)) i(vnode); + for (i = 0; i < cbs.destroy.length; ++i) cbs.destroy[i](vnode); + if (isDef(i = vnode.children)) { + for (j = 0; j < vnode.children.length; ++j) { + invokeDestroyHook(vnode.children[j]); + } + } + if (isDef(i = data.vnode)) invokeDestroyHook(i); + } + } + + function removeVnodes(parentElm, vnodes, startIdx, endIdx) { + for (; startIdx <= endIdx; ++startIdx) { + var i, listeners, rm, ch = vnodes[startIdx]; + if (isDef(ch)) { + if (isDef(ch.sel)) { + invokeDestroyHook(ch); + listeners = cbs.remove.length + 1; + rm = createRmCb(ch.elm, listeners); + for (i = 0; i < cbs.remove.length; ++i) cbs.remove[i](ch, rm); + if (isDef(i = ch.data) && isDef(i = i.hook) && isDef(i = i.remove)) { + i(ch, rm); + } else { + rm(); + } + } else { // Text node + api.removeChild(parentElm, ch.elm); + } + } + } + } + + function updateChildren(parentElm, oldCh, newCh, insertedVnodeQueue) { + var oldStartIdx = 0, newStartIdx = 0; + var oldEndIdx = oldCh.length - 1; + var oldStartVnode = oldCh[0]; + var oldEndVnode = oldCh[oldEndIdx]; + var newEndIdx = newCh.length - 1; + var newStartVnode = newCh[0]; + var newEndVnode = newCh[newEndIdx]; + var oldKeyToIdx, idxInOld, elmToMove, before; + + while (oldStartIdx <= oldEndIdx && newStartIdx <= newEndIdx) { + if (isUndef(oldStartVnode)) { + oldStartVnode = oldCh[++oldStartIdx]; // Vnode has been moved left + } else if (isUndef(oldEndVnode)) { + oldEndVnode = oldCh[--oldEndIdx]; + } else if (sameVnode(oldStartVnode, newStartVnode)) { + patchVnode(oldStartVnode, newStartVnode, insertedVnodeQueue); + oldStartVnode = oldCh[++oldStartIdx]; + newStartVnode = newCh[++newStartIdx]; + } else if (sameVnode(oldEndVnode, newEndVnode)) { + patchVnode(oldEndVnode, newEndVnode, insertedVnodeQueue); + oldEndVnode = oldCh[--oldEndIdx]; + newEndVnode = newCh[--newEndIdx]; + } else if (sameVnode(oldStartVnode, newEndVnode)) { // Vnode moved right + patchVnode(oldStartVnode, newEndVnode, insertedVnodeQueue); + api.insertBefore(parentElm, oldStartVnode.elm, api.nextSibling(oldEndVnode.elm)); + oldStartVnode = oldCh[++oldStartIdx]; + newEndVnode = newCh[--newEndIdx]; + } else if (sameVnode(oldEndVnode, newStartVnode)) { // Vnode moved left + patchVnode(oldEndVnode, newStartVnode, insertedVnodeQueue); + api.insertBefore(parentElm, oldEndVnode.elm, oldStartVnode.elm); + oldEndVnode = oldCh[--oldEndIdx]; + newStartVnode = newCh[++newStartIdx]; + } else { + if (isUndef(oldKeyToIdx)) oldKeyToIdx = createKeyToOldIdx(oldCh, oldStartIdx, oldEndIdx); + idxInOld = oldKeyToIdx[newStartVnode.key]; + if (isUndef(idxInOld)) { // New element + api.insertBefore(parentElm, createElm(newStartVnode, insertedVnodeQueue), oldStartVnode.elm); + newStartVnode = newCh[++newStartIdx]; + } else { + elmToMove = oldCh[idxInOld]; + patchVnode(elmToMove, newStartVnode, insertedVnodeQueue); + oldCh[idxInOld] = undefined; + api.insertBefore(parentElm, elmToMove.elm, oldStartVnode.elm); + newStartVnode = newCh[++newStartIdx]; + } + } + } + if (oldStartIdx > oldEndIdx) { + before = isUndef(newCh[newEndIdx+1]) ? null : newCh[newEndIdx+1].elm; + addVnodes(parentElm, before, newCh, newStartIdx, newEndIdx, insertedVnodeQueue); + } else if (newStartIdx > newEndIdx) { + removeVnodes(parentElm, oldCh, oldStartIdx, oldEndIdx); + } + } + + function patchVnode(oldVnode, vnode, insertedVnodeQueue) { + var i, hook; + if (isDef(i = vnode.data) && isDef(hook = i.hook) && isDef(i = hook.prepatch)) { + i(oldVnode, vnode); + } + if (isDef(i = oldVnode.data) && isDef(i = i.vnode)) oldVnode = i; + if (isDef(i = vnode.data) && isDef(i = i.vnode)) { + patchVnode(oldVnode, i, insertedVnodeQueue); + vnode.elm = i.elm; + return; + } + var elm = vnode.elm = oldVnode.elm, oldCh = oldVnode.children, ch = vnode.children; + if (oldVnode === vnode) return; + if (!sameVnode(oldVnode, vnode)) { + var parentElm = api.parentNode(oldVnode.elm); + elm = createElm(vnode, insertedVnodeQueue); + api.insertBefore(parentElm, elm, oldVnode.elm); + removeVnodes(parentElm, [oldVnode], 0, 0); + return; + } + if (isDef(vnode.data)) { + for (i = 0; i < cbs.update.length; ++i) cbs.update[i](oldVnode, vnode); + i = vnode.data.hook; + if (isDef(i) && isDef(i = i.update)) i(oldVnode, vnode); + } + if (isUndef(vnode.text)) { + if (isDef(oldCh) && isDef(ch)) { + if (oldCh !== ch) updateChildren(elm, oldCh, ch, insertedVnodeQueue); + } else if (isDef(ch)) { + if (isDef(oldVnode.text)) api.setTextContent(elm, ''); + addVnodes(elm, null, ch, 0, ch.length - 1, insertedVnodeQueue); + } else if (isDef(oldCh)) { + removeVnodes(elm, oldCh, 0, oldCh.length - 1); + } else if (isDef(oldVnode.text)) { + api.setTextContent(elm, ''); + } + } else if (oldVnode.text !== vnode.text) { + api.setTextContent(elm, vnode.text); + } + if (isDef(hook) && isDef(i = hook.postpatch)) { + i(oldVnode, vnode); + } + } + + return function(oldVnode, vnode) { + var i, elm, parent; + var insertedVnodeQueue = []; + for (i = 0; i < cbs.pre.length; ++i) cbs.pre[i](); + + if (isUndef(oldVnode.sel)) { + oldVnode = emptyNodeAt(oldVnode); + } + + if (sameVnode(oldVnode, vnode)) { + patchVnode(oldVnode, vnode, insertedVnodeQueue); + } else { + elm = oldVnode.elm; + parent = api.parentNode(elm); + + createElm(vnode, insertedVnodeQueue); + + if (parent !== null) { + api.insertBefore(parent, vnode.elm, api.nextSibling(elm)); + removeVnodes(parent, [oldVnode], 0, 0); + } + } + + for (i = 0; i < insertedVnodeQueue.length; ++i) { + insertedVnodeQueue[i].data.hook.insert(insertedVnodeQueue[i]); + } + for (i = 0; i < cbs.post.length; ++i) cbs.post[i](); + return vnode; + }; +} + +module.exports = {init: init}; + +},{"./htmldomapi.js":58,"./is":59,"./vnode":68}],67:[function(require,module,exports){ +var h = require('./h'); + +function init(thunk) { + var i, cur = thunk.data; + cur.vnode = cur.fn.apply(undefined, cur.args); +} + +function prepatch(oldThunk, thunk) { + var i, old = oldThunk.data, cur = thunk.data; + var oldArgs = old.args, args = cur.args; + cur.vnode = old.vnode; + if (old.fn !== cur.fn || oldArgs.length !== args.length) { + cur.vnode = cur.fn.apply(undefined, args); + return; + } + for (i = 0; i < args.length; ++i) { + if (oldArgs[i] !== args[i]) { + cur.vnode = cur.fn.apply(undefined, args); + return; + } + } +} + +module.exports = function(name, fn /* args */) { + var i, args = []; + for (i = 2; i < arguments.length; ++i) { + args[i - 2] = arguments[i]; + } + return h('thunk' + name, { + hook: {init: init, prepatch: prepatch}, + fn: fn, args: args, + }); +}; + +},{"./h":57}],68:[function(require,module,exports){ +module.exports = function(sel, data, children, text, elm) { + var key = data === undefined ? undefined : data.key; + return {sel: sel, data: data, children: children, + text: text, elm: elm, key: key}; +}; + +},{}],69:[function(require,module,exports){ +"use strict"; +var clickEvent = 'undefined' !== typeof document && document.ontouchstart ? + 'touchstart' : 'click'; +function which(ev) { + if (typeof window === 'undefined') { + return false; + } + var e = ev || window.event; + return e.which === null ? e.button : e.which; +} +function sameOrigin(href) { + if (typeof window === 'undefined') { + return false; + } + return href && href.indexOf(window.location.origin) === 0; +} +function makeClickListener(push) { + return function clickListener(event) { + if (which(event) !== 1) { + return; + } + if (event.metaKey || event.ctrlKey || event.shiftKey) { + return; + } + if (event.defaultPrevented) { + return; + } + var element = event.target; + while (element && element.nodeName !== 'A') { + element = element.parentNode; + } + if (!element || element.nodeName !== 'A') { + return; + } + if (element.hasAttribute('download') || + element.getAttribute('rel') === 'external') { + return; + } + if (element.target) { + return; + } + var link = element.getAttribute('href'); + if (link && link.indexOf('mailto:') > -1 || link === '#') { + return; + } + if (!sameOrigin(element.href)) { + return; + } + event.preventDefault(); + var pathname = element.pathname, search = element.search, _a = element.hash, hash = _a === void 0 ? '' : _a; + push(pathname + search + hash); + }; +} +function captureClicks(push) { + var listener = makeClickListener(push); + if (typeof window !== 'undefined') { + document.addEventListener(clickEvent, listener, false); + } +} +exports.captureClicks = captureClicks; + +},{}],70:[function(require,module,exports){ +"use strict"; +var makeHistoryDriver_1 = require('./makeHistoryDriver'); +exports.makeHistoryDriver = makeHistoryDriver_1.makeHistoryDriver; +var serverHistory_1 = require('./serverHistory'); +exports.createServerHistory = serverHistory_1.createServerHistory; +var util_1 = require('./util'); +exports.supportsHistory = util_1.supportsHistory; +exports.createLocation = util_1.createLocation; + +},{"./makeHistoryDriver":71,"./serverHistory":72,"./util":73}],71:[function(require,module,exports){ +"use strict"; +var captureClicks_1 = require('./captureClicks'); +function makeUpdateHistory(history) { + return function updateHistory(location) { + if ('string' === typeof location) { + history.push(history.createLocation(location)); + } + else if ('object' === typeof location) { + // suport things like history.replace() + var _a = location.type, type = _a === void 0 ? 'push' : _a; + if (type === 'go') { + history[type](location); + } + else { + history[type](location); + } + } + else { + throw new Error('History Driver input must be a string or an ' + + 'object but received ${typeof url}'); + } + }; +} +function defaultOnErrorFn(err) { + if (console && console.error !== void 0) { + console.error(err); + } +} +function makeHistoryDriver(history, options) { + if (!history || typeof history !== 'object' + || typeof history.createLocation !== 'function' + || typeof history.createHref !== 'function' + || typeof history.listen !== 'function' + || typeof history.push !== 'function') { + throw new TypeError('makeHistoryDriver requires an valid history object ' + + 'containing createLocation(), createHref(), push(), and listen() methods'); + } + var capture = options && options.capture || false; + var onError = options && options.onError || defaultOnErrorFn; + return function historyDriver(sink$, runSA) { + var _a = runSA.makeSubject(), observer = _a.observer, stream = _a.stream; + var history$ = runSA.remember(stream + .startWith(history.getCurrentLocation()) + .filter(Boolean)); + var unlisten = history.listen(function (location) { + observer.next(location); + }); + if (typeof history.addCompleteCallback === 'function' + && typeof history.complete === 'function') { + history.addCompleteCallback(function () { + observer.complete(); + }); + } + runSA.streamSubscribe(sink$, { + next: makeUpdateHistory(history), + error: onError, + complete: function () { + unlisten(); + observer.complete(); + } + }); + if (capture) { + captureClicks_1.captureClicks(function (pathname) { + var location = history.createLocation(pathname); + history.push(location); + }); + } + history$.createHref = function (href) { return history.createHref(href); }; + history$.createLocation = function (location) { return history.createLocation(location); }; + return history$; + }; +} +exports.makeHistoryDriver = makeHistoryDriver; + +},{"./captureClicks":69}],72:[function(require,module,exports){ +"use strict"; +var util_1 = require('./util'); +var ServerHistory = (function () { + function ServerHistory(currentLocation) { + this.currentLocation = currentLocation; + this.listeners = []; + } + ServerHistory.prototype.listen = function (listener) { + this.listeners.push(listener); + return function noop() { return void 0; }; + }; + ServerHistory.prototype.push = function (location) { + var length = this.listeners.length; + if (length === 0) { + throw new Error('Must be given at least one listener before pushing'); + } + for (var i = 0; i < length; ++i) { + this.listeners[i](util_1.createLocation(location)); + } + }; + ServerHistory.prototype.replace = function (location) { + this.push(location); + }; + ServerHistory.prototype.createHref = function (path) { + return path; + }; + ServerHistory.prototype.createLocation = function (location) { + return util_1.createLocation(location); + }; + ServerHistory.prototype.getCurrentLocation = function () { + return this.currentLocation; + }; + ServerHistory.prototype.addCompleteCallback = function (complete) { + this._completeCallback = complete; + }; + ServerHistory.prototype.complete = function () { + this._completeCallback(); + }; + return ServerHistory; +}()); +function createServerHistory(loc) { + return new ServerHistory(loc ? util_1.createLocation(loc) : null); +} +exports.createServerHistory = createServerHistory; + +},{"./util":73}],73:[function(require,module,exports){ +"use strict"; +function supportsHistory() { + if (typeof navigator === 'undefined') { + return false; + } + var ua = navigator.userAgent; + if ((ua.indexOf('Android 2.') !== -1 || + ua.indexOf('Android 4.0') !== -1) && + ua.indexOf('Mobile Safari') !== -1 && + ua.indexOf('Chrome') === -1 && + ua.indexOf('Windows Phone') === -1) { + return false; + } + if (typeof window !== 'undefined') { + return window.history && 'pushState' in window.history; + } + else { + return false; + } +} +exports.supportsHistory = supportsHistory; +var locationDefaults = { + pathname: '/', + action: 'POP', + hash: '', + search: '', + state: undefined, + key: null, + query: null, +}; +function createLocation(location) { + if (typeof location === 'string') { + return Object.assign({}, locationDefaults, { pathname: location }); + } + return Object.assign({}, locationDefaults, location); +} +exports.createLocation = createLocation; + +},{}],74:[function(require,module,exports){ +"use strict"; +var counter = 0; +function newScope() { + return "cycle" + ++counter; +} +function checkIsolateArgs(dataflowComponent, scope) { + if (typeof dataflowComponent !== "function") { + throw new Error("First argument given to isolate() must be a " + + "'dataflowComponent' function"); + } + if (scope === null) { + throw new Error("Second argument given to isolate() must not be null"); + } +} +function isolateAllSources(sources, scope) { + var scopedSources = {}; + for (var key in sources) { + if (sources.hasOwnProperty(key) && sources[key] + && typeof sources[key].isolateSource === "function") { + scopedSources[key] = sources[key].isolateSource(sources[key], scope); + } + else if (sources.hasOwnProperty(key)) { + scopedSources[key] = sources[key]; + } + } + return scopedSources; +} +function isolateAllSinks(sources, sinks, scope) { + var scopedSinks = {}; + for (var key in sinks) { + if (sinks.hasOwnProperty(key) + && sources[key] + && typeof sources[key].isolateSink === "function") { + scopedSinks[key] = sources[key].isolateSink(sinks[key], scope); + } + else if (sinks.hasOwnProperty(key)) { + scopedSinks[key] = sinks[key]; + } + } + return scopedSinks; +} +/** + * Takes a `dataflowComponent` function and an optional `scope` string, and + * returns a scoped version of the `dataflowComponent` function. + * + * When the scoped dataflow component is invoked, each source provided to the + * scoped dataflowComponent is isolated to the scope using + * `source.isolateSource(source, scope)`, if possible. Likewise, the sinks + * returned from the scoped dataflow component are isolate to the scope using + * `source.isolateSink(sink, scope)`. + * + * If the `scope` is not provided, a new scope will be automatically created. + * This means that while **`isolate(dataflowComponent, scope)` is pure** + * (referentially transparent), **`isolate(dataflowComponent)` is impure** + * (not referentially transparent). Two calls to `isolate(Foo, bar)` will + * generate two indistinct dataflow components. But, two calls to `isolate(Foo)` + * will generate two distinct dataflow components. + * + * Note that both `isolateSource()` and `isolateSink()` are static members of + * `source`. The reason for this is that drivers produce `source` while the + * application produces `sink`, and it's the driver's responsibility to + * implement `isolateSource()` and `isolateSink()`. + * + * @param {Function} dataflowComponent a function that takes `sources` as input + * and outputs a collection of `sinks`. + * @param {String} scope an optional string that is used to isolate each + * `sources` and `sinks` when the returned scoped dataflow component is invoked. + * @return {Function} the scoped dataflow component function that, as the + * original `dataflowComponent` function, takes `sources` and returns `sinks`. + * @function isolate + */ +function isolate(component, scope) { + if (scope === void 0) { scope = newScope(); } + checkIsolateArgs(component, scope); + var convertedScope = typeof scope === 'string' ? scope : scope.toString(); + return function scopedComponent(sources) { + var rest = []; + for (var _i = 1; _i < arguments.length; _i++) { + rest[_i - 1] = arguments[_i]; + } + var scopedSources = isolateAllSources(sources, convertedScope); + var sinks = component.apply(void 0, [scopedSources].concat(rest)); + var scopedSinks = isolateAllSinks(sources, sinks, convertedScope); + return scopedSinks; + }; +} +isolate.reset = function () { return counter = 0; }; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = isolate; + +},{}],75:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _xstreamAdapter = require('@cycle/xstream-adapter'); + +var _xstreamAdapter2 = _interopRequireDefault(_xstreamAdapter); + +var _writeToStore = require('./writeToStore'); + +var _writeToStore2 = _interopRequireDefault(_writeToStore); + +var _responseCollection = require('./responseCollection'); + +var _responseCollection2 = _interopRequireDefault(_responseCollection); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Storage Driver. + * + * This is a localStorage and sessionStorage Driver for Cycle.js apps. The + * driver is also a function, and it takes a stream of requests as input, and + * returns a **`responseCollection`** with functions that allow reading from the + * storage objects. The functions on the **`responseCollection`** return streams + * of the storage data that was requested. + * + * **Requests**. The stream of requests should emit objects. These should be + * instructions to write to the desired Storage object. Here are the `request` + * object properties: + * + * - `target` *(String)*: type of storage, can be `local` or `session`, defaults + * to `local`. + * - `action` *(String)*: type of action, can be `setItem`, `removeItem` or + * `clear`, defaults to `setItem`. + * - `key` *(String)*: storage key. + * - `value` *(String)*: storage value. + * + * **responseCollection**. The **`responseCollection`** is an Object that + * exposes functions to read from local- and sessionStorage. + * + * ```js + * // Returns key of nth localStorage value. + * responseCollection.local.getKey(n) + * // Returns localStorage value of `key`. + * responseCollection.local.getItem(key) + * // Returns key of nth sessionStorage value. + * responseCollection.session.getKey(n) + * // Returns sessionStorage value of `key`. + * responseCollection.session.getItem(key) + * ``` + * + * @param request$ - a stream of write request objects. + * @return {Object} the response collection containing functions + * for reading from storage. + * @function storageDriver + */ +function storageDriver(request$, runStreamAdapter) { + // Execute writing actions. + request$.addListener({ + next: function next(request) { + return (0, _writeToStore2.default)(request); + }, + error: function error() {}, + complete: function complete() {} + }); + + // Return reading functions. + return (0, _responseCollection2.default)(request$, runStreamAdapter); +} + +storageDriver.streamAdapter = _xstreamAdapter2.default; + +exports.default = storageDriver; +},{"./responseCollection":76,"./writeToStore":78,"@cycle/xstream-adapter":79}],76:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +exports.default = function (request$, runStreamAdapter) { + return { + // For localStorage. + get local() { + return (0, _util2.default)(request$, runStreamAdapter); + }, + // For sessionStorage. + get session() { + return (0, _util2.default)(request$, runStreamAdapter, 'session'); + } + }; +}; + +var _util = require('./util'); + +var _util2 = _interopRequireDefault(_util); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +},{"./util":77}],77:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = getResponseObj; + +var _dropRepeats = require('xstream/extra/dropRepeats'); + +var _dropRepeats2 = _interopRequireDefault(_dropRepeats); + +var _xstreamAdapter = require('@cycle/xstream-adapter'); + +var _xstreamAdapter2 = _interopRequireDefault(_xstreamAdapter); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function getStorage$(request$, type) { + if (type === 'local') { + return request$.filter(function (req) { + return !req.target || req.target === 'local'; + }); + } else { + return request$.filter(function (req) { + return req.target === 'session'; + }); + } +} + +function storageKey(n, request$) { + var type = arguments.length <= 2 || arguments[2] === undefined ? 'local' : arguments[2]; + + var storage$ = getStorage$(request$, type); + var key = type === 'local' ? localStorage.key(n) : sessionStorage.key(n); + + return storage$.filter(function (req) { + return req.key === key; + }).map(function (req) { + return req.key; + }).startWith(key).compose((0, _dropRepeats2.default)()); +} + +function storageGetItem(key, request$) { + var type = arguments.length <= 2 || arguments[2] === undefined ? 'local' : arguments[2]; + + var storage$ = getStorage$(request$, type); + var storageObj = type === 'local' ? localStorage : sessionStorage; + + return storage$.filter(function (req) { + return req.key === key; + }).map(function (req) { + return req.value; + }).startWith(storageObj.getItem(key)); +} + +function getResponseObj(request$, runSA) { + var type = arguments.length <= 2 || arguments[2] === undefined ? 'local' : arguments[2]; + + return { + // Function returning stream of the nth key. + + key: function key(n) { + return runSA.adapt(storageKey(n, request$, type), _xstreamAdapter2.default.streamSubscribe); + }, + + // Function returning stream of item values. + getItem: function getItem(key) { + return runSA.adapt(storageGetItem(key, request$, type), _xstreamAdapter2.default.streamSubscribe); + } + }; +} +},{"@cycle/xstream-adapter":79,"xstream/extra/dropRepeats":81}],78:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +/** + * @function writeToStore + * @description + * A universal write function for localStorage and sessionStorage. + * @param {object} request - the storage request object + * @param {string} request.target - a string determines which storage to use + * @param {string} request.action - a string determines the write action + * @param {string} request.key - the key of a storage item + * @param {string} request.value - the value of a storage item + */ +function writeToStore(_ref) { + var _ref$target = _ref.target; + var target = _ref$target === undefined ? "local" : _ref$target; + var _ref$action = _ref.action; + var action = _ref$action === undefined ? "setItem" : _ref$action; + var key = _ref.key; + var value = _ref.value; + + // Determine the storage target. + var storage = target === "local" ? localStorage : sessionStorage; + + // Execute the storage action and pass arguments if they were defined. + storage[action](key, value); +} + +exports.default = writeToStore; +},{}],79:[function(require,module,exports){ +"use strict"; +var xstream_1 = require('xstream'); +function logToConsoleError(err) { + var target = err.stack || err; + if (console && console.error) { + console.error(target); + } + else if (console && console.log) { + console.log(target); + } +} +var XStreamAdapter = { + adapt: function (originStream, originStreamSubscribe) { + if (XStreamAdapter.isValidStream(originStream)) { + return originStream; + } + ; + var dispose = null; + return xstream_1.default.create({ + start: function (out) { + var observer = { + next: function (value) { return out.shamefullySendNext(value); }, + error: function (err) { return out.shamefullySendError(err); }, + complete: function () { return out.shamefullySendComplete(); }, + }; + dispose = originStreamSubscribe(originStream, observer); + }, + stop: function () { + if (typeof dispose === 'function') { + dispose(); + } + } + }); + }, + dispose: function (sinks, sinkProxies, sources) { + Object.keys(sources).forEach(function (k) { + if (typeof sources[k].dispose === 'function') { + sources[k].dispose(); + } + }); + Object.keys(sinks).forEach(function (k) { + sinks[k].removeListener(sinkProxies[k].stream); + }); + }, + makeHoldSubject: function () { + var stream = xstream_1.default.createWithMemory(); + var observer = { + next: function (x) { stream.shamefullySendNext(x); }, + error: function (err) { + logToConsoleError(err); + stream.shamefullySendError(err); + }, + complete: function () { stream.shamefullySendComplete(); } + }; + return { observer: observer, stream: stream }; + }, + isValidStream: function (stream) { + return (typeof stream.addListener === 'function' && + typeof stream.shamefullySendNext === 'function'); + }, + streamSubscribe: function (stream, observer) { + stream.addListener(observer); + return function () { return stream.removeListener(observer); }; + } +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = XStreamAdapter; + +},{"xstream":82}],80:[function(require,module,exports){ +"use strict"; +var __extends = (this && this.__extends) || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); +}; +var empty = {}; +function noop() { } +function copy(a) { + var l = a.length; + var b = Array(l); + for (var i = 0; i < l; ++i) { + b[i] = a[i]; + } + return b; +} +exports.emptyListener = { + _n: noop, + _e: noop, + _c: noop, +}; +// mutates the input +function internalizeProducer(producer) { + producer._start = + function _start(il) { + il.next = il._n; + il.error = il._e; + il.complete = il._c; + this.start(il); + }; + producer._stop = producer.stop; +} +function invoke(f, args) { + switch (args.length) { + case 0: return f(); + case 1: return f(args[0]); + case 2: return f(args[0], args[1]); + case 3: return f(args[0], args[1], args[2]); + case 4: return f(args[0], args[1], args[2], args[3]); + case 5: return f(args[0], args[1], args[2], args[3], args[4]); + default: return f.apply(void 0, args); + } +} +function compose2(f1, f2) { + return function composedFn(arg) { + return f1(f2(arg)); + }; +} +function and(f1, f2) { + return function andFn(t) { + return f1(t) && f2(t); + }; +} +var CombineListener = (function () { + function CombineListener(i, p) { + this.i = i; + this.p = p; + p.ils.push(this); + } + CombineListener.prototype._n = function (t) { + var p = this.p, out = p.out; + if (!out) + return; + if (p.up(t, this.i)) { + try { + out._n(invoke(p.project, p.vals)); + } + catch (e) { + out._e(e); + } + } + }; + CombineListener.prototype._e = function (err) { + var out = this.p.out; + if (!out) + return; + out._e(err); + }; + CombineListener.prototype._c = function () { + var p = this.p; + if (!p.out) + return; + if (--p.ac === 0) { + p.out._c(); + } + }; + return CombineListener; +}()); +exports.CombineListener = CombineListener; +var CombineProducer = (function () { + function CombineProducer(project, streams) { + this.project = project; + this.streams = streams; + this.type = 'combine'; + this.out = exports.emptyListener; + this.ils = []; + var n = this.ac = this.left = streams.length; + var vals = this.vals = new Array(n); + for (var i = 0; i < n; i++) { + vals[i] = empty; + } + } + CombineProducer.prototype.up = function (t, i) { + var v = this.vals[i]; + var left = !this.left ? 0 : v === empty ? --this.left : this.left; + this.vals[i] = t; + return left === 0; + }; + CombineProducer.prototype._start = function (out) { + this.out = out; + var s = this.streams; + var n = s.length; + if (n === 0) + this.zero(out); + else { + for (var i = 0; i < n; i++) { + s[i]._add(new CombineListener(i, this)); + } + } + }; + CombineProducer.prototype._stop = function () { + var s = this.streams; + var n = this.ac = this.left = s.length; + var vals = this.vals = new Array(n); + for (var i = 0; i < n; i++) { + s[i]._remove(this.ils[i]); + vals[i] = empty; + } + this.out = null; + this.ils = []; + }; + CombineProducer.prototype.zero = function (out) { + try { + out._n(this.project()); + out._c(); + } + catch (e) { + out._e(e); + } + }; + return CombineProducer; +}()); +exports.CombineProducer = CombineProducer; +var FromArrayProducer = (function () { + function FromArrayProducer(a) { + this.a = a; + this.type = 'fromArray'; + } + FromArrayProducer.prototype._start = function (out) { + var a = this.a; + for (var i = 0, l = a.length; i < l; i++) { + out._n(a[i]); + } + out._c(); + }; + FromArrayProducer.prototype._stop = function () { + }; + return FromArrayProducer; +}()); +exports.FromArrayProducer = FromArrayProducer; +var FromPromiseProducer = (function () { + function FromPromiseProducer(p) { + this.p = p; + this.type = 'fromPromise'; + this.on = false; + } + FromPromiseProducer.prototype._start = function (out) { + var prod = this; + this.on = true; + this.p.then(function (v) { + if (prod.on) { + out._n(v); + out._c(); + } + }, function (e) { + out._e(e); + }).then(null, function (err) { + setTimeout(function () { throw err; }); + }); + }; + FromPromiseProducer.prototype._stop = function () { + this.on = false; + }; + return FromPromiseProducer; +}()); +exports.FromPromiseProducer = FromPromiseProducer; +var MergeProducer = (function () { + function MergeProducer(streams) { + this.streams = streams; + this.type = 'merge'; + this.out = exports.emptyListener; + this.ac = streams.length; + } + MergeProducer.prototype._start = function (out) { + this.out = out; + var s = this.streams; + var L = s.length; + for (var i = 0; i < L; i++) { + s[i]._add(this); + } + }; + MergeProducer.prototype._stop = function () { + var s = this.streams; + var L = s.length; + for (var i = 0; i < L; i++) { + s[i]._remove(this); + } + this.out = null; + this.ac = L; + }; + MergeProducer.prototype._n = function (t) { + var u = this.out; + if (!u) + return; + u._n(t); + }; + MergeProducer.prototype._e = function (err) { + var u = this.out; + if (!u) + return; + u._e(err); + }; + MergeProducer.prototype._c = function () { + if (--this.ac === 0) { + var u = this.out; + if (!u) + return; + u._c(); + } + }; + return MergeProducer; +}()); +exports.MergeProducer = MergeProducer; +var PeriodicProducer = (function () { + function PeriodicProducer(period) { + this.period = period; + this.type = 'periodic'; + this.intervalID = -1; + this.i = 0; + } + PeriodicProducer.prototype._start = function (stream) { + var self = this; + function intervalHandler() { stream._n(self.i++); } + this.intervalID = setInterval(intervalHandler, this.period); + }; + PeriodicProducer.prototype._stop = function () { + if (this.intervalID !== -1) + clearInterval(this.intervalID); + this.intervalID = -1; + this.i = 0; + }; + return PeriodicProducer; +}()); +exports.PeriodicProducer = PeriodicProducer; +var DebugOperator = (function () { + function DebugOperator(arg, ins) { + this.ins = ins; + this.type = 'debug'; + this.out = null; + this.s = null; // spy + this.l = null; // label + if (typeof arg === 'string') { + this.l = arg; + } + else { + this.s = arg; + } + } + DebugOperator.prototype._start = function (out) { + this.out = out; + this.ins._add(this); + }; + DebugOperator.prototype._stop = function () { + this.ins._remove(this); + this.out = null; + }; + DebugOperator.prototype._n = function (t) { + var u = this.out; + if (!u) + return; + var s = this.s, l = this.l; + if (s) { + try { + s(t); + } + catch (e) { + u._e(e); + } + } + else if (l) { + console.log(l + ':', t); + } + else { + console.log(t); + } + u._n(t); + }; + DebugOperator.prototype._e = function (err) { + var u = this.out; + if (!u) + return; + u._e(err); + }; + DebugOperator.prototype._c = function () { + var u = this.out; + if (!u) + return; + u._c(); + }; + return DebugOperator; +}()); +exports.DebugOperator = DebugOperator; +var DropOperator = (function () { + function DropOperator(max, ins) { + this.max = max; + this.ins = ins; + this.type = 'drop'; + this.out = null; + this.dropped = 0; + } + DropOperator.prototype._start = function (out) { + this.out = out; + this.ins._add(this); + }; + DropOperator.prototype._stop = function () { + this.ins._remove(this); + this.out = null; + this.dropped = 0; + }; + DropOperator.prototype._n = function (t) { + var u = this.out; + if (!u) + return; + if (this.dropped++ >= this.max) + u._n(t); + }; + DropOperator.prototype._e = function (err) { + var u = this.out; + if (!u) + return; + u._e(err); + }; + DropOperator.prototype._c = function () { + var u = this.out; + if (!u) + return; + u._c(); + }; + return DropOperator; +}()); +exports.DropOperator = DropOperator; +var OtherIL = (function () { + function OtherIL(out, op) { + this.out = out; + this.op = op; + } + OtherIL.prototype._n = function (t) { + this.op.end(); + }; + OtherIL.prototype._e = function (err) { + this.out._e(err); + }; + OtherIL.prototype._c = function () { + this.op.end(); + }; + return OtherIL; +}()); +var EndWhenOperator = (function () { + function EndWhenOperator(o, // o = other + ins) { + this.o = o; + this.ins = ins; + this.type = 'endWhen'; + this.out = null; + this.oil = exports.emptyListener; // oil = other InternalListener + } + EndWhenOperator.prototype._start = function (out) { + this.out = out; + this.o._add(this.oil = new OtherIL(out, this)); + this.ins._add(this); + }; + EndWhenOperator.prototype._stop = function () { + this.ins._remove(this); + this.o._remove(this.oil); + this.out = null; + this.oil = null; + }; + EndWhenOperator.prototype.end = function () { + var u = this.out; + if (!u) + return; + u._c(); + }; + EndWhenOperator.prototype._n = function (t) { + var u = this.out; + if (!u) + return; + u._n(t); + }; + EndWhenOperator.prototype._e = function (err) { + var u = this.out; + if (!u) + return; + u._e(err); + }; + EndWhenOperator.prototype._c = function () { + this.end(); + }; + return EndWhenOperator; +}()); +exports.EndWhenOperator = EndWhenOperator; +var FilterOperator = (function () { + function FilterOperator(passes, ins) { + this.passes = passes; + this.ins = ins; + this.type = 'filter'; + this.out = null; + } + FilterOperator.prototype._start = function (out) { + this.out = out; + this.ins._add(this); + }; + FilterOperator.prototype._stop = function () { + this.ins._remove(this); + this.out = null; + }; + FilterOperator.prototype._n = function (t) { + var u = this.out; + if (!u) + return; + try { + if (this.passes(t)) + u._n(t); + } + catch (e) { + u._e(e); + } + }; + FilterOperator.prototype._e = function (err) { + var u = this.out; + if (!u) + return; + u._e(err); + }; + FilterOperator.prototype._c = function () { + var u = this.out; + if (!u) + return; + u._c(); + }; + return FilterOperator; +}()); +exports.FilterOperator = FilterOperator; +var FlattenListener = (function () { + function FlattenListener(out, op) { + this.out = out; + this.op = op; + } + FlattenListener.prototype._n = function (t) { + this.out._n(t); + }; + FlattenListener.prototype._e = function (err) { + this.out._e(err); + }; + FlattenListener.prototype._c = function () { + this.op.inner = null; + this.op.less(); + }; + return FlattenListener; +}()); +var FlattenOperator = (function () { + function FlattenOperator(ins) { + this.ins = ins; + this.type = 'flatten'; + this.inner = null; // Current inner Stream + this.il = null; // Current inner InternalListener + this.open = true; + this.out = null; + } + FlattenOperator.prototype._start = function (out) { + this.out = out; + this.ins._add(this); + }; + FlattenOperator.prototype._stop = function () { + this.ins._remove(this); + this.inner = null; + this.il = null; + this.open = true; + this.out = null; + }; + FlattenOperator.prototype.less = function () { + var u = this.out; + if (!u) + return; + if (!this.open && !this.inner) + u._c(); + }; + FlattenOperator.prototype._n = function (s) { + var u = this.out; + if (!u) + return; + var _a = this, inner = _a.inner, il = _a.il; + if (inner && il) + inner._remove(il); + (this.inner = s)._add(this.il = new FlattenListener(u, this)); + }; + FlattenOperator.prototype._e = function (err) { + var u = this.out; + if (!u) + return; + u._e(err); + }; + FlattenOperator.prototype._c = function () { + this.open = false; + this.less(); + }; + return FlattenOperator; +}()); +exports.FlattenOperator = FlattenOperator; +var FoldOperator = (function () { + function FoldOperator(f, seed, ins) { + this.f = f; + this.seed = seed; + this.ins = ins; + this.type = 'fold'; + this.out = null; + this.acc = seed; + } + FoldOperator.prototype._start = function (out) { + this.out = out; + out._n(this.acc); + this.ins._add(this); + }; + FoldOperator.prototype._stop = function () { + this.ins._remove(this); + this.out = null; + this.acc = this.seed; + }; + FoldOperator.prototype._n = function (t) { + var u = this.out; + if (!u) + return; + try { + u._n(this.acc = this.f(this.acc, t)); + } + catch (e) { + u._e(e); + } + }; + FoldOperator.prototype._e = function (err) { + var u = this.out; + if (!u) + return; + u._e(err); + }; + FoldOperator.prototype._c = function () { + var u = this.out; + if (!u) + return; + u._c(); + }; + return FoldOperator; +}()); +exports.FoldOperator = FoldOperator; +var LastOperator = (function () { + function LastOperator(ins) { + this.ins = ins; + this.type = 'last'; + this.out = null; + this.has = false; + this.val = empty; + } + LastOperator.prototype._start = function (out) { + this.out = out; + this.ins._add(this); + }; + LastOperator.prototype._stop = function () { + this.ins._remove(this); + this.out = null; + this.has = false; + this.val = empty; + }; + LastOperator.prototype._n = function (t) { + this.has = true; + this.val = t; + }; + LastOperator.prototype._e = function (err) { + var u = this.out; + if (!u) + return; + u._e(err); + }; + LastOperator.prototype._c = function () { + var u = this.out; + if (!u) + return; + if (this.has) { + u._n(this.val); + u._c(); + } + else { + u._e('TODO show proper error'); + } + }; + return LastOperator; +}()); +exports.LastOperator = LastOperator; +var MapFlattenInner = (function () { + function MapFlattenInner(out, op) { + this.out = out; + this.op = op; + } + MapFlattenInner.prototype._n = function (r) { + this.out._n(r); + }; + MapFlattenInner.prototype._e = function (err) { + this.out._e(err); + }; + MapFlattenInner.prototype._c = function () { + this.op.inner = null; + this.op.less(); + }; + return MapFlattenInner; +}()); +var MapFlattenOperator = (function () { + function MapFlattenOperator(mapOp) { + this.mapOp = mapOp; + this.inner = null; // Current inner Stream + this.il = null; // Current inner InternalListener + this.open = true; + this.out = null; + this.type = mapOp.type + "+flatten"; + this.ins = mapOp.ins; + } + MapFlattenOperator.prototype._start = function (out) { + this.out = out; + this.mapOp.ins._add(this); + }; + MapFlattenOperator.prototype._stop = function () { + this.mapOp.ins._remove(this); + this.inner = null; + this.il = null; + this.open = true; + this.out = null; + }; + MapFlattenOperator.prototype.less = function () { + if (!this.open && !this.inner) { + var u = this.out; + if (!u) + return; + u._c(); + } + }; + MapFlattenOperator.prototype._n = function (v) { + var u = this.out; + if (!u) + return; + var _a = this, inner = _a.inner, il = _a.il; + if (inner && il) + inner._remove(il); + try { + (this.inner = this.mapOp.project(v))._add(this.il = new MapFlattenInner(u, this)); + } + catch (e) { + u._e(e); + } + }; + MapFlattenOperator.prototype._e = function (err) { + var u = this.out; + if (!u) + return; + u._e(err); + }; + MapFlattenOperator.prototype._c = function () { + this.open = false; + this.less(); + }; + return MapFlattenOperator; +}()); +exports.MapFlattenOperator = MapFlattenOperator; +var MapOperator = (function () { + function MapOperator(project, ins) { + this.project = project; + this.ins = ins; + this.type = 'map'; + this.out = null; + } + MapOperator.prototype._start = function (out) { + this.out = out; + this.ins._add(this); + }; + MapOperator.prototype._stop = function () { + this.ins._remove(this); + this.out = null; + }; + MapOperator.prototype._n = function (t) { + var u = this.out; + if (!u) + return; + try { + u._n(this.project(t)); + } + catch (e) { + u._e(e); + } + }; + MapOperator.prototype._e = function (err) { + var u = this.out; + if (!u) + return; + u._e(err); + }; + MapOperator.prototype._c = function () { + var u = this.out; + if (!u) + return; + u._c(); + }; + return MapOperator; +}()); +exports.MapOperator = MapOperator; +var FilterMapOperator = (function (_super) { + __extends(FilterMapOperator, _super); + function FilterMapOperator(passes, project, ins) { + _super.call(this, project, ins); + this.passes = passes; + this.type = 'filter+map'; + } + FilterMapOperator.prototype._n = function (v) { + if (this.passes(v)) { + _super.prototype._n.call(this, v); + } + ; + }; + return FilterMapOperator; +}(MapOperator)); +exports.FilterMapOperator = FilterMapOperator; +var ReplaceErrorOperator = (function () { + function ReplaceErrorOperator(fn, ins) { + this.fn = fn; + this.ins = ins; + this.type = 'replaceError'; + this.out = empty; + } + ReplaceErrorOperator.prototype._start = function (out) { + this.out = out; + this.ins._add(this); + }; + ReplaceErrorOperator.prototype._stop = function () { + this.ins._remove(this); + this.out = null; + }; + ReplaceErrorOperator.prototype._n = function (t) { + var u = this.out; + if (!u) + return; + u._n(t); + }; + ReplaceErrorOperator.prototype._e = function (err) { + var u = this.out; + if (!u) + return; + try { + this.ins._remove(this); + (this.ins = this.fn(err))._add(this); + } + catch (e) { + u._e(e); + } + }; + ReplaceErrorOperator.prototype._c = function () { + var u = this.out; + if (!u) + return; + u._c(); + }; + return ReplaceErrorOperator; +}()); +exports.ReplaceErrorOperator = ReplaceErrorOperator; +var StartWithOperator = (function () { + function StartWithOperator(ins, value) { + this.ins = ins; + this.value = value; + this.type = 'startWith'; + this.out = exports.emptyListener; + } + StartWithOperator.prototype._start = function (out) { + this.out = out; + this.out._n(this.value); + this.ins._add(out); + }; + StartWithOperator.prototype._stop = function () { + this.ins._remove(this.out); + this.out = null; + }; + return StartWithOperator; +}()); +exports.StartWithOperator = StartWithOperator; +var TakeOperator = (function () { + function TakeOperator(max, ins) { + this.max = max; + this.ins = ins; + this.type = 'take'; + this.out = null; + this.taken = 0; + } + TakeOperator.prototype._start = function (out) { + this.out = out; + this.ins._add(this); + }; + TakeOperator.prototype._stop = function () { + this.ins._remove(this); + this.out = null; + this.taken = 0; + }; + TakeOperator.prototype._n = function (t) { + var u = this.out; + if (!u) + return; + if (this.taken++ < this.max - 1) { + u._n(t); + } + else { + u._n(t); + u._c(); + this._stop(); + } + }; + TakeOperator.prototype._e = function (err) { + var u = this.out; + if (!u) + return; + u._e(err); + }; + TakeOperator.prototype._c = function () { + var u = this.out; + if (!u) + return; + u._c(); + }; + return TakeOperator; +}()); +exports.TakeOperator = TakeOperator; +var Stream = (function () { + function Stream(producer) { + this._stopID = empty; + this._prod = producer; + this._ils = []; + } + Stream.prototype._n = function (t) { + var a = this._ils; + var L = a.length; + if (L == 1) + a[0]._n(t); + else { + var b = copy(a); + for (var i = 0; i < L; i++) + b[i]._n(t); + } + }; + Stream.prototype._e = function (err) { + var a = this._ils; + var L = a.length; + if (L == 1) + a[0]._e(err); + else { + var b = copy(a); + for (var i = 0; i < L; i++) + b[i]._e(err); + } + this._x(); + }; + Stream.prototype._c = function () { + var a = this._ils; + var L = a.length; + if (L == 1) + a[0]._c(); + else { + var b = copy(a); + for (var i = 0; i < L; i++) + b[i]._c(); + } + this._x(); + }; + Stream.prototype._x = function () { + if (this._ils.length === 0) + return; + if (this._prod) + this._prod._stop(); + this._ils = []; + }; + /** + * Adds a Listener to the Stream. + * + * @param {Listener} listener + */ + Stream.prototype.addListener = function (listener) { + if (typeof listener.next !== 'function' + || typeof listener.error !== 'function' + || typeof listener.complete !== 'function') { + throw new Error('stream.addListener() requires all three next, error, ' + + 'and complete functions.'); + } + listener._n = listener.next; + listener._e = listener.error; + listener._c = listener.complete; + this._add(listener); + }; + /** + * Removes a Listener from the Stream, assuming the Listener was added to it. + * + * @param {Listener} listener + */ + Stream.prototype.removeListener = function (listener) { + this._remove(listener); + }; + Stream.prototype._add = function (il) { + var a = this._ils; + a.push(il); + if (a.length === 1) { + if (this._stopID !== empty) { + clearTimeout(this._stopID); + this._stopID = empty; + } + var p = this._prod; + if (p) + p._start(this); + } + }; + Stream.prototype._remove = function (il) { + var a = this._ils; + var i = a.indexOf(il); + if (i > -1) { + a.splice(i, 1); + var p_1 = this._prod; + if (p_1 && a.length <= 0) { + this._stopID = setTimeout(function () { return p_1._stop(); }); + } + } + }; + Stream.prototype.ctor = function () { + return this instanceof MemoryStream ? MemoryStream : Stream; + }; + /** + * Creates a new Stream given a Producer. + * + * @factory true + * @param {Producer} producer An optional Producer that dictates how to + * start, generate events, and stop the Stream. + * @return {Stream} + */ + Stream.create = function (producer) { + if (producer) { + if (typeof producer.start !== 'function' + || typeof producer.stop !== 'function') { + throw new Error('producer requires both start and stop functions'); + } + internalizeProducer(producer); // mutates the input + } + return new Stream(producer); + }; + /** + * Creates a new MemoryStream given a Producer. + * + * @factory true + * @param {Producer} producer An optional Producer that dictates how to + * start, generate events, and stop the Stream. + * @return {MemoryStream} + */ + Stream.createWithMemory = function (producer) { + if (producer) { + internalizeProducer(producer); // mutates the input + } + return new MemoryStream(producer); + }; + /** + * Creates a new MimicStream, which can `imitate` another Stream. Only a + * MimicStream has the `imitate()` method. + * + * @factory true + * @return {MimicStream} + */ + Stream.createMimic = function () { + return new MimicStream(); + }; + /** + * Creates a Stream that does nothing when started. It never emits any event. + * + * Marble diagram: + * + * ```text + * never + * ----------------------- + * ``` + * + * @factory true + * @return {Stream} + */ + Stream.never = function () { + return new Stream({ _start: noop, _stop: noop }); + }; + /** + * Creates a Stream that immediately emits the "complete" notification when + * started, and that's it. + * + * Marble diagram: + * + * ```text + * empty + * -| + * ``` + * + * @factory true + * @return {Stream} + */ + Stream.empty = function () { + return new Stream({ + _start: function (il) { il._c(); }, + _stop: noop, + }); + }; + /** + * Creates a Stream that immediately emits an "error" notification with the + * value you passed as the `error` argument when the stream starts, and that's + * it. + * + * Marble diagram: + * + * ```text + * throw(X) + * -X + * ``` + * + * @factory true + * @param error The error event to emit on the created stream. + * @return {Stream} + */ + Stream.throw = function (error) { + return new Stream({ + _start: function (il) { il._e(error); }, + _stop: noop, + }); + }; + /** + * Creates a Stream that immediately emits the arguments that you give to + * *of*, then completes. + * + * Marble diagram: + * + * ```text + * of(1,2,3) + * 123| + * ``` + * + * @factory true + * @param a The first value you want to emit as an event on the stream. + * @param b The second value you want to emit as an event on the stream. One + * or more of these values may be given as arguments. + * @return {Stream} + */ + Stream.of = function () { + var items = []; + for (var _i = 0; _i < arguments.length; _i++) { + items[_i - 0] = arguments[_i]; + } + return Stream.fromArray(items); + }; + /** + * Converts an array to a stream. The returned stream will emit synchronously + * all the items in the array, and then complete. + * + * Marble diagram: + * + * ```text + * fromArray([1,2,3]) + * 123| + * ``` + * + * @factory true + * @param {Array} array The array to be converted as a stream. + * @return {Stream} + */ + Stream.fromArray = function (array) { + return new Stream(new FromArrayProducer(array)); + }; + /** + * Converts a promise to a stream. The returned stream will emit the resolved + * value of the promise, and then complete. However, if the promise is + * rejected, the stream will emit the corresponding error. + * + * Marble diagram: + * + * ```text + * fromPromise( ----42 ) + * -----------------42| + * ``` + * + * @factory true + * @param {Promise} promise The promise to be converted as a stream. + * @return {Stream} + */ + Stream.fromPromise = function (promise) { + return new Stream(new FromPromiseProducer(promise)); + }; + /** + * Creates a stream that periodically emits incremental numbers, every + * `period` milliseconds. + * + * Marble diagram: + * + * ```text + * periodic(1000) + * ---0---1---2---3---4---... + * ``` + * + * @factory true + * @param {number} period The interval in milliseconds to use as a rate of + * emission. + * @return {Stream} + */ + Stream.periodic = function (period) { + return new Stream(new PeriodicProducer(period)); + }; + /** + * Blends multiple streams together, emitting events from all of them + * concurrently. + * + * *merge* takes multiple streams as arguments, and creates a stream that + * behaves like each of the argument streams, in parallel. + * + * Marble diagram: + * + * ```text + * --1----2-----3--------4--- + * ----a-----b----c---d------ + * merge + * --1-a--2--b--3-c---d--4--- + * ``` + * + * @factory true + * @param {Stream} stream1 A stream to merge together with other streams. + * @param {Stream} stream2 A stream to merge together with other streams. Two + * or more streams may be given as arguments. + * @return {Stream} + */ + Stream.merge = function () { + var streams = []; + for (var _i = 0; _i < arguments.length; _i++) { + streams[_i - 0] = arguments[_i]; + } + return new Stream(new MergeProducer(streams)); + }; + Stream.prototype._map = function (project) { + var p = this._prod; + var ctor = this.ctor(); + if (p instanceof FilterOperator) { + return new ctor(new FilterMapOperator(p.passes, project, p.ins)); + } + if (p instanceof FilterMapOperator) { + return new ctor(new FilterMapOperator(p.passes, compose2(project, p.project), p.ins)); + } + if (p instanceof MapOperator) { + return new ctor(new MapOperator(compose2(project, p.project), p.ins)); + } + return new ctor(new MapOperator(project, this)); + }; + /** + * Transforms each event from the input Stream through a `project` function, + * to get a Stream that emits those transformed events. + * + * Marble diagram: + * + * ```text + * --1---3--5-----7------ + * map(i => i * 10) + * --10--30-50----70----- + * ``` + * + * @param {Function} project A function of type `(t: T) => U` that takes event + * `t` of type `T` from the input Stream and produces an event of type `U`, to + * be emitted on the output Stream. + * @return {Stream} + */ + Stream.prototype.map = function (project) { + return this._map(project); + }; + /** + * It's like `map`, but transforms each input event to always the same + * constant value on the output Stream. + * + * Marble diagram: + * + * ```text + * --1---3--5-----7----- + * mapTo(10) + * --10--10-10----10---- + * ``` + * + * @param projectedValue A value to emit on the output Stream whenever the + * input Stream emits any value. + * @return {Stream} + */ + Stream.prototype.mapTo = function (projectedValue) { + var s = this.map(function () { return projectedValue; }); + var op = s._prod; + op.type = op.type.replace('map', 'mapTo'); + return s; + }; + /** + * Only allows events that pass the test given by the `passes` argument. + * + * Each event from the input stream is given to the `passes` function. If the + * function returns `true`, the event is forwarded to the output stream, + * otherwise it is ignored and not forwarded. + * + * Marble diagram: + * + * ```text + * --1---2--3-----4-----5---6--7-8-- + * filter(i => i % 2 === 0) + * ------2--------4---------6----8-- + * ``` + * + * @param {Function} passes A function of type `(t: T) +> boolean` that takes + * an event from the input stream and checks if it passes, by returning a + * boolean. + * @return {Stream} + */ + Stream.prototype.filter = function (passes) { + var p = this._prod; + if (p instanceof FilterOperator) { + return new Stream(new FilterOperator(and(passes, p.passes), p.ins)); + } + return new Stream(new FilterOperator(passes, this)); + }; + /** + * Lets the first `amount` many events from the input stream pass to the + * output stream, then makes the output stream complete. + * + * Marble diagram: + * + * ```text + * --a---b--c----d---e-- + * take(3) + * --a---b--c| + * ``` + * + * @param {number} amount How many events to allow from the input stream + * before completing the output stream. + * @return {Stream} + */ + Stream.prototype.take = function (amount) { + return new (this.ctor())(new TakeOperator(amount, this)); + }; + /** + * Ignores the first `amount` many events from the input stream, and then + * after that starts forwarding events from the input stream to the output + * stream. + * + * Marble diagram: + * + * ```text + * --a---b--c----d---e-- + * drop(3) + * --------------d---e-- + * ``` + * + * @param {number} amount How many events to ignore from the input stream + * before forwarding all events from the input stream to the output stream. + * @return {Stream} + */ + Stream.prototype.drop = function (amount) { + return new Stream(new DropOperator(amount, this)); + }; + /** + * When the input stream completes, the output stream will emit the last event + * emitted by the input stream, and then will also complete. + * + * Marble diagram: + * + * ```text + * --a---b--c--d----| + * last() + * -----------------d| + * ``` + * + * @return {Stream} + */ + Stream.prototype.last = function () { + return new Stream(new LastOperator(this)); + }; + /** + * Prepends the given `initial` value to the sequence of events emitted by the + * input stream. The returned stream is a MemoryStream, which means it is + * already `remember()`'d. + * + * Marble diagram: + * + * ```text + * ---1---2-----3--- + * startWith(0) + * 0--1---2-----3--- + * ``` + * + * @param initial The value or event to prepend. + * @return {MemoryStream} + */ + Stream.prototype.startWith = function (initial) { + return new MemoryStream(new StartWithOperator(this, initial)); + }; + /** + * Uses another stream to determine when to complete the current stream. + * + * When the given `other` stream emits an event or completes, the output + * stream will complete. Before that happens, the output stream will behaves + * like the input stream. + * + * Marble diagram: + * + * ```text + * ---1---2-----3--4----5----6--- + * endWhen( --------a--b--| ) + * ---1---2-----3--4--| + * ``` + * + * @param other Some other stream that is used to know when should the output + * stream of this operator complete. + * @return {Stream} + */ + Stream.prototype.endWhen = function (other) { + return new (this.ctor())(new EndWhenOperator(other, this)); + }; + /** + * "Folds" the stream onto itself. + * + * Combines events from the past throughout + * the entire execution of the input stream, allowing you to accumulate them + * together. It's essentially like `Array.prototype.reduce`. The returned + * stream is a MemoryStream, which means it is already `remember()`'d. + * + * The output stream starts by emitting the `seed` which you give as argument. + * Then, when an event happens on the input stream, it is combined with that + * seed value through the `accumulate` function, and the output value is + * emitted on the output stream. `fold` remembers that output value as `acc` + * ("accumulator"), and then when a new input event `t` happens, `acc` will be + * combined with that to produce the new `acc` and so forth. + * + * Marble diagram: + * + * ```text + * ------1-----1--2----1----1------ + * fold((acc, x) => acc + x, 3) + * 3-----4-----5--7----8----9------ + * ``` + * + * @param {Function} accumulate A function of type `(acc: R, t: T) => R` that + * takes the previous accumulated value `acc` and the incoming event from the + * input stream and produces the new accumulated value. + * @param seed The initial accumulated value, of type `R`. + * @return {MemoryStream} + */ + Stream.prototype.fold = function (accumulate, seed) { + return new MemoryStream(new FoldOperator(accumulate, seed, this)); + }; + /** + * Replaces an error with another stream. + * + * When (and if) an error happens on the input stream, instead of forwarding + * that error to the output stream, *replaceError* will call the `replace` + * function which returns the stream that the output stream will replicate. + * And, in case that new stream also emits an error, `replace` will be called + * again to get another stream to start replicating. + * + * Marble diagram: + * + * ```text + * --1---2-----3--4-----X + * replaceError( () => --10--| ) + * --1---2-----3--4--------10--| + * ``` + * + * @param {Function} replace A function of type `(err) => Stream` that takes + * the error that occurred on the input stream or on the previous replacement + * stream and returns a new stream. The output stream will behave like the + * stream that this function returns. + * @return {Stream} + */ + Stream.prototype.replaceError = function (replace) { + return new (this.ctor())(new ReplaceErrorOperator(replace, this)); + }; + /** + * Flattens a "stream of streams", handling only one nested stream at a time + * (no concurrency). + * + * If the input stream is a stream that emits streams, then this operator will + * return an output stream which is a flat stream: emits regular events. The + * flattening happens without concurrency. It works like this: when the input + * stream emits a nested stream, *flatten* will start imitating that nested + * one. However, as soon as the next nested stream is emitted on the input + * stream, *flatten* will forget the previous nested one it was imitating, and + * will start imitating the new nested one. + * + * Marble diagram: + * + * ```text + * --+--------+--------------- + * \ \ + * \ ----1----2---3-- + * --a--b----c----d-------- + * flatten + * -----a--b------1----2---3-- + * ``` + * + * @return {Stream} + */ + Stream.prototype.flatten = function () { + var p = this._prod; + return new Stream(p instanceof MapOperator && !(p instanceof FilterMapOperator) ? + new MapFlattenOperator(p) : + new FlattenOperator(this)); + }; + /** + * Passes the input stream to a custom operator, to produce an output stream. + * + * *compose* is a handy way of using an existing function in a chained style. + * Instead of writing `outStream = f(inStream)` you can write + * `outStream = inStream.compose(f)`. + * + * @param {function} operator A function that takes a stream as input and + * returns a stream as well. + * @return {Stream} + */ + Stream.prototype.compose = function (operator) { + return operator(this); + }; + /** + * Returns an output stream that behaves like the input stream, but also + * remembers the most recent event that happens on the input stream, so that a + * newly added listener will immediately receive that memorised event. + * + * @return {MemoryStream} + */ + Stream.prototype.remember = function () { + var _this = this; + return new MemoryStream({ + _start: function (il) { + var p = _this._prod; + if (p) + p._start(il); + }, + _stop: function () { + var p = _this._prod; + if (p) + p._stop(); + }, + }); + }; + /** + * Returns an output stream that identically behaves like the input stream, + * but also runs a `spy` function fo each event, to help you debug your app. + * + * *debug* takes a `spy` function as argument, and runs that for each event + * happening on the input stream. If you don't provide the `spy` argument, + * then *debug* will just `console.log` each event. This helps you to + * understand the flow of events through some operator chain. + * + * Please note that if the output stream has no listeners, then it will not + * start, which means `spy` will never run because no actual event happens in + * that case. + * + * Marble diagram: + * + * ```text + * --1----2-----3-----4-- + * debug + * --1----2-----3-----4-- + * ``` + * + * @param {function} labelOrSpy A string to use as the label when printing + * debug information on the console, or a 'spy' function that takes an event + * as argument, and does not need to return anything. + * @return {Stream} + */ + Stream.prototype.debug = function (labelOrSpy) { + return new (this.ctor())(new DebugOperator(labelOrSpy, this)); + }; + /** + * Forces the Stream to emit the given value to its listeners. + * + * As the name indicates, if you use this, you are most likely doing something + * The Wrong Way. Please try to understand the reactive way before using this + * method. Use it only when you know what you are doing. + * + * @param value The "next" value you want to broadcast to all listeners of + * this Stream. + */ + Stream.prototype.shamefullySendNext = function (value) { + this._n(value); + }; + /** + * Forces the Stream to emit the given error to its listeners. + * + * As the name indicates, if you use this, you are most likely doing something + * The Wrong Way. Please try to understand the reactive way before using this + * method. Use it only when you know what you are doing. + * + * @param {any} error The error you want to broadcast to all the listeners of + * this Stream. + */ + Stream.prototype.shamefullySendError = function (error) { + this._e(error); + }; + /** + * Forces the Stream to emit the "completed" event to its listeners. + * + * As the name indicates, if you use this, you are most likely doing something + * The Wrong Way. Please try to understand the reactive way before using this + * method. Use it only when you know what you are doing. + */ + Stream.prototype.shamefullySendComplete = function () { + this._c(); + }; + /** + * Combines multiple streams together to return a stream whose events are + * calculated from the latest events of each of the input streams. + * + * *combine* remembers the most recent event from each of the input streams. + * When any of the input streams emits an event, that event together with all + * the other saved events are combined in the `project` function which should + * return a value. That value will be emitted on the output stream. It's + * essentially a way of mixing the events from multiple streams according to a + * formula. + * + * Marble diagram: + * + * ```text + * --1----2-----3--------4--- + * ----a-----b-----c--d------ + * combine((x,y) => x+y) + * ----1a-2a-2b-3b-3c-3d-4d-- + * ``` + * + * @factory true + * @param {Function} project A function of type `(x: T1, y: T2) => R` or + * similar that takes the most recent events `x` and `y` from the input + * streams and returns a value. The output stream will emit that value. The + * number of arguments for this function should match the number of input + * streams. + * @param {Stream} stream1 A stream to combine together with other streams. + * @param {Stream} stream2 A stream to combine together with other streams. + * Two or more streams may be given as arguments. + * @return {Stream} + */ + Stream.combine = function combine(project) { + var streams = []; + for (var _i = 1; _i < arguments.length; _i++) { + streams[_i - 1] = arguments[_i]; + } + return new Stream(new CombineProducer(project, streams)); + }; + return Stream; +}()); +exports.Stream = Stream; +var MimicStream = (function (_super) { + __extends(MimicStream, _super); + function MimicStream() { + _super.call(this); + } + MimicStream.prototype._add = function (il) { + var t = this._target; + if (!t) + return; + t._add(il); + }; + MimicStream.prototype._remove = function (il) { + var t = this._target; + if (!t) + return; + t._remove(il); + }; + /** + * This method exists only on a MimicStream, which is created through + * `xs.createMimic()`. *imitate* changes this current MimicStream to behave + * like the `other` given stream. + * + * The `imitate` method and the `MimicStream` type exist to allow one thing: + * **circular dependency of streams**. For instance, let's imagine that for + * some reason you need to create a circular dependency where stream `first$` + * depends on stream `second$` which in turn depends on `first$`: + * + * + * ```js + * import delay from 'xstream/extra/delay' + * + * var first$ = second$.map(x => x * 10).take(3); + * var second$ = first$.map(x => x + 1).startWith(1).compose(delay(100)); + * ``` + * + * However, that is invalid JavaScript, because `second$` is undefined + * on the first line. This is how a MimicStream and imitate can help solve it: + * + * ```js + * import delay from 'xstream/extra/delay' + * + * var secondMimic$ = xs.createMimic(); + * var first$ = secondMimic$.map(x => x * 10).take(3); + * var second$ = first$.map(x => x + 1).startWith(1).compose(delay(100)); + * secondMimic$.imitate(second$); + * ``` + * + * We create `secondMimic$` before the others, so it can be used in the + * declaration of `first$`. Then, after both `first$` and `second$` are + * defined, we hook `secondMimic$` with `second$` with `imitate()` to tell + * that they are "the same". `imitate` will not trigger the start of any + * stream, it simply forwards listeners of `secondMimic$` to `second$`. + * + * The following is an example where `imitate()` is important in Cycle.js + * applications. A parent component contains some child components. A child + * has an action stream which is given to the parent to define its state: + * + * + * ```js + * const childActionMimic$ = xs.createMimic(); + * const parent = Parent({...sources, childAction$: childActionMimic$}); + * const childAction$ = parent.state$.map(s => s.child.action$).flatten(); + * childActionMimic$.imitate(childAction$); + * ``` + * + * The *imitate* method returns nothing. Instead, it changes the behavior of + * the current stream, making it re-emit whatever events are emitted by the + * given `other` stream. + * + * Note, though, that **`imitate()` does not support MemoryStreams**. If we + * would attempt to imitate a MemoryStream in a circular dependency, we would + * either get a race condition (where the symptom would be "nothing happens") + * or an infinite cyclic emission of values. It's useful to think about + * MemoryStreams as cells in a spreadsheet. It doesn't make any sense to + * define a spreadsheet cell `A1` with a formula that depends on `B1` and + * cell `B1` defined with a formula that depends on `A1`. + * + * If you find yourself wanting to use `imitate()` with a + * MemoryStream, you should rework your code around `imitate()` to use a + * Stream instead. Look for the stream in the circular dependency that + * represents an event stream, and that would be a candidate for creating a + * MimicStream which then imitates the real event stream. + * + * @param {Stream} other The stream to imitate on the current one. Must not be + * a MemoryStream. + */ + MimicStream.prototype.imitate = function (other) { + if (other instanceof MemoryStream) { + throw new Error('A MemoryStream was given to imitate(), but it only ' + + 'supports a Stream. Read more about this restriction here: ' + + 'https://github.com/staltz/xstream#faq'); + } + this._target = other; + }; + return MimicStream; +}(Stream)); +exports.MimicStream = MimicStream; +var MemoryStream = (function (_super) { + __extends(MemoryStream, _super); + function MemoryStream(producer) { + _super.call(this, producer); + this._has = false; + } + MemoryStream.prototype._n = function (x) { + this._v = x; + this._has = true; + _super.prototype._n.call(this, x); + }; + MemoryStream.prototype._add = function (il) { + if (this._has) { + il._n(this._v); + } + _super.prototype._add.call(this, il); + }; + MemoryStream.prototype._x = function () { + this._has = false; + _super.prototype._x.call(this); + }; + MemoryStream.prototype.map = function (project) { + return this._map(project); + }; + MemoryStream.prototype.mapTo = function (projectedValue) { + return _super.prototype.mapTo.call(this, projectedValue); + }; + MemoryStream.prototype.take = function (amount) { + return _super.prototype.take.call(this, amount); + }; + MemoryStream.prototype.endWhen = function (other) { + return _super.prototype.endWhen.call(this, other); + }; + MemoryStream.prototype.replaceError = function (replace) { + return _super.prototype.replaceError.call(this, replace); + }; + MemoryStream.prototype.debug = function (labelOrSpy) { + return _super.prototype.debug.call(this, labelOrSpy); + }; + return MemoryStream; +}(Stream)); +exports.MemoryStream = MemoryStream; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = Stream; + +},{}],81:[function(require,module,exports){ +"use strict"; +var core_1 = require('../core'); +var empty = {}; +var DropRepeatsOperator = (function () { + function DropRepeatsOperator(fn, ins) { + this.fn = fn; + this.ins = ins; + this.type = 'dropRepeats'; + this.out = null; + this.v = empty; + } + DropRepeatsOperator.prototype._start = function (out) { + this.out = out; + this.ins._add(this); + }; + DropRepeatsOperator.prototype._stop = function () { + this.ins._remove(this); + this.out = null; + this.v = empty; + }; + DropRepeatsOperator.prototype.isEq = function (x, y) { + return this.fn ? this.fn(x, y) : x === y; + }; + DropRepeatsOperator.prototype._n = function (t) { + var u = this.out; + if (!u) + return; + var v = this.v; + if (v === empty || !this.isEq(t, v)) { + u._n(t); + } + this.v = t; + }; + DropRepeatsOperator.prototype._e = function (err) { + var u = this.out; + if (!u) + return; + u._e(err); + }; + DropRepeatsOperator.prototype._c = function () { + var u = this.out; + if (!u) + return; + u._c(); + }; + return DropRepeatsOperator; +}()); +exports.DropRepeatsOperator = DropRepeatsOperator; +function dropRepeats(isEqual) { + if (isEqual === void 0) { isEqual = null; } + return function dropRepeatsOperator(ins) { + return new core_1.Stream(new DropRepeatsOperator(isEqual, ins)); + }; +} +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = dropRepeats; + +},{"../core":80}],82:[function(require,module,exports){ +"use strict"; +var core_1 = require('./core'); +exports.Stream = core_1.Stream; +exports.MemoryStream = core_1.MemoryStream; +exports.MimicStream = core_1.MimicStream; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = core_1.Stream; + +},{"./core":80}],83:[function(require,module,exports){ +"use strict"; +var base_1 = require('@cycle/base'); +var xstream_adapter_1 = require('@cycle/xstream-adapter'); +/** + * A function that prepares the Cycle application to be executed. Takes a `main` + * function and prepares to circularly connects it to the given collection of + * driver functions. As an output, `Cycle()` returns an object with three + * properties: `sources`, `sinks` and `run`. Only when `run()` is called will + * the application actually execute. Refer to the documentation of `run()` for + * more details. + * + * **Example:** + * ```js + * const {sources, sinks, run} = Cycle(main, drivers); + * // ... + * const dispose = run(); // Executes the application + * // ... + * dispose(); + * ``` + * + * @param {Function} main a function that takes `sources` as input + * and outputs a collection of `sinks` Observables. + * @param {Object} drivers an object where keys are driver names and values + * are driver functions. + * @return {Object} an object with three properties: `sources`, `sinks` and + * `run`. `sources` is the collection of driver sources, `sinks` is the + * collection of driver sinks, these can be used for debugging or testing. `run` + * is the function that once called will execute the application. + * @function Cycle + */ +var Cycle = function (main, drivers) { + return base_1.default(main, drivers, { streamAdapter: xstream_adapter_1.default }); +}; +/** + * Takes a `main` function and circularly connects it to the given collection + * of driver functions. + * + * **Example:** + * ```js + * const dispose = Cycle.run(main, drivers); + * // ... + * dispose(); + * ``` + * + * The `main` function expects a collection of "source" Observables (returned + * from drivers) as input, and should return a collection of "sink" Observables + * (to be given to drivers). A "collection of Observables" is a JavaScript + * object where keys match the driver names registered by the `drivers` object, + * and values are the Observables. Refer to the documentation of each driver to + * see more details on what types of sources it outputs and sinks it receives. + * + * @param {Function} main a function that takes `sources` as input + * and outputs a collection of `sinks` Observables. + * @param {Object} drivers an object where keys are driver names and values + * are driver functions. + * @return {Function} a dispose function, used to terminate the execution of the + * Cycle.js program, cleaning up resources used. + * @function run + */ +function run(main, drivers) { + var run = base_1.default(main, drivers, { streamAdapter: xstream_adapter_1.default }).run; + return run(); +} +exports.run = run; +Cycle.run = run; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = Cycle; + +},{"@cycle/base":84,"@cycle/xstream-adapter":85}],84:[function(require,module,exports){ +"use strict"; +function logToConsoleError(err) { + var target = err.stack || err; + if (console && console.error) { + console.error(target); + } + else if (console && console.log) { + console.log(target); + } +} +function makeSinkProxies(drivers, streamAdapter) { + var sinkProxies = {}; + for (var name_1 in drivers) { + if (drivers.hasOwnProperty(name_1)) { + var holdSubject = streamAdapter.makeSubject(); + var driverStreamAdapter = drivers[name_1].streamAdapter || streamAdapter; + var stream = driverStreamAdapter.adapt(holdSubject.stream, streamAdapter.streamSubscribe); + sinkProxies[name_1] = { + stream: stream, + observer: holdSubject.observer, + }; + } + } + return sinkProxies; +} +function callDrivers(drivers, sinkProxies, streamAdapter) { + var sources = {}; + for (var name_2 in drivers) { + if (drivers.hasOwnProperty(name_2)) { + var driverOutput = drivers[name_2](sinkProxies[name_2].stream, streamAdapter, name_2); + var driverStreamAdapter = drivers[name_2].streamAdapter; + if (driverStreamAdapter && driverStreamAdapter.isValidStream(driverOutput)) { + sources[name_2] = streamAdapter.adapt(driverOutput, driverStreamAdapter.streamSubscribe); + } + else { + sources[name_2] = driverOutput; + } + } + } + return sources; +} +function replicateMany(sinks, sinkProxies, streamAdapter) { + var results = Object.keys(sinks) + .filter(function (name) { return !!sinkProxies[name]; }) + .map(function (name) { + return streamAdapter.streamSubscribe(sinks[name], { + next: function (x) { sinkProxies[name].observer.next(x); }, + error: function (err) { + logToConsoleError(err); + sinkProxies[name].observer.error(err); + }, + complete: function (x) { + sinkProxies[name].observer.complete(x); + } + }); + }); + var disposeFunctions = results + .filter(function (dispose) { return typeof dispose === 'function'; }); + return function () { + disposeFunctions.forEach(function (dispose) { return dispose(); }); + }; +} +function disposeSources(sources) { + for (var k in sources) { + if (sources.hasOwnProperty(k) && sources[k] + && typeof sources[k].dispose === 'function') { + sources[k].dispose(); + } + } +} +var isObjectEmpty = function (obj) { return Object.keys(obj).length === 0; }; +function Cycle(main, drivers, options) { + if (typeof main !== "function") { + throw new Error("First argument given to Cycle must be the 'main' " + + "function."); + } + if (typeof drivers !== "object" || drivers === null) { + throw new Error("Second argument given to Cycle must be an object " + + "with driver functions as properties."); + } + if (isObjectEmpty(drivers)) { + throw new Error("Second argument given to Cycle must be an object " + + "with at least one driver function declared as a property."); + } + var streamAdapter = options.streamAdapter; + if (!streamAdapter || isObjectEmpty(streamAdapter)) { + throw new Error("Third argument given to Cycle must be an options object " + + "with the streamAdapter key supplied with a valid stream adapter."); + } + var sinkProxies = makeSinkProxies(drivers, streamAdapter); + var sources = callDrivers(drivers, sinkProxies, streamAdapter); + var sinks = main(sources); + if (typeof window !== 'undefined') { + window.Cyclejs = { sinks: sinks }; + } + var run = function () { + var disposeReplication = replicateMany(sinks, sinkProxies, streamAdapter); + return function () { + disposeSources(sources); + disposeReplication(); + }; + }; + return { sinks: sinks, sources: sources, run: run }; +} +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = Cycle; + +},{}],85:[function(require,module,exports){ +arguments[4][20][0].apply(exports,arguments) +},{"dup":20,"xstream":115}],86:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +/** + * Indicates that navigation was caused by a call to history.push. + */ +var PUSH = exports.PUSH = 'PUSH'; + +/** + * Indicates that navigation was caused by a call to history.replace. + */ +var REPLACE = exports.REPLACE = 'REPLACE'; + +/** + * Indicates that navigation was caused by some other action such + * as using a browser's back/forward buttons and/or manually manipulating + * the URL in a browser's location bar. This is the default. + * + * See https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers/onpopstate + * for more information. + */ +var POP = exports.POP = 'POP'; +},{}],87:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } + +var loopAsync = exports.loopAsync = function loopAsync(turns, work, callback) { + var currentTurn = 0, + isDone = false; + var isSync = false, + hasNext = false, + doneArgs = void 0; + + var done = function done() { + for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + isDone = true; + + if (isSync) { + // Iterate instead of recursing if possible. + doneArgs = args; + return; + } + + callback.apply(undefined, args); + }; + + var next = function next() { + if (isDone) return; + + hasNext = true; + + if (isSync) return; // Iterate instead of recursing if possible. + + isSync = true; + + while (!isDone && currentTurn < turns && hasNext) { + hasNext = false; + work(currentTurn++, next, done); + } + + isSync = false; + + if (isDone) { + // This means the loop finished synchronously. + callback.apply(undefined, _toConsumableArray(doneArgs)); + return; + } + + if (currentTurn >= turns && hasNext) { + isDone = true; + callback(); + } + }; + + next(); +}; +},{}],88:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.go = exports.replaceLocation = exports.pushLocation = exports.startListener = exports.getUserConfirmation = exports.getCurrentLocation = undefined; + +var _LocationUtils = require('./LocationUtils'); + +var _DOMUtils = require('./DOMUtils'); + +var _DOMStateStorage = require('./DOMStateStorage'); + +var _PathUtils = require('./PathUtils'); + +/* eslint-disable no-alert */ + + +var PopStateEvent = 'popstate'; + +var _createLocation = function _createLocation(historyState) { + var key = historyState && historyState.key; + + return (0, _LocationUtils.createLocation)({ + pathname: window.location.pathname, + search: window.location.search, + hash: window.location.hash, + state: key ? (0, _DOMStateStorage.readState)(key) : undefined + }, undefined, key); +}; + +var getCurrentLocation = exports.getCurrentLocation = function getCurrentLocation() { + var historyState = void 0; + try { + historyState = window.history.state || {}; + } catch (error) { + // IE 11 sometimes throws when accessing window.history.state + // See https://github.com/mjackson/history/pull/289 + historyState = {}; + } + + return _createLocation(historyState); +}; + +var getUserConfirmation = exports.getUserConfirmation = function getUserConfirmation(message, callback) { + return callback(window.confirm(message)); +}; + +var startListener = exports.startListener = function startListener(listener) { + var handlePopState = function handlePopState(event) { + if (event.state !== undefined) // Ignore extraneous popstate events in WebKit + listener(_createLocation(event.state)); + }; + + (0, _DOMUtils.addEventListener)(window, PopStateEvent, handlePopState); + + return function () { + return (0, _DOMUtils.removeEventListener)(window, PopStateEvent, handlePopState); + }; +}; + +var updateLocation = function updateLocation(location, updateState) { + var state = location.state; + var key = location.key; + + + if (state !== undefined) (0, _DOMStateStorage.saveState)(key, state); + + updateState({ key: key }, (0, _PathUtils.createPath)(location)); +}; + +var pushLocation = exports.pushLocation = function pushLocation(location) { + return updateLocation(location, function (state, path) { + return window.history.pushState(state, null, path); + }); +}; + +var replaceLocation = exports.replaceLocation = function replaceLocation(location) { + return updateLocation(location, function (state, path) { + return window.history.replaceState(state, null, path); + }); +}; + +var go = exports.go = function go(n) { + if (n) window.history.go(n); +}; +},{"./DOMStateStorage":89,"./DOMUtils":90,"./LocationUtils":93,"./PathUtils":94}],89:[function(require,module,exports){ +(function (process){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.readState = exports.saveState = undefined; + +var _warning = require('warning'); + +var _warning2 = _interopRequireDefault(_warning); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var QuotaExceededErrors = ['QuotaExceededError', 'QUOTA_EXCEEDED_ERR']; /* eslint-disable no-empty */ + + +var SecurityError = 'SecurityError'; +var KeyPrefix = '@@History/'; + +var createKey = function createKey(key) { + return KeyPrefix + key; +}; + +var saveState = exports.saveState = function saveState(key, state) { + if (!window.sessionStorage) { + // Session storage is not available or hidden. + // sessionStorage is undefined in Internet Explorer when served via file protocol. + process.env.NODE_ENV !== 'production' ? (0, _warning2.default)(false, '[history] Unable to save state; sessionStorage is not available') : void 0; + return; + } + + try { + if (state == null) { + window.sessionStorage.removeItem(createKey(key)); + } else { + window.sessionStorage.setItem(createKey(key), JSON.stringify(state)); + } + } catch (error) { + if (error.name === SecurityError) { + // Blocking cookies in Chrome/Firefox/Safari throws SecurityError on any + // attempt to access window.sessionStorage. + process.env.NODE_ENV !== 'production' ? (0, _warning2.default)(false, '[history] Unable to save state; sessionStorage is not available due to security settings') : void 0; + + return; + } + + if (QuotaExceededErrors.indexOf(error.name) >= 0 && window.sessionStorage.length === 0) { + // Safari "private mode" throws QuotaExceededError. + process.env.NODE_ENV !== 'production' ? (0, _warning2.default)(false, '[history] Unable to save state; sessionStorage is not available in Safari private mode') : void 0; + + return; + } + + throw error; + } +}; + +var readState = exports.readState = function readState(key) { + var json = void 0; + try { + json = window.sessionStorage.getItem(createKey(key)); + } catch (error) { + if (error.name === SecurityError) { + // Blocking cookies in Chrome/Firefox/Safari throws SecurityError on any + // attempt to access window.sessionStorage. + process.env.NODE_ENV !== 'production' ? (0, _warning2.default)(false, '[history] Unable to read state; sessionStorage is not available due to security settings') : void 0; + + return undefined; + } + } + + if (json) { + try { + return JSON.parse(json); + } catch (error) { + // Ignore invalid JSON. + } + } + + return undefined; +}; +}).call(this,require('_process')) + +},{"_process":110,"warning":109}],90:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +var addEventListener = exports.addEventListener = function addEventListener(node, event, listener) { + return node.addEventListener ? node.addEventListener(event, listener, false) : node.attachEvent('on' + event, listener); +}; + +var removeEventListener = exports.removeEventListener = function removeEventListener(node, event, listener) { + return node.removeEventListener ? node.removeEventListener(event, listener, false) : node.detachEvent('on' + event, listener); +}; + +/** + * Returns true if the HTML5 history API is supported. Taken from Modernizr. + * + * https://github.com/Modernizr/Modernizr/blob/master/LICENSE + * https://github.com/Modernizr/Modernizr/blob/master/feature-detects/history.js + * changed to avoid false negatives for Windows Phones: https://github.com/reactjs/react-router/issues/586 + */ +var supportsHistory = exports.supportsHistory = function supportsHistory() { + var ua = window.navigator.userAgent; + + if ((ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1) && ua.indexOf('Mobile Safari') !== -1 && ua.indexOf('Chrome') === -1 && ua.indexOf('Windows Phone') === -1) return false; + + return window.history && 'pushState' in window.history; +}; + +/** + * Returns false if using go(n) with hash history causes a full page reload. + */ +var supportsGoWithoutReloadUsingHash = exports.supportsGoWithoutReloadUsingHash = function supportsGoWithoutReloadUsingHash() { + return window.navigator.userAgent.indexOf('Firefox') === -1; +}; +},{}],91:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +var canUseDOM = exports.canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement); +},{}],92:[function(require,module,exports){ +(function (process){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.replaceLocation = exports.pushLocation = exports.startListener = exports.getCurrentLocation = exports.go = exports.getUserConfirmation = undefined; + +var _BrowserProtocol = require('./BrowserProtocol'); + +Object.defineProperty(exports, 'getUserConfirmation', { + enumerable: true, + get: function get() { + return _BrowserProtocol.getUserConfirmation; + } +}); +Object.defineProperty(exports, 'go', { + enumerable: true, + get: function get() { + return _BrowserProtocol.go; + } +}); + +var _warning = require('warning'); + +var _warning2 = _interopRequireDefault(_warning); + +var _LocationUtils = require('./LocationUtils'); + +var _DOMUtils = require('./DOMUtils'); + +var _DOMStateStorage = require('./DOMStateStorage'); + +var _PathUtils = require('./PathUtils'); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var HashChangeEvent = 'hashchange'; + +var getHashPath = function getHashPath() { + // We can't use window.location.hash here because it's not + // consistent across browsers - Firefox will pre-decode it! + var href = window.location.href; + var index = href.indexOf('#'); + return index === -1 ? '' : href.substring(index + 1); +}; + +var pushHashPath = function pushHashPath(path) { + return window.location.hash = path; +}; + +var replaceHashPath = function replaceHashPath(path) { + var i = window.location.href.indexOf('#'); + + window.location.replace(window.location.href.slice(0, i >= 0 ? i : 0) + '#' + path); +}; + +var ensureSlash = function ensureSlash() { + var path = getHashPath(); + + if ((0, _PathUtils.isAbsolutePath)(path)) return true; + + replaceHashPath('/' + path); + + return false; +}; + +var getCurrentLocation = exports.getCurrentLocation = function getCurrentLocation(queryKey) { + var path = getHashPath(); + var key = (0, _PathUtils.getQueryStringValueFromPath)(path, queryKey); + + var state = void 0; + if (key) { + path = (0, _PathUtils.stripQueryStringValueFromPath)(path, queryKey); + state = (0, _DOMStateStorage.readState)(key); + } + + var init = (0, _PathUtils.parsePath)(path); + init.state = state; + + return (0, _LocationUtils.createLocation)(init, undefined, key); +}; + +var prevLocation = void 0; + +var startListener = exports.startListener = function startListener(listener, queryKey) { + var handleHashChange = function handleHashChange() { + if (!ensureSlash()) return; // Hash path must always begin with a / + + var currentLocation = getCurrentLocation(queryKey); + + if (prevLocation && currentLocation.key && prevLocation.key === currentLocation.key) return; // Ignore extraneous hashchange events + + prevLocation = currentLocation; + + listener(currentLocation); + }; + + ensureSlash(); + (0, _DOMUtils.addEventListener)(window, HashChangeEvent, handleHashChange); + + return function () { + return (0, _DOMUtils.removeEventListener)(window, HashChangeEvent, handleHashChange); + }; +}; + +var updateLocation = function updateLocation(location, queryKey, updateHash) { + var state = location.state; + var key = location.key; + + var path = (0, _PathUtils.createPath)(location); + + if (state !== undefined) { + path = (0, _PathUtils.addQueryStringValueToPath)(path, queryKey, key); + (0, _DOMStateStorage.saveState)(key, state); + } + + prevLocation = location; + + updateHash(path); +}; + +var pushLocation = exports.pushLocation = function pushLocation(location, queryKey) { + return updateLocation(location, queryKey, function (path) { + if (getHashPath() !== path) { + pushHashPath(path); + } else { + process.env.NODE_ENV !== 'production' ? (0, _warning2.default)(false, 'You cannot PUSH the same path using hash history') : void 0; + } + }); +}; + +var replaceLocation = exports.replaceLocation = function replaceLocation(location, queryKey) { + return updateLocation(location, queryKey, function (path) { + if (getHashPath() !== path) replaceHashPath(path); + }); +}; +}).call(this,require('_process')) + +},{"./BrowserProtocol":88,"./DOMStateStorage":89,"./DOMUtils":90,"./LocationUtils":93,"./PathUtils":94,"_process":110,"warning":109}],93:[function(require,module,exports){ +(function (process){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.locationsAreEqual = exports.statesAreEqual = exports.createLocation = exports.createQuery = undefined; + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; + +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + +var _invariant = require('invariant'); + +var _invariant2 = _interopRequireDefault(_invariant); + +var _PathUtils = require('./PathUtils'); + +var _Actions = require('./Actions'); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var createQuery = exports.createQuery = function createQuery(props) { + return _extends(Object.create(null), props); +}; + +var createLocation = exports.createLocation = function createLocation() { + var input = arguments.length <= 0 || arguments[0] === undefined ? '/' : arguments[0]; + var action = arguments.length <= 1 || arguments[1] === undefined ? _Actions.POP : arguments[1]; + var key = arguments.length <= 2 || arguments[2] === undefined ? null : arguments[2]; + + var object = typeof input === 'string' ? (0, _PathUtils.parsePath)(input) : input; + + var pathname = object.pathname || '/'; + var search = object.search || ''; + var hash = object.hash || ''; + var state = object.state; + + return { + pathname: pathname, + search: search, + hash: hash, + state: state, + action: action, + key: key + }; +}; + +var isDate = function isDate(object) { + return Object.prototype.toString.call(object) === '[object Date]'; +}; + +var statesAreEqual = exports.statesAreEqual = function statesAreEqual(a, b) { + if (a === b) return true; + + var typeofA = typeof a === 'undefined' ? 'undefined' : _typeof(a); + var typeofB = typeof b === 'undefined' ? 'undefined' : _typeof(b); + + if (typeofA !== typeofB) return false; + + !(typeofA !== 'function') ? process.env.NODE_ENV !== 'production' ? (0, _invariant2.default)(false, 'You must not store functions in location state') : (0, _invariant2.default)(false) : void 0; + + // Not the same object, but same type. + if (typeofA === 'object') { + !!(isDate(a) && isDate(b)) ? process.env.NODE_ENV !== 'production' ? (0, _invariant2.default)(false, 'You must not store Date objects in location state') : (0, _invariant2.default)(false) : void 0; + + if (!Array.isArray(a)) return Object.keys(a).every(function (key) { + return statesAreEqual(a[key], b[key]); + }); + + return Array.isArray(b) && a.length === b.length && a.every(function (item, index) { + return statesAreEqual(item, b[index]); + }); + } + + // All other serializable types (string, number, boolean) + // should be strict equal. + return false; +}; + +var locationsAreEqual = exports.locationsAreEqual = function locationsAreEqual(a, b) { + return a.key === b.key && + // a.action === b.action && // Different action !== location change. + a.pathname === b.pathname && a.search === b.search && a.hash === b.hash && statesAreEqual(a.state, b.state); +}; +}).call(this,require('_process')) + +},{"./Actions":86,"./PathUtils":94,"_process":110,"invariant":105}],94:[function(require,module,exports){ +(function (process){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.createPath = exports.parsePath = exports.getQueryStringValueFromPath = exports.stripQueryStringValueFromPath = exports.addQueryStringValueToPath = exports.isAbsolutePath = undefined; + +var _warning = require('warning'); + +var _warning2 = _interopRequireDefault(_warning); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var isAbsolutePath = exports.isAbsolutePath = function isAbsolutePath(path) { + return typeof path === 'string' && path.charAt(0) === '/'; +}; + +var addQueryStringValueToPath = exports.addQueryStringValueToPath = function addQueryStringValueToPath(path, key, value) { + var _parsePath = parsePath(path); + + var pathname = _parsePath.pathname; + var search = _parsePath.search; + var hash = _parsePath.hash; + + + return createPath({ + pathname: pathname, + search: search + (search.indexOf('?') === -1 ? '?' : '&') + key + '=' + value, + hash: hash + }); +}; + +var stripQueryStringValueFromPath = exports.stripQueryStringValueFromPath = function stripQueryStringValueFromPath(path, key) { + var _parsePath2 = parsePath(path); + + var pathname = _parsePath2.pathname; + var search = _parsePath2.search; + var hash = _parsePath2.hash; + + + return createPath({ + pathname: pathname, + search: search.replace(new RegExp('([?&])' + key + '=[a-zA-Z0-9]+(&?)'), function (match, prefix, suffix) { + return prefix === '?' ? prefix : suffix; + }), + hash: hash + }); +}; + +var getQueryStringValueFromPath = exports.getQueryStringValueFromPath = function getQueryStringValueFromPath(path, key) { + var _parsePath3 = parsePath(path); + + var search = _parsePath3.search; + + var match = search.match(new RegExp('[?&]' + key + '=([a-zA-Z0-9]+)')); + return match && match[1]; +}; + +var extractPath = function extractPath(string) { + var match = string.match(/^(https?:)?\/\/[^\/]*/); + return match == null ? string : string.substring(match[0].length); +}; + +var parsePath = exports.parsePath = function parsePath(path) { + var pathname = extractPath(path); + var search = ''; + var hash = ''; + + process.env.NODE_ENV !== 'production' ? (0, _warning2.default)(path === pathname, 'A path must be pathname + search + hash only, not a full URL like "%s"', path) : void 0; + + var hashIndex = pathname.indexOf('#'); + if (hashIndex !== -1) { + hash = pathname.substring(hashIndex); + pathname = pathname.substring(0, hashIndex); + } + + var searchIndex = pathname.indexOf('?'); + if (searchIndex !== -1) { + search = pathname.substring(searchIndex); + pathname = pathname.substring(0, searchIndex); + } + + if (pathname === '') pathname = '/'; + + return { + pathname: pathname, + search: search, + hash: hash + }; +}; + +var createPath = exports.createPath = function createPath(location) { + if (location == null || typeof location === 'string') return location; + + var basename = location.basename; + var pathname = location.pathname; + var search = location.search; + var hash = location.hash; + + var path = (basename || '') + pathname; + + if (search && search !== '?') path += search; + + if (hash) path += hash; + + return path; +}; +}).call(this,require('_process')) + +},{"_process":110,"warning":109}],95:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.replaceLocation = exports.pushLocation = exports.getCurrentLocation = exports.go = exports.getUserConfirmation = undefined; + +var _BrowserProtocol = require('./BrowserProtocol'); + +Object.defineProperty(exports, 'getUserConfirmation', { + enumerable: true, + get: function get() { + return _BrowserProtocol.getUserConfirmation; + } +}); +Object.defineProperty(exports, 'go', { + enumerable: true, + get: function get() { + return _BrowserProtocol.go; + } +}); + +var _LocationUtils = require('./LocationUtils'); + +var _PathUtils = require('./PathUtils'); + +var getCurrentLocation = exports.getCurrentLocation = function getCurrentLocation() { + return (0, _LocationUtils.createLocation)(window.location); +}; + +var pushLocation = exports.pushLocation = function pushLocation(location) { + window.location.href = (0, _PathUtils.createPath)(location); + return false; // Don't update location +}; + +var replaceLocation = exports.replaceLocation = function replaceLocation(location) { + window.location.replace((0, _PathUtils.createPath)(location)); + return false; // Don't update location +}; +},{"./BrowserProtocol":88,"./LocationUtils":93,"./PathUtils":94}],96:[function(require,module,exports){ +(function (process){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + +var _invariant = require('invariant'); + +var _invariant2 = _interopRequireDefault(_invariant); + +var _ExecutionEnvironment = require('./ExecutionEnvironment'); + +var _BrowserProtocol = require('./BrowserProtocol'); + +var BrowserProtocol = _interopRequireWildcard(_BrowserProtocol); + +var _RefreshProtocol = require('./RefreshProtocol'); + +var RefreshProtocol = _interopRequireWildcard(_RefreshProtocol); + +var _DOMUtils = require('./DOMUtils'); + +var _createHistory = require('./createHistory'); + +var _createHistory2 = _interopRequireDefault(_createHistory); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Creates and returns a history object that uses HTML5's history API + * (pushState, replaceState, and the popstate event) to manage history. + * This is the recommended method of managing history in browsers because + * it provides the cleanest URLs. + * + * Note: In browsers that do not support the HTML5 history API full + * page reloads will be used to preserve clean URLs. You can force this + * behavior using { forceRefresh: true } in options. + */ +var createBrowserHistory = function createBrowserHistory() { + var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0]; + + !_ExecutionEnvironment.canUseDOM ? process.env.NODE_ENV !== 'production' ? (0, _invariant2.default)(false, 'Browser history needs a DOM') : (0, _invariant2.default)(false) : void 0; + + var useRefresh = options.forceRefresh || !(0, _DOMUtils.supportsHistory)(); + var Protocol = useRefresh ? RefreshProtocol : BrowserProtocol; + + var getUserConfirmation = Protocol.getUserConfirmation; + var getCurrentLocation = Protocol.getCurrentLocation; + var pushLocation = Protocol.pushLocation; + var replaceLocation = Protocol.replaceLocation; + var go = Protocol.go; + + + var history = (0, _createHistory2.default)(_extends({ + getUserConfirmation: getUserConfirmation }, options, { + getCurrentLocation: getCurrentLocation, + pushLocation: pushLocation, + replaceLocation: replaceLocation, + go: go + })); + + var listenerCount = 0, + stopListener = void 0; + + var startListener = function startListener(listener, before) { + if (++listenerCount === 1) stopListener = BrowserProtocol.startListener(history.transitionTo); + + var unlisten = before ? history.listenBefore(listener) : history.listen(listener); + + return function () { + unlisten(); + + if (--listenerCount === 0) stopListener(); + }; + }; + + var listenBefore = function listenBefore(listener) { + return startListener(listener, true); + }; + + var listen = function listen(listener) { + return startListener(listener, false); + }; + + return _extends({}, history, { + listenBefore: listenBefore, + listen: listen + }); +}; + +exports.default = createBrowserHistory; +}).call(this,require('_process')) + +},{"./BrowserProtocol":88,"./DOMUtils":90,"./ExecutionEnvironment":91,"./RefreshProtocol":95,"./createHistory":98,"_process":110,"invariant":105}],97:[function(require,module,exports){ +(function (process){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + +var _warning = require('warning'); + +var _warning2 = _interopRequireDefault(_warning); + +var _invariant = require('invariant'); + +var _invariant2 = _interopRequireDefault(_invariant); + +var _ExecutionEnvironment = require('./ExecutionEnvironment'); + +var _DOMUtils = require('./DOMUtils'); + +var _HashProtocol = require('./HashProtocol'); + +var HashProtocol = _interopRequireWildcard(_HashProtocol); + +var _createHistory = require('./createHistory'); + +var _createHistory2 = _interopRequireDefault(_createHistory); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var DefaultQueryKey = '_k'; + +var createHashHistory = function createHashHistory() { + var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0]; + + !_ExecutionEnvironment.canUseDOM ? process.env.NODE_ENV !== 'production' ? (0, _invariant2.default)(false, 'Hash history needs a DOM') : (0, _invariant2.default)(false) : void 0; + + var queryKey = options.queryKey; + + + process.env.NODE_ENV !== 'production' ? (0, _warning2.default)(queryKey !== false, 'Using { queryKey: false } no longer works. Instead, just don\'t ' + 'use location state if you don\'t want a key in your URL query string') : void 0; + + if (typeof queryKey !== 'string') queryKey = DefaultQueryKey; + + var getUserConfirmation = HashProtocol.getUserConfirmation; + + + var getCurrentLocation = function getCurrentLocation() { + return HashProtocol.getCurrentLocation(queryKey); + }; + + var pushLocation = function pushLocation(location) { + return HashProtocol.pushLocation(location, queryKey); + }; + + var replaceLocation = function replaceLocation(location) { + return HashProtocol.replaceLocation(location, queryKey); + }; + + var history = (0, _createHistory2.default)(_extends({ + getUserConfirmation: getUserConfirmation }, options, { + getCurrentLocation: getCurrentLocation, + pushLocation: pushLocation, + replaceLocation: replaceLocation, + go: HashProtocol.go + })); + + var listenerCount = 0, + stopListener = void 0; + + var startListener = function startListener(listener, before) { + if (++listenerCount === 1) stopListener = HashProtocol.startListener(history.transitionTo, queryKey); + + var unlisten = before ? history.listenBefore(listener) : history.listen(listener); + + return function () { + unlisten(); + + if (--listenerCount === 0) stopListener(); + }; + }; + + var listenBefore = function listenBefore(listener) { + return startListener(listener, true); + }; + + var listen = function listen(listener) { + return startListener(listener, false); + }; + + var goIsSupportedWithoutReload = (0, _DOMUtils.supportsGoWithoutReloadUsingHash)(); + + var go = function go(n) { + process.env.NODE_ENV !== 'production' ? (0, _warning2.default)(goIsSupportedWithoutReload, 'Hash history go(n) causes a full page reload in this browser') : void 0; + + history.go(n); + }; + + var createHref = function createHref(path) { + return '#' + history.createHref(path); + }; + + return _extends({}, history, { + listenBefore: listenBefore, + listen: listen, + go: go, + createHref: createHref + }); +}; + +exports.default = createHashHistory; +}).call(this,require('_process')) + +},{"./DOMUtils":90,"./ExecutionEnvironment":91,"./HashProtocol":92,"./createHistory":98,"_process":110,"invariant":105,"warning":109}],98:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _AsyncUtils = require('./AsyncUtils'); + +var _PathUtils = require('./PathUtils'); + +var _runTransitionHook = require('./runTransitionHook'); + +var _runTransitionHook2 = _interopRequireDefault(_runTransitionHook); + +var _Actions = require('./Actions'); + +var _LocationUtils = require('./LocationUtils'); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } + +var createHistory = function createHistory() { + var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0]; + var getCurrentLocation = options.getCurrentLocation; + var getUserConfirmation = options.getUserConfirmation; + var pushLocation = options.pushLocation; + var replaceLocation = options.replaceLocation; + var go = options.go; + var keyLength = options.keyLength; + + + var currentLocation = void 0; + var pendingLocation = void 0; + var beforeListeners = []; + var listeners = []; + var allKeys = []; + + var getCurrentIndex = function getCurrentIndex() { + if (pendingLocation && pendingLocation.action === _Actions.POP) return allKeys.indexOf(pendingLocation.key); + + if (currentLocation) return allKeys.indexOf(currentLocation.key); + + return -1; + }; + + var updateLocation = function updateLocation(nextLocation) { + currentLocation = nextLocation; + + var currentIndex = getCurrentIndex(); + + if (currentLocation.action === _Actions.PUSH) { + allKeys = [].concat(_toConsumableArray(allKeys.slice(0, currentIndex + 1)), [currentLocation.key]); + } else if (currentLocation.action === _Actions.REPLACE) { + allKeys[currentIndex] = currentLocation.key; + } + + listeners.forEach(function (listener) { + return listener(currentLocation); + }); + }; + + var listenBefore = function listenBefore(listener) { + beforeListeners.push(listener); + + return function () { + return beforeListeners = beforeListeners.filter(function (item) { + return item !== listener; + }); + }; + }; + + var listen = function listen(listener) { + listeners.push(listener); + + return function () { + return listeners = listeners.filter(function (item) { + return item !== listener; + }); + }; + }; + + var confirmTransitionTo = function confirmTransitionTo(location, callback) { + (0, _AsyncUtils.loopAsync)(beforeListeners.length, function (index, next, done) { + (0, _runTransitionHook2.default)(beforeListeners[index], location, function (result) { + return result != null ? done(result) : next(); + }); + }, function (message) { + if (getUserConfirmation && typeof message === 'string') { + getUserConfirmation(message, function (ok) { + return callback(ok !== false); + }); + } else { + callback(message !== false); + } + }); + }; + + var transitionTo = function transitionTo(nextLocation) { + if (currentLocation && (0, _LocationUtils.locationsAreEqual)(currentLocation, nextLocation) || pendingLocation && (0, _LocationUtils.locationsAreEqual)(pendingLocation, nextLocation)) return; // Nothing to do + + pendingLocation = nextLocation; + + confirmTransitionTo(nextLocation, function (ok) { + if (pendingLocation !== nextLocation) return; // Transition was interrupted during confirmation + + pendingLocation = null; + + if (ok) { + // Treat PUSH to same path like REPLACE to be consistent with browsers + if (nextLocation.action === _Actions.PUSH) { + var prevPath = (0, _PathUtils.createPath)(currentLocation); + var nextPath = (0, _PathUtils.createPath)(nextLocation); + + if (nextPath === prevPath && (0, _LocationUtils.statesAreEqual)(currentLocation.state, nextLocation.state)) nextLocation.action = _Actions.REPLACE; + } + + if (nextLocation.action === _Actions.POP) { + updateLocation(nextLocation); + } else if (nextLocation.action === _Actions.PUSH) { + if (pushLocation(nextLocation) !== false) updateLocation(nextLocation); + } else if (nextLocation.action === _Actions.REPLACE) { + if (replaceLocation(nextLocation) !== false) updateLocation(nextLocation); + } + } else if (currentLocation && nextLocation.action === _Actions.POP) { + var prevIndex = allKeys.indexOf(currentLocation.key); + var nextIndex = allKeys.indexOf(nextLocation.key); + + if (prevIndex !== -1 && nextIndex !== -1) go(prevIndex - nextIndex); // Restore the URL + } + }); + }; + + var push = function push(input) { + return transitionTo(createLocation(input, _Actions.PUSH)); + }; + + var replace = function replace(input) { + return transitionTo(createLocation(input, _Actions.REPLACE)); + }; + + var goBack = function goBack() { + return go(-1); + }; + + var goForward = function goForward() { + return go(1); + }; + + var createKey = function createKey() { + return Math.random().toString(36).substr(2, keyLength || 6); + }; + + var createHref = function createHref(location) { + return (0, _PathUtils.createPath)(location); + }; + + var createLocation = function createLocation(location, action) { + var key = arguments.length <= 2 || arguments[2] === undefined ? createKey() : arguments[2]; + return (0, _LocationUtils.createLocation)(location, action, key); + }; + + return { + getCurrentLocation: getCurrentLocation, + listenBefore: listenBefore, + listen: listen, + transitionTo: transitionTo, + push: push, + replace: replace, + go: go, + goBack: goBack, + goForward: goForward, + createKey: createKey, + createPath: _PathUtils.createPath, + createHref: createHref, + createLocation: createLocation + }; +}; + +exports.default = createHistory; +},{"./Actions":86,"./AsyncUtils":87,"./LocationUtils":93,"./PathUtils":94,"./runTransitionHook":101}],99:[function(require,module,exports){ +(function (process){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + +var _warning = require('warning'); + +var _warning2 = _interopRequireDefault(_warning); + +var _invariant = require('invariant'); + +var _invariant2 = _interopRequireDefault(_invariant); + +var _LocationUtils = require('./LocationUtils'); + +var _PathUtils = require('./PathUtils'); + +var _createHistory = require('./createHistory'); + +var _createHistory2 = _interopRequireDefault(_createHistory); + +var _Actions = require('./Actions'); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var createStateStorage = function createStateStorage(entries) { + return entries.filter(function (entry) { + return entry.state; + }).reduce(function (memo, entry) { + memo[entry.key] = entry.state; + return memo; + }, {}); +}; + +var createMemoryHistory = function createMemoryHistory() { + var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0]; + + if (Array.isArray(options)) { + options = { entries: options }; + } else if (typeof options === 'string') { + options = { entries: [options] }; + } + + var getCurrentLocation = function getCurrentLocation() { + var entry = entries[current]; + var path = (0, _PathUtils.createPath)(entry); + + var key = void 0, + state = void 0; + if (entry.key) { + key = entry.key; + state = readState(key); + } + + var init = (0, _PathUtils.parsePath)(path); + + return (0, _LocationUtils.createLocation)(_extends({}, init, { state: state }), undefined, key); + }; + + var canGo = function canGo(n) { + var index = current + n; + return index >= 0 && index < entries.length; + }; + + var go = function go(n) { + if (!n) return; + + if (!canGo(n)) { + process.env.NODE_ENV !== 'production' ? (0, _warning2.default)(false, 'Cannot go(%s) there is not enough history', n) : void 0; + + return; + } + + current += n; + var currentLocation = getCurrentLocation(); + + // Change action to POP + history.transitionTo(_extends({}, currentLocation, { action: _Actions.POP })); + }; + + var pushLocation = function pushLocation(location) { + current += 1; + + if (current < entries.length) entries.splice(current); + + entries.push(location); + + saveState(location.key, location.state); + }; + + var replaceLocation = function replaceLocation(location) { + entries[current] = location; + saveState(location.key, location.state); + }; + + var history = (0, _createHistory2.default)(_extends({}, options, { + getCurrentLocation: getCurrentLocation, + pushLocation: pushLocation, + replaceLocation: replaceLocation, + go: go + })); + + var _options = options; + var entries = _options.entries; + var current = _options.current; + + + if (typeof entries === 'string') { + entries = [entries]; + } else if (!Array.isArray(entries)) { + entries = ['/']; + } + + entries = entries.map(function (entry) { + return (0, _LocationUtils.createLocation)(entry); + }); + + if (current == null) { + current = entries.length - 1; + } else { + !(current >= 0 && current < entries.length) ? process.env.NODE_ENV !== 'production' ? (0, _invariant2.default)(false, 'Current index must be >= 0 and < %s, was %s', entries.length, current) : (0, _invariant2.default)(false) : void 0; + } + + var storage = createStateStorage(entries); + + var saveState = function saveState(key, state) { + return storage[key] = state; + }; + + var readState = function readState(key) { + return storage[key]; + }; + + return history; +}; + +exports.default = createMemoryHistory; +}).call(this,require('_process')) + +},{"./Actions":86,"./LocationUtils":93,"./PathUtils":94,"./createHistory":98,"_process":110,"invariant":105,"warning":109}],100:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.locationsAreEqual = exports.Actions = exports.useQueries = exports.useBeforeUnload = exports.useBasename = exports.createMemoryHistory = exports.createHashHistory = exports.createHistory = undefined; + +var _LocationUtils = require('./LocationUtils'); + +Object.defineProperty(exports, 'locationsAreEqual', { + enumerable: true, + get: function get() { + return _LocationUtils.locationsAreEqual; + } +}); + +var _createBrowserHistory = require('./createBrowserHistory'); + +var _createBrowserHistory2 = _interopRequireDefault(_createBrowserHistory); + +var _createHashHistory2 = require('./createHashHistory'); + +var _createHashHistory3 = _interopRequireDefault(_createHashHistory2); + +var _createMemoryHistory2 = require('./createMemoryHistory'); + +var _createMemoryHistory3 = _interopRequireDefault(_createMemoryHistory2); + +var _useBasename2 = require('./useBasename'); + +var _useBasename3 = _interopRequireDefault(_useBasename2); + +var _useBeforeUnload2 = require('./useBeforeUnload'); + +var _useBeforeUnload3 = _interopRequireDefault(_useBeforeUnload2); + +var _useQueries2 = require('./useQueries'); + +var _useQueries3 = _interopRequireDefault(_useQueries2); + +var _Actions2 = require('./Actions'); + +var _Actions3 = _interopRequireDefault(_Actions2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +exports.createHistory = _createBrowserHistory2.default; +exports.createHashHistory = _createHashHistory3.default; +exports.createMemoryHistory = _createMemoryHistory3.default; +exports.useBasename = _useBasename3.default; +exports.useBeforeUnload = _useBeforeUnload3.default; +exports.useQueries = _useQueries3.default; +exports.Actions = _Actions3.default; +},{"./Actions":86,"./LocationUtils":93,"./createBrowserHistory":96,"./createHashHistory":97,"./createMemoryHistory":99,"./useBasename":102,"./useBeforeUnload":103,"./useQueries":104}],101:[function(require,module,exports){ +(function (process){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _warning = require('warning'); + +var _warning2 = _interopRequireDefault(_warning); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var runTransitionHook = function runTransitionHook(hook, location, callback) { + var result = hook(location, callback); + + if (hook.length < 2) { + // Assume the hook runs synchronously and automatically + // call the callback with the return value. + callback(result); + } else { + process.env.NODE_ENV !== 'production' ? (0, _warning2.default)(result === undefined, 'You should not "return" in a transition hook with a callback argument; ' + 'call the callback instead') : void 0; + } +}; + +exports.default = runTransitionHook; +}).call(this,require('_process')) + +},{"_process":110,"warning":109}],102:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + +var _runTransitionHook = require('./runTransitionHook'); + +var _runTransitionHook2 = _interopRequireDefault(_runTransitionHook); + +var _PathUtils = require('./PathUtils'); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var useBasename = function useBasename(createHistory) { + return function () { + var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0]; + + var history = createHistory(options); + var basename = options.basename; + + + var addBasename = function addBasename(location) { + if (!location) return location; + + if (basename && location.basename == null) { + if (location.pathname.indexOf(basename) === 0) { + location.pathname = location.pathname.substring(basename.length); + location.basename = basename; + + if (location.pathname === '') location.pathname = '/'; + } else { + location.basename = ''; + } + } + + return location; + }; + + var prependBasename = function prependBasename(location) { + if (!basename) return location; + + var object = typeof location === 'string' ? (0, _PathUtils.parsePath)(location) : location; + var pname = object.pathname; + var normalizedBasename = basename.slice(-1) === '/' ? basename : basename + '/'; + var normalizedPathname = pname.charAt(0) === '/' ? pname.slice(1) : pname; + var pathname = normalizedBasename + normalizedPathname; + + return _extends({}, location, { + pathname: pathname + }); + }; + + // Override all read methods with basename-aware versions. + var getCurrentLocation = function getCurrentLocation() { + return addBasename(history.getCurrentLocation()); + }; + + var listenBefore = function listenBefore(hook) { + return history.listenBefore(function (location, callback) { + return (0, _runTransitionHook2.default)(hook, addBasename(location), callback); + }); + }; + + var listen = function listen(listener) { + return history.listen(function (location) { + return listener(addBasename(location)); + }); + }; + + // Override all write methods with basename-aware versions. + var push = function push(location) { + return history.push(prependBasename(location)); + }; + + var replace = function replace(location) { + return history.replace(prependBasename(location)); + }; + + var createPath = function createPath(location) { + return history.createPath(prependBasename(location)); + }; + + var createHref = function createHref(location) { + return history.createHref(prependBasename(location)); + }; + + var createLocation = function createLocation(location) { + for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + args[_key - 1] = arguments[_key]; + } + + return addBasename(history.createLocation.apply(history, [prependBasename(location)].concat(args))); + }; + + return _extends({}, history, { + getCurrentLocation: getCurrentLocation, + listenBefore: listenBefore, + listen: listen, + push: push, + replace: replace, + createPath: createPath, + createHref: createHref, + createLocation: createLocation + }); + }; +}; + +exports.default = useBasename; +},{"./PathUtils":94,"./runTransitionHook":101}],103:[function(require,module,exports){ +(function (process){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + +var _invariant = require('invariant'); + +var _invariant2 = _interopRequireDefault(_invariant); + +var _DOMUtils = require('./DOMUtils'); + +var _ExecutionEnvironment = require('./ExecutionEnvironment'); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var startListener = function startListener(getPromptMessage) { + var handleBeforeUnload = function handleBeforeUnload(event) { + var message = getPromptMessage(); + + if (typeof message === 'string') { + (event || window.event).returnValue = message; + return message; + } + + return undefined; + }; + + (0, _DOMUtils.addEventListener)(window, 'beforeunload', handleBeforeUnload); + + return function () { + return (0, _DOMUtils.removeEventListener)(window, 'beforeunload', handleBeforeUnload); + }; +}; + +/** + * Returns a new createHistory function that can be used to create + * history objects that know how to use the beforeunload event in web + * browsers to cancel navigation. + */ +var useBeforeUnload = function useBeforeUnload(createHistory) { + !_ExecutionEnvironment.canUseDOM ? process.env.NODE_ENV !== 'production' ? (0, _invariant2.default)(false, 'useBeforeUnload only works in DOM environments') : (0, _invariant2.default)(false) : void 0; + + return function (options) { + var history = createHistory(options); + + var listeners = []; + var stopListener = void 0; + + var getPromptMessage = function getPromptMessage() { + var message = void 0; + for (var i = 0, len = listeners.length; message == null && i < len; ++i) { + message = listeners[i].call(); + }return message; + }; + + var listenBeforeUnload = function listenBeforeUnload(listener) { + if (listeners.push(listener) === 1) stopListener = startListener(getPromptMessage); + + return function () { + listeners = listeners.filter(function (item) { + return item !== listener; + }); + + if (listeners.length === 0 && stopListener) { + stopListener(); + stopListener = null; + } + }; + }; + + return _extends({}, history, { + listenBeforeUnload: listenBeforeUnload + }); + }; +}; + +exports.default = useBeforeUnload; +}).call(this,require('_process')) + +},{"./DOMUtils":90,"./ExecutionEnvironment":91,"_process":110,"invariant":105}],104:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + +var _queryString = require('query-string'); + +var _runTransitionHook = require('./runTransitionHook'); + +var _runTransitionHook2 = _interopRequireDefault(_runTransitionHook); + +var _LocationUtils = require('./LocationUtils'); + +var _PathUtils = require('./PathUtils'); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var defaultStringifyQuery = function defaultStringifyQuery(query) { + return (0, _queryString.stringify)(query).replace(/%20/g, '+'); +}; + +var defaultParseQueryString = _queryString.parse; + +/** + * Returns a new createHistory function that may be used to create + * history objects that know how to handle URL queries. + */ +var useQueries = function useQueries(createHistory) { + return function () { + var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0]; + + var history = createHistory(options); + var stringifyQuery = options.stringifyQuery; + var parseQueryString = options.parseQueryString; + + + if (typeof stringifyQuery !== 'function') stringifyQuery = defaultStringifyQuery; + + if (typeof parseQueryString !== 'function') parseQueryString = defaultParseQueryString; + + var decodeQuery = function decodeQuery(location) { + if (!location) return location; + + if (location.query == null) location.query = parseQueryString(location.search.substring(1)); + + return location; + }; + + var encodeQuery = function encodeQuery(location, query) { + if (query == null) return location; + + var object = typeof location === 'string' ? (0, _PathUtils.parsePath)(location) : location; + var queryString = stringifyQuery(query); + var search = queryString ? '?' + queryString : ''; + + return _extends({}, object, { + search: search + }); + }; + + // Override all read methods with query-aware versions. + var getCurrentLocation = function getCurrentLocation() { + return decodeQuery(history.getCurrentLocation()); + }; + + var listenBefore = function listenBefore(hook) { + return history.listenBefore(function (location, callback) { + return (0, _runTransitionHook2.default)(hook, decodeQuery(location), callback); + }); + }; + + var listen = function listen(listener) { + return history.listen(function (location) { + return listener(decodeQuery(location)); + }); + }; + + // Override all write methods with query-aware versions. + var push = function push(location) { + return history.push(encodeQuery(location, location.query)); + }; + + var replace = function replace(location) { + return history.replace(encodeQuery(location, location.query)); + }; + + var createPath = function createPath(location) { + return history.createPath(encodeQuery(location, location.query)); + }; + + var createHref = function createHref(location) { + return history.createHref(encodeQuery(location, location.query)); + }; + + var createLocation = function createLocation(location) { + for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + args[_key - 1] = arguments[_key]; + } + + var newLocation = history.createLocation.apply(history, [encodeQuery(location, location.query)].concat(args)); + + if (location.query) newLocation.query = (0, _LocationUtils.createQuery)(location.query); + + return decodeQuery(newLocation); + }; + + return _extends({}, history, { + getCurrentLocation: getCurrentLocation, + listenBefore: listenBefore, + listen: listen, + push: push, + replace: replace, + createPath: createPath, + createHref: createHref, + createLocation: createLocation + }); + }; +}; + +exports.default = useQueries; +},{"./LocationUtils":93,"./PathUtils":94,"./runTransitionHook":101,"query-string":106}],105:[function(require,module,exports){ +(function (process){ +/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +'use strict'; + +/** + * Use invariant() to assert state which your program assumes to be true. + * + * Provide sprintf-style format (only %s is supported) and arguments + * to provide information about what broke and what you were + * expecting. + * + * The invariant message will be stripped in production, but the invariant + * will remain to ensure logic does not differ in production. + */ + +var invariant = function(condition, format, a, b, c, d, e, f) { + if (process.env.NODE_ENV !== 'production') { + if (format === undefined) { + throw new Error('invariant requires an error message argument'); + } + } + + if (!condition) { + var error; + if (format === undefined) { + error = new Error( + 'Minified exception occurred; use the non-minified dev environment ' + + 'for the full error message and additional helpful warnings.' + ); + } else { + var args = [a, b, c, d, e, f]; + var argIndex = 0; + error = new Error( + format.replace(/%s/g, function() { return args[argIndex++]; }) + ); + error.name = 'Invariant Violation'; + } + + error.framesToPop = 1; // we don't care about invariant's own frame + throw error; + } +}; + +module.exports = invariant; + +}).call(this,require('_process')) + +},{"_process":110}],106:[function(require,module,exports){ +'use strict'; +var strictUriEncode = require('strict-uri-encode'); +var objectAssign = require('object-assign'); + +function encode(value, opts) { + if (opts.encode) { + return opts.strict ? strictUriEncode(value) : encodeURIComponent(value); + } + + return value; +} + +exports.extract = function (str) { + return str.split('?')[1] || ''; +}; + +exports.parse = function (str) { + // Create an object with no prototype + // https://github.com/sindresorhus/query-string/issues/47 + var ret = Object.create(null); + + if (typeof str !== 'string') { + return ret; + } + + str = str.trim().replace(/^(\?|#|&)/, ''); + + if (!str) { + return ret; + } + + str.split('&').forEach(function (param) { + var parts = param.replace(/\+/g, ' ').split('='); + // Firefox (pre 40) decodes `%3D` to `=` + // https://github.com/sindresorhus/query-string/pull/37 + var key = parts.shift(); + var val = parts.length > 0 ? parts.join('=') : undefined; + + key = decodeURIComponent(key); + + // missing `=` should be `null`: + // http://w3.org/TR/2012/WD-url-20120524/#collect-url-parameters + val = val === undefined ? null : decodeURIComponent(val); + + if (ret[key] === undefined) { + ret[key] = val; + } else if (Array.isArray(ret[key])) { + ret[key].push(val); + } else { + ret[key] = [ret[key], val]; + } + }); + + return ret; +}; + +exports.stringify = function (obj, opts) { + var defaults = { + encode: true, + strict: true + }; + + opts = objectAssign(defaults, opts); + + return obj ? Object.keys(obj).sort().map(function (key) { + var val = obj[key]; + + if (val === undefined) { + return ''; + } + + if (val === null) { + return encode(key, opts); + } + + if (Array.isArray(val)) { + var result = []; + + val.slice().forEach(function (val2) { + if (val2 === undefined) { + return; + } + + if (val2 === null) { + result.push(encode(key, opts)); + } else { + result.push(encode(key, opts) + '=' + encode(val2, opts)); + } + }); + + return result.join('&'); + } + + return encode(key, opts) + '=' + encode(val, opts); + }).filter(function (x) { + return x.length > 0; + }).join('&') : ''; +}; + +},{"object-assign":107,"strict-uri-encode":108}],107:[function(require,module,exports){ +'use strict'; +/* eslint-disable no-unused-vars */ +var hasOwnProperty = Object.prototype.hasOwnProperty; +var propIsEnumerable = Object.prototype.propertyIsEnumerable; + +function toObject(val) { + if (val === null || val === undefined) { + throw new TypeError('Object.assign cannot be called with null or undefined'); + } + + return Object(val); +} + +function shouldUseNative() { + try { + if (!Object.assign) { + return false; + } + + // Detect buggy property enumeration order in older V8 versions. + + // https://bugs.chromium.org/p/v8/issues/detail?id=4118 + var test1 = new String('abc'); // eslint-disable-line + test1[5] = 'de'; + if (Object.getOwnPropertyNames(test1)[0] === '5') { + return false; + } + + // https://bugs.chromium.org/p/v8/issues/detail?id=3056 + var test2 = {}; + for (var i = 0; i < 10; i++) { + test2['_' + String.fromCharCode(i)] = i; + } + var order2 = Object.getOwnPropertyNames(test2).map(function (n) { + return test2[n]; + }); + if (order2.join('') !== '0123456789') { + return false; + } + + // https://bugs.chromium.org/p/v8/issues/detail?id=3056 + var test3 = {}; + 'abcdefghijklmnopqrst'.split('').forEach(function (letter) { + test3[letter] = letter; + }); + if (Object.keys(Object.assign({}, test3)).join('') !== + 'abcdefghijklmnopqrst') { + return false; + } + + return true; + } catch (e) { + // We don't expect any of the above to throw, but better to be safe. + return false; + } +} + +module.exports = shouldUseNative() ? Object.assign : function (target, source) { + var from; + var to = toObject(target); + var symbols; + + for (var s = 1; s < arguments.length; s++) { + from = Object(arguments[s]); + + for (var key in from) { + if (hasOwnProperty.call(from, key)) { + to[key] = from[key]; + } + } + + if (Object.getOwnPropertySymbols) { + symbols = Object.getOwnPropertySymbols(from); + for (var i = 0; i < symbols.length; i++) { + if (propIsEnumerable.call(from, symbols[i])) { + to[symbols[i]] = from[symbols[i]]; + } + } + } + } + + return to; +}; + +},{}],108:[function(require,module,exports){ +'use strict'; +module.exports = function (str) { + return encodeURIComponent(str).replace(/[!'()*]/g, function (c) { + return '%' + c.charCodeAt(0).toString(16).toUpperCase(); + }); +}; + +},{}],109:[function(require,module,exports){ +(function (process){ +/** + * Copyright 2014-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +'use strict'; + +/** + * Similar to invariant but only logs a warning if the condition is not met. + * This can be used to log issues in development environments in critical + * paths. Removing the logging code for production environments will keep the + * same logic and follow the same code paths. + */ + +var warning = function() {}; + +if (process.env.NODE_ENV !== 'production') { + warning = function(condition, format, args) { + var len = arguments.length; + args = new Array(len > 2 ? len - 2 : 0); + for (var key = 2; key < len; key++) { + args[key - 2] = arguments[key]; + } + if (format === undefined) { + throw new Error( + '`warning(condition, format, ...args)` requires a warning ' + + 'message argument' + ); + } + + if (format.length < 10 || (/^[s\W]*$/).test(format)) { + throw new Error( + 'The warning format should be able to uniquely identify this ' + + 'warning. Please, use a more descriptive format than: ' + format + ); + } + + if (!condition) { + var argIndex = 0; + var message = 'Warning: ' + + format.replace(/%s/g, function() { + return args[argIndex++]; + }); + if (typeof console !== 'undefined') { + console.error(message); + } + try { + // This error was thrown as a convenience so that you can use this stack + // to find the callsite that caused this warning to fire. + throw new Error(message); + } catch(x) {} + } + }; +} + +module.exports = warning; + +}).call(this,require('_process')) + +},{"_process":110}],110:[function(require,module,exports){ +// shim for using process in browser +var process = module.exports = {}; + +// cached from whatever global is present so that test runners that stub it +// don't break things. But we need to wrap it in a try catch in case it is +// wrapped in strict mode code which doesn't define any globals. It's inside a +// function because try/catches deoptimize in certain engines. + +var cachedSetTimeout; +var cachedClearTimeout; + +(function () { + try { + cachedSetTimeout = setTimeout; + } catch (e) { + cachedSetTimeout = function () { + throw new Error('setTimeout is not defined'); + } + } + try { + cachedClearTimeout = clearTimeout; + } catch (e) { + cachedClearTimeout = function () { + throw new Error('clearTimeout is not defined'); + } + } +} ()) +function runTimeout(fun) { + if (cachedSetTimeout === setTimeout) { + return setTimeout(fun, 0); + } else { + return cachedSetTimeout.call(null, fun, 0); + } +} +function runClearTimeout(marker) { + if (cachedClearTimeout === clearTimeout) { + clearTimeout(marker); + } else { + cachedClearTimeout.call(null, marker); + } +} +var queue = []; +var draining = false; +var currentQueue; +var queueIndex = -1; + +function cleanUpNextTick() { + if (!draining || !currentQueue) { + return; + } + draining = false; + if (currentQueue.length) { + queue = currentQueue.concat(queue); + } else { + queueIndex = -1; + } + if (queue.length) { + drainQueue(); + } +} + +function drainQueue() { + if (draining) { + return; + } + var timeout = runTimeout(cleanUpNextTick); + draining = true; + + var len = queue.length; + while(len) { + currentQueue = queue; + queue = []; + while (++queueIndex < len) { + if (currentQueue) { + currentQueue[queueIndex].run(); + } + } + queueIndex = -1; + len = queue.length; + } + currentQueue = null; + draining = false; + runClearTimeout(timeout); +} + +process.nextTick = function (fun) { + var args = new Array(arguments.length - 1); + if (arguments.length > 1) { + for (var i = 1; i < arguments.length; i++) { + args[i - 1] = arguments[i]; + } + } + queue.push(new Item(fun, args)); + if (queue.length === 1 && !draining) { + runTimeout(drainQueue); + } +}; + +// v8 likes predictible objects +function Item(fun, array) { + this.fun = fun; + this.array = array; +} +Item.prototype.run = function () { + this.fun.apply(null, this.array); +}; +process.title = 'browser'; +process.browser = true; +process.env = {}; +process.argv = []; +process.version = ''; // empty string to avoid regexp issues +process.versions = {}; + +function noop() {} + +process.on = noop; +process.addListener = noop; +process.once = noop; +process.off = noop; +process.removeListener = noop; +process.removeAllListeners = noop; +process.emit = noop; + +process.binding = function (name) { + throw new Error('process.binding is not supported'); +}; + +process.cwd = function () { return '/' }; +process.chdir = function (dir) { + throw new Error('process.chdir is not supported'); +}; +process.umask = function() { return 0; }; + +},{}],111:[function(require,module,exports){ +"use strict"; +var __extends = (this && this.__extends) || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); +}; +var NO = {}; +function noop() { } +function copy(a) { + var l = a.length; + var b = Array(l); + for (var i = 0; i < l; ++i) { + b[i] = a[i]; + } + return b; +} +exports.NO_IL = { + _n: noop, + _e: noop, + _c: noop, +}; +// mutates the input +function internalizeProducer(producer) { + producer._start = + function _start(il) { + il.next = il._n; + il.error = il._e; + il.complete = il._c; + this.start(il); + }; + producer._stop = producer.stop; +} +function compose2(f1, f2) { + return function composedFn(arg) { + return f1(f2(arg)); + }; +} +function and(f1, f2) { + return function andFn(t) { + return f1(t) && f2(t); + }; +} +var MergeProducer = (function () { + function MergeProducer(insArr) { + this.type = 'merge'; + this.insArr = insArr; + this.out = NO; + this.ac = 0; + } + MergeProducer.prototype._start = function (out) { + this.out = out; + var s = this.insArr; + var L = s.length; + this.ac = L; + for (var i = 0; i < L; i++) { + s[i]._add(this); + } + }; + MergeProducer.prototype._stop = function () { + var s = this.insArr; + var L = s.length; + for (var i = 0; i < L; i++) { + s[i]._remove(this); + } + this.out = NO; + }; + MergeProducer.prototype._n = function (t) { + var u = this.out; + if (u === NO) + return; + u._n(t); + }; + MergeProducer.prototype._e = function (err) { + var u = this.out; + if (u === NO) + return; + u._e(err); + }; + MergeProducer.prototype._c = function () { + if (--this.ac <= 0) { + var u = this.out; + if (u === NO) + return; + u._c(); + } + }; + return MergeProducer; +}()); +exports.MergeProducer = MergeProducer; +var CombineListener = (function () { + function CombineListener(i, out, p) { + this.i = i; + this.out = out; + this.p = p; + p.ils.push(this); + } + CombineListener.prototype._n = function (t) { + var p = this.p, out = this.out; + if (!out) + return; + if (p.up(t, this.i)) { + out._n(p.vals); + } + }; + CombineListener.prototype._e = function (err) { + var out = this.out; + if (!out) + return; + out._e(err); + }; + CombineListener.prototype._c = function () { + var p = this.p; + if (!p.out) + return; + if (--p.Nc === 0) { + p.out._c(); + } + }; + return CombineListener; +}()); +exports.CombineListener = CombineListener; +var CombineProducer = (function () { + function CombineProducer(insArr) { + this.type = 'combine'; + this.insArr = insArr; + this.out = NO; + this.ils = []; + this.Nc = this.Nn = 0; + this.vals = []; + } + CombineProducer.prototype.up = function (t, i) { + var v = this.vals[i]; + var Nn = !this.Nn ? 0 : v === NO ? --this.Nn : this.Nn; + this.vals[i] = t; + return Nn === 0; + }; + CombineProducer.prototype._start = function (out) { + this.out = out; + var s = this.insArr; + var n = this.Nc = this.Nn = s.length; + var vals = this.vals = new Array(n); + if (n === 0) { + out._n([]); + out._c(); + } + else { + for (var i = 0; i < n; i++) { + vals[i] = NO; + s[i]._add(new CombineListener(i, out, this)); + } + } + }; + CombineProducer.prototype._stop = function () { + var s = this.insArr; + var n = s.length; + for (var i = 0; i < n; i++) { + s[i]._remove(this.ils[i]); + } + this.out = NO; + this.ils = []; + this.vals = []; + }; + return CombineProducer; +}()); +exports.CombineProducer = CombineProducer; +var FromArrayProducer = (function () { + function FromArrayProducer(a) { + this.type = 'fromArray'; + this.a = a; + } + FromArrayProducer.prototype._start = function (out) { + var a = this.a; + for (var i = 0, l = a.length; i < l; i++) { + out._n(a[i]); + } + out._c(); + }; + FromArrayProducer.prototype._stop = function () { + }; + return FromArrayProducer; +}()); +exports.FromArrayProducer = FromArrayProducer; +var FromPromiseProducer = (function () { + function FromPromiseProducer(p) { + this.type = 'fromPromise'; + this.on = false; + this.p = p; + } + FromPromiseProducer.prototype._start = function (out) { + var prod = this; + this.on = true; + this.p.then(function (v) { + if (prod.on) { + out._n(v); + out._c(); + } + }, function (e) { + out._e(e); + }).then(null, function (err) { + setTimeout(function () { throw err; }); + }); + }; + FromPromiseProducer.prototype._stop = function () { + this.on = false; + }; + return FromPromiseProducer; +}()); +exports.FromPromiseProducer = FromPromiseProducer; +var PeriodicProducer = (function () { + function PeriodicProducer(period) { + this.type = 'periodic'; + this.period = period; + this.intervalID = -1; + this.i = 0; + } + PeriodicProducer.prototype._start = function (stream) { + var self = this; + function intervalHandler() { stream._n(self.i++); } + this.intervalID = setInterval(intervalHandler, this.period); + }; + PeriodicProducer.prototype._stop = function () { + if (this.intervalID !== -1) + clearInterval(this.intervalID); + this.intervalID = -1; + this.i = 0; + }; + return PeriodicProducer; +}()); +exports.PeriodicProducer = PeriodicProducer; +var DebugOperator = (function () { + function DebugOperator(arg, ins) { + this.type = 'debug'; + this.ins = ins; + this.out = NO; + this.s = noop; + this.l = ''; + if (typeof arg === 'string') { + this.l = arg; + } + else if (typeof arg === 'function') { + this.s = arg; + } + } + DebugOperator.prototype._start = function (out) { + this.out = out; + this.ins._add(this); + }; + DebugOperator.prototype._stop = function () { + this.ins._remove(this); + this.out = NO; + }; + DebugOperator.prototype._n = function (t) { + var u = this.out; + if (u === NO) + return; + var s = this.s, l = this.l; + if (s !== noop) { + try { + s(t); + } + catch (e) { + u._e(e); + } + } + else if (l) { + console.log(l + ':', t); + } + else { + console.log(t); + } + u._n(t); + }; + DebugOperator.prototype._e = function (err) { + var u = this.out; + if (u === NO) + return; + u._e(err); + }; + DebugOperator.prototype._c = function () { + var u = this.out; + if (u === NO) + return; + u._c(); + }; + return DebugOperator; +}()); +exports.DebugOperator = DebugOperator; +var DropOperator = (function () { + function DropOperator(max, ins) { + this.type = 'drop'; + this.ins = ins; + this.out = NO; + this.max = max; + this.dropped = 0; + } + DropOperator.prototype._start = function (out) { + this.out = out; + this.dropped = 0; + this.ins._add(this); + }; + DropOperator.prototype._stop = function () { + this.ins._remove(this); + this.out = NO; + }; + DropOperator.prototype._n = function (t) { + var u = this.out; + if (u === NO) + return; + if (this.dropped++ >= this.max) + u._n(t); + }; + DropOperator.prototype._e = function (err) { + var u = this.out; + if (u === NO) + return; + u._e(err); + }; + DropOperator.prototype._c = function () { + var u = this.out; + if (u === NO) + return; + u._c(); + }; + return DropOperator; +}()); +exports.DropOperator = DropOperator; +var OtherIL = (function () { + function OtherIL(out, op) { + this.out = out; + this.op = op; + } + OtherIL.prototype._n = function (t) { + this.op.end(); + }; + OtherIL.prototype._e = function (err) { + this.out._e(err); + }; + OtherIL.prototype._c = function () { + this.op.end(); + }; + return OtherIL; +}()); +var EndWhenOperator = (function () { + function EndWhenOperator(o, ins) { + this.type = 'endWhen'; + this.ins = ins; + this.out = NO; + this.o = o; + this.oil = exports.NO_IL; + } + EndWhenOperator.prototype._start = function (out) { + this.out = out; + this.o._add(this.oil = new OtherIL(out, this)); + this.ins._add(this); + }; + EndWhenOperator.prototype._stop = function () { + this.ins._remove(this); + this.o._remove(this.oil); + this.out = NO; + this.oil = exports.NO_IL; + }; + EndWhenOperator.prototype.end = function () { + var u = this.out; + if (u === NO) + return; + u._c(); + }; + EndWhenOperator.prototype._n = function (t) { + var u = this.out; + if (u === NO) + return; + u._n(t); + }; + EndWhenOperator.prototype._e = function (err) { + var u = this.out; + if (u === NO) + return; + u._e(err); + }; + EndWhenOperator.prototype._c = function () { + this.end(); + }; + return EndWhenOperator; +}()); +exports.EndWhenOperator = EndWhenOperator; +var FilterOperator = (function () { + function FilterOperator(passes, ins) { + this.type = 'filter'; + this.ins = ins; + this.out = NO; + this.passes = passes; + } + FilterOperator.prototype._start = function (out) { + this.out = out; + this.ins._add(this); + }; + FilterOperator.prototype._stop = function () { + this.ins._remove(this); + this.out = NO; + }; + FilterOperator.prototype._n = function (t) { + var u = this.out; + if (u === NO) + return; + try { + if (this.passes(t)) + u._n(t); + } + catch (e) { + u._e(e); + } + }; + FilterOperator.prototype._e = function (err) { + var u = this.out; + if (u === NO) + return; + u._e(err); + }; + FilterOperator.prototype._c = function () { + var u = this.out; + if (u === NO) + return; + u._c(); + }; + return FilterOperator; +}()); +exports.FilterOperator = FilterOperator; +var FlattenListener = (function () { + function FlattenListener(out, op) { + this.out = out; + this.op = op; + } + FlattenListener.prototype._n = function (t) { + this.out._n(t); + }; + FlattenListener.prototype._e = function (err) { + this.out._e(err); + }; + FlattenListener.prototype._c = function () { + this.op.inner = NO; + this.op.less(); + }; + return FlattenListener; +}()); +var FlattenOperator = (function () { + function FlattenOperator(ins) { + this.type = 'flatten'; + this.ins = ins; + this.out = NO; + this.open = true; + this.inner = NO; + this.il = exports.NO_IL; + } + FlattenOperator.prototype._start = function (out) { + this.out = out; + this.open = true; + this.inner = NO; + this.il = exports.NO_IL; + this.ins._add(this); + }; + FlattenOperator.prototype._stop = function () { + this.ins._remove(this); + if (this.inner !== NO) + this.inner._remove(this.il); + this.out = NO; + this.open = true; + this.inner = NO; + this.il = exports.NO_IL; + }; + FlattenOperator.prototype.less = function () { + var u = this.out; + if (u === NO) + return; + if (!this.open && this.inner === NO) + u._c(); + }; + FlattenOperator.prototype._n = function (s) { + var u = this.out; + if (u === NO) + return; + var _a = this, inner = _a.inner, il = _a.il; + if (s === inner && s._prod !== NO) + s._stopNow(); + if (inner !== NO && il !== exports.NO_IL) + inner._remove(il); + (this.inner = s)._add(this.il = new FlattenListener(u, this)); + }; + FlattenOperator.prototype._e = function (err) { + var u = this.out; + if (u === NO) + return; + u._e(err); + }; + FlattenOperator.prototype._c = function () { + this.open = false; + this.less(); + }; + return FlattenOperator; +}()); +exports.FlattenOperator = FlattenOperator; +var FoldOperator = (function () { + function FoldOperator(f, seed, ins) { + this.type = 'fold'; + this.ins = ins; + this.out = NO; + this.f = f; + this.acc = this.seed = seed; + } + FoldOperator.prototype._start = function (out) { + this.out = out; + this.acc = this.seed; + out._n(this.acc); + this.ins._add(this); + }; + FoldOperator.prototype._stop = function () { + this.ins._remove(this); + this.out = NO; + this.acc = this.seed; + }; + FoldOperator.prototype._n = function (t) { + var u = this.out; + if (u === NO) + return; + try { + u._n(this.acc = this.f(this.acc, t)); + } + catch (e) { + u._e(e); + } + }; + FoldOperator.prototype._e = function (err) { + var u = this.out; + if (u === NO) + return; + u._e(err); + }; + FoldOperator.prototype._c = function () { + var u = this.out; + if (u === NO) + return; + u._c(); + }; + return FoldOperator; +}()); +exports.FoldOperator = FoldOperator; +var LastOperator = (function () { + function LastOperator(ins) { + this.type = 'last'; + this.ins = ins; + this.out = NO; + this.has = false; + this.val = NO; + } + LastOperator.prototype._start = function (out) { + this.out = out; + this.has = false; + this.ins._add(this); + }; + LastOperator.prototype._stop = function () { + this.ins._remove(this); + this.out = NO; + this.val = NO; + }; + LastOperator.prototype._n = function (t) { + this.has = true; + this.val = t; + }; + LastOperator.prototype._e = function (err) { + var u = this.out; + if (u === NO) + return; + u._e(err); + }; + LastOperator.prototype._c = function () { + var u = this.out; + if (u === NO) + return; + if (this.has) { + u._n(this.val); + u._c(); + } + else { + u._e('TODO show proper error'); + } + }; + return LastOperator; +}()); +exports.LastOperator = LastOperator; +var MapFlattenInner = (function () { + function MapFlattenInner(out, op) { + this.out = out; + this.op = op; + } + MapFlattenInner.prototype._n = function (r) { + this.out._n(r); + }; + MapFlattenInner.prototype._e = function (err) { + this.out._e(err); + }; + MapFlattenInner.prototype._c = function () { + this.op.inner = NO; + this.op.less(); + }; + return MapFlattenInner; +}()); +var MapFlattenOperator = (function () { + function MapFlattenOperator(mapOp) { + this.type = mapOp.type + "+flatten"; + this.ins = mapOp.ins; + this.out = NO; + this.mapOp = mapOp; + this.inner = NO; + this.il = exports.NO_IL; + this.open = true; + } + MapFlattenOperator.prototype._start = function (out) { + this.out = out; + this.inner = NO; + this.il = exports.NO_IL; + this.open = true; + this.mapOp.ins._add(this); + }; + MapFlattenOperator.prototype._stop = function () { + this.mapOp.ins._remove(this); + if (this.inner !== NO) + this.inner._remove(this.il); + this.out = NO; + this.inner = NO; + this.il = exports.NO_IL; + }; + MapFlattenOperator.prototype.less = function () { + if (!this.open && this.inner === NO) { + var u = this.out; + if (u === NO) + return; + u._c(); + } + }; + MapFlattenOperator.prototype._n = function (v) { + var u = this.out; + if (u === NO) + return; + var _a = this, inner = _a.inner, il = _a.il; + var s; + try { + s = this.mapOp.project(v); + } + catch (e) { + u._e(e); + return; + } + if (s === inner && s._prod !== NO) + s._stopNow(); + if (inner !== NO && il !== exports.NO_IL) + inner._remove(il); + (this.inner = s)._add(this.il = new MapFlattenInner(u, this)); + }; + MapFlattenOperator.prototype._e = function (err) { + var u = this.out; + if (u === NO) + return; + u._e(err); + }; + MapFlattenOperator.prototype._c = function () { + this.open = false; + this.less(); + }; + return MapFlattenOperator; +}()); +exports.MapFlattenOperator = MapFlattenOperator; +var MapOperator = (function () { + function MapOperator(project, ins) { + this.type = 'map'; + this.ins = ins; + this.out = NO; + this.project = project; + } + MapOperator.prototype._start = function (out) { + this.out = out; + this.ins._add(this); + }; + MapOperator.prototype._stop = function () { + this.ins._remove(this); + this.out = NO; + }; + MapOperator.prototype._n = function (t) { + var u = this.out; + if (u === NO) + return; + try { + u._n(this.project(t)); + } + catch (e) { + u._e(e); + } + }; + MapOperator.prototype._e = function (err) { + var u = this.out; + if (u === NO) + return; + u._e(err); + }; + MapOperator.prototype._c = function () { + var u = this.out; + if (u === NO) + return; + u._c(); + }; + return MapOperator; +}()); +exports.MapOperator = MapOperator; +var FilterMapOperator = (function (_super) { + __extends(FilterMapOperator, _super); + function FilterMapOperator(passes, project, ins) { + _super.call(this, project, ins); + this.type = 'filter+map'; + this.passes = passes; + } + FilterMapOperator.prototype._n = function (v) { + if (this.passes(v)) { + _super.prototype._n.call(this, v); + } + ; + }; + return FilterMapOperator; +}(MapOperator)); +exports.FilterMapOperator = FilterMapOperator; +var RememberOperator = (function () { + function RememberOperator(ins) { + this.type = 'remember'; + this.ins = ins; + this.out = NO; + } + RememberOperator.prototype._start = function (out) { + this.out = out; + this.ins._add(out); + }; + RememberOperator.prototype._stop = function () { + this.ins._remove(this.out); + this.out = NO; + }; + return RememberOperator; +}()); +exports.RememberOperator = RememberOperator; +var ReplaceErrorOperator = (function () { + function ReplaceErrorOperator(fn, ins) { + this.type = 'replaceError'; + this.ins = ins; + this.out = NO; + this.fn = fn; + } + ReplaceErrorOperator.prototype._start = function (out) { + this.out = out; + this.ins._add(this); + }; + ReplaceErrorOperator.prototype._stop = function () { + this.ins._remove(this); + this.out = NO; + }; + ReplaceErrorOperator.prototype._n = function (t) { + var u = this.out; + if (u === NO) + return; + u._n(t); + }; + ReplaceErrorOperator.prototype._e = function (err) { + var u = this.out; + if (u === NO) + return; + try { + this.ins._remove(this); + (this.ins = this.fn(err))._add(this); + } + catch (e) { + u._e(e); + } + }; + ReplaceErrorOperator.prototype._c = function () { + var u = this.out; + if (u === NO) + return; + u._c(); + }; + return ReplaceErrorOperator; +}()); +exports.ReplaceErrorOperator = ReplaceErrorOperator; +var StartWithOperator = (function () { + function StartWithOperator(ins, val) { + this.type = 'startWith'; + this.ins = ins; + this.out = NO; + this.val = val; + } + StartWithOperator.prototype._start = function (out) { + this.out = out; + this.out._n(this.val); + this.ins._add(out); + }; + StartWithOperator.prototype._stop = function () { + this.ins._remove(this.out); + this.out = NO; + }; + return StartWithOperator; +}()); +exports.StartWithOperator = StartWithOperator; +var TakeOperator = (function () { + function TakeOperator(max, ins) { + this.type = 'take'; + this.ins = ins; + this.out = NO; + this.max = max; + this.taken = 0; + } + TakeOperator.prototype._start = function (out) { + this.out = out; + this.taken = 0; + this.ins._add(this); + }; + TakeOperator.prototype._stop = function () { + this.ins._remove(this); + this.out = NO; + }; + TakeOperator.prototype._n = function (t) { + var u = this.out; + if (u === NO) + return; + if (this.taken++ < this.max - 1) { + u._n(t); + } + else { + u._n(t); + u._c(); + } + }; + TakeOperator.prototype._e = function (err) { + var u = this.out; + if (u === NO) + return; + u._e(err); + }; + TakeOperator.prototype._c = function () { + var u = this.out; + if (u === NO) + return; + u._c(); + }; + return TakeOperator; +}()); +exports.TakeOperator = TakeOperator; +var Stream = (function () { + function Stream(producer) { + this._prod = producer || NO; + this._ils = []; + this._stopID = NO; + this._target = NO; + this._err = NO; + } + Stream.prototype._n = function (t) { + var a = this._ils; + var L = a.length; + if (L == 1) + a[0]._n(t); + else { + var b = copy(a); + for (var i = 0; i < L; i++) + b[i]._n(t); + } + }; + Stream.prototype._e = function (err) { + if (this._err !== NO) + return; + this._err = err; + var a = this._ils; + var L = a.length; + if (L == 1) + a[0]._e(err); + else { + var b = copy(a); + for (var i = 0; i < L; i++) + b[i]._e(err); + } + this._x(); + }; + Stream.prototype._c = function () { + var a = this._ils; + var L = a.length; + if (L == 1) + a[0]._c(); + else { + var b = copy(a); + for (var i = 0; i < L; i++) + b[i]._c(); + } + this._x(); + }; + Stream.prototype._x = function () { + if (this._ils.length === 0) + return; + if (this._prod !== NO) + this._prod._stop(); + this._err = NO; + this._ils = []; + }; + Stream.prototype._stopNow = function () { + // WARNING: code that calls this method should + // first check if this._prod is valid (not `NO`) + this._prod._stop(); + this._err = NO; + this._stopID = NO; + }; + Stream.prototype._add = function (il) { + var ta = this._target; + if (ta !== NO) + return ta._add(il); + var a = this._ils; + a.push(il); + if (a.length === 1) { + if (this._stopID !== NO) { + clearTimeout(this._stopID); + this._stopID = NO; + } + var p = this._prod; + if (p !== NO) + p._start(this); + } + }; + Stream.prototype._remove = function (il) { + var _this = this; + var ta = this._target; + if (ta !== NO) + return ta._remove(il); + var a = this._ils; + var i = a.indexOf(il); + if (i > -1) { + a.splice(i, 1); + if (this._prod !== NO && a.length <= 0) { + this._err = NO; + this._stopID = setTimeout(function () { return _this._stopNow(); }); + } + else if (a.length === 1) { + this._pruneCycles(); + } + } + }; + // If all paths stemming from `this` stream eventually end at `this` + // stream, then we remove the single listener of `this` stream, to + // force it to end its execution and dispose resources. This method + // assumes as a precondition that this._ils has just one listener. + Stream.prototype._pruneCycles = function () { + if (this._hasNoSinks(this, [])) { + this._remove(this._ils[0]); + } + }; + // Checks whether *there is no* path starting from `x` that leads to an end + // listener (sink) in the stream graph, following edges A->B where B is a + // listener of A. This means these paths constitute a cycle somehow. Is given + // a trace of all visited nodes so far. + Stream.prototype._hasNoSinks = function (x, trace) { + if (trace.indexOf(x) !== -1) { + return true; + } + else if (x.out === this) { + return true; + } + else if (x.out && x.out !== NO) { + return this._hasNoSinks(x.out, trace.concat(x)); + } + else if (x._ils) { + for (var i = 0, N = x._ils.length; i < N; i++) { + if (!this._hasNoSinks(x._ils[i], trace.concat(x))) { + return false; + } + } + return true; + } + else { + return false; + } + }; + Stream.prototype.ctor = function () { + return this instanceof MemoryStream ? MemoryStream : Stream; + }; + /** + * Adds a Listener to the Stream. + * + * @param {Listener} listener + */ + Stream.prototype.addListener = function (listener) { + if (typeof listener.next !== 'function' + || typeof listener.error !== 'function' + || typeof listener.complete !== 'function') { + throw new Error('stream.addListener() requires all three next, error, ' + + 'and complete functions.'); + } + listener._n = listener.next; + listener._e = listener.error; + listener._c = listener.complete; + this._add(listener); + }; + /** + * Removes a Listener from the Stream, assuming the Listener was added to it. + * + * @param {Listener} listener + */ + Stream.prototype.removeListener = function (listener) { + this._remove(listener); + }; + /** + * Creates a new Stream given a Producer. + * + * @factory true + * @param {Producer} producer An optional Producer that dictates how to + * start, generate events, and stop the Stream. + * @return {Stream} + */ + Stream.create = function (producer) { + if (producer) { + if (typeof producer.start !== 'function' + || typeof producer.stop !== 'function') { + throw new Error('producer requires both start and stop functions'); + } + internalizeProducer(producer); // mutates the input + } + return new Stream(producer); + }; + /** + * Creates a new MemoryStream given a Producer. + * + * @factory true + * @param {Producer} producer An optional Producer that dictates how to + * start, generate events, and stop the Stream. + * @return {MemoryStream} + */ + Stream.createWithMemory = function (producer) { + if (producer) { + internalizeProducer(producer); // mutates the input + } + return new MemoryStream(producer); + }; + /** + * Creates a Stream that does nothing when started. It never emits any event. + * + * Marble diagram: + * + * ```text + * never + * ----------------------- + * ``` + * + * @factory true + * @return {Stream} + */ + Stream.never = function () { + return new Stream({ _start: noop, _stop: noop }); + }; + /** + * Creates a Stream that immediately emits the "complete" notification when + * started, and that's it. + * + * Marble diagram: + * + * ```text + * empty + * -| + * ``` + * + * @factory true + * @return {Stream} + */ + Stream.empty = function () { + return new Stream({ + _start: function (il) { il._c(); }, + _stop: noop, + }); + }; + /** + * Creates a Stream that immediately emits an "error" notification with the + * value you passed as the `error` argument when the stream starts, and that's + * it. + * + * Marble diagram: + * + * ```text + * throw(X) + * -X + * ``` + * + * @factory true + * @param error The error event to emit on the created stream. + * @return {Stream} + */ + Stream.throw = function (error) { + return new Stream({ + _start: function (il) { il._e(error); }, + _stop: noop, + }); + }; + /** + * Creates a Stream that immediately emits the arguments that you give to + * *of*, then completes. + * + * Marble diagram: + * + * ```text + * of(1,2,3) + * 123| + * ``` + * + * @factory true + * @param a The first value you want to emit as an event on the stream. + * @param b The second value you want to emit as an event on the stream. One + * or more of these values may be given as arguments. + * @return {Stream} + */ + Stream.of = function () { + var items = []; + for (var _i = 0; _i < arguments.length; _i++) { + items[_i - 0] = arguments[_i]; + } + return Stream.fromArray(items); + }; + /** + * Converts an array to a stream. The returned stream will emit synchronously + * all the items in the array, and then complete. + * + * Marble diagram: + * + * ```text + * fromArray([1,2,3]) + * 123| + * ``` + * + * @factory true + * @param {Array} array The array to be converted as a stream. + * @return {Stream} + */ + Stream.fromArray = function (array) { + return new Stream(new FromArrayProducer(array)); + }; + /** + * Converts a promise to a stream. The returned stream will emit the resolved + * value of the promise, and then complete. However, if the promise is + * rejected, the stream will emit the corresponding error. + * + * Marble diagram: + * + * ```text + * fromPromise( ----42 ) + * -----------------42| + * ``` + * + * @factory true + * @param {Promise} promise The promise to be converted as a stream. + * @return {Stream} + */ + Stream.fromPromise = function (promise) { + return new Stream(new FromPromiseProducer(promise)); + }; + /** + * Creates a stream that periodically emits incremental numbers, every + * `period` milliseconds. + * + * Marble diagram: + * + * ```text + * periodic(1000) + * ---0---1---2---3---4---... + * ``` + * + * @factory true + * @param {number} period The interval in milliseconds to use as a rate of + * emission. + * @return {Stream} + */ + Stream.periodic = function (period) { + return new Stream(new PeriodicProducer(period)); + }; + Stream.prototype._map = function (project) { + var p = this._prod; + var ctor = this.ctor(); + if (p instanceof FilterOperator) { + return new ctor(new FilterMapOperator(p.passes, project, p.ins)); + } + if (p instanceof FilterMapOperator) { + return new ctor(new FilterMapOperator(p.passes, compose2(project, p.project), p.ins)); + } + if (p instanceof MapOperator) { + return new ctor(new MapOperator(compose2(project, p.project), p.ins)); + } + return new ctor(new MapOperator(project, this)); + }; + /** + * Transforms each event from the input Stream through a `project` function, + * to get a Stream that emits those transformed events. + * + * Marble diagram: + * + * ```text + * --1---3--5-----7------ + * map(i => i * 10) + * --10--30-50----70----- + * ``` + * + * @param {Function} project A function of type `(t: T) => U` that takes event + * `t` of type `T` from the input Stream and produces an event of type `U`, to + * be emitted on the output Stream. + * @return {Stream} + */ + Stream.prototype.map = function (project) { + return this._map(project); + }; + /** + * It's like `map`, but transforms each input event to always the same + * constant value on the output Stream. + * + * Marble diagram: + * + * ```text + * --1---3--5-----7----- + * mapTo(10) + * --10--10-10----10---- + * ``` + * + * @param projectedValue A value to emit on the output Stream whenever the + * input Stream emits any value. + * @return {Stream} + */ + Stream.prototype.mapTo = function (projectedValue) { + var s = this.map(function () { return projectedValue; }); + var op = s._prod; + op.type = op.type.replace('map', 'mapTo'); + return s; + }; + /** + * Only allows events that pass the test given by the `passes` argument. + * + * Each event from the input stream is given to the `passes` function. If the + * function returns `true`, the event is forwarded to the output stream, + * otherwise it is ignored and not forwarded. + * + * Marble diagram: + * + * ```text + * --1---2--3-----4-----5---6--7-8-- + * filter(i => i % 2 === 0) + * ------2--------4---------6----8-- + * ``` + * + * @param {Function} passes A function of type `(t: T) +> boolean` that takes + * an event from the input stream and checks if it passes, by returning a + * boolean. + * @return {Stream} + */ + Stream.prototype.filter = function (passes) { + var p = this._prod; + if (p instanceof FilterOperator) { + return new Stream(new FilterOperator(and(p.passes, passes), p.ins)); + } + return new Stream(new FilterOperator(passes, this)); + }; + /** + * Lets the first `amount` many events from the input stream pass to the + * output stream, then makes the output stream complete. + * + * Marble diagram: + * + * ```text + * --a---b--c----d---e-- + * take(3) + * --a---b--c| + * ``` + * + * @param {number} amount How many events to allow from the input stream + * before completing the output stream. + * @return {Stream} + */ + Stream.prototype.take = function (amount) { + return new (this.ctor())(new TakeOperator(amount, this)); + }; + /** + * Ignores the first `amount` many events from the input stream, and then + * after that starts forwarding events from the input stream to the output + * stream. + * + * Marble diagram: + * + * ```text + * --a---b--c----d---e-- + * drop(3) + * --------------d---e-- + * ``` + * + * @param {number} amount How many events to ignore from the input stream + * before forwarding all events from the input stream to the output stream. + * @return {Stream} + */ + Stream.prototype.drop = function (amount) { + return new Stream(new DropOperator(amount, this)); + }; + /** + * When the input stream completes, the output stream will emit the last event + * emitted by the input stream, and then will also complete. + * + * Marble diagram: + * + * ```text + * --a---b--c--d----| + * last() + * -----------------d| + * ``` + * + * @return {Stream} + */ + Stream.prototype.last = function () { + return new Stream(new LastOperator(this)); + }; + /** + * Prepends the given `initial` value to the sequence of events emitted by the + * input stream. The returned stream is a MemoryStream, which means it is + * already `remember()`'d. + * + * Marble diagram: + * + * ```text + * ---1---2-----3--- + * startWith(0) + * 0--1---2-----3--- + * ``` + * + * @param initial The value or event to prepend. + * @return {MemoryStream} + */ + Stream.prototype.startWith = function (initial) { + return new MemoryStream(new StartWithOperator(this, initial)); + }; + /** + * Uses another stream to determine when to complete the current stream. + * + * When the given `other` stream emits an event or completes, the output + * stream will complete. Before that happens, the output stream will behaves + * like the input stream. + * + * Marble diagram: + * + * ```text + * ---1---2-----3--4----5----6--- + * endWhen( --------a--b--| ) + * ---1---2-----3--4--| + * ``` + * + * @param other Some other stream that is used to know when should the output + * stream of this operator complete. + * @return {Stream} + */ + Stream.prototype.endWhen = function (other) { + return new (this.ctor())(new EndWhenOperator(other, this)); + }; + /** + * "Folds" the stream onto itself. + * + * Combines events from the past throughout + * the entire execution of the input stream, allowing you to accumulate them + * together. It's essentially like `Array.prototype.reduce`. The returned + * stream is a MemoryStream, which means it is already `remember()`'d. + * + * The output stream starts by emitting the `seed` which you give as argument. + * Then, when an event happens on the input stream, it is combined with that + * seed value through the `accumulate` function, and the output value is + * emitted on the output stream. `fold` remembers that output value as `acc` + * ("accumulator"), and then when a new input event `t` happens, `acc` will be + * combined with that to produce the new `acc` and so forth. + * + * Marble diagram: + * + * ```text + * ------1-----1--2----1----1------ + * fold((acc, x) => acc + x, 3) + * 3-----4-----5--7----8----9------ + * ``` + * + * @param {Function} accumulate A function of type `(acc: R, t: T) => R` that + * takes the previous accumulated value `acc` and the incoming event from the + * input stream and produces the new accumulated value. + * @param seed The initial accumulated value, of type `R`. + * @return {MemoryStream} + */ + Stream.prototype.fold = function (accumulate, seed) { + return new MemoryStream(new FoldOperator(accumulate, seed, this)); + }; + /** + * Replaces an error with another stream. + * + * When (and if) an error happens on the input stream, instead of forwarding + * that error to the output stream, *replaceError* will call the `replace` + * function which returns the stream that the output stream will replicate. + * And, in case that new stream also emits an error, `replace` will be called + * again to get another stream to start replicating. + * + * Marble diagram: + * + * ```text + * --1---2-----3--4-----X + * replaceError( () => --10--| ) + * --1---2-----3--4--------10--| + * ``` + * + * @param {Function} replace A function of type `(err) => Stream` that takes + * the error that occurred on the input stream or on the previous replacement + * stream and returns a new stream. The output stream will behave like the + * stream that this function returns. + * @return {Stream} + */ + Stream.prototype.replaceError = function (replace) { + return new (this.ctor())(new ReplaceErrorOperator(replace, this)); + }; + /** + * Flattens a "stream of streams", handling only one nested stream at a time + * (no concurrency). + * + * If the input stream is a stream that emits streams, then this operator will + * return an output stream which is a flat stream: emits regular events. The + * flattening happens without concurrency. It works like this: when the input + * stream emits a nested stream, *flatten* will start imitating that nested + * one. However, as soon as the next nested stream is emitted on the input + * stream, *flatten* will forget the previous nested one it was imitating, and + * will start imitating the new nested one. + * + * Marble diagram: + * + * ```text + * --+--------+--------------- + * \ \ + * \ ----1----2---3-- + * --a--b----c----d-------- + * flatten + * -----a--b------1----2---3-- + * ``` + * + * @return {Stream} + */ + Stream.prototype.flatten = function () { + var p = this._prod; + return new Stream(p instanceof MapOperator && !(p instanceof FilterMapOperator) ? + new MapFlattenOperator(p) : + new FlattenOperator(this)); + }; + /** + * Passes the input stream to a custom operator, to produce an output stream. + * + * *compose* is a handy way of using an existing function in a chained style. + * Instead of writing `outStream = f(inStream)` you can write + * `outStream = inStream.compose(f)`. + * + * @param {function} operator A function that takes a stream as input and + * returns a stream as well. + * @return {Stream} + */ + Stream.prototype.compose = function (operator) { + return operator(this); + }; + /** + * Returns an output stream that behaves like the input stream, but also + * remembers the most recent event that happens on the input stream, so that a + * newly added listener will immediately receive that memorised event. + * + * @return {MemoryStream} + */ + Stream.prototype.remember = function () { + return new MemoryStream(new RememberOperator(this)); + }; + /** + * Returns an output stream that identically behaves like the input stream, + * but also runs a `spy` function fo each event, to help you debug your app. + * + * *debug* takes a `spy` function as argument, and runs that for each event + * happening on the input stream. If you don't provide the `spy` argument, + * then *debug* will just `console.log` each event. This helps you to + * understand the flow of events through some operator chain. + * + * Please note that if the output stream has no listeners, then it will not + * start, which means `spy` will never run because no actual event happens in + * that case. + * + * Marble diagram: + * + * ```text + * --1----2-----3-----4-- + * debug + * --1----2-----3-----4-- + * ``` + * + * @param {function} labelOrSpy A string to use as the label when printing + * debug information on the console, or a 'spy' function that takes an event + * as argument, and does not need to return anything. + * @return {Stream} + */ + Stream.prototype.debug = function (labelOrSpy) { + return new (this.ctor())(new DebugOperator(labelOrSpy, this)); + }; + /** + * *imitate* changes this current Stream to emit the same events that the + * `other` given Stream does. This method returns nothing. + * + * This method exists to allow one thing: **circular dependency of streams**. + * For instance, let's imagine that for some reason you need to create a + * circular dependency where stream `first$` depends on stream `second$` + * which in turn depends on `first$`: + * + * + * ```js + * import delay from 'xstream/extra/delay' + * + * var first$ = second$.map(x => x * 10).take(3); + * var second$ = first$.map(x => x + 1).startWith(1).compose(delay(100)); + * ``` + * + * However, that is invalid JavaScript, because `second$` is undefined + * on the first line. This is how *imitate* can help solve it: + * + * ```js + * import delay from 'xstream/extra/delay' + * + * var secondProxy$ = xs.create(); + * var first$ = secondProxy$.map(x => x * 10).take(3); + * var second$ = first$.map(x => x + 1).startWith(1).compose(delay(100)); + * secondProxy$.imitate(second$); + * ``` + * + * We create `secondProxy$` before the others, so it can be used in the + * declaration of `first$`. Then, after both `first$` and `second$` are + * defined, we hook `secondProxy$` with `second$` with `imitate()` to tell + * that they are "the same". `imitate` will not trigger the start of any + * stream, it just binds `secondProxy$` and `second$` together. + * + * The following is an example where `imitate()` is important in Cycle.js + * applications. A parent component contains some child components. A child + * has an action stream which is given to the parent to define its state: + * + * + * ```js + * const childActionProxy$ = xs.create(); + * const parent = Parent({...sources, childAction$: childActionProxy$}); + * const childAction$ = parent.state$.map(s => s.child.action$).flatten(); + * childActionProxy$.imitate(childAction$); + * ``` + * + * Note, though, that **`imitate()` does not support MemoryStreams**. If we + * would attempt to imitate a MemoryStream in a circular dependency, we would + * either get a race condition (where the symptom would be "nothing happens") + * or an infinite cyclic emission of values. It's useful to think about + * MemoryStreams as cells in a spreadsheet. It doesn't make any sense to + * define a spreadsheet cell `A1` with a formula that depends on `B1` and + * cell `B1` defined with a formula that depends on `A1`. + * + * If you find yourself wanting to use `imitate()` with a + * MemoryStream, you should rework your code around `imitate()` to use a + * Stream instead. Look for the stream in the circular dependency that + * represents an event stream, and that would be a candidate for creating a + * proxy Stream which then imitates the target Stream. + * + * @param {Stream} target The other stream to imitate on the current one. Must + * not be a MemoryStream. + */ + Stream.prototype.imitate = function (target) { + if (target instanceof MemoryStream) { + throw new Error('A MemoryStream was given to imitate(), but it only ' + + 'supports a Stream. Read more about this restriction here: ' + + 'https://github.com/staltz/xstream#faq'); + } + this._target = target; + for (var ils = this._ils, N = ils.length, i = 0; i < N; i++) { + target._add(ils[i]); + } + this._ils = []; + }; + /** + * Forces the Stream to emit the given value to its listeners. + * + * As the name indicates, if you use this, you are most likely doing something + * The Wrong Way. Please try to understand the reactive way before using this + * method. Use it only when you know what you are doing. + * + * @param value The "next" value you want to broadcast to all listeners of + * this Stream. + */ + Stream.prototype.shamefullySendNext = function (value) { + this._n(value); + }; + /** + * Forces the Stream to emit the given error to its listeners. + * + * As the name indicates, if you use this, you are most likely doing something + * The Wrong Way. Please try to understand the reactive way before using this + * method. Use it only when you know what you are doing. + * + * @param {any} error The error you want to broadcast to all the listeners of + * this Stream. + */ + Stream.prototype.shamefullySendError = function (error) { + this._e(error); + }; + /** + * Forces the Stream to emit the "completed" event to its listeners. + * + * As the name indicates, if you use this, you are most likely doing something + * The Wrong Way. Please try to understand the reactive way before using this + * method. Use it only when you know what you are doing. + */ + Stream.prototype.shamefullySendComplete = function () { + this._c(); + }; + /** + * Blends multiple streams together, emitting events from all of them + * concurrently. + * + * *merge* takes multiple streams as arguments, and creates a stream that + * behaves like each of the argument streams, in parallel. + * + * Marble diagram: + * + * ```text + * --1----2-----3--------4--- + * ----a-----b----c---d------ + * merge + * --1-a--2--b--3-c---d--4--- + * ``` + * + * @factory true + * @param {Stream} stream1 A stream to merge together with other streams. + * @param {Stream} stream2 A stream to merge together with other streams. Two + * or more streams may be given as arguments. + * @return {Stream} + */ + Stream.merge = function merge() { + var streams = []; + for (var _i = 0; _i < arguments.length; _i++) { + streams[_i - 0] = arguments[_i]; + } + return new Stream(new MergeProducer(streams)); + }; + /** + * Combines multiple input streams together to return a stream whose events + * are arrays that collect the latest events from each input stream. + * + * *combine* internally remembers the most recent event from each of the input + * streams. When any of the input streams emits an event, that event together + * with all the other saved events are combined into an array. That array will + * be emitted on the output stream. It's essentially a way of joining together + * the events from multiple streams. + * + * Marble diagram: + * + * ```text + * --1----2-----3--------4--- + * ----a-----b-----c--d------ + * combine + * ----1a-2a-2b-3b-3c-3d-4d-- + * ``` + * + * @factory true + * @param {Stream} stream1 A stream to combine together with other streams. + * @param {Stream} stream2 A stream to combine together with other streams. + * Multiple streams, not just two, may be given as arguments. + * @return {Stream} + */ + Stream.combine = function combine() { + var streams = []; + for (var _i = 0; _i < arguments.length; _i++) { + streams[_i - 0] = arguments[_i]; + } + return new Stream(new CombineProducer(streams)); + }; + return Stream; +}()); +exports.Stream = Stream; +var MemoryStream = (function (_super) { + __extends(MemoryStream, _super); + function MemoryStream(producer) { + _super.call(this, producer); + this._has = false; + } + MemoryStream.prototype._n = function (x) { + this._v = x; + this._has = true; + _super.prototype._n.call(this, x); + }; + MemoryStream.prototype._add = function (il) { + if (this._has) { + il._n(this._v); + } + _super.prototype._add.call(this, il); + }; + MemoryStream.prototype._stopNow = function () { + this._has = false; + _super.prototype._stopNow.call(this); + }; + MemoryStream.prototype._x = function () { + this._has = false; + _super.prototype._x.call(this); + }; + MemoryStream.prototype.map = function (project) { + return this._map(project); + }; + MemoryStream.prototype.mapTo = function (projectedValue) { + return _super.prototype.mapTo.call(this, projectedValue); + }; + MemoryStream.prototype.take = function (amount) { + return _super.prototype.take.call(this, amount); + }; + MemoryStream.prototype.endWhen = function (other) { + return _super.prototype.endWhen.call(this, other); + }; + MemoryStream.prototype.replaceError = function (replace) { + return _super.prototype.replaceError.call(this, replace); + }; + MemoryStream.prototype.remember = function () { + return this; + }; + MemoryStream.prototype.debug = function (labelOrSpy) { + return _super.prototype.debug.call(this, labelOrSpy); + }; + return MemoryStream; +}(Stream)); +exports.MemoryStream = MemoryStream; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = Stream; + +},{}],112:[function(require,module,exports){ +"use strict"; +var core_1 = require('../core'); +var ConcatProducer = (function () { + function ConcatProducer(streams) { + this.streams = streams; + this.type = 'concat'; + this.out = null; + this.i = 0; + } + ConcatProducer.prototype._start = function (out) { + this.out = out; + this.streams[this.i]._add(this); + }; + ConcatProducer.prototype._stop = function () { + var streams = this.streams; + if (this.i < streams.length) { + streams[this.i]._remove(this); + } + this.i = 0; + this.out = null; + }; + ConcatProducer.prototype._n = function (t) { + var u = this.out; + if (!u) + return; + u._n(t); + }; + ConcatProducer.prototype._e = function (err) { + var u = this.out; + if (!u) + return; + u._e(err); + }; + ConcatProducer.prototype._c = function () { + var u = this.out; + if (!u) + return; + var streams = this.streams; + streams[this.i]._remove(this); + if (++this.i < streams.length) { + streams[this.i]._add(this); + } + else { + u._c(); + } + }; + return ConcatProducer; +}()); +/** + * Puts one stream after the other. *concat* is a factory that takes multiple + * streams as arguments, and starts the `n+1`-th stream only when the `n`-th + * stream has completed. It concatenates those streams together. + * + * Marble diagram: + * + * ```text + * --1--2---3---4-| + * ...............--a-b-c--d-| + * concat + * --1--2---3---4---a-b-c--d-| + * ``` + * + * Example: + * + * ```js + * import concat from 'xstream/extra/concat' + * + * const streamA = xs.of('a', 'b', 'c') + * const streamB = xs.of(10, 20, 30) + * const streamC = xs.of('X', 'Y', 'Z') + * + * const outputStream = concat(streamA, streamB, streamC) + * + * outputStream.addListener({ + * next: (x) => console.log(x), + * error: (err) => console.error(err), + * complete: () => console.log('concat completed'), + * }) + * ``` + * + * @factory true + * @param {Stream} stream1 A stream to concatenate together with other streams. + * @param {Stream} stream2 A stream to concatenate together with other streams. Two + * or more streams may be given as arguments. + * @return {Stream} + */ +function concat() { + var streams = []; + for (var _i = 0; _i < arguments.length; _i++) { + streams[_i - 0] = arguments[_i]; + } + return new core_1.Stream(new ConcatProducer(streams)); +} +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = concat; + +},{"../core":111}],113:[function(require,module,exports){ +"use strict"; +var core_1 = require('../core'); +var DelayOperator = (function () { + function DelayOperator(dt, ins) { + this.dt = dt; + this.ins = ins; + this.type = 'delay'; + this.out = null; + } + DelayOperator.prototype._start = function (out) { + this.out = out; + this.ins._add(this); + }; + DelayOperator.prototype._stop = function () { + this.ins._remove(this); + this.out = null; + }; + DelayOperator.prototype._n = function (t) { + var u = this.out; + if (!u) + return; + var id = setInterval(function () { + u._n(t); + clearInterval(id); + }, this.dt); + }; + DelayOperator.prototype._e = function (err) { + var u = this.out; + if (!u) + return; + var id = setInterval(function () { + u._e(err); + clearInterval(id); + }, this.dt); + }; + DelayOperator.prototype._c = function () { + var u = this.out; + if (!u) + return; + var id = setInterval(function () { + u._c(); + clearInterval(id); + }, this.dt); + }; + return DelayOperator; +}()); +/** + * Delays periodic events by a given time period. + * + * Marble diagram: + * + * ```text + * 1----2--3--4----5| + * delay(60) + * ---1----2--3--4----5| + * ``` + * + * Example: + * + * ```js + * import fromDiagram from 'xstream/extra/fromDiagram' + * import delay from 'xstream/extra/delay' + * + * const stream = fromDiagram('1----2--3--4----5|') + * .compose(delay(60)) + * + * stream.addListener({ + * next: i => console.log(i), + * error: err => console.error(err), + * complete: () => console.log('completed') + * }) + * ``` + * + * ```text + * > 1 (after 60 ms) + * > 2 (after 160 ms) + * > 3 (after 220 ms) + * > 4 (after 280 ms) + * > 5 (after 380 ms) + * > completed + * ``` + * + * @param {number} period The amount of silence required in milliseconds. + * @return {Stream} + */ +function delay(period) { + return function delayOperator(ins) { + return new core_1.Stream(new DelayOperator(period, ins)); + }; +} +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = delay; + +},{"../core":111}],114:[function(require,module,exports){ +"use strict"; +var core_1 = require('../core'); +var empty = {}; +var DropRepeatsOperator = (function () { + function DropRepeatsOperator(fn, ins) { + this.fn = fn; + this.ins = ins; + this.type = 'dropRepeats'; + this.out = null; + this.v = empty; + } + DropRepeatsOperator.prototype._start = function (out) { + this.out = out; + this.ins._add(this); + }; + DropRepeatsOperator.prototype._stop = function () { + this.ins._remove(this); + this.out = null; + this.v = empty; + }; + DropRepeatsOperator.prototype.isEq = function (x, y) { + return this.fn ? this.fn(x, y) : x === y; + }; + DropRepeatsOperator.prototype._n = function (t) { + var u = this.out; + if (!u) + return; + var v = this.v; + if (v === empty || !this.isEq(t, v)) { + u._n(t); + } + this.v = t; + }; + DropRepeatsOperator.prototype._e = function (err) { + var u = this.out; + if (!u) + return; + u._e(err); + }; + DropRepeatsOperator.prototype._c = function () { + var u = this.out; + if (!u) + return; + u._c(); + }; + return DropRepeatsOperator; +}()); +exports.DropRepeatsOperator = DropRepeatsOperator; +/** + * Drops consecutive duplicate values in a stream. + * + * Marble diagram: + * + * ```text + * --1--2--1--1--1--2--3--4--3--3| + * dropRepeats + * --1--2--1--------2--3--4--3---| + * ``` + * + * Example: + * + * ```js + * import dropRepeats from 'xstream/extra/dropRepeats' + * + * const stream = xs.of(1, 2, 1, 1, 1, 2, 3, 4, 3, 3) + * .compose(dropRepeats()) + * + * stream.addListener({ + * next: i => console.log(i), + * error: err => console.error(err), + * complete: () => console.log('completed') + * }) + * ``` + * + * ```text + * > 1 + * > 2 + * > 1 + * > 2 + * > 3 + * > 4 + * > 3 + * > completed + * ``` + * + * Example with a custom isEqual function: + * + * ```js + * import dropRepeats from 'xstream/extra/dropRepeats' + * + * const stream = xs.of('a', 'b', 'a', 'A', 'B', 'b') + * .compose(dropRepeats((x, y) => x.toLowerCase() === y.toLowerCase())) + * + * stream.addListener({ + * next: i => console.log(i), + * error: err => console.error(err), + * complete: () => console.log('completed') + * }) + * ``` + * + * ```text + * > a + * > b + * > a + * > B + * > completed + * ``` + * + * @param {Function} isEqual An optional function of type + * `(x: T, y: T) => boolean` that takes an event from the input stream and + * checks if it is equal to previous event, by returning a boolean. + * @return {Stream} + */ +function dropRepeats(isEqual) { + if (isEqual === void 0) { isEqual = null; } + return function dropRepeatsOperator(ins) { + return new core_1.Stream(new DropRepeatsOperator(isEqual, ins)); + }; +} +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = dropRepeats; + +},{"../core":111}],115:[function(require,module,exports){ +"use strict"; +var core_1 = require('./core'); +exports.Stream = core_1.Stream; +exports.MemoryStream = core_1.MemoryStream; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = core_1.Stream; + +},{"./core":111}],116:[function(require,module,exports){ +'use strict'; + +var _xstreamRun = require('@cycle/xstream-run'); + +var _dom = require('@cycle/dom'); + +var _history = require('@cycle/history'); + +var _history2 = require('history'); + +var _storage = require('@cycle/storage'); + +var _storage2 = _interopRequireDefault(_storage); + +var _index = require('./components/TaskList/index'); + +var _index2 = _interopRequireDefault(_index); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var main = _index2.default; + +// THE ENTRY POINT +// This is where the whole story starts. +// `run` receives a main function and an object +// with the drivers. + +// THE MAIN FUNCTION +// This is the todo list component. +(0, _xstreamRun.run)(main, { + // THE DOM DRIVER + // `makeDOMDriver(container)` from Cycle DOM returns a + // driver function to interact with the DOM. + DOM: (0, _dom.makeDOMDriver)('.todoapp', { transposition: true }), + // THE HISTORY DRIVER + // A driver to interact with browser history + History: (0, _history.makeHistoryDriver)((0, _history2.createHistory)(), { capture: true }), + // THE STORAGE DRIVER + // The storage driver which can be used to access values for + // local- and sessionStorage keys as streams. + storage: _storage2.default +}); + +},{"./components/TaskList/index":121,"@cycle/dom":11,"@cycle/history":70,"@cycle/storage":75,"@cycle/xstream-run":83,"history":100}],117:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _intent = require('./intent'); + +var _intent2 = _interopRequireDefault(_intent); + +var _model = require('./model'); + +var _model2 = _interopRequireDefault(_model); + +var _view = require('./view'); + +var _view2 = _interopRequireDefault(_view); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +// THE TODO ITEM FUNCTION +// This is a simple todo item component, +// structured with the MVI-pattern. +function Task(sources) { + var action$ = (0, _intent2.default)(sources); + var state$ = (0, _model2.default)(sources.props$, action$); + var vtree$ = (0, _view2.default)(state$); + + return { + DOM: vtree$, + action$: action$, + state$: state$ + }; +} + +exports.default = Task; + +},{"./intent":118,"./model":119,"./view":120}],118:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + +var _xstream = require('xstream'); + +var _xstream2 = _interopRequireDefault(_xstream); + +var _utils = require('../../utils'); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +// THE TODO ITEM INTENT +// This intent function returns a stream of all the different, +// actions that can be taken on a todo. +function intent(sources) { + // THE INTENT MERGE + // Merge all actions into one stream. + return _xstream2.default.merge( + // THE DESTROY ACTION STREAM + sources.DOM.select('.destroy').events('click').mapTo({ type: 'destroy' }), + + // THE TOGGLE ACTION STREAM + sources.DOM.select('.toggle').events('change').map(function (ev) { + return ev.target.checked; + }).map(function (payload) { + return { type: 'toggle', payload: payload }; + }), sources.action$.filter(function (action) { + return action.type === 'toggleAll'; + }).map(function (action) { + return _extends({}, action, { type: 'toggle' }); + }), + + // THE START EDIT ACTION STREAM + sources.DOM.select('label').events('dblclick').mapTo({ type: 'startEdit' }), + + // THE ESC KEY ACTION STREAM + sources.DOM.select('.edit').events('keyup').filter(function (ev) { + return ev.keyCode === _utils.ESC_KEY; + }).mapTo({ type: 'cancelEdit' }), + + // THE ENTER KEY ACTION STREAM + sources.DOM.select('.edit').events('keyup').filter(function (ev) { + return ev.keyCode === _utils.ENTER_KEY; + }).compose(function (s) { + return _xstream2.default.merge(s, sources.DOM.select('.edit').events('blur', true)); + }).map(function (ev) { + return { title: ev.target.value, type: 'doneEdit' }; + })); +} + +exports.default = intent; + +},{"../../utils":127,"xstream":115}],119:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + +var _xstream = require('xstream'); + +var _xstream2 = _interopRequireDefault(_xstream); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function makeReducer$(action$) { + var startEditReducer$ = action$.filter(function (action) { + return action.type === 'startEdit'; + }).mapTo(function startEditReducer(data) { + return _extends({}, data, { + editing: true + }); + }); + + var doneEditReducer$ = action$.filter(function (action) { + return action.type === 'doneEdit'; + }).map(function (action) { + return function doneEditReducer(data) { + return _extends({}, data, { + title: action.payload, + editing: false + }); + }; + }); + + var cancelEditReducer$ = action$.filter(function (action) { + return action.type === 'cancelEdit'; + }).mapTo(function cancelEditReducer(data) { + return _extends({}, data, { + editing: false + }); + }); + + var toggleReducer$ = action$.filter(function (action) { + return action.type === 'toggle'; + }).map(function (action) { + return function toggleReducer(data) { + return _extends({}, data, { + completed: action.payload + }); + }; + }); + + return _xstream2.default.merge(startEditReducer$, doneEditReducer$, cancelEditReducer$, toggleReducer$); +} + +function model(props$, action$) { + // THE SANITIZED PROPERTIES + // If the list item has no data set it as empty and not completed. + var sanitizedProps$ = props$.startWith({ title: '', completed: false }); + var reducer$ = makeReducer$(action$); + + return sanitizedProps$.map(function (props) { + return reducer$.fold(function (data, reducer) { + return reducer(data); + }, props); + }).flatten().remember(); +} + +exports.default = model; + +},{"xstream":115}],120:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _dom = require('@cycle/dom'); + +function view(state$) { + return state$.map(function (_ref) { + var title = _ref.title; + var completed = _ref.completed; + var editing = _ref.editing; + + var todoRootClasses = { + completed: completed, + editing: editing + }; + + return (0, _dom.li)('.todoRoot', { class: todoRootClasses }, [(0, _dom.div)('.view', [(0, _dom.input)('.toggle', { + props: { type: 'checkbox', checked: completed } + }), (0, _dom.label)(title), (0, _dom.button)('.destroy')]), (0, _dom.input)('.edit', { + props: { type: 'text' }, + hook: { + update: function update(oldVNode, _ref2) { + var elm = _ref2.elm; + + elm.value = title; + if (editing) { + elm.focus(); + elm.selectionStart = elm.value.length; + } + } + } + })]); + }); +} + +exports.default = view; + +},{"@cycle/dom":11}],121:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + +var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); + +var _xstream = require('xstream'); + +var _xstream2 = _interopRequireDefault(_xstream); + +var _isolate = require('@cycle/isolate'); + +var _isolate2 = _interopRequireDefault(_isolate); + +var _intent = require('./intent'); + +var _intent2 = _interopRequireDefault(_intent); + +var _model = require('./model'); + +var _model2 = _interopRequireDefault(_model); + +var _view = require('./view'); + +var _view2 = _interopRequireDefault(_view); + +var _storageSource = require('./storage-source'); + +var _storageSource2 = _interopRequireDefault(_storageSource); + +var _storageSink = require('./storage-sink'); + +var _storageSink2 = _interopRequireDefault(_storageSink); + +var _index = require('../Task/index'); + +var _index2 = _interopRequireDefault(_index); + +var _collection = require('@cycle/collection'); + +var _collection2 = _interopRequireDefault(_collection); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +// THE TASKLIST COMPONENT +// This is the TaskList component which is being exported below. +function TaskList(sources) { + // THE LOCALSTORAGE STREAM + // Here we create a localStorage stream that only streams + // the first value read from localStorage in order to + // supply the application with initial state. + var localStorage$ = sources.storage.local.getItem('todos-cycle').take(1); + // THE INITIAL TODO DATA + // The `deserialize` function takes the serialized JSON stored in localStorage + // and turns it into a stream sending a JSON object. + var sourceTodosData$ = (0, _storageSource2.default)(localStorage$); + // THE INTENT (MVI PATTERN) + // Pass relevant sources to the intent function, which set up + // streams that model the users actions. + var action$ = (0, _intent2.default)(sources.DOM, sources.History); + // THE MODEL (MVI PATTERN) + // Actions get passed to the model function which transforms the data + // coming through and prepares the data for the view. + var state$ = (0, _model2.default)(action$, sourceTodosData$); + // THE ITEM ADDITION STREAM + // Emits objects of sources specific to each item. + // Merges stored items with new items + var add$ = _xstream2.default.merge(sourceTodosData$.map(function (data) { + return data.list.map(function (props) { + return { props$: _xstream2.default.of(props) }; + }); + }), action$.filter(function (action) { + return action.type === 'insertTodo'; + }).map(function (action) { + return { + props$: _xstream2.default.of({ + title: action.payload, + completed: false + }) + }; + })); + // THE ITEM REMOVAL SELECTOR FUNCTION + // This function takes item's sinks and returns a stream representing + // its removal. Merges internal removals and `deleteCompleteds` actions + function removeSelector(itemSinks) { + var deleteCompleteds$ = action$.filter(function (action) { + return action.type === 'deleteCompleteds'; + }); + return _xstream2.default.merge( + // Consider deleteCompleteds$ only if the task is completed. + // analogue of rx pausable + itemSinks.state$.map(function (state) { + return deleteCompleteds$.filter(function () { + return state.completed; + }); + }).flatten(), itemSinks.action$.filter(function (action) { + return action.type === 'destroy'; + })); + } + // THE COLLECTION STREAM + // Collection function takes a component function, a common sources object, + // a stream of item additions, and a selector function from item sinks to + // a stream of removals + var list$ = (0, _collection2.default)(_index2.default, { + DOM: sources.DOM, + action$: action$.filter(function (action) { + return action.type === 'toggleAll'; + }) + }, add$, removeSelector); + // THE COMBINED CHILDREN VTREE AND STATE STREAMS + var todoVtrees$ = _collection2.default.pluck(list$, function (itemSinks) { + return itemSinks.DOM; + }); + var todoStates$ = _collection2.default.pluck(list$, function (itemSinks) { + return itemSinks.state$; + }); + + var amendedState$ = _xstream2.default.combine(state$, todoVtrees$, todoStates$).map(function (_ref) { + var _ref2 = _slicedToArray(_ref, 3); + + var parentState = _ref2[0]; + var todoVtrees = _ref2[1]; + var todoStates = _ref2[2]; + return _extends({}, parentState, { + list: todoStates.map(function (state, i) { + return _extends({}, state, { + todoItem: { DOM: todoVtrees[i] } + }); + }) + }); + }); + // THE VIEW (MVI PATTERN) + // We render state as markup for the DOM. + var vdom$ = (0, _view2.default)(amendedState$); + // WRITE TO LOCALSTORAGE + // The latest state is written to localStorage. + var storage$ = (0, _storageSink2.default)(amendedState$).map(function (state) { + return { + key: 'todos-cycle', value: state + }; + }); + // COMPLETE THE CYCLE + // Write the virtual dom stream to the DOM and write the + // storage stream to localStorage. + var sinks = { + DOM: vdom$, + storage: storage$ + }; + return sinks; +} + +exports.default = TaskList; + +},{"../Task/index":117,"./intent":122,"./model":123,"./storage-sink":124,"./storage-source":125,"./view":126,"@cycle/collection":1,"@cycle/isolate":74,"xstream":115}],122:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = intent; + +var _xstream = require('xstream'); + +var _xstream2 = _interopRequireDefault(_xstream); + +var _dropRepeats = require('xstream/extra/dropRepeats'); + +var _dropRepeats2 = _interopRequireDefault(_dropRepeats); + +var _utils = require('../../utils'); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +// THE INTENT FOR THE LIST +function intent(DOMSource, History) { + return _xstream2.default.merge( + // THE ROUTE STREAM + // A stream that provides the path whenever the route changes. + History.startWith({ pathname: '/' }).map(function (location) { + return location.pathname; + }).compose((0, _dropRepeats2.default)()).map(function (payload) { + return { type: 'changeRoute', payload: payload }; + }), + + // THE URL STREAM + // A stream of URL clicks in the app + DOMSource.select('a').events('click').map(function (event) { + return event.target.hash.replace('#', ''); + }).map(function (payload) { + return { type: 'url', payload: payload }; + }), + + // CLEAR INPUT STREAM + // A stream of ESC key strokes in the `.new-todo` field. + DOMSource.select('.new-todo').events('keydown').filter(function (ev) { + return ev.keyCode === _utils.ESC_KEY; + }).map(function (payload) { + return { type: 'clearInput', payload: payload }; + }), + + // ENTER KEY STREAM + // A stream of ENTER key strokes in the `.new-todo` field. + DOMSource.select('.new-todo').events('keydown') + // Trim value and only let the data through when there + // is anything but whitespace in the field and the ENTER key was hit. + .filter(function (ev) { + var trimmedVal = String(ev.target.value).trim(); + return ev.keyCode === _utils.ENTER_KEY && trimmedVal; + }) + // Return the trimmed value. + .map(function (ev) { + return String(ev.target.value).trim(); + }).map(function (payload) { + return { type: 'insertTodo', payload: payload }; + }), + + // TOGGLE ALL STREAM + // Create a stream out of the clicks on the `.toggle-all` button. + DOMSource.select('.toggle-all').events('click').map(function (ev) { + return ev.target.checked; + }).map(function (payload) { + return { type: 'toggleAll', payload: payload }; + }), + + // DELETE COMPLETED TODOS STREAM + // A stream of click events on the `.clear-completed` element. + DOMSource.select('.clear-completed').events('click').mapTo({ type: 'deleteCompleteds' })); +}; + +},{"../../utils":127,"xstream":115,"xstream/extra/dropRepeats":114}],123:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _xstream = require('xstream'); + +var _xstream2 = _interopRequireDefault(_xstream); + +var _concat = require('xstream/extra/concat'); + +var _concat2 = _interopRequireDefault(_concat); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +// A helper function that provides filter functions +// depending on the route value. +function getFilterFn(route) { + switch (route) { + case '/active': + return function (task) { + return task.completed === false; + }; + case '/completed': + return function (task) { + return task.completed === true; + }; + default: + return function () { + return true; + }; // allow anything + } +} + +// MAKE REDUCER STREAM +// A function that takes the actions on the todo list +// and returns a stream of "reducers": functions that expect the current +// todosData (the state) and return a new version of todosData. +function makeReducer$(action$) { + var clearInputReducer$ = action$.filter(function (a) { + return a.type === 'clearInput'; + }).mapTo(function clearInputReducer(todosData) { + return todosData; + }); + + var changeRouteReducer$ = action$.filter(function (a) { + return a.type === 'changeRoute'; + }).map(function (a) { + return a.payload; + }).startWith('/').map(function (path) { + var filterFn = getFilterFn(path); + return function changeRouteReducer(todosData) { + todosData.filter = path.replace('/', '').trim(); + todosData.filterFn = filterFn; + return todosData; + }; + }); + + return _xstream2.default.merge(clearInputReducer$, changeRouteReducer$); +} + +// THIS IS THE MODEL FUNCTION +// It expects the actions coming in from the sources +function model(action$, sourceTodosData$) { + // THE BUSINESS LOGIC + // Actions are passed to the `makeReducer$` function + // which creates a stream of reducer functions that needs + // to be applied on the todoData when an action happens. + var reducer$ = makeReducer$(action$); + + // RETURN THE MODEL DATA + return sourceTodosData$.map(function (sourceTodosData) { + return reducer$.fold(function (todosData, reducer) { + return reducer(todosData); + }, sourceTodosData); + }).flatten() + // Make this remember its latest event, so late listeners + // will be updated with the latest state. + .remember(); +} + +exports.default = model; + +},{"xstream":115,"xstream/extra/concat":112}],124:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = serialize; +// Turn the data object that contains +// the todos into a string for localStorage. +function serialize(todos$) { + return todos$.map(function (todosData) { + return JSON.stringify({ + list: todosData.list.map(function (todoData) { + return { + title: todoData.title, + completed: todoData.completed + }; + }) + }); + }); +}; + +},{}],125:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = deserialize; +function merge() { + var result = {}; + for (var i = 0; i < arguments.length; i++) { + var object = arguments[i]; + for (var key in object) { + if (object.hasOwnProperty(key)) { + result[key] = object[key]; + } + } + } + return result; +} + +var safeJSONParse = function safeJSONParse(str) { + return JSON.parse(str) || {}; +}; + +var mergeWithDefaultTodosData = function mergeWithDefaultTodosData(todosData) { + return merge({ + list: [], + filter: '', + filterFn: function filterFn() { + return true; + } }, todosData); +}; + +// Take localStorage todoData stream and transform into +// a JavaScript object. Set default data. +function deserialize(localStorageValue$) { + return localStorageValue$.map(safeJSONParse).map(mergeWithDefaultTodosData); +}; + +},{}],126:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = view; + +var _dom = require('@cycle/dom'); + +function renderHeader() { + return (0, _dom.header)('.header', [(0, _dom.h1)('todos'), (0, _dom.input)('.new-todo', { + props: { + type: 'text', + placeholder: 'What needs to be done?', + autofocus: true, + name: 'newTodo' + }, + hook: { + update: function update(oldVNode, _ref) { + var elm = _ref.elm; + + elm.value = ''; + } + } + })]); +} + +function renderMainSection(todosData) { + var allCompleted = todosData.list.reduce(function (x, y) { + return x && y.completed; + }, true); + var sectionStyle = { 'display': todosData.list.length ? '' : 'none' }; + + return (0, _dom.section)('.main', { style: sectionStyle }, [(0, _dom.input)('.toggle-all', { + props: { type: 'checkbox', checked: allCompleted } + }), (0, _dom.ul)('.todo-list', todosData.list.filter(todosData.filterFn).map(function (data) { + return data.todoItem.DOM; + }))]); +} + +function renderFilterButton(todosData, filterTag, path, label) { + return (0, _dom.li)([(0, _dom.a)({ + props: { href: path }, + class: { selected: todosData.filter === filterTag } + }, label)]); +} + +function renderFooter(todosData) { + var amountCompleted = todosData.list.filter(function (todoData) { + return todoData.completed; + }).length; + var amountActive = todosData.list.length - amountCompleted; + var footerStyle = { 'display': todosData.list.length ? '' : 'none' }; + + return (0, _dom.footer)('.footer', { style: footerStyle }, [(0, _dom.span)('.todo-count', [(0, _dom.strong)(String(amountActive)), ' item' + (amountActive !== 1 ? 's' : '') + ' left']), (0, _dom.ul)('.filters', [renderFilterButton(todosData, '', '/', 'All'), renderFilterButton(todosData, 'active', '/active', 'Active'), renderFilterButton(todosData, 'completed', '/completed', 'Completed')]), amountCompleted > 0 ? (0, _dom.button)('.clear-completed', 'Clear completed (' + amountCompleted + ')') : null]); +} + +// THE VIEW +// This function expects the stream of todosData +// from the model function and turns it into a +// virtual DOM stream that is then ultimately returned into +// the DOM sink in the index.js. +function view(todos$) { + return todos$.map(function (todos) { + return (0, _dom.div)([renderHeader(), renderMainSection(todos), renderFooter(todos)]); + }); +}; + +},{"@cycle/dom":11}],127:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +var ENTER_KEY = 13; +var ESC_KEY = 27; + +exports.ENTER_KEY = ENTER_KEY; +exports.ESC_KEY = ESC_KEY; + +},{}]},{},[116]) +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy93YXRjaGlmeS9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvYnJvd3Nlci1wYWNrL19wcmVsdWRlLmpzIiwibm9kZV9tb2R1bGVzL0BjeWNsZS9jb2xsZWN0aW9uL2xpYi9jb2xsZWN0aW9uLmpzIiwibm9kZV9tb2R1bGVzL0BjeWNsZS9kb20vbGliL0VsZW1lbnRGaW5kZXIuanMiLCJub2RlX21vZHVsZXMvQGN5Y2xlL2RvbS9saWIvRXZlbnREZWxlZ2F0b3IuanMiLCJub2RlX21vZHVsZXMvQGN5Y2xlL2RvbS9saWIvSFRNTFNvdXJjZS5qcyIsIm5vZGVfbW9kdWxlcy9AY3ljbGUvZG9tL2xpYi9NYWluRE9NU291cmNlLmpzIiwibm9kZV9tb2R1bGVzL0BjeWNsZS9kb20vbGliL1Njb3BlQ2hlY2tlci5qcyIsIm5vZGVfbW9kdWxlcy9AY3ljbGUvZG9tL2xpYi9WTm9kZVdyYXBwZXIuanMiLCJub2RlX21vZHVsZXMvQGN5Y2xlL2RvbS9saWIvZnJvbUV2ZW50LmpzIiwibm9kZV9tb2R1bGVzL0BjeWNsZS9kb20vbGliL2h5cGVyc2NyaXB0LWhlbHBlcnMuanMiLCJub2RlX21vZHVsZXMvQGN5Y2xlL2RvbS9saWIvaHlwZXJzY3JpcHQuanMiLCJub2RlX21vZHVsZXMvQGN5Y2xlL2RvbS9saWIvaW5kZXguanMiLCJub2RlX21vZHVsZXMvQGN5Y2xlL2RvbS9saWIvaXNvbGF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9AY3ljbGUvZG9tL2xpYi9pc29sYXRlTW9kdWxlLmpzIiwibm9kZV9tb2R1bGVzL0BjeWNsZS9kb20vbGliL21ha2VET01Ecml2ZXIuanMiLCJub2RlX21vZHVsZXMvQGN5Y2xlL2RvbS9saWIvbWFrZUhUTUxEcml2ZXIuanMiLCJub2RlX21vZHVsZXMvQGN5Y2xlL2RvbS9saWIvbW9ja0RPTVNvdXJjZS5qcyIsIm5vZGVfbW9kdWxlcy9AY3ljbGUvZG9tL2xpYi9tb2R1bGVzLmpzIiwibm9kZV9tb2R1bGVzL0BjeWNsZS9kb20vbGliL3RyYW5zcG9zaXRpb24uanMiLCJub2RlX21vZHVsZXMvQGN5Y2xlL2RvbS9saWIvdXRpbHMuanMiLCJub2RlX21vZHVsZXMvQGN5Y2xlL2RvbS9ub2RlX21vZHVsZXMvQGN5Y2xlL3hzdHJlYW0tYWRhcHRlci9saWIvaW5kZXguanMiLCJub2RlX21vZHVsZXMvQGN5Y2xlL2RvbS9ub2RlX21vZHVsZXMvbWF0Y2hlcy1zZWxlY3Rvci9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9AY3ljbGUvZG9tL25vZGVfbW9kdWxlcy9zbmFiYmRvbS1zZWxlY3Rvci9saWIvY2xhc3NOYW1lRnJvbVZOb2RlLmpzIiwibm9kZV9tb2R1bGVzL0BjeWNsZS9kb20vbm9kZV9tb2R1bGVzL3NuYWJiZG9tLXNlbGVjdG9yL2xpYi9zZWxlY3RvclBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9AY3ljbGUvZG9tL25vZGVfbW9kdWxlcy9zbmFiYmRvbS1zZWxlY3Rvci9ub2RlX21vZHVsZXMvYnJvd3Nlci1zcGxpdC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9AY3ljbGUvZG9tL25vZGVfbW9kdWxlcy9zbmFiYmRvbS10by1odG1sL2xpYi9jb250YWluZXItZWxlbWVudHMuanMiLCJub2RlX21vZHVsZXMvQGN5Y2xlL2RvbS9ub2RlX21vZHVsZXMvc25hYmJkb20tdG8taHRtbC9saWIvaW5kZXguanMiLCJub2RlX21vZHVsZXMvQGN5Y2xlL2RvbS9ub2RlX21vZHVsZXMvc25hYmJkb20tdG8taHRtbC9saWIvaW5pdC5qcyIsIm5vZGVfbW9kdWxlcy9AY3ljbGUvZG9tL25vZGVfbW9kdWxlcy9zbmFiYmRvbS10by1odG1sL2xpYi9tb2R1bGVzL2F0dHJpYnV0ZXMuanMiLCJub2RlX21vZHVsZXMvQGN5Y2xlL2RvbS9ub2RlX21vZHVsZXMvc25hYmJkb20tdG8taHRtbC9saWIvbW9kdWxlcy9zdHlsZS5qcyIsIm5vZGVfbW9kdWxlcy9AY3ljbGUvZG9tL25vZGVfbW9kdWxlcy9zbmFiYmRvbS10by1odG1sL2xpYi9wYXJzZS1zZWxlY3Rvci5qcyIsIm5vZGVfbW9kdWxlcy9AY3ljbGUvZG9tL25vZGVfbW9kdWxlcy9zbmFiYmRvbS10by1odG1sL2xpYi92b2lkLWVsZW1lbnRzLmpzIiwibm9kZV9tb2R1bGVzL0BjeWNsZS9kb20vbm9kZV9tb2R1bGVzL3NuYWJiZG9tLXRvLWh0bWwvbm9kZV9tb2R1bGVzL2xvZGFzaC5lc2NhcGUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvQGN5Y2xlL2RvbS9ub2RlX21vZHVsZXMvc25hYmJkb20tdG8taHRtbC9ub2RlX21vZHVsZXMvbG9kYXNoLmVzY2FwZS9ub2RlX21vZHVsZXMvbG9kYXNoLl9yb290L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL0BjeWNsZS9kb20vbm9kZV9tb2R1bGVzL3NuYWJiZG9tLXRvLWh0bWwvbm9kZV9tb2R1bGVzL2xvZGFzaC5mb3Jvd24vaW5kZXguanMiLCJub2RlX21vZHVsZXMvQGN5Y2xlL2RvbS9ub2RlX21vZHVsZXMvc25hYmJkb20tdG8taHRtbC9ub2RlX21vZHVsZXMvbG9kYXNoLmZvcm93bi9ub2RlX21vZHVsZXMvbG9kYXNoLl9iYXNlZm9yL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL0BjeWNsZS9kb20vbm9kZV9tb2R1bGVzL3NuYWJiZG9tLXRvLWh0bWwvbm9kZV9tb2R1bGVzL2xvZGFzaC5mb3Jvd24vbm9kZV9tb2R1bGVzL2xvZGFzaC5fYmluZGNhbGxiYWNrL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL0BjeWNsZS9kb20vbm9kZV9tb2R1bGVzL3NuYWJiZG9tLXRvLWh0bWwvbm9kZV9tb2R1bGVzL2xvZGFzaC5mb3Jvd24vbm9kZV9tb2R1bGVzL2xvZGFzaC5rZXlzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL0BjeWNsZS9kb20vbm9kZV9tb2R1bGVzL3NuYWJiZG9tLXRvLWh0bWwvbm9kZV9tb2R1bGVzL2xvZGFzaC5mb3Jvd24vbm9kZV9tb2R1bGVzL2xvZGFzaC5rZXlzL25vZGVfbW9kdWxlcy9sb2Rhc2guX2dldG5hdGl2ZS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9AY3ljbGUvZG9tL25vZGVfbW9kdWxlcy9zbmFiYmRvbS10by1odG1sL25vZGVfbW9kdWxlcy9sb2Rhc2guZm9yb3duL25vZGVfbW9kdWxlcy9sb2Rhc2gua2V5cy9ub2RlX21vZHVsZXMvbG9kYXNoLmlzYXJndW1lbnRzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL0BjeWNsZS9kb20vbm9kZV9tb2R1bGVzL3NuYWJiZG9tLXRvLWh0bWwvbm9kZV9tb2R1bGVzL2xvZGFzaC5mb3Jvd24vbm9kZV9tb2R1bGVzL2xvZGFzaC5rZXlzL25vZGVfbW9kdWxlcy9sb2Rhc2guaXNhcnJheS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9AY3ljbGUvZG9tL25vZGVfbW9kdWxlcy9zbmFiYmRvbS10by1odG1sL25vZGVfbW9kdWxlcy9sb2Rhc2gua2ViYWJjYXNlL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL0BjeWNsZS9kb20vbm9kZV9tb2R1bGVzL3NuYWJiZG9tLXRvLWh0bWwvbm9kZV9tb2R1bGVzL2xvZGFzaC5rZWJhYmNhc2Uvbm9kZV9tb2R1bGVzL2xvZGFzaC5kZWJ1cnIvaW5kZXguanMiLCJub2RlX21vZHVsZXMvQGN5Y2xlL2RvbS9ub2RlX21vZHVsZXMvc25hYmJkb20tdG8taHRtbC9ub2RlX21vZHVsZXMvbG9kYXNoLmtlYmFiY2FzZS9ub2RlX21vZHVsZXMvbG9kYXNoLmRlYnVyci9ub2RlX21vZHVsZXMvbG9kYXNoLl9yb290L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL0BjeWNsZS9kb20vbm9kZV9tb2R1bGVzL3NuYWJiZG9tLXRvLWh0bWwvbm9kZV9tb2R1bGVzL2xvZGFzaC5rZWJhYmNhc2Uvbm9kZV9tb2R1bGVzL2xvZGFzaC53b3Jkcy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9AY3ljbGUvZG9tL25vZGVfbW9kdWxlcy9zbmFiYmRvbS10by1odG1sL25vZGVfbW9kdWxlcy9sb2Rhc2gua2ViYWJjYXNlL25vZGVfbW9kdWxlcy9sb2Rhc2gud29yZHMvbm9kZV9tb2R1bGVzL2xvZGFzaC5fcm9vdC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9AY3ljbGUvZG9tL25vZGVfbW9kdWxlcy9zbmFiYmRvbS10by1odG1sL25vZGVfbW9kdWxlcy9sb2Rhc2gudW5pb24vaW5kZXguanMiLCJub2RlX21vZHVsZXMvQGN5Y2xlL2RvbS9ub2RlX21vZHVsZXMvc25hYmJkb20tdG8taHRtbC9ub2RlX21vZHVsZXMvbG9kYXNoLnVuaW9uL25vZGVfbW9kdWxlcy9sb2Rhc2guX2Jhc2VmbGF0dGVuL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL0BjeWNsZS9kb20vbm9kZV9tb2R1bGVzL3NuYWJiZG9tLXRvLWh0bWwvbm9kZV9tb2R1bGVzL2xvZGFzaC51bmlvbi9ub2RlX21vZHVsZXMvbG9kYXNoLl9iYXNldW5pcS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9AY3ljbGUvZG9tL25vZGVfbW9kdWxlcy9zbmFiYmRvbS10by1odG1sL25vZGVfbW9kdWxlcy9sb2Rhc2gudW5pb24vbm9kZV9tb2R1bGVzL2xvZGFzaC5fYmFzZXVuaXEvbm9kZV9tb2R1bGVzL2xvZGFzaC5fYmFzZWluZGV4b2YvaW5kZXguanMiLCJub2RlX21vZHVsZXMvQGN5Y2xlL2RvbS9ub2RlX21vZHVsZXMvc25hYmJkb20tdG8taHRtbC9ub2RlX21vZHVsZXMvbG9kYXNoLnVuaW9uL25vZGVfbW9kdWxlcy9sb2Rhc2guX2Jhc2V1bmlxL25vZGVfbW9kdWxlcy9sb2Rhc2guX2NhY2hlaW5kZXhvZi9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9AY3ljbGUvZG9tL25vZGVfbW9kdWxlcy9zbmFiYmRvbS10by1odG1sL25vZGVfbW9kdWxlcy9sb2Rhc2gudW5pb24vbm9kZV9tb2R1bGVzL2xvZGFzaC5fYmFzZXVuaXEvbm9kZV9tb2R1bGVzL2xvZGFzaC5fY3JlYXRlY2FjaGUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvQGN5Y2xlL2RvbS9ub2RlX21vZHVsZXMvc25hYmJkb20tdG8taHRtbC9ub2RlX21vZHVsZXMvbG9kYXNoLnVuaW9uL25vZGVfbW9kdWxlcy9sb2Rhc2gucmVzdHBhcmFtL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL0BjeWNsZS9kb20vbm9kZV9tb2R1bGVzL3NuYWJiZG9tL2guanMiLCJub2RlX21vZHVsZXMvQGN5Y2xlL2RvbS9ub2RlX21vZHVsZXMvc25hYmJkb20vaHRtbGRvbWFwaS5qcyIsIm5vZGVfbW9kdWxlcy9AY3ljbGUvZG9tL25vZGVfbW9kdWxlcy9zbmFiYmRvbS9pcy5qcyIsIm5vZGVfbW9kdWxlcy9AY3ljbGUvZG9tL25vZGVfbW9kdWxlcy9zbmFiYmRvbS9tb2R1bGVzL2F0dHJpYnV0ZXMuanMiLCJub2RlX21vZHVsZXMvQGN5Y2xlL2RvbS9ub2RlX21vZHVsZXMvc25hYmJkb20vbW9kdWxlcy9jbGFzcy5qcyIsIm5vZGVfbW9kdWxlcy9AY3ljbGUvZG9tL25vZGVfbW9kdWxlcy9zbmFiYmRvbS9tb2R1bGVzL2V2ZW50bGlzdGVuZXJzLmpzIiwibm9kZV9tb2R1bGVzL0BjeWNsZS9kb20vbm9kZV9tb2R1bGVzL3NuYWJiZG9tL21vZHVsZXMvaGVyby5qcyIsIm5vZGVfbW9kdWxlcy9AY3ljbGUvZG9tL25vZGVfbW9kdWxlcy9zbmFiYmRvbS9tb2R1bGVzL3Byb3BzLmpzIiwibm9kZV9tb2R1bGVzL0BjeWNsZS9kb20vbm9kZV9tb2R1bGVzL3NuYWJiZG9tL21vZHVsZXMvc3R5bGUuanMiLCJub2RlX21vZHVsZXMvQGN5Y2xlL2RvbS9ub2RlX21vZHVsZXMvc25hYmJkb20vc25hYmJkb20uanMiLCJub2RlX21vZHVsZXMvQGN5Y2xlL2RvbS9ub2RlX21vZHVsZXMvc25hYmJkb20vdGh1bmsuanMiLCJub2RlX21vZHVsZXMvQGN5Y2xlL2RvbS9ub2RlX21vZHVsZXMvc25hYmJkb20vdm5vZGUuanMiLCJub2RlX21vZHVsZXMvQGN5Y2xlL2hpc3RvcnkvbGliL2NhcHR1cmVDbGlja3MuanMiLCJub2RlX21vZHVsZXMvQGN5Y2xlL2hpc3RvcnkvbGliL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL0BjeWNsZS9oaXN0b3J5L2xpYi9tYWtlSGlzdG9yeURyaXZlci5qcyIsIm5vZGVfbW9kdWxlcy9AY3ljbGUvaGlzdG9yeS9saWIvc2VydmVySGlzdG9yeS5qcyIsIm5vZGVfbW9kdWxlcy9AY3ljbGUvaGlzdG9yeS9saWIvdXRpbC5qcyIsIm5vZGVfbW9kdWxlcy9AY3ljbGUvaXNvbGF0ZS9saWIvaW5kZXguanMiLCJub2RlX21vZHVsZXMvQGN5Y2xlL3N0b3JhZ2UvbGliL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL0BjeWNsZS9zdG9yYWdlL2xpYi9yZXNwb25zZUNvbGxlY3Rpb24uanMiLCJub2RlX21vZHVsZXMvQGN5Y2xlL3N0b3JhZ2UvbGliL3V0aWwuanMiLCJub2RlX21vZHVsZXMvQGN5Y2xlL3N0b3JhZ2UvbGliL3dyaXRlVG9TdG9yZS5qcyIsIm5vZGVfbW9kdWxlcy9AY3ljbGUvc3RvcmFnZS9ub2RlX21vZHVsZXMvQGN5Y2xlL3hzdHJlYW0tYWRhcHRlci9saWIvaW5kZXguanMiLCJub2RlX21vZHVsZXMvQGN5Y2xlL3N0b3JhZ2Uvbm9kZV9tb2R1bGVzL3hzdHJlYW0vY29yZS5qcyIsIm5vZGVfbW9kdWxlcy9AY3ljbGUvc3RvcmFnZS9ub2RlX21vZHVsZXMveHN0cmVhbS9leHRyYS9kcm9wUmVwZWF0cy5qcyIsIm5vZGVfbW9kdWxlcy9AY3ljbGUvc3RvcmFnZS9ub2RlX21vZHVsZXMveHN0cmVhbS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9AY3ljbGUveHN0cmVhbS1ydW4vbGliL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL0BjeWNsZS94c3RyZWFtLXJ1bi9ub2RlX21vZHVsZXMvQGN5Y2xlL2Jhc2UvbGliL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2hpc3RvcnkvbGliL0FjdGlvbnMuanMiLCJub2RlX21vZHVsZXMvaGlzdG9yeS9saWIvQXN5bmNVdGlscy5qcyIsIm5vZGVfbW9kdWxlcy9oaXN0b3J5L2xpYi9Ccm93c2VyUHJvdG9jb2wuanMiLCJub2RlX21vZHVsZXMvaGlzdG9yeS9saWIvRE9NU3RhdGVTdG9yYWdlLmpzIiwibm9kZV9tb2R1bGVzL2hpc3RvcnkvbGliL0RPTVV0aWxzLmpzIiwibm9kZV9tb2R1bGVzL2hpc3RvcnkvbGliL0V4ZWN1dGlvbkVudmlyb25tZW50LmpzIiwibm9kZV9tb2R1bGVzL2hpc3RvcnkvbGliL0hhc2hQcm90b2NvbC5qcyIsIm5vZGVfbW9kdWxlcy9oaXN0b3J5L2xpYi9Mb2NhdGlvblV0aWxzLmpzIiwibm9kZV9tb2R1bGVzL2hpc3RvcnkvbGliL1BhdGhVdGlscy5qcyIsIm5vZGVfbW9kdWxlcy9oaXN0b3J5L2xpYi9SZWZyZXNoUHJvdG9jb2wuanMiLCJub2RlX21vZHVsZXMvaGlzdG9yeS9saWIvY3JlYXRlQnJvd3Nlckhpc3RvcnkuanMiLCJub2RlX21vZHVsZXMvaGlzdG9yeS9saWIvY3JlYXRlSGFzaEhpc3RvcnkuanMiLCJub2RlX21vZHVsZXMvaGlzdG9yeS9saWIvY3JlYXRlSGlzdG9yeS5qcyIsIm5vZGVfbW9kdWxlcy9oaXN0b3J5L2xpYi9jcmVhdGVNZW1vcnlIaXN0b3J5LmpzIiwibm9kZV9tb2R1bGVzL2hpc3RvcnkvbGliL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2hpc3RvcnkvbGliL3J1blRyYW5zaXRpb25Ib29rLmpzIiwibm9kZV9tb2R1bGVzL2hpc3RvcnkvbGliL3VzZUJhc2VuYW1lLmpzIiwibm9kZV9tb2R1bGVzL2hpc3RvcnkvbGliL3VzZUJlZm9yZVVubG9hZC5qcyIsIm5vZGVfbW9kdWxlcy9oaXN0b3J5L2xpYi91c2VRdWVyaWVzLmpzIiwibm9kZV9tb2R1bGVzL2hpc3Rvcnkvbm9kZV9tb2R1bGVzL2ludmFyaWFudC9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL2hpc3Rvcnkvbm9kZV9tb2R1bGVzL3F1ZXJ5LXN0cmluZy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9oaXN0b3J5L25vZGVfbW9kdWxlcy9xdWVyeS1zdHJpbmcvbm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiLCJub2RlX21vZHVsZXMvaGlzdG9yeS9ub2RlX21vZHVsZXMvcXVlcnktc3RyaW5nL25vZGVfbW9kdWxlcy9zdHJpY3QtdXJpLWVuY29kZS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9oaXN0b3J5L25vZGVfbW9kdWxlcy93YXJuaW5nL2Jyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvd2F0Y2hpZnkvbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3Byb2Nlc3MvYnJvd3Nlci5qcyIsIm5vZGVfbW9kdWxlcy94c3RyZWFtL2NvcmUuanMiLCJub2RlX21vZHVsZXMveHN0cmVhbS9leHRyYS9jb25jYXQuanMiLCJub2RlX21vZHVsZXMveHN0cmVhbS9leHRyYS9kZWxheS5qcyIsIm5vZGVfbW9kdWxlcy94c3RyZWFtL2V4dHJhL2Ryb3BSZXBlYXRzLmpzIiwibm9kZV9tb2R1bGVzL3hzdHJlYW0vaW5kZXguanMiLCJzcmMvYXBwLmpzIiwic3JjL2NvbXBvbmVudHMvVGFzay9pbmRleC5qcyIsInNyYy9jb21wb25lbnRzL1Rhc2svaW50ZW50LmpzIiwic3JjL2NvbXBvbmVudHMvVGFzay9tb2RlbC5qcyIsInNyYy9jb21wb25lbnRzL1Rhc2svdmlldy5qcyIsInNyYy9jb21wb25lbnRzL1Rhc2tMaXN0L2luZGV4LmpzIiwic3JjL2NvbXBvbmVudHMvVGFza0xpc3QvaW50ZW50LmpzIiwic3JjL2NvbXBvbmVudHMvVGFza0xpc3QvbW9kZWwuanMiLCJzcmMvY29tcG9uZW50cy9UYXNrTGlzdC9zdG9yYWdlLXNpbmsuanMiLCJzcmMvY29tcG9uZW50cy9UYXNrTGlzdC9zdG9yYWdlLXNvdXJjZS5qcyIsInNyYy9jb21wb25lbnRzL1Rhc2tMaXN0L3ZpZXcuanMiLCJzcmMvdXRpbHMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JCQTtBQUNBO0FBQ0E7QUFDQTs7QUNIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ3BMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUMzREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUN2TEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDM0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUN0TUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDM0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7QUNuSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNyREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7O0FDM0ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM1FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNSQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hxREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1BBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUMxR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDckZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ2hGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUN2SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQ25GQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDMUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDdENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDOUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNoSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNuTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQzNJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNwREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUN4QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUM5R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQy9FQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQzFIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ25EQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDNURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlyREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9GQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDTkE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7QUFHQTs7Ozs7O0FBRUEsSUFBTSxzQkFBTjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFUQTtBQUNBO0FBU0EscUJBQUksSUFBSixFQUFVO0FBQ1I7QUFDQTtBQUNBO0FBQ0EsT0FBSyx3QkFBYyxVQUFkLEVBQTBCLEVBQUMsZUFBZSxJ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QXdDLEdBQW5FLENBREQsR0FFRyxJQVp5QyxDQUF4QyxDQUFQO0FBZUQ7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNlLFNBQVMsSUFBVCxDQUFjLE1BQWQsRUFBc0I7QUFDbkMsU0FBTyxPQUFPLEdBQVAsQ0FBVztBQUFBLFdBQ2hCLGNBQUksQ0FDRixjQURFLEVBRUYsa0JBQWtCLEtBQWxCLENBRkUsRUFHRixhQUFhLEtBQWIsQ0FIRSxDQUFKLENBRGdCO0FBQUEsR0FBWCxDQUFQO0FBT0Q7Ozs7Ozs7O0FDbkZELElBQU0sWUFBWSxFQUFsQjtBQUNBLElBQU0sVUFBVSxFQUFoQjs7UUFFUSxTLEdBQUEsUztRQUFXLE8sR0FBQSxPIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gcyhvLHUpe2lmKCFuW29dKXtpZighdFtvXSl7dmFyIGE9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3ZhciBmPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrbytcIidcIik7dGhyb3cgZi5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGZ9dmFyIGw9bltvXT17ZXhwb3J0czp7fX07dFtvXVswXS5jYWxsKGwuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W29dWzFdW2VdO3JldHVybiBzKG4/bjplKX0sbCxsLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bb10uZXhwb3J0c312YXIgaT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcblxudmFyIF94c3RyZWFtID0gcmVxdWlyZSgneHN0cmVhbScpO1xuXG52YXIgX3hzdHJlYW0yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfeHN0cmVhbSk7XG5cbnZhciBfZGVsYXkgPSByZXF1aXJlKCd4c3RyZWFtL2V4dHJhL2RlbGF5Jyk7XG5cbnZhciBfZGVsYXkyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZGVsYXkpO1xuXG52YXIgX2Ryb3BSZXBlYXRzID0gcmVxdWlyZSgneHN0cmVhbS9leHRyYS9kcm9wUmVwZWF0cycpO1xuXG52YXIgX2Ryb3BSZXBlYXRzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2Ryb3BSZXBlYXRzKTtcblxudmFyIF9pc29sYXRlID0gcmVxdWlyZSgnQGN5Y2xlL2lzb2xhdGUnKTtcblxudmFyIF9pc29sYXRlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2lzb2xhdGUpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBBcnJheShhcnIubGVuZ3RoKTsgaSA8IGFyci5sZW5ndGg7IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9IGVsc2UgeyByZXR1cm4gQXJyYXkuZnJvbShhcnIpOyB9IH1cblxudmFyIG5vb3AgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG5cbmZ1bmN0aW9uIGlzVnRyZWUoeCkge1xuICByZXR1cm4geCAmJiB0eXBlb2YgeC5zZWwgPT09ICdzdHJpbmcnO1xufVxuXG52YXIgX2lkID0gMDtcblxuZnVuY3Rpb24gaWQoKSB7XG4gIHJldHVybiBfaWQrKztcbn1cblxuZnVuY3Rpb24gbWFrZUl0ZW0oY29tcG9uZW50LCBzb3VyY2VzKSB7XG4gIHZhciBuZXdJZCA9IGlkKCk7XG5cbiAgdmFyIG5ld0l0ZW0gPSAoMCwgX2lzb2xhdGUyLmRlZmF1bHQpKGNvbXBvbmVudCwgbmV3SWQudG9TdHJpbmcoKSkoc291cmNlcyk7XG5cbiAgbmV3SXRlbS5faWQgPSBuZXdJZDtcbiAgbmV3SXRlbS5fbmFtZSA9IGNvbXBvbmVudC5uYW1lO1xuXG4gIHJldHVybiBuZXdJdGVtO1xufVxuXG5mdW5jdGlvbiBjb2xsZWN0aW9uKG9wdGlvbnMpIHtcbiAgdmFyIGl0ZW1zID0gYXJndW1lbnRzLmxlbmd0aCA8PSAxIHx8IGFyZ3VtZW50c1sxXSA9PT0gdW5kZWZpbmVkID8gW10gOiBhcmd1bWVudHNbMV07XG4gIHZhciBjb21wb25lbnQgPSBvcHRpb25zLmNvbXBvbmVudDtcbiAgdmFyIHNvdXJjZXMgPSBvcHRpb25zLnNvdXJjZXM7XG4gIHZhciByZW1vdmVTZWxlY3RvciA9IG9wdGlvbnMucmVtb3ZlU2VsZWN0b3I7XG5cblxuICByZXR1cm4ge1xuICAgIGFkZDogZnVuY3Rpb24gYWRkKCkge1xuICAgICAgdmFyIGFkZGl0aW9uYWxTb3VyY2VzID0gYXJndW1lbnRzLmxlbmd0aCA8PSAwIHx8IGFyZ3VtZW50c1swXSA9PT0gdW5kZWZpbmVkID8ge30gOiBhcmd1bWVudHNbMF07XG5cbiAgICAgIHZhciBuZXdJdGVtID0gbWFrZUl0ZW0oY29tcG9uZW50LCBfZXh0ZW5kcyh7fSwgc291cmNlcywgYWRkaXRpb25hbFNvdXJjZXMpKTtcbiAgICAgIHZhciByZW1vdmVTaW5rID0gcmVtb3ZlU2VsZWN0b3IobmV3SXRlbSkgfHwgX3hzdHJlYW0yLmRlZmF1bHQuZW1wdHkoKTtcbiAgICAgIG5ld0l0ZW0uX3JlbW92ZSQgPSByZW1vdmVTaW5rLnRha2UoMSkubWFwVG8obmV3SXRlbSk7XG5cbiAgICAgIHJldHVybiBjb2xsZWN0aW9uKG9wdGlvbnMsIFtdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkoaXRlbXMpLCBbbmV3SXRlbV0pKTtcbiAgICB9LFxuICAgIHJlbW92ZTogZnVuY3Rpb24gcmVtb3ZlKGl0ZW1Gb3JSZW1vdmFsKSB7XG4gICAgICByZXR1cm4gY29sbGVjdGlvbihvcHRpb25zLCBpdGVtcy5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0gIT09IGl0ZW1Gb3JSZW1vdmFsO1xuICAgICAgfSkpO1xuICAgIH0sXG4gICAgYXNBcnJheTogZnVuY3Rpb24gYXNBcnJheSgpIHtcbiAgICAgIHJldHVybiBpdGVtcy5zbGljZSgpOyAvLyByZXR1cm5zIGEgY29weSBvZiBpdGVtcyB0byBhdm9pZCBtdXRhdGlvblxuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gQ29sbGVjdGlvbihjb21wb25lbnQpIHtcbiAgdmFyIHNvdXJjZXMgPSBhcmd1bWVudHMubGVuZ3RoIDw9IDEgfHwgYXJndW1lbnRzWzFdID09PSB1bmRlZmluZWQgPyB7fSA6IGFyZ3VtZW50c1sxXTtcbiAgdmFyIGFkZCQgPSBhcmd1bWVudHMubGVuZ3RoIDw9IDIgfHwgYXJndW1lbnRzWzJdID09PSB1bmRlZmluZWQgPyBfeHN0cmVhbTIuZGVmYXVsdC5lbXB0eSgpIDogYXJndW1lbnRzWzJdO1xuICB2YXIgcmVtb3ZlU2VsZWN0b3IgPSBhcmd1bWVudHMubGVuZ3RoIDw9IDMgfHwgYXJndW1lbnRzWzNdID09PSB1bmRlZmluZWQgPyBub29wIDogYXJndW1lbnRzWzNdO1xuXG4gIHZhciByZW1vdmVQcm94eSQgPSBfeHN0cmVhbTIuZGVmYXVsdC5jcmVhdGUoKTtcbiAgdmFyIGFkZFJlZHVjZXIkID0gYWRkJC5tYXAoZnVuY3Rpb24gKHNvdXJjZXNMaXN0KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChjb2xsZWN0aW9uKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShzb3VyY2VzTGlzdCkpIHtcbiAgICAgICAgLy8gbXVsdGlwbGUgaXRlbXNcbiAgICAgICAgcmV0dXJuIHNvdXJjZXNMaXN0LnJlZHVjZShmdW5jdGlvbiAoY29sbGVjdGlvbiwgc291cmNlcykge1xuICAgICAgICAgIHJldHVybiBjb2xsZWN0aW9uLmFkZChzb3VyY2VzKTtcbiAgICAgICAgfSwgY29sbGVjdGlvbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBzaW5nbGUgaXRlbVxuICAgICAgICByZXR1cm4gY29sbGVjdGlvbi5hZGQoc291cmNlc0xpc3QpO1xuICAgICAgfVxuICAgIH07XG4gIH0pO1xuICB2YXIgcmVtb3ZlUmVkdWNlciQgPSByZW1vdmVQcm94eSQubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChjb2xsZWN0aW9uKSB7XG4gICAgICByZXR1cm4gY29sbGVjdGlvbi5yZW1vdmUoaXRlbSk7XG4gICAgfTtcbiAgfSk7XG4gIHZhciByZWR1Y2VyJCA9IF94c3RyZWFtMi5kZWZhdWx0Lm1lcmdlKGFkZFJlZHVjZXIkLCByZW1vdmVSZWR1Y2VyJCk7XG5cbiAgdmFyIGVtcHR5Q29sbGVjdGlvbiA9IGNvbGxlY3Rpb24oeyBjb21wb25lbnQ6IGNvbXBvbmVudCwgc291cmNlczogc291cmNlcywgcmVtb3ZlU2VsZWN0b3I6IHJlbW92ZVNlbGVjdG9yIH0pO1xuICB2YXIgY29sbGVjdGlvbiQgPSByZWR1Y2VyJC5mb2xkKGZ1bmN0aW9uIChjb2xsZWN0aW9uLCByZWR1Y2VyKSB7XG4gICAgcmV0dXJuIHJlZHVjZXIoY29sbGVjdGlvbik7XG4gIH0sIGVtcHR5Q29sbGVjdGlvbikubWFwKGZ1bmN0aW9uIChjb2xsZWN0aW9uKSB7XG4gICAgcmV0dXJuIGNvbGxlY3Rpb24uYXNBcnJheSgpO1xuICB9KTtcblxuICB2YXIgcmVtb3ZlJCA9IENvbGxlY3Rpb24ubWVyZ2UoY29sbGVjdGlvbiQsIGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgcmV0dXJuIGl0ZW0uX3JlbW92ZSQ7XG4gIH0pO1xuICByZW1vdmVQcm94eSQuaW1pdGF0ZShyZW1vdmUkKTtcblxuICByZXR1cm4gY29sbGVjdGlvbiQ7XG59XG5cbkNvbGxlY3Rpb24ucGx1Y2sgPSBmdW5jdGlvbiBwbHVjayhjb2xsZWN0aW9uJCwgcGx1Y2tTZWxlY3Rvcikge1xuICB2YXIgc2lua3MgPSB7fTtcblxuICBmdW5jdGlvbiBzaW5rJChpdGVtKSB7XG4gICAgdmFyIGtleSA9IGl0ZW0uX2lkO1xuXG4gICAgaWYgKHNpbmtzW2tleV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFyIHNpbmsgPSBwbHVja1NlbGVjdG9yKGl0ZW0pLm1hcChmdW5jdGlvbiAoeCkge1xuICAgICAgICByZXR1cm4gaXNWdHJlZSh4KSAmJiB4LmtleSA9PSBudWxsID8gX2V4dGVuZHMoe30sIHgsIHsga2V5OiBrZXkgfSkgOiB4O1xuICAgICAgfSk7XG4gICAgICBzaW5rc1trZXldID0gc2luay5yZW1lbWJlcigpO1xuICAgIH1cblxuICAgIHJldHVybiBzaW5rc1trZXldO1xuICB9XG5cbiAgcmV0dXJuIGNvbGxlY3Rpb24kLm1hcChmdW5jdGlvbiAoaXRlbXMpIHtcbiAgICByZXR1cm4gaXRlbXMubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICByZXR1cm4gc2luayQoaXRlbSk7XG4gICAgfSk7XG4gIH0pLm1hcChmdW5jdGlvbiAoc2lua1N0cmVhbXMpIHtcbiAgICByZXR1cm4gX3hzdHJlYW0yLmRlZmF1bHQuY29tYmluZS5hcHBseShfeHN0cmVhbTIuZGVmYXVsdCwgX3RvQ29uc3VtYWJsZUFycmF5KHNpbmtTdHJlYW1zKSk7XG4gIH0pLmZsYXR0ZW4oKS5zdGFydFdpdGgoW10pO1xufTtcblxuQ29sbGVjdGlvbi5tZXJnZSA9IGZ1bmN0aW9uIG1lcmdlKGNvbGxlY3Rpb24kLCBtZXJnZVNlbGVjdG9yKSB7XG4gIHZhciBzaW5rcyA9IHt9O1xuXG4gIGZ1bmN0aW9uIHNpbmskKGl0ZW0pIHtcbiAgICB2YXIga2V5ID0gaXRlbS5faWQ7XG5cbiAgICBpZiAoc2lua3Nba2V5XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YXIgc2luayA9IG1lcmdlU2VsZWN0b3IoaXRlbSkubWFwKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHJldHVybiBpc1Z0cmVlKHgpICYmIHgua2V5ID09IG51bGwgPyBfZXh0ZW5kcyh7fSwgeCwgeyBrZXk6IGtleSB9KSA6IHg7XG4gICAgICB9KTtcbiAgICAgIC8vIHByZXZlbnQgc2luayBmcm9tIGVhcmx5IGNvbXBsZXRpb24gYW5kIHJlaW5pdGlhbGl6YXRpb25cbiAgICAgIHNpbmtzW2tleV0gPSBfeHN0cmVhbTIuZGVmYXVsdC5tZXJnZShzaW5rLCBfeHN0cmVhbTIuZGVmYXVsdC5uZXZlcigpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2lua3Nba2V5XTtcbiAgfVxuXG4gIHJldHVybiBjb2xsZWN0aW9uJC5tYXAoZnVuY3Rpb24gKGl0ZW1zKSB7XG4gICAgcmV0dXJuIGl0ZW1zLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgcmV0dXJuIHNpbmskKGl0ZW0pO1xuICAgIH0pO1xuICB9KS5tYXAoZnVuY3Rpb24gKHNpbmtTdHJlYW1zKSB7XG4gICAgcmV0dXJuIF94c3RyZWFtMi5kZWZhdWx0Lm1lcmdlLmFwcGx5KF94c3RyZWFtMi5kZWZhdWx0LCBfdG9Db25zdW1hYmxlQXJyYXkoc2lua1N0cmVhbXMpKTtcbiAgfSkuZmxhdHRlbigpO1xufTtcblxuLy8gY29udmVydCBhIHN0cmVhbSBvZiBpdGVtcycgc291cmNlcyBzbmFwc2hvdHMgaW50byBhIHN0cmVhbSBvZiBjb2xsZWN0aW9uc1xuQ29sbGVjdGlvbi5nYXRoZXIgPSBmdW5jdGlvbiBnYXRoZXIoY29tcG9uZW50LCBzb3VyY2VzLCBpdGVtcyQpIHtcbiAgdmFyIGlkQXR0cmlidXRlID0gYXJndW1lbnRzLmxlbmd0aCA8PSAzIHx8IGFyZ3VtZW50c1szXSA9PT0gdW5kZWZpbmVkID8gJ2lkJyA6IGFyZ3VtZW50c1szXTtcblxuICBmdW5jdGlvbiBtYWtlRGVzdHJveWFibGUoY29tcG9uZW50KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2VzKSB7XG4gICAgICByZXR1cm4gX2V4dGVuZHMoe30sIGNvbXBvbmVudChzb3VyY2VzKSwge1xuICAgICAgICBfZGVzdHJveSQ6IHNvdXJjZXMuX2Rlc3Ryb3kkXG4gICAgICB9KTtcbiAgICB9O1xuICB9XG5cbiAgLy8gZmluZHMgaXRlbXMgbm90IHByZXNlbnQgaW4gcHJldmlvdXMgc25hcHNob3RcbiAgZnVuY3Rpb24gZmluZE5ld0l0ZW1zKF9yZWYsIGl0ZW1zKSB7XG4gICAgdmFyIHByZXZJZHMgPSBfcmVmLnByZXZJZHM7XG5cbiAgICByZXR1cm4ge1xuICAgICAgcHJldklkczogaXRlbXMubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIHJldHVybiBpdGVtW2lkQXR0cmlidXRlXTtcbiAgICAgIH0pLFxuICAgICAgYWRkZWRJdGVtczogaXRlbXMuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIHJldHVybiBwcmV2SWRzLmluZGV4T2YoaXRlbVtpZEF0dHJpYnV0ZV0pID09PSAtMTtcbiAgICAgIH0pXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbXBhcmVKU09OKHZhbHVlLCBuZXh0VmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT09IG5leHRWYWx1ZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBpZiAoSlNPTi5zdHJpbmdpZnkodmFsdWUpID09PSBKU09OLnN0cmluZ2lmeShuZXh0VmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgLy8gaWYgbm90IGVxdWFsIG9yIG5vdCBzZXJpYWxpemFibGVcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyB0dXJuIGEgbmV3IGl0ZW0gaW50byBhIGhhc2ggb2Ygc291cmNlIHN0cmVhbXMsIHRyYWNraW5nIGFsbCB0aGUgZnV0dXJlIHVwZGF0ZXNcbiAgZnVuY3Rpb24gaXRlbVRvU291cmNlU3RyZWFtcyhhZGRlZEl0ZW0sIGl0ZW1zU3RhdGUkKSB7XG4gICAgdmFyIGl0ZW1TdGF0ZUluZmluaXRlJCA9IGl0ZW1zU3RhdGUkLm1hcChmdW5jdGlvbiAoaXRlbXMpIHtcbiAgICAgIHJldHVybiBpdGVtcy5maW5kKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIHJldHVybiBpdGVtW2lkQXR0cmlidXRlXSA9PT0gYWRkZWRJdGVtW2lkQXR0cmlidXRlXTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIC8vIGlmIGFuIGl0ZW0gaXNuJ3QgcHJlc2VudCBpZiBhIG5ldyBzbmFwc2hvdCwgaXQgc2hhbGwgYmUgZGVzdHJveWVkXG4gICAgdmFyIF9kZXN0cm95JCA9IGl0ZW1TdGF0ZUluZmluaXRlJC5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHJldHVybiAhaXRlbTtcbiAgICB9KS50YWtlKDEpO1xuICAgIHZhciBpdGVtU3RhdGUkID0gaXRlbVN0YXRlSW5maW5pdGUkLmVuZFdoZW4oX2Rlc3Ryb3kkLmNvbXBvc2UoKDAsIF9kZWxheTIuZGVmYXVsdCkoKSkpO1xuXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGFkZGVkSXRlbSkucmVkdWNlKGZ1bmN0aW9uIChzb3VyY2VzLCBrZXkpIHtcbiAgICAgIC8vIHNraXAgaWRBdHRyaWJ1dGVcbiAgICAgIGlmIChrZXkgPT09IGlkQXR0cmlidXRlKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2VzO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHNvdXJjZXMsIF9kZWZpbmVQcm9wZXJ0eSh7fSwga2V5LCBpdGVtU3RhdGUkLm1hcChmdW5jdGlvbiAoc3RhdGUpIHtcbiAgICAgICAgcmV0dXJuIHN0YXRlW2tleV07XG4gICAgICB9KS5zdGFydFdpdGgoYWRkZWRJdGVtW2tleV0pXG4gICAgICAvLyBza2lwIHRoZSBzbmFwc2hvdCBpZiB0aGUgdmFsdWUgZGlkbid0IGNoYW5nZVxuICAgICAgLmNvbXBvc2UoKDAsIF9kcm9wUmVwZWF0czIuZGVmYXVsdCkoY29tcGFyZUpTT04pKS5yZW1lbWJlcigpKSk7XG4gICAgfSwge1xuICAgICAgX2Rlc3Ryb3kkOiBfZGVzdHJveSRcbiAgICB9KTtcbiAgfVxuXG4gIHZhciBpdGVtc1N0YXRlJCA9IGl0ZW1zJC5yZW1lbWJlcigpO1xuXG4gIHZhciBhZGQkID0gaXRlbXNTdGF0ZSRcbiAgLy8gZ2V0IHRoZSBhZGRlZCBpdGVtcyBhdCBlYWNoIHN0ZXBcbiAgLmZvbGQoZmluZE5ld0l0ZW1zLCB7IHByZXZJZHM6IFtdLCBhZGRlZEl0ZW1zOiBbXSB9KS5tYXAoZnVuY3Rpb24gKF9yZWYyKSB7XG4gICAgdmFyIGFkZGVkSXRlbXMgPSBfcmVmMi5hZGRlZEl0ZW1zO1xuICAgIHJldHVybiBhZGRlZEl0ZW1zO1xuICB9KS5maWx0ZXIoZnVuY3Rpb24gKGFkZGVkSXRlbXMpIHtcbiAgICByZXR1cm4gYWRkZWRJdGVtcy5sZW5ndGg7XG4gIH0pLm1hcChmdW5jdGlvbiAoYWRkZWRJdGVtcykge1xuICAgIHJldHVybiBhZGRlZEl0ZW1zLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgcmV0dXJuIGl0ZW1Ub1NvdXJjZVN0cmVhbXMoaXRlbSwgaXRlbXNTdGF0ZSQpO1xuICAgIH0pO1xuICB9KTtcblxuICByZXR1cm4gQ29sbGVjdGlvbihtYWtlRGVzdHJveWFibGUoY29tcG9uZW50KSwgc291cmNlcywgYWRkJCwgZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICByZXR1cm4gaXRlbS5fZGVzdHJveSQ7XG4gIH0pO1xufTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gQ29sbGVjdGlvbjsiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBTY29wZUNoZWNrZXJfMSA9IHJlcXVpcmUoJy4vU2NvcGVDaGVja2VyJyk7XG52YXIgdXRpbHNfMSA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcbnZhciBtYXRjaGVzU2VsZWN0b3I7XG50cnkge1xuICAgIG1hdGNoZXNTZWxlY3RvciA9IHJlcXVpcmUoXCJtYXRjaGVzLXNlbGVjdG9yXCIpO1xufVxuY2F0Y2ggKGUpIHtcbiAgICBtYXRjaGVzU2VsZWN0b3IgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG59XG5mdW5jdGlvbiB0b0VsQXJyYXkoaW5wdXQpIHtcbiAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoaW5wdXQpO1xufVxudmFyIEVsZW1lbnRGaW5kZXIgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEVsZW1lbnRGaW5kZXIobmFtZXNwYWNlLCBpc29sYXRlTW9kdWxlKSB7XG4gICAgICAgIHRoaXMubmFtZXNwYWNlID0gbmFtZXNwYWNlO1xuICAgICAgICB0aGlzLmlzb2xhdGVNb2R1bGUgPSBpc29sYXRlTW9kdWxlO1xuICAgIH1cbiAgICBFbGVtZW50RmluZGVyLnByb3RvdHlwZS5jYWxsID0gZnVuY3Rpb24gKHJvb3RFbGVtZW50KSB7XG4gICAgICAgIHZhciBuYW1lc3BhY2UgPSB0aGlzLm5hbWVzcGFjZTtcbiAgICAgICAgaWYgKG5hbWVzcGFjZS5qb2luKFwiXCIpID09PSBcIlwiKSB7XG4gICAgICAgICAgICByZXR1cm4gcm9vdEVsZW1lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHNjb3BlID0gdXRpbHNfMS5nZXRTY29wZShuYW1lc3BhY2UpO1xuICAgICAgICB2YXIgc2NvcGVDaGVja2VyID0gbmV3IFNjb3BlQ2hlY2tlcl8xLlNjb3BlQ2hlY2tlcihzY29wZSwgdGhpcy5pc29sYXRlTW9kdWxlKTtcbiAgICAgICAgdmFyIHNlbGVjdG9yID0gdXRpbHNfMS5nZXRTZWxlY3RvcnMobmFtZXNwYWNlKTtcbiAgICAgICAgdmFyIHRvcE5vZGUgPSByb290RWxlbWVudDtcbiAgICAgICAgdmFyIHRvcE5vZGVNYXRjaGVzID0gW107XG4gICAgICAgIGlmIChzY29wZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0b3BOb2RlID0gdGhpcy5pc29sYXRlTW9kdWxlLmdldElzb2xhdGVkRWxlbWVudChzY29wZSkgfHwgcm9vdEVsZW1lbnQ7XG4gICAgICAgICAgICBpZiAoc2VsZWN0b3IgJiYgbWF0Y2hlc1NlbGVjdG9yKHRvcE5vZGUsIHNlbGVjdG9yKSkge1xuICAgICAgICAgICAgICAgIHRvcE5vZGVNYXRjaGVzLnB1c2godG9wTm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRvRWxBcnJheSh0b3BOb2RlLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpKVxuICAgICAgICAgICAgLmZpbHRlcihzY29wZUNoZWNrZXIuaXNTdHJpY3RseUluUm9vdFNjb3BlLCBzY29wZUNoZWNrZXIpXG4gICAgICAgICAgICAuY29uY2F0KHRvcE5vZGVNYXRjaGVzKTtcbiAgICB9O1xuICAgIHJldHVybiBFbGVtZW50RmluZGVyO1xufSgpKTtcbmV4cG9ydHMuRWxlbWVudEZpbmRlciA9IEVsZW1lbnRGaW5kZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FbGVtZW50RmluZGVyLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIFNjb3BlQ2hlY2tlcl8xID0gcmVxdWlyZSgnLi9TY29wZUNoZWNrZXInKTtcbnZhciB1dGlsc18xID0gcmVxdWlyZSgnLi91dGlscycpO1xudmFyIG1hdGNoZXNTZWxlY3RvcjtcbnRyeSB7XG4gICAgbWF0Y2hlc1NlbGVjdG9yID0gcmVxdWlyZShcIm1hdGNoZXMtc2VsZWN0b3JcIik7XG59XG5jYXRjaCAoZSkge1xuICAgIG1hdGNoZXNTZWxlY3RvciA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbn1cbi8qKlxuICogQXR0YWNoZXMgYW4gYWN0dWFsIGV2ZW50IGxpc3RlbmVyIHRvIHRoZSBET00gcm9vdCBlbGVtZW50LFxuICogaGFuZGxlcyBcImRlc3RpbmF0aW9uc1wiIChpbnRlcmVzdGVkIERPTVNvdXJjZSBvdXRwdXQgc3ViamVjdHMpLCBhbmQgYnViYmxpbmcuXG4gKi9cbnZhciBFdmVudERlbGVnYXRvciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gRXZlbnREZWxlZ2F0b3IodG9wRWxlbWVudCwgZXZlbnRUeXBlLCB1c2VDYXB0dXJlLCBpc29sYXRlTW9kdWxlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHRoaXMudG9wRWxlbWVudCA9IHRvcEVsZW1lbnQ7XG4gICAgICAgIHRoaXMuZXZlbnRUeXBlID0gZXZlbnRUeXBlO1xuICAgICAgICB0aGlzLnVzZUNhcHR1cmUgPSB1c2VDYXB0dXJlO1xuICAgICAgICB0aGlzLmlzb2xhdGVNb2R1bGUgPSBpc29sYXRlTW9kdWxlO1xuICAgICAgICB0aGlzLmRlc3RpbmF0aW9ucyA9IFtdO1xuICAgICAgICB0aGlzLnJvb2YgPSB0b3BFbGVtZW50LnBhcmVudEVsZW1lbnQ7XG4gICAgICAgIGlmICh1c2VDYXB0dXJlKSB7XG4gICAgICAgICAgICB0aGlzLmRvbUxpc3RlbmVyID0gZnVuY3Rpb24gKGV2KSB7IHJldHVybiBfdGhpcy5jYXB0dXJlKGV2KTsgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZG9tTGlzdGVuZXIgPSBmdW5jdGlvbiAoZXYpIHsgcmV0dXJuIF90aGlzLmJ1YmJsZShldik7IH07XG4gICAgICAgIH1cbiAgICAgICAgdG9wRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgdGhpcy5kb21MaXN0ZW5lciwgdXNlQ2FwdHVyZSk7XG4gICAgfVxuICAgIEV2ZW50RGVsZWdhdG9yLnByb3RvdHlwZS5idWJibGUgPSBmdW5jdGlvbiAocmF3RXZlbnQpIHtcbiAgICAgICAgaWYgKCFkb2N1bWVudC5ib2R5LmNvbnRhaW5zKHJhd0V2ZW50LmN1cnJlbnRUYXJnZXQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGV2ID0gdGhpcy5wYXRjaEV2ZW50KHJhd0V2ZW50KTtcbiAgICAgICAgZm9yICh2YXIgZWwgPSBldi50YXJnZXQ7IGVsICYmIGVsICE9PSB0aGlzLnJvb2Y7IGVsID0gZWwucGFyZW50RWxlbWVudCkge1xuICAgICAgICAgICAgaWYgKGV2LnByb3BhZ2F0aW9uSGFzQmVlblN0b3BwZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm1hdGNoRXZlbnRBZ2FpbnN0RGVzdGluYXRpb25zKGVsLCBldik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEV2ZW50RGVsZWdhdG9yLnByb3RvdHlwZS5tYXRjaEV2ZW50QWdhaW5zdERlc3RpbmF0aW9ucyA9IGZ1bmN0aW9uIChlbCwgZXYpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIG4gPSB0aGlzLmRlc3RpbmF0aW9ucy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBkZXN0ID0gdGhpcy5kZXN0aW5hdGlvbnNbaV07XG4gICAgICAgICAgICBpZiAoIWRlc3Quc2NvcGVDaGVja2VyLmlzU3RyaWN0bHlJblJvb3RTY29wZShlbCkpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtYXRjaGVzU2VsZWN0b3IoZWwsIGRlc3Quc2VsZWN0b3IpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tdXRhdGVFdmVudEN1cnJlbnRUYXJnZXQoZXYsIGVsKTtcbiAgICAgICAgICAgICAgICBkZXN0LnN1YmplY3QuX24oZXYpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBFdmVudERlbGVnYXRvci5wcm90b3R5cGUuY2FwdHVyZSA9IGZ1bmN0aW9uIChldikge1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgbiA9IHRoaXMuZGVzdGluYXRpb25zLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgdmFyIGRlc3QgPSB0aGlzLmRlc3RpbmF0aW9uc1tpXTtcbiAgICAgICAgICAgIGlmIChtYXRjaGVzU2VsZWN0b3IoZXYudGFyZ2V0LCBkZXN0LnNlbGVjdG9yKSkge1xuICAgICAgICAgICAgICAgIGRlc3Quc3ViamVjdC5fbihldik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEV2ZW50RGVsZWdhdG9yLnByb3RvdHlwZS5hZGREZXN0aW5hdGlvbiA9IGZ1bmN0aW9uIChzdWJqZWN0LCBuYW1lc3BhY2UpIHtcbiAgICAgICAgdmFyIHNjb3BlID0gdXRpbHNfMS5nZXRTY29wZShuYW1lc3BhY2UpO1xuICAgICAgICB2YXIgc2VsZWN0b3IgPSB1dGlsc18xLmdldFNlbGVjdG9ycyhuYW1lc3BhY2UpO1xuICAgICAgICB2YXIgc2NvcGVDaGVja2VyID0gbmV3IFNjb3BlQ2hlY2tlcl8xLlNjb3BlQ2hlY2tlcihzY29wZSwgdGhpcy5pc29sYXRlTW9kdWxlKTtcbiAgICAgICAgdGhpcy5kZXN0aW5hdGlvbnMucHVzaCh7IHN1YmplY3Q6IHN1YmplY3QsIHNjb3BlQ2hlY2tlcjogc2NvcGVDaGVja2VyLCBzZWxlY3Rvcjogc2VsZWN0b3IgfSk7XG4gICAgfTtcbiAgICBFdmVudERlbGVnYXRvci5wcm90b3R5cGUucGF0Y2hFdmVudCA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICB2YXIgcEV2ZW50ID0gZXZlbnQ7XG4gICAgICAgIHBFdmVudC5wcm9wYWdhdGlvbkhhc0JlZW5TdG9wcGVkID0gZmFsc2U7XG4gICAgICAgIHZhciBvbGRTdG9wUHJvcGFnYXRpb24gPSBwRXZlbnQuc3RvcFByb3BhZ2F0aW9uO1xuICAgICAgICBwRXZlbnQuc3RvcFByb3BhZ2F0aW9uID0gZnVuY3Rpb24gc3RvcFByb3BhZ2F0aW9uKCkge1xuICAgICAgICAgICAgb2xkU3RvcFByb3BhZ2F0aW9uLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB0aGlzLnByb3BhZ2F0aW9uSGFzQmVlblN0b3BwZWQgPSB0cnVlO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcEV2ZW50O1xuICAgIH07XG4gICAgRXZlbnREZWxlZ2F0b3IucHJvdG90eXBlLm11dGF0ZUV2ZW50Q3VycmVudFRhcmdldCA9IGZ1bmN0aW9uIChldmVudCwgY3VycmVudFRhcmdldEVsZW1lbnQpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShldmVudCwgXCJjdXJyZW50VGFyZ2V0XCIsIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogY3VycmVudFRhcmdldEVsZW1lbnQsXG4gICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJwbGVhc2UgdXNlIGV2ZW50Lm93bmVyVGFyZ2V0XCIpO1xuICAgICAgICB9XG4gICAgICAgIGV2ZW50Lm93bmVyVGFyZ2V0ID0gY3VycmVudFRhcmdldEVsZW1lbnQ7XG4gICAgfTtcbiAgICBFdmVudERlbGVnYXRvci5wcm90b3R5cGUudXBkYXRlVG9wRWxlbWVudCA9IGZ1bmN0aW9uIChuZXdUb3BFbGVtZW50KSB7XG4gICAgICAgIHRoaXMudG9wRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHRoaXMuZXZlbnRUeXBlLCB0aGlzLmRvbUxpc3RlbmVyLCB0aGlzLnVzZUNhcHR1cmUpO1xuICAgICAgICBuZXdUb3BFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIodGhpcy5ldmVudFR5cGUsIHRoaXMuZG9tTGlzdGVuZXIsIHRoaXMudXNlQ2FwdHVyZSk7XG4gICAgICAgIHRoaXMudG9wRWxlbWVudCA9IG5ld1RvcEVsZW1lbnQ7XG4gICAgfTtcbiAgICByZXR1cm4gRXZlbnREZWxlZ2F0b3I7XG59KCkpO1xuZXhwb3J0cy5FdmVudERlbGVnYXRvciA9IEV2ZW50RGVsZWdhdG9yO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RXZlbnREZWxlZ2F0b3IuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgeHN0cmVhbV8xID0gcmVxdWlyZSgneHN0cmVhbScpO1xudmFyIHhzdHJlYW1fYWRhcHRlcl8xID0gcmVxdWlyZSgnQGN5Y2xlL3hzdHJlYW0tYWRhcHRlcicpO1xudmFyIEhUTUxTb3VyY2UgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEhUTUxTb3VyY2UoaHRtbCQsIHJ1blNBKSB7XG4gICAgICAgIHRoaXMucnVuU0EgPSBydW5TQTtcbiAgICAgICAgdGhpcy5faHRtbCQgPSBodG1sJDtcbiAgICAgICAgdGhpcy5fZW1wdHkkID0gcnVuU0EuYWRhcHQoeHN0cmVhbV8xLmRlZmF1bHQuZW1wdHkoKSwgeHN0cmVhbV9hZGFwdGVyXzEuZGVmYXVsdC5zdHJlYW1TdWJzY3JpYmUpO1xuICAgIH1cbiAgICBIVE1MU291cmNlLnByb3RvdHlwZS5lbGVtZW50cyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucnVuU0EuYWRhcHQodGhpcy5faHRtbCQsIHhzdHJlYW1fYWRhcHRlcl8xLmRlZmF1bHQuc3RyZWFtU3Vic2NyaWJlKTtcbiAgICB9O1xuICAgIEhUTUxTb3VyY2UucHJvdG90eXBlLnNlbGVjdCA9IGZ1bmN0aW9uIChzZWxlY3Rvcikge1xuICAgICAgICByZXR1cm4gbmV3IEhUTUxTb3VyY2UoeHN0cmVhbV8xLmRlZmF1bHQuZW1wdHkoKSwgdGhpcy5ydW5TQSk7XG4gICAgfTtcbiAgICBIVE1MU291cmNlLnByb3RvdHlwZS5ldmVudHMgPSBmdW5jdGlvbiAoZXZlbnRUeXBlLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbXB0eSQ7XG4gICAgfTtcbiAgICByZXR1cm4gSFRNTFNvdXJjZTtcbn0oKSk7XG5leHBvcnRzLkhUTUxTb3VyY2UgPSBIVE1MU291cmNlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SFRNTFNvdXJjZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciB4c3RyZWFtX2FkYXB0ZXJfMSA9IHJlcXVpcmUoJ0BjeWNsZS94c3RyZWFtLWFkYXB0ZXInKTtcbnZhciB4c3RyZWFtXzEgPSByZXF1aXJlKCd4c3RyZWFtJyk7XG52YXIgRWxlbWVudEZpbmRlcl8xID0gcmVxdWlyZSgnLi9FbGVtZW50RmluZGVyJyk7XG52YXIgZnJvbUV2ZW50XzEgPSByZXF1aXJlKCcuL2Zyb21FdmVudCcpO1xudmFyIGlzb2xhdGVfMSA9IHJlcXVpcmUoJy4vaXNvbGF0ZScpO1xudmFyIEV2ZW50RGVsZWdhdG9yXzEgPSByZXF1aXJlKCcuL0V2ZW50RGVsZWdhdG9yJyk7XG52YXIgdXRpbHNfMSA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcbnZhciBtYXRjaGVzU2VsZWN0b3I7XG50cnkge1xuICAgIG1hdGNoZXNTZWxlY3RvciA9IHJlcXVpcmUoXCJtYXRjaGVzLXNlbGVjdG9yXCIpO1xufVxuY2F0Y2ggKGUpIHtcbiAgICBtYXRjaGVzU2VsZWN0b3IgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG59XG52YXIgZXZlbnRUeXBlc1RoYXREb250QnViYmxlID0gW1xuICAgIFwibG9hZFwiLFxuICAgIFwidW5sb2FkXCIsXG4gICAgXCJmb2N1c1wiLFxuICAgIFwiYmx1clwiLFxuICAgIFwibW91c2VlbnRlclwiLFxuICAgIFwibW91c2VsZWF2ZVwiLFxuICAgIFwic3VibWl0XCIsXG4gICAgXCJjaGFuZ2VcIixcbiAgICBcInJlc2V0XCIsXG4gICAgXCJ0aW1ldXBkYXRlXCIsXG4gICAgXCJwbGF5aW5nXCIsXG4gICAgXCJ3YWl0aW5nXCIsXG4gICAgXCJzZWVraW5nXCIsXG4gICAgXCJzZWVrZWRcIixcbiAgICBcImVuZGVkXCIsXG4gICAgXCJsb2FkZWRtZXRhZGF0YVwiLFxuICAgIFwibG9hZGVkZGF0YVwiLFxuICAgIFwiY2FucGxheVwiLFxuICAgIFwiY2FucGxheXRocm91Z2hcIixcbiAgICBcImR1cmF0aW9uY2hhbmdlXCIsXG4gICAgXCJwbGF5XCIsXG4gICAgXCJwYXVzZVwiLFxuICAgIFwicmF0ZWNoYW5nZVwiLFxuICAgIFwidm9sdW1lY2hhbmdlXCIsXG4gICAgXCJzdXNwZW5kXCIsXG4gICAgXCJlbXB0aWVkXCIsXG4gICAgXCJzdGFsbGVkXCIsXG5dO1xuZnVuY3Rpb24gZGV0ZXJtaW5lVXNlQ2FwdHVyZShldmVudFR5cGUsIG9wdGlvbnMpIHtcbiAgICB2YXIgcmVzdWx0ID0gZmFsc2U7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLnVzZUNhcHR1cmUgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgIHJlc3VsdCA9IG9wdGlvbnMudXNlQ2FwdHVyZTtcbiAgICB9XG4gICAgaWYgKGV2ZW50VHlwZXNUaGF0RG9udEJ1YmJsZS5pbmRleE9mKGV2ZW50VHlwZSkgIT09IC0xKSB7XG4gICAgICAgIHJlc3VsdCA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG52YXIgTWFpbkRPTVNvdXJjZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gTWFpbkRPTVNvdXJjZShfcm9vdEVsZW1lbnQkLCBfcnVuU3RyZWFtQWRhcHRlciwgX25hbWVzcGFjZSwgX2lzb2xhdGVNb2R1bGUsIF9kZWxlZ2F0b3JzKSB7XG4gICAgICAgIGlmIChfbmFtZXNwYWNlID09PSB2b2lkIDApIHsgX25hbWVzcGFjZSA9IFtdOyB9XG4gICAgICAgIHRoaXMuX3Jvb3RFbGVtZW50JCA9IF9yb290RWxlbWVudCQ7XG4gICAgICAgIHRoaXMuX3J1blN0cmVhbUFkYXB0ZXIgPSBfcnVuU3RyZWFtQWRhcHRlcjtcbiAgICAgICAgdGhpcy5fbmFtZXNwYWNlID0gX25hbWVzcGFjZTtcbiAgICAgICAgdGhpcy5faXNvbGF0ZU1vZHVsZSA9IF9pc29sYXRlTW9kdWxlO1xuICAgICAgICB0aGlzLl9kZWxlZ2F0b3JzID0gX2RlbGVnYXRvcnM7XG4gICAgICAgIHRoaXMuaXNvbGF0ZVNvdXJjZSA9IGlzb2xhdGVfMS5pc29sYXRlU291cmNlO1xuICAgICAgICB0aGlzLmlzb2xhdGVTaW5rID0gaXNvbGF0ZV8xLmlzb2xhdGVTaW5rO1xuICAgIH1cbiAgICBNYWluRE9NU291cmNlLnByb3RvdHlwZS5lbGVtZW50cyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG91dHB1dCQ7XG4gICAgICAgIGlmICh0aGlzLl9uYW1lc3BhY2UubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBvdXRwdXQkID0gdGhpcy5fcm9vdEVsZW1lbnQkO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIGVsZW1lbnRGaW5kZXJfMSA9IG5ldyBFbGVtZW50RmluZGVyXzEuRWxlbWVudEZpbmRlcih0aGlzLl9uYW1lc3BhY2UsIHRoaXMuX2lzb2xhdGVNb2R1bGUpO1xuICAgICAgICAgICAgb3V0cHV0JCA9IHRoaXMuX3Jvb3RFbGVtZW50JC5tYXAoZnVuY3Rpb24gKGVsKSB7IHJldHVybiBlbGVtZW50RmluZGVyXzEuY2FsbChlbCk7IH0pO1xuICAgICAgICB9XG4gICAgICAgIHZhciBydW5TQSA9IHRoaXMuX3J1blN0cmVhbUFkYXB0ZXI7XG4gICAgICAgIHJldHVybiBydW5TQS5yZW1lbWJlcihydW5TQS5hZGFwdChvdXRwdXQkLCB4c3RyZWFtX2FkYXB0ZXJfMS5kZWZhdWx0LnN0cmVhbVN1YnNjcmliZSkpO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE1haW5ET01Tb3VyY2UucHJvdG90eXBlLCBcIm5hbWVzcGFjZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX25hbWVzcGFjZTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgTWFpbkRPTVNvdXJjZS5wcm90b3R5cGUuc2VsZWN0ID0gZnVuY3Rpb24gKHNlbGVjdG9yKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2VsZWN0b3IgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJET00gZHJpdmVyJ3Mgc2VsZWN0KCkgZXhwZWN0cyB0aGUgYXJndW1lbnQgdG8gYmUgYSBcIiArXG4gICAgICAgICAgICAgICAgXCJzdHJpbmcgYXMgYSBDU1Mgc2VsZWN0b3JcIik7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHRyaW1tZWRTZWxlY3RvciA9IHNlbGVjdG9yLnRyaW0oKTtcbiAgICAgICAgdmFyIGNoaWxkTmFtZXNwYWNlID0gdHJpbW1lZFNlbGVjdG9yID09PSBcIjpyb290XCIgP1xuICAgICAgICAgICAgdGhpcy5fbmFtZXNwYWNlIDpcbiAgICAgICAgICAgIHRoaXMuX25hbWVzcGFjZS5jb25jYXQodHJpbW1lZFNlbGVjdG9yKTtcbiAgICAgICAgcmV0dXJuIG5ldyBNYWluRE9NU291cmNlKHRoaXMuX3Jvb3RFbGVtZW50JCwgdGhpcy5fcnVuU3RyZWFtQWRhcHRlciwgY2hpbGROYW1lc3BhY2UsIHRoaXMuX2lzb2xhdGVNb2R1bGUsIHRoaXMuX2RlbGVnYXRvcnMpO1xuICAgIH07XG4gICAgTWFpbkRPTVNvdXJjZS5wcm90b3R5cGUuZXZlbnRzID0gZnVuY3Rpb24gKGV2ZW50VHlwZSwgb3B0aW9ucykge1xuICAgICAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgICAgICBpZiAodHlwZW9mIGV2ZW50VHlwZSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRE9NIGRyaXZlcidzIGV2ZW50cygpIGV4cGVjdHMgYXJndW1lbnQgdG8gYmUgYSBcIiArXG4gICAgICAgICAgICAgICAgXCJzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBldmVudCB0eXBlIHRvIGxpc3RlbiBmb3IuXCIpO1xuICAgICAgICB9XG4gICAgICAgIHZhciB1c2VDYXB0dXJlID0gZGV0ZXJtaW5lVXNlQ2FwdHVyZShldmVudFR5cGUsIG9wdGlvbnMpO1xuICAgICAgICB2YXIgbmFtZXNwYWNlID0gdGhpcy5fbmFtZXNwYWNlO1xuICAgICAgICB2YXIgc2NvcGUgPSB1dGlsc18xLmdldFNjb3BlKG5hbWVzcGFjZSk7XG4gICAgICAgIHZhciBrZXlQYXJ0cyA9IFtldmVudFR5cGUsIHVzZUNhcHR1cmVdO1xuICAgICAgICBpZiAoc2NvcGUpIHtcbiAgICAgICAgICAgIGtleVBhcnRzLnB1c2goc2NvcGUpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBrZXkgPSBrZXlQYXJ0cy5qb2luKCd+Jyk7XG4gICAgICAgIHZhciBkb21Tb3VyY2UgPSB0aGlzO1xuICAgICAgICB2YXIgcm9vdEVsZW1lbnQkO1xuICAgICAgICBpZiAoc2NvcGUpIHtcbiAgICAgICAgICAgIHZhciBoYWRJc29sYXRlZF9tdXRhYmxlXzEgPSBmYWxzZTtcbiAgICAgICAgICAgIHJvb3RFbGVtZW50JCA9IHRoaXMuX3Jvb3RFbGVtZW50JFxuICAgICAgICAgICAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKHJvb3RFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgdmFyIGhhc0lzb2xhdGVkID0gISFkb21Tb3VyY2UuX2lzb2xhdGVNb2R1bGUuZ2V0SXNvbGF0ZWRFbGVtZW50KHNjb3BlKTtcbiAgICAgICAgICAgICAgICB2YXIgc2hvdWxkUGFzcyA9IGhhc0lzb2xhdGVkICYmICFoYWRJc29sYXRlZF9tdXRhYmxlXzE7XG4gICAgICAgICAgICAgICAgaGFkSXNvbGF0ZWRfbXV0YWJsZV8xID0gaGFzSXNvbGF0ZWQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNob3VsZFBhc3M7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJvb3RFbGVtZW50JCA9IHRoaXMuX3Jvb3RFbGVtZW50JC50YWtlKDIpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBldmVudCQgPSByb290RWxlbWVudCRcbiAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gc2V0dXBFdmVudERlbGVnYXRvck9uVG9wRWxlbWVudChyb290RWxlbWVudCkge1xuICAgICAgICAgICAgLy8gRXZlbnQgbGlzdGVuZXIganVzdCBmb3IgdGhlIHJvb3QgZWxlbWVudFxuICAgICAgICAgICAgaWYgKCFuYW1lc3BhY2UgfHwgbmFtZXNwYWNlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmcm9tRXZlbnRfMS5mcm9tRXZlbnQocm9vdEVsZW1lbnQsIGV2ZW50VHlwZSwgdXNlQ2FwdHVyZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBFdmVudCBsaXN0ZW5lciBvbiB0aGUgdG9wIGVsZW1lbnQgYXMgYW4gRXZlbnREZWxlZ2F0b3JcbiAgICAgICAgICAgIHZhciBkZWxlZ2F0b3JzID0gZG9tU291cmNlLl9kZWxlZ2F0b3JzO1xuICAgICAgICAgICAgdmFyIHRvcCA9IHNjb3BlXG4gICAgICAgICAgICAgICAgPyBkb21Tb3VyY2UuX2lzb2xhdGVNb2R1bGUuZ2V0SXNvbGF0ZWRFbGVtZW50KHNjb3BlKVxuICAgICAgICAgICAgICAgIDogcm9vdEVsZW1lbnQ7XG4gICAgICAgICAgICB2YXIgZGVsZWdhdG9yO1xuICAgICAgICAgICAgaWYgKGRlbGVnYXRvcnMuaGFzKGtleSkpIHtcbiAgICAgICAgICAgICAgICBkZWxlZ2F0b3IgPSBkZWxlZ2F0b3JzLmdldChrZXkpO1xuICAgICAgICAgICAgICAgIGRlbGVnYXRvci51cGRhdGVUb3BFbGVtZW50KHRvcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBkZWxlZ2F0b3IgPSBuZXcgRXZlbnREZWxlZ2F0b3JfMS5FdmVudERlbGVnYXRvcih0b3AsIGV2ZW50VHlwZSwgdXNlQ2FwdHVyZSwgZG9tU291cmNlLl9pc29sYXRlTW9kdWxlKTtcbiAgICAgICAgICAgICAgICBkZWxlZ2F0b3JzLnNldChrZXksIGRlbGVnYXRvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgc3ViamVjdCA9IHhzdHJlYW1fMS5kZWZhdWx0LmNyZWF0ZSgpO1xuICAgICAgICAgICAgaWYgKHNjb3BlKSB7XG4gICAgICAgICAgICAgICAgZG9tU291cmNlLl9pc29sYXRlTW9kdWxlLmFkZEV2ZW50RGVsZWdhdG9yKHNjb3BlLCBkZWxlZ2F0b3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVsZWdhdG9yLmFkZERlc3RpbmF0aW9uKHN1YmplY3QsIG5hbWVzcGFjZSk7XG4gICAgICAgICAgICByZXR1cm4gc3ViamVjdDtcbiAgICAgICAgfSlcbiAgICAgICAgICAgIC5mbGF0dGVuKCk7XG4gICAgICAgIHJldHVybiB0aGlzLl9ydW5TdHJlYW1BZGFwdGVyLmFkYXB0KGV2ZW50JCwgeHN0cmVhbV9hZGFwdGVyXzEuZGVmYXVsdC5zdHJlYW1TdWJzY3JpYmUpO1xuICAgIH07XG4gICAgTWFpbkRPTVNvdXJjZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5faXNvbGF0ZU1vZHVsZS5yZXNldCgpO1xuICAgIH07XG4gICAgcmV0dXJuIE1haW5ET01Tb3VyY2U7XG59KCkpO1xuZXhwb3J0cy5NYWluRE9NU291cmNlID0gTWFpbkRPTVNvdXJjZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU1haW5ET01Tb3VyY2UuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgU2NvcGVDaGVja2VyID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBTY29wZUNoZWNrZXIoc2NvcGUsIGlzb2xhdGVNb2R1bGUpIHtcbiAgICAgICAgdGhpcy5zY29wZSA9IHNjb3BlO1xuICAgICAgICB0aGlzLmlzb2xhdGVNb2R1bGUgPSBpc29sYXRlTW9kdWxlO1xuICAgIH1cbiAgICBTY29wZUNoZWNrZXIucHJvdG90eXBlLmlzU3RyaWN0bHlJblJvb3RTY29wZSA9IGZ1bmN0aW9uIChsZWFmKSB7XG4gICAgICAgIGZvciAodmFyIGVsID0gbGVhZjsgZWw7IGVsID0gZWwucGFyZW50RWxlbWVudCkge1xuICAgICAgICAgICAgdmFyIHNjb3BlID0gdGhpcy5pc29sYXRlTW9kdWxlLmlzSXNvbGF0ZWRFbGVtZW50KGVsKTtcbiAgICAgICAgICAgIGlmIChzY29wZSAmJiBzY29wZSAhPT0gdGhpcy5zY29wZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzY29wZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG4gICAgcmV0dXJuIFNjb3BlQ2hlY2tlcjtcbn0oKSk7XG5leHBvcnRzLlNjb3BlQ2hlY2tlciA9IFNjb3BlQ2hlY2tlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVNjb3BlQ2hlY2tlci5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBoeXBlcnNjcmlwdF8xID0gcmVxdWlyZSgnLi9oeXBlcnNjcmlwdCcpO1xudmFyIGNsYXNzTmFtZUZyb21WTm9kZV8xID0gcmVxdWlyZSgnc25hYmJkb20tc2VsZWN0b3IvbGliL2NsYXNzTmFtZUZyb21WTm9kZScpO1xudmFyIHNlbGVjdG9yUGFyc2VyXzEgPSByZXF1aXJlKCdzbmFiYmRvbS1zZWxlY3Rvci9saWIvc2VsZWN0b3JQYXJzZXInKTtcbnZhciBWTm9kZVdyYXBwZXIgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFZOb2RlV3JhcHBlcihyb290RWxlbWVudCkge1xuICAgICAgICB0aGlzLnJvb3RFbGVtZW50ID0gcm9vdEVsZW1lbnQ7XG4gICAgfVxuICAgIFZOb2RlV3JhcHBlci5wcm90b3R5cGUuY2FsbCA9IGZ1bmN0aW9uICh2bm9kZSkge1xuICAgICAgICB2YXIgX2EgPSBzZWxlY3RvclBhcnNlcl8xLmRlZmF1bHQodm5vZGUuc2VsKSwgc2VsZWN0b3JUYWdOYW1lID0gX2EudGFnTmFtZSwgc2VsZWN0b3JJZCA9IF9hLmlkO1xuICAgICAgICB2YXIgdk5vZGVDbGFzc05hbWUgPSBjbGFzc05hbWVGcm9tVk5vZGVfMS5kZWZhdWx0KHZub2RlKTtcbiAgICAgICAgdmFyIHZOb2RlRGF0YSA9IHZub2RlLmRhdGEgfHwge307XG4gICAgICAgIHZhciB2Tm9kZURhdGFQcm9wcyA9IHZOb2RlRGF0YS5wcm9wcyB8fCB7fTtcbiAgICAgICAgdmFyIF9iID0gdk5vZGVEYXRhUHJvcHMuaWQsIHZOb2RlSWQgPSBfYiA9PT0gdm9pZCAwID8gc2VsZWN0b3JJZCA6IF9iO1xuICAgICAgICB2YXIgaXNWTm9kZUFuZFJvb3RFbGVtZW50SWRlbnRpY2FsID0gdk5vZGVJZC50b1VwcGVyQ2FzZSgpID09PSB0aGlzLnJvb3RFbGVtZW50LmlkLnRvVXBwZXJDYXNlKCkgJiZcbiAgICAgICAgICAgIHNlbGVjdG9yVGFnTmFtZS50b1VwcGVyQ2FzZSgpID09PSB0aGlzLnJvb3RFbGVtZW50LnRhZ05hbWUudG9VcHBlckNhc2UoKSAmJlxuICAgICAgICAgICAgdk5vZGVDbGFzc05hbWUudG9VcHBlckNhc2UoKSA9PT0gdGhpcy5yb290RWxlbWVudC5jbGFzc05hbWUudG9VcHBlckNhc2UoKTtcbiAgICAgICAgaWYgKGlzVk5vZGVBbmRSb290RWxlbWVudElkZW50aWNhbCkge1xuICAgICAgICAgICAgcmV0dXJuIHZub2RlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBfYyA9IHRoaXMucm9vdEVsZW1lbnQsIHRhZ05hbWUgPSBfYy50YWdOYW1lLCBpZCA9IF9jLmlkLCBjbGFzc05hbWUgPSBfYy5jbGFzc05hbWU7XG4gICAgICAgIHZhciBlbGVtZW50SWQgPSBpZCA/IFwiI1wiICsgaWQgOiBcIlwiO1xuICAgICAgICB2YXIgZWxlbWVudENsYXNzTmFtZSA9IGNsYXNzTmFtZSA/XG4gICAgICAgICAgICBcIi5cIiArIGNsYXNzTmFtZS5zcGxpdChcIiBcIikuam9pbihcIi5cIikgOiBcIlwiO1xuICAgICAgICByZXR1cm4gaHlwZXJzY3JpcHRfMS5oKFwiXCIgKyB0YWdOYW1lICsgZWxlbWVudElkICsgZWxlbWVudENsYXNzTmFtZSwge30sIFt2bm9kZV0pO1xuICAgIH07XG4gICAgcmV0dXJuIFZOb2RlV3JhcHBlcjtcbn0oKSk7XG5leHBvcnRzLlZOb2RlV3JhcHBlciA9IFZOb2RlV3JhcHBlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVZOb2RlV3JhcHBlci5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciB4c3RyZWFtXzEgPSByZXF1aXJlKCd4c3RyZWFtJyk7XG5mdW5jdGlvbiBmcm9tRXZlbnQoZWxlbWVudCwgZXZlbnROYW1lLCB1c2VDYXB0dXJlKSB7XG4gICAgaWYgKHVzZUNhcHR1cmUgPT09IHZvaWQgMCkgeyB1c2VDYXB0dXJlID0gZmFsc2U7IH1cbiAgICByZXR1cm4geHN0cmVhbV8xLlN0cmVhbS5jcmVhdGUoe1xuICAgICAgICBlbGVtZW50OiBlbGVtZW50LFxuICAgICAgICBuZXh0OiBudWxsLFxuICAgICAgICBzdGFydDogZnVuY3Rpb24gc3RhcnQobGlzdGVuZXIpIHtcbiAgICAgICAgICAgIHRoaXMubmV4dCA9IGZ1bmN0aW9uIG5leHQoZXZlbnQpIHsgbGlzdGVuZXIubmV4dChldmVudCk7IH07XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIHRoaXMubmV4dCwgdXNlQ2FwdHVyZSk7XG4gICAgICAgIH0sXG4gICAgICAgIHN0b3A6IGZ1bmN0aW9uIHN0b3AoKSB7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIHRoaXMubmV4dCwgdXNlQ2FwdHVyZSk7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbmV4cG9ydHMuZnJvbUV2ZW50ID0gZnJvbUV2ZW50O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZnJvbUV2ZW50LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIGh5cGVyc2NyaXB0XzEgPSByZXF1aXJlKCcuL2h5cGVyc2NyaXB0Jyk7XG5mdW5jdGlvbiBpc1ZhbGlkU3RyaW5nKHBhcmFtKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBwYXJhbSA9PT0gJ3N0cmluZycgJiYgcGFyYW0ubGVuZ3RoID4gMDtcbn1cbmZ1bmN0aW9uIGlzU2VsZWN0b3IocGFyYW0pIHtcbiAgICByZXR1cm4gaXNWYWxpZFN0cmluZyhwYXJhbSkgJiYgKHBhcmFtWzBdID09PSAnLicgfHwgcGFyYW1bMF0gPT09ICcjJyk7XG59XG5mdW5jdGlvbiBjcmVhdGVUYWdGdW5jdGlvbih0YWdOYW1lKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGh5cGVyc2NyaXB0KGZpcnN0LCBiLCBjKSB7XG4gICAgICAgIGlmIChpc1NlbGVjdG9yKGZpcnN0KSkge1xuICAgICAgICAgICAgaWYgKCEhYiAmJiAhIWMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaHlwZXJzY3JpcHRfMS5oKHRhZ05hbWUgKyBmaXJzdCwgYiwgYyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICghIWIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaHlwZXJzY3JpcHRfMS5oKHRhZ05hbWUgKyBmaXJzdCwgYik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaHlwZXJzY3JpcHRfMS5oKHRhZ05hbWUgKyBmaXJzdCwge30pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCEhYikge1xuICAgICAgICAgICAgcmV0dXJuIGh5cGVyc2NyaXB0XzEuaCh0YWdOYW1lLCBmaXJzdCwgYik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoISFmaXJzdCkge1xuICAgICAgICAgICAgcmV0dXJuIGh5cGVyc2NyaXB0XzEuaCh0YWdOYW1lLCBmaXJzdCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gaHlwZXJzY3JpcHRfMS5oKHRhZ05hbWUsIHt9KTtcbiAgICAgICAgfVxuICAgIH07XG59XG52YXIgU1ZHX1RBR19OQU1FUyA9IFtcbiAgICAnYScsICdhbHRHbHlwaCcsICdhbHRHbHlwaERlZicsICdhbHRHbHlwaEl0ZW0nLCAnYW5pbWF0ZScsICdhbmltYXRlQ29sb3InLFxuICAgICdhbmltYXRlTW90aW9uJywgJ2FuaW1hdGVUcmFuc2Zvcm0nLCAnY2lyY2xlJywgJ2NsaXBQYXRoJywgJ2NvbG9yUHJvZmlsZScsXG4gICAgJ2N1cnNvcicsICdkZWZzJywgJ2Rlc2MnLCAnZWxsaXBzZScsICdmZUJsZW5kJywgJ2ZlQ29sb3JNYXRyaXgnLFxuICAgICdmZUNvbXBvbmVudFRyYW5zZmVyJywgJ2ZlQ29tcG9zaXRlJywgJ2ZlQ29udm9sdmVNYXRyaXgnLCAnZmVEaWZmdXNlTGlnaHRpbmcnLFxuICAgICdmZURpc3BsYWNlbWVudE1hcCcsICdmZURpc3RhbnRMaWdodCcsICdmZUZsb29kJywgJ2ZlRnVuY0EnLCAnZmVGdW5jQicsXG4gICAgJ2ZlRnVuY0cnLCAnZmVGdW5jUicsICdmZUdhdXNzaWFuQmx1cicsICdmZUltYWdlJywgJ2ZlTWVyZ2UnLCAnZmVNZXJnZU5vZGUnLFxuICAgICdmZU1vcnBob2xvZ3knLCAnZmVPZmZzZXQnLCAnZmVQb2ludExpZ2h0JywgJ2ZlU3BlY3VsYXJMaWdodGluZycsXG4gICAgJ2ZlU3BvdGxpZ2h0JywgJ2ZlVGlsZScsICdmZVR1cmJ1bGVuY2UnLCAnZmlsdGVyJywgJ2ZvbnQnLCAnZm9udEZhY2UnLFxuICAgICdmb250RmFjZUZvcm1hdCcsICdmb250RmFjZU5hbWUnLCAnZm9udEZhY2VTcmMnLCAnZm9udEZhY2VVcmknLFxuICAgICdmb3JlaWduT2JqZWN0JywgJ2cnLCAnZ2x5cGgnLCAnZ2x5cGhSZWYnLCAnaGtlcm4nLCAnaW1hZ2UnLCAnbGluZScsXG4gICAgJ2xpbmVhckdyYWRpZW50JywgJ21hcmtlcicsICdtYXNrJywgJ21ldGFkYXRhJywgJ21pc3NpbmdHbHlwaCcsICdtcGF0aCcsXG4gICAgJ3BhdGgnLCAncGF0dGVybicsICdwb2x5Z29uJywgJ3BvbHlsaW5nJywgJ3JhZGlhbEdyYWRpZW50JywgJ3JlY3QnLCAnc2NyaXB0JyxcbiAgICAnc2V0JywgJ3N0b3AnLCAnc3R5bGUnLCAnc3dpdGNoJywgJ3N5bWJvbCcsICd0ZXh0JywgJ3RleHRQYXRoJywgJ3RpdGxlJyxcbiAgICAndHJlZicsICd0c3BhbicsICd1c2UnLCAndmlldycsICd2a2Vybidcbl07XG52YXIgc3ZnID0gY3JlYXRlVGFnRnVuY3Rpb24oJ3N2ZycpO1xuU1ZHX1RBR19OQU1FUy5mb3JFYWNoKGZ1bmN0aW9uICh0YWcpIHtcbiAgICBzdmdbdGFnXSA9IGNyZWF0ZVRhZ0Z1bmN0aW9uKHRhZyk7XG59KTtcbnZhciBUQUdfTkFNRVMgPSBbXG4gICAgJ2EnLCAnYWJicicsICdhZGRyZXNzJywgJ2FyZWEnLCAnYXJ0aWNsZScsICdhc2lkZScsICdhdWRpbycsICdiJywgJ2Jhc2UnLFxuICAgICdiZGknLCAnYmRvJywgJ2Jsb2NrcXVvdGUnLCAnYm9keScsICdicicsICdidXR0b24nLCAnY2FudmFzJywgJ2NhcHRpb24nLFxuICAgICdjaXRlJywgJ2NvZGUnLCAnY29sJywgJ2NvbGdyb3VwJywgJ2RkJywgJ2RlbCcsICdkZm4nLCAnZGlyJywgJ2RpdicsICdkbCcsXG4gICAgJ2R0JywgJ2VtJywgJ2VtYmVkJywgJ2ZpZWxkc2V0JywgJ2ZpZ2NhcHRpb24nLCAnZmlndXJlJywgJ2Zvb3RlcicsICdmb3JtJyxcbiAgICAnaDEnLCAnaDInLCAnaDMnLCAnaDQnLCAnaDUnLCAnaDYnLCAnaGVhZCcsICdoZWFkZXInLCAnaGdyb3VwJywgJ2hyJywgJ2h0bWwnLFxuICAgICdpJywgJ2lmcmFtZScsICdpbWcnLCAnaW5wdXQnLCAnaW5zJywgJ2tiZCcsICdrZXlnZW4nLCAnbGFiZWwnLCAnbGVnZW5kJyxcbiAgICAnbGknLCAnbGluaycsICdtYWluJywgJ21hcCcsICdtYXJrJywgJ21lbnUnLCAnbWV0YScsICduYXYnLCAnbm9zY3JpcHQnLFxuICAgICdvYmplY3QnLCAnb2wnLCAnb3B0Z3JvdXAnLCAnb3B0aW9uJywgJ3AnLCAncGFyYW0nLCAncHJlJywgJ3Byb2dyZXNzJywgJ3EnLFxuICAgICdycCcsICdydCcsICdydWJ5JywgJ3MnLCAnc2FtcCcsICdzY3JpcHQnLCAnc2VjdGlvbicsICdzZWxlY3QnLCAnc21hbGwnLFxuICAgICdzb3VyY2UnLCAnc3BhbicsICdzdHJvbmcnLCAnc3R5bGUnLCAnc3ViJywgJ3N1cCcsICd0YWJsZScsICd0Ym9keScsICd0ZCcsXG4gICAgJ3RleHRhcmVhJywgJ3Rmb290JywgJ3RoJywgJ3RoZWFkJywgJ3RpdGxlJywgJ3RyJywgJ3UnLCAndWwnLCAndmlkZW8nXG5dO1xudmFyIGV4cG9ydGVkID0geyBTVkdfVEFHX05BTUVTOiBTVkdfVEFHX05BTUVTLCBUQUdfTkFNRVM6IFRBR19OQU1FUywgc3ZnOiBzdmcsIGlzU2VsZWN0b3I6IGlzU2VsZWN0b3IsIGNyZWF0ZVRhZ0Z1bmN0aW9uOiBjcmVhdGVUYWdGdW5jdGlvbiB9O1xuVEFHX05BTUVTLmZvckVhY2goZnVuY3Rpb24gKG4pIHtcbiAgICBleHBvcnRlZFtuXSA9IGNyZWF0ZVRhZ0Z1bmN0aW9uKG4pO1xufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRlZmF1bHQgPSBleHBvcnRlZDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWh5cGVyc2NyaXB0LWhlbHBlcnMuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgaXMgPSByZXF1aXJlKCdzbmFiYmRvbS9pcycpO1xudmFyIHZub2RlID0gcmVxdWlyZSgnc25hYmJkb20vdm5vZGUnKTtcbmZ1bmN0aW9uIGlzR2VuZXJpY1N0cmVhbSh4KSB7XG4gICAgcmV0dXJuICFBcnJheS5pc0FycmF5KHgpICYmIHR5cGVvZiB4Lm1hcCA9PT0gXCJmdW5jdGlvblwiO1xufVxuZnVuY3Rpb24gbXV0YXRlU3RyZWFtV2l0aE5TKHZOb2RlKSB7XG4gICAgYWRkTlModk5vZGUuZGF0YSwgdk5vZGUuY2hpbGRyZW4pO1xuICAgIHJldHVybiB2Tm9kZTtcbn1cbmZ1bmN0aW9uIGFkZE5TKGRhdGEsIGNoaWxkcmVuKSB7XG4gICAgZGF0YS5ucyA9IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIjtcbiAgICBpZiAodHlwZW9mIGNoaWxkcmVuICE9PSBcInVuZGVmaW5lZFwiICYmIGlzLmFycmF5KGNoaWxkcmVuKSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICBpZiAoaXNHZW5lcmljU3RyZWFtKGNoaWxkcmVuW2ldKSkge1xuICAgICAgICAgICAgICAgIGNoaWxkcmVuW2ldID0gY2hpbGRyZW5baV0ubWFwKG11dGF0ZVN0cmVhbVdpdGhOUyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBhZGROUyhjaGlsZHJlbltpXS5kYXRhLCBjaGlsZHJlbltpXS5jaGlsZHJlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBoKHNlbCwgYiwgYykge1xuICAgIHZhciBkYXRhID0ge307XG4gICAgdmFyIGNoaWxkcmVuO1xuICAgIHZhciB0ZXh0O1xuICAgIHZhciBpO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgICAgIGRhdGEgPSBiO1xuICAgICAgICBpZiAoaXMuYXJyYXkoYykpIHtcbiAgICAgICAgICAgIGNoaWxkcmVuID0gYztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpcy5wcmltaXRpdmUoYykpIHtcbiAgICAgICAgICAgIHRleHQgPSBjO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgaWYgKGlzLmFycmF5KGIpKSB7XG4gICAgICAgICAgICBjaGlsZHJlbiA9IGI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXMucHJpbWl0aXZlKGIpKSB7XG4gICAgICAgICAgICB0ZXh0ID0gYjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGRhdGEgPSBiO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChpcy5hcnJheShjaGlsZHJlbikpIHtcbiAgICAgICAgY2hpbGRyZW4gPSBjaGlsZHJlbi5maWx0ZXIoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHg7IH0pO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIGlmIChpcy5wcmltaXRpdmUoY2hpbGRyZW5baV0pKSB7XG4gICAgICAgICAgICAgICAgY2hpbGRyZW5baV0gPSB2bm9kZSh1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBjaGlsZHJlbltpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHNlbFswXSA9PT0gJ3MnICYmIHNlbFsxXSA9PT0gJ3YnICYmIHNlbFsyXSA9PT0gJ2cnKSB7XG4gICAgICAgIGFkZE5TKGRhdGEsIGNoaWxkcmVuKTtcbiAgICB9XG4gICAgcmV0dXJuIHZub2RlKHNlbCwgZGF0YSwgY2hpbGRyZW4sIHRleHQsIHVuZGVmaW5lZCk7XG59XG5leHBvcnRzLmggPSBoO1xuO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aHlwZXJzY3JpcHQuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgdGh1bmsgPSByZXF1aXJlKCdzbmFiYmRvbS90aHVuaycpO1xuZXhwb3J0cy50aHVuayA9IHRodW5rO1xudmFyIG1ha2VET01Ecml2ZXJfMSA9IHJlcXVpcmUoJy4vbWFrZURPTURyaXZlcicpO1xuZXhwb3J0cy5tYWtlRE9NRHJpdmVyID0gbWFrZURPTURyaXZlcl8xLm1ha2VET01Ecml2ZXI7XG52YXIgbWFrZUhUTUxEcml2ZXJfMSA9IHJlcXVpcmUoJy4vbWFrZUhUTUxEcml2ZXInKTtcbmV4cG9ydHMubWFrZUhUTUxEcml2ZXIgPSBtYWtlSFRNTERyaXZlcl8xLm1ha2VIVE1MRHJpdmVyO1xudmFyIG1vY2tET01Tb3VyY2VfMSA9IHJlcXVpcmUoJy4vbW9ja0RPTVNvdXJjZScpO1xuZXhwb3J0cy5tb2NrRE9NU291cmNlID0gbW9ja0RPTVNvdXJjZV8xLm1vY2tET01Tb3VyY2U7XG52YXIgaHlwZXJzY3JpcHRfMSA9IHJlcXVpcmUoJy4vaHlwZXJzY3JpcHQnKTtcbmV4cG9ydHMuaCA9IGh5cGVyc2NyaXB0XzEuaDtcbnZhciBoeXBlcnNjcmlwdF9oZWxwZXJzXzEgPSByZXF1aXJlKCcuL2h5cGVyc2NyaXB0LWhlbHBlcnMnKTtcbmV4cG9ydHMuc3ZnID0gaHlwZXJzY3JpcHRfaGVscGVyc18xLmRlZmF1bHQuc3ZnO1xuZXhwb3J0cy5hID0gaHlwZXJzY3JpcHRfaGVscGVyc18xLmRlZmF1bHQuYTtcbmV4cG9ydHMuYWJiciA9IGh5cGVyc2NyaXB0X2hlbHBlcnNfMS5kZWZhdWx0LmFiYnI7XG5leHBvcnRzLmFkZHJlc3MgPSBoeXBlcnNjcmlwdF9oZWxwZXJzXzEuZGVmYXVsdC5hZGRyZXNzO1xuZXhwb3J0cy5hcmVhID0gaHlwZXJzY3JpcHRfaGVscGVyc18xLmRlZmF1bHQuYXJlYTtcbmV4cG9ydHMuYXJ0aWNsZSA9IGh5cGVyc2NyaXB0X2hlbHBlcnNfMS5kZWZhdWx0LmFydGljbGU7XG5leHBvcnRzLmFzaWRlID0gaHlwZXJzY3JpcHRfaGVscGVyc18xLmRlZmF1bHQuYXNpZGU7XG5leHBvcnRzLmF1ZGlvID0gaHlwZXJzY3JpcHRfaGVscGVyc18xLmRlZmF1bHQuYXVkaW87XG5leHBvcnRzLmIgPSBoeXBlcnNjcmlwdF9oZWxwZXJzXzEuZGVmYXVsdC5iO1xuZXhwb3J0cy5iYXNlID0gaHlwZXJzY3JpcHRfaGVscGVyc18xLmRlZmF1bHQuYmFzZTtcbmV4cG9ydHMuYmRpID0gaHlwZXJzY3JpcHRfaGVscGVyc18xLmRlZmF1bHQuYmRpO1xuZXhwb3J0cy5iZG8gPSBoeXBlcnNjcmlwdF9oZWxwZXJzXzEuZGVmYXVsdC5iZG87XG5leHBvcnRzLmJsb2NrcXVvdGUgPSBoeXBlcnNjcmlwdF9oZWxwZXJzXzEuZGVmYXVsdC5ibG9ja3F1b3RlO1xuZXhwb3J0cy5ib2R5ID0gaHlwZXJzY3JpcHRfaGVscGVyc18xLmRlZmF1bHQuYm9keTtcbmV4cG9ydHMuYnIgPSBoeXBlcnNjcmlwdF9oZWxwZXJzXzEuZGVmYXVsdC5icjtcbmV4cG9ydHMuYnV0dG9uID0gaHlwZXJzY3JpcHRfaGVscGVyc18xLmRlZmF1bHQuYnV0dG9uO1xuZXhwb3J0cy5jYW52YXMgPSBoeXBlcnNjcmlwdF9oZWxwZXJzXzEuZGVmYXVsdC5jYW52YXM7XG5leHBvcnRzLmNhcHRpb24gPSBoeXBlcnNjcmlwdF9oZWxwZXJzXzEuZGVmYXVsdC5jYXB0aW9uO1xuZXhwb3J0cy5jaXRlID0gaHlwZXJzY3JpcHRfaGVscGVyc18xLmRlZmF1bHQuY2l0ZTtcbmV4cG9ydHMuY29kZSA9IGh5cGVyc2NyaXB0X2hlbHBlcnNfMS5kZWZhdWx0LmNvZGU7XG5leHBvcnRzLmNvbCA9IGh5cGVyc2NyaXB0X2hlbHBlcnNfMS5kZWZhdWx0LmNvbDtcbmV4cG9ydHMuY29sZ3JvdXAgPSBoeXBlcnNjcmlwdF9oZWxwZXJzXzEuZGVmYXVsdC5jb2xncm91cDtcbmV4cG9ydHMuZGQgPSBoeXBlcnNjcmlwdF9oZWxwZXJzXzEuZGVmYXVsdC5kZDtcbmV4cG9ydHMuZGVsID0gaHlwZXJzY3JpcHRfaGVscGVyc18xLmRlZmF1bHQuZGVsO1xuZXhwb3J0cy5kZm4gPSBoeXBlcnNjcmlwdF9oZWxwZXJzXzEuZGVmYXVsdC5kZm47XG5leHBvcnRzLmRpciA9IGh5cGVyc2NyaXB0X2hlbHBlcnNfMS5kZWZhdWx0LmRpcjtcbmV4cG9ydHMuZGl2ID0gaHlwZXJzY3JpcHRfaGVscGVyc18xLmRlZmF1bHQuZGl2O1xuZXhwb3J0cy5kbCA9IGh5cGVyc2NyaXB0X2hlbHBlcnNfMS5kZWZhdWx0LmRsO1xuZXhwb3J0cy5kdCA9IGh5cGVyc2NyaXB0X2hlbHBlcnNfMS5kZWZhdWx0LmR0O1xuZXhwb3J0cy5lbSA9IGh5cGVyc2NyaXB0X2hlbHBlcnNfMS5kZWZhdWx0LmVtO1xuZXhwb3J0cy5lbWJlZCA9IGh5cGVyc2NyaXB0X2hlbHBlcnNfMS5kZWZhdWx0LmVtYmVkO1xuZXhwb3J0cy5maWVsZHNldCA9IGh5cGVyc2NyaXB0X2hlbHBlcnNfMS5kZWZhdWx0LmZpZWxkc2V0O1xuZXhwb3J0cy5maWdjYXB0aW9uID0gaHlwZXJzY3JpcHRfaGVscGVyc18xLmRlZmF1bHQuZmlnY2FwdGlvbjtcbmV4cG9ydHMuZmlndXJlID0gaHlwZXJzY3JpcHRfaGVscGVyc18xLmRlZmF1bHQuZmlndXJlO1xuZXhwb3J0cy5mb290ZXIgPSBoeXBlcnNjcmlwdF9oZWxwZXJzXzEuZGVmYXVsdC5mb290ZXI7XG5leHBvcnRzLmZvcm0gPSBoeXBlcnNjcmlwdF9oZWxwZXJzXzEuZGVmYXVsdC5mb3JtO1xuZXhwb3J0cy5oMSA9IGh5cGVyc2NyaXB0X2hlbHBlcnNfMS5kZWZhdWx0LmgxO1xuZXhwb3J0cy5oMiA9IGh5cGVyc2NyaXB0X2hlbHBlcnNfMS5kZWZhdWx0LmgyO1xuZXhwb3J0cy5oMyA9IGh5cGVyc2NyaXB0X2hlbHBlcnNfMS5kZWZhdWx0LmgzO1xuZXhwb3J0cy5oNCA9IGh5cGVyc2NyaXB0X2hlbHBlcnNfMS5kZWZhdWx0Lmg0O1xuZXhwb3J0cy5oNSA9IGh5cGVyc2NyaXB0X2hlbHBlcnNfMS5kZWZhdWx0Lmg1O1xuZXhwb3J0cy5oNiA9IGh5cGVyc2NyaXB0X2hlbHBlcnNfMS5kZWZhdWx0Lmg2O1xuZXhwb3J0cy5oZWFkID0gaHlwZXJzY3JpcHRfaGVscGVyc18xLmRlZmF1bHQuaGVhZDtcbmV4cG9ydHMuaGVhZGVyID0gaHlwZXJzY3JpcHRfaGVscGVyc18xLmRlZmF1bHQuaGVhZGVyO1xuZXhwb3J0cy5oZ3JvdXAgPSBoeXBlcnNjcmlwdF9oZWxwZXJzXzEuZGVmYXVsdC5oZ3JvdXA7XG5leHBvcnRzLmhyID0gaHlwZXJzY3JpcHRfaGVscGVyc18xLmRlZmF1bHQuaHI7XG5leHBvcnRzLmh0bWwgPSBoeXBlcnNjcmlwdF9oZWxwZXJzXzEuZGVmYXVsdC5odG1sO1xuZXhwb3J0cy5pID0gaHlwZXJzY3JpcHRfaGVscGVyc18xLmRlZmF1bHQuaTtcbmV4cG9ydHMuaWZyYW1lID0gaHlwZXJzY3JpcHRfaGVscGVyc18xLmRlZmF1bHQuaWZyYW1lO1xuZXhwb3J0cy5pbWcgPSBoeXBlcnNjcmlwdF9oZWxwZXJzXzEuZGVmYXVsdC5pbWc7XG5leHBvcnRzLmlucHV0ID0gaHlwZXJzY3JpcHRfaGVscGVyc18xLmRlZmF1bHQuaW5wdXQ7XG5leHBvcnRzLmlucyA9IGh5cGVyc2NyaXB0X2hlbHBlcnNfMS5kZWZhdWx0LmlucztcbmV4cG9ydHMua2JkID0gaHlwZXJzY3JpcHRfaGVscGVyc18xLmRlZmF1bHQua2JkO1xuZXhwb3J0cy5rZXlnZW4gPSBoeXBlcnNjcmlwdF9oZWxwZXJzXzEuZGVmYXVsdC5rZXlnZW47XG5leHBvcnRzLmxhYmVsID0gaHlwZXJzY3JpcHRfaGVscGVyc18xLmRlZmF1bHQubGFiZWw7XG5leHBvcnRzLmxlZ2VuZCA9IGh5cGVyc2NyaXB0X2hlbHBlcnNfMS5kZWZhdWx0LmxlZ2VuZDtcbmV4cG9ydHMubGkgPSBoeXBlcnNjcmlwdF9oZWxwZXJzXzEuZGVmYXVsdC5saTtcbmV4cG9ydHMubGluayA9IGh5cGVyc2NyaXB0X2hlbHBlcnNfMS5kZWZhdWx0Lmxpbms7XG5leHBvcnRzLm1haW4gPSBoeXBlcnNjcmlwdF9oZWxwZXJzXzEuZGVmYXVsdC5tYWluO1xuZXhwb3J0cy5tYXAgPSBoeXBlcnNjcmlwdF9oZWxwZXJzXzEuZGVmYXVsdC5tYXA7XG5leHBvcnRzLm1hcmsgPSBoeXBlcnNjcmlwdF9oZWxwZXJzXzEuZGVmYXVsdC5tYXJrO1xuZXhwb3J0cy5tZW51ID0gaHlwZXJzY3JpcHRfaGVscGVyc18xLmRlZmF1bHQubWVudTtcbmV4cG9ydHMubWV0YSA9IGh5cGVyc2NyaXB0X2hlbHBlcnNfMS5kZWZhdWx0Lm1ldGE7XG5leHBvcnRzLm5hdiA9IGh5cGVyc2NyaXB0X2hlbHBlcnNfMS5kZWZhdWx0Lm5hdjtcbmV4cG9ydHMubm9zY3JpcHQgPSBoeXBlcnNjcmlwdF9oZWxwZXJzXzEuZGVmYXVsdC5ub3NjcmlwdDtcbmV4cG9ydHMub2JqZWN0ID0gaHlwZXJzY3JpcHRfaGVscGVyc18xLmRlZmF1bHQub2JqZWN0O1xuZXhwb3J0cy5vbCA9IGh5cGVyc2NyaXB0X2hlbHBlcnNfMS5kZWZhdWx0Lm9sO1xuZXhwb3J0cy5vcHRncm91cCA9IGh5cGVyc2NyaXB0X2hlbHBlcnNfMS5kZWZhdWx0Lm9wdGdyb3VwO1xuZXhwb3J0cy5vcHRpb24gPSBoeXBlcnNjcmlwdF9oZWxwZXJzXzEuZGVmYXVsdC5vcHRpb247XG5leHBvcnRzLnAgPSBoeXBlcnNjcmlwdF9oZWxwZXJzXzEuZGVmYXVsdC5wO1xuZXhwb3J0cy5wYXJhbSA9IGh5cGVyc2NyaXB0X2hlbHBlcnNfMS5kZWZhdWx0LnBhcmFtO1xuZXhwb3J0cy5wcmUgPSBoeXBlcnNjcmlwdF9oZWxwZXJzXzEuZGVmYXVsdC5wcmU7XG5leHBvcnRzLnByb2dyZXNzID0gaHlwZXJzY3JpcHRfaGVscGVyc18xLmRlZmF1bHQucHJvZ3Jlc3M7XG5leHBvcnRzLnEgPSBoeXBlcnNjcmlwdF9oZWxwZXJzXzEuZGVmYXVsdC5xO1xuZXhwb3J0cy5ycCA9IGh5cGVyc2NyaXB0X2hlbHBlcnNfMS5kZWZhdWx0LnJwO1xuZXhwb3J0cy5ydCA9IGh5cGVyc2NyaXB0X2hlbHBlcnNfMS5kZWZhdWx0LnJ0O1xuZXhwb3J0cy5ydWJ5ID0gaHlwZXJzY3JpcHRfaGVscGVyc18xLmRlZmF1bHQucnVieTtcbmV4cG9ydHMucyA9IGh5cGVyc2NyaXB0X2hlbHBlcnNfMS5kZWZhdWx0LnM7XG5leHBvcnRzLnNhbXAgPSBoeXBlcnNjcmlwdF9oZWxwZXJzXzEuZGVmYXVsdC5zYW1wO1xuZXhwb3J0cy5zY3JpcHQgPSBoeXBlcnNjcmlwdF9oZWxwZXJzXzEuZGVmYXVsdC5zY3JpcHQ7XG5leHBvcnRzLnNlY3Rpb24gPSBoeXBlcnNjcmlwdF9oZWxwZXJzXzEuZGVmYXVsdC5zZWN0aW9uO1xuZXhwb3J0cy5zZWxlY3QgPSBoeXBlcnNjcmlwdF9oZWxwZXJzXzEuZGVmYXVsdC5zZWxlY3Q7XG5leHBvcnRzLnNtYWxsID0gaHlwZXJzY3JpcHRfaGVscGVyc18xLmRlZmF1bHQuc21hbGw7XG5leHBvcnRzLnNvdXJjZSA9IGh5cGVyc2NyaXB0X2hlbHBlcnNfMS5kZWZhdWx0LnNvdXJjZTtcbmV4cG9ydHMuc3BhbiA9IGh5cGVyc2NyaXB0X2hlbHBlcnNfMS5kZWZhdWx0LnNwYW47XG5leHBvcnRzLnN0cm9uZyA9IGh5cGVyc2NyaXB0X2hlbHBlcnNfMS5kZWZhdWx0LnN0cm9uZztcbmV4cG9ydHMuc3R5bGUgPSBoeXBlcnNjcmlwdF9oZWxwZXJzXzEuZGVmYXVsdC5zdHlsZTtcbmV4cG9ydHMuc3ViID0gaHlwZXJzY3JpcHRfaGVscGVyc18xLmRlZmF1bHQuc3ViO1xuZXhwb3J0cy5zdXAgPSBoeXBlcnNjcmlwdF9oZWxwZXJzXzEuZGVmYXVsdC5zdXA7XG5leHBvcnRzLnRhYmxlID0gaHlwZXJzY3JpcHRfaGVscGVyc18xLmRlZmF1bHQudGFibGU7XG5leHBvcnRzLnRib2R5ID0gaHlwZXJzY3JpcHRfaGVscGVyc18xLmRlZmF1bHQudGJvZHk7XG5leHBvcnRzLnRkID0gaHlwZXJzY3JpcHRfaGVscGVyc18xLmRlZmF1bHQudGQ7XG5leHBvcnRzLnRleHRhcmVhID0gaHlwZXJzY3JpcHRfaGVscGVyc18xLmRlZmF1bHQudGV4dGFyZWE7XG5leHBvcnRzLnRmb290ID0gaHlwZXJzY3JpcHRfaGVscGVyc18xLmRlZmF1bHQudGZvb3Q7XG5leHBvcnRzLnRoID0gaHlwZXJzY3JpcHRfaGVscGVyc18xLmRlZmF1bHQudGg7XG5leHBvcnRzLnRoZWFkID0gaHlwZXJzY3JpcHRfaGVscGVyc18xLmRlZmF1bHQudGhlYWQ7XG5leHBvcnRzLnRpdGxlID0gaHlwZXJzY3JpcHRfaGVscGVyc18xLmRlZmF1bHQudGl0bGU7XG5leHBvcnRzLnRyID0gaHlwZXJzY3JpcHRfaGVscGVyc18xLmRlZmF1bHQudHI7XG5leHBvcnRzLnUgPSBoeXBlcnNjcmlwdF9oZWxwZXJzXzEuZGVmYXVsdC51O1xuZXhwb3J0cy51bCA9IGh5cGVyc2NyaXB0X2hlbHBlcnNfMS5kZWZhdWx0LnVsO1xuZXhwb3J0cy52aWRlbyA9IGh5cGVyc2NyaXB0X2hlbHBlcnNfMS5kZWZhdWx0LnZpZGVvO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgdXRpbHNfMSA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcbmZ1bmN0aW9uIGlzb2xhdGVTb3VyY2Uoc291cmNlLCBzY29wZSkge1xuICAgIHJldHVybiBzb3VyY2Uuc2VsZWN0KHV0aWxzXzEuU0NPUEVfUFJFRklYICsgc2NvcGUpO1xufVxuZXhwb3J0cy5pc29sYXRlU291cmNlID0gaXNvbGF0ZVNvdXJjZTtcbmZ1bmN0aW9uIGlzb2xhdGVTaW5rKHNpbmssIHNjb3BlKSB7XG4gICAgcmV0dXJuIHNpbmsubWFwKGZ1bmN0aW9uICh2VHJlZSkge1xuICAgICAgICBpZiAodlRyZWUuZGF0YS5pc29sYXRlKSB7XG4gICAgICAgICAgICB2YXIgZXhpc3RpbmdTY29wZSA9IHBhcnNlSW50KHZUcmVlLmRhdGEuaXNvbGF0ZS5zcGxpdCh1dGlsc18xLlNDT1BFX1BSRUZJWCArICdjeWNsZScpWzFdKTtcbiAgICAgICAgICAgIHZhciBfc2NvcGUgPSBwYXJzZUludChzY29wZS5zcGxpdCgnY3ljbGUnKVsxXSk7XG4gICAgICAgICAgICBpZiAoTnVtYmVyLmlzTmFOKGV4aXN0aW5nU2NvcGUpIHx8XG4gICAgICAgICAgICAgICAgTnVtYmVyLmlzTmFOKF9zY29wZSkgfHxcbiAgICAgICAgICAgICAgICBleGlzdGluZ1Njb3BlID4gX3Njb3BlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZUcmVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHZUcmVlLmRhdGEuaXNvbGF0ZSA9IHV0aWxzXzEuU0NPUEVfUFJFRklYICsgc2NvcGU7XG4gICAgICAgIHJldHVybiB2VHJlZTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuaXNvbGF0ZVNpbmsgPSBpc29sYXRlU2luaztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWlzb2xhdGUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgSXNvbGF0ZU1vZHVsZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gSXNvbGF0ZU1vZHVsZShpc29sYXRlZEVsZW1lbnRzKSB7XG4gICAgICAgIHRoaXMuaXNvbGF0ZWRFbGVtZW50cyA9IGlzb2xhdGVkRWxlbWVudHM7XG4gICAgICAgIHRoaXMuZXZlbnREZWxlZ2F0b3JzID0gbmV3IE1hcCgpO1xuICAgIH1cbiAgICBJc29sYXRlTW9kdWxlLnByb3RvdHlwZS5zZXRTY29wZSA9IGZ1bmN0aW9uIChlbG0sIHNjb3BlKSB7XG4gICAgICAgIHRoaXMuaXNvbGF0ZWRFbGVtZW50cy5zZXQoc2NvcGUsIGVsbSk7XG4gICAgfTtcbiAgICBJc29sYXRlTW9kdWxlLnByb3RvdHlwZS5yZW1vdmVTY29wZSA9IGZ1bmN0aW9uIChzY29wZSkge1xuICAgICAgICB0aGlzLmlzb2xhdGVkRWxlbWVudHMuZGVsZXRlKHNjb3BlKTtcbiAgICB9O1xuICAgIElzb2xhdGVNb2R1bGUucHJvdG90eXBlLmdldElzb2xhdGVkRWxlbWVudCA9IGZ1bmN0aW9uIChzY29wZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc29sYXRlZEVsZW1lbnRzLmdldChzY29wZSk7XG4gICAgfTtcbiAgICBJc29sYXRlTW9kdWxlLnByb3RvdHlwZS5pc0lzb2xhdGVkRWxlbWVudCA9IGZ1bmN0aW9uIChlbG0pIHtcbiAgICAgICAgdmFyIGVsZW1lbnRzID0gQXJyYXkuZnJvbSh0aGlzLmlzb2xhdGVkRWxlbWVudHMuZW50cmllcygpKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgaWYgKGVsbSA9PT0gZWxlbWVudHNbaV1bMV0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudHNbaV1bMF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gICAgSXNvbGF0ZU1vZHVsZS5wcm90b3R5cGUuYWRkRXZlbnREZWxlZ2F0b3IgPSBmdW5jdGlvbiAoc2NvcGUsIGV2ZW50RGVsZWdhdG9yKSB7XG4gICAgICAgIHZhciBkZWxlZ2F0b3JzID0gdGhpcy5ldmVudERlbGVnYXRvcnMuZ2V0KHNjb3BlKTtcbiAgICAgICAgaWYgKCFkZWxlZ2F0b3JzKSB7XG4gICAgICAgICAgICBkZWxlZ2F0b3JzID0gW107XG4gICAgICAgICAgICB0aGlzLmV2ZW50RGVsZWdhdG9ycy5zZXQoc2NvcGUsIGRlbGVnYXRvcnMpO1xuICAgICAgICB9XG4gICAgICAgIGRlbGVnYXRvcnNbZGVsZWdhdG9ycy5sZW5ndGhdID0gZXZlbnREZWxlZ2F0b3I7XG4gICAgfTtcbiAgICBJc29sYXRlTW9kdWxlLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5pc29sYXRlZEVsZW1lbnRzLmNsZWFyKCk7XG4gICAgfTtcbiAgICBJc29sYXRlTW9kdWxlLnByb3RvdHlwZS5jcmVhdGVNb2R1bGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNyZWF0ZTogZnVuY3Rpb24gKG9sZFZOb2RlLCB2Tm9kZSkge1xuICAgICAgICAgICAgICAgIHZhciBfYSA9IG9sZFZOb2RlLmRhdGEsIG9sZERhdGEgPSBfYSA9PT0gdm9pZCAwID8ge30gOiBfYTtcbiAgICAgICAgICAgICAgICB2YXIgZWxtID0gdk5vZGUuZWxtLCBfYiA9IHZOb2RlLmRhdGEsIGRhdGEgPSBfYiA9PT0gdm9pZCAwID8ge30gOiBfYjtcbiAgICAgICAgICAgICAgICB2YXIgb2xkU2NvcGUgPSBvbGREYXRhLmlzb2xhdGUgfHwgXCJcIjtcbiAgICAgICAgICAgICAgICB2YXIgc2NvcGUgPSBkYXRhLmlzb2xhdGUgfHwgXCJcIjtcbiAgICAgICAgICAgICAgICBpZiAoc2NvcGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9sZFNjb3BlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJlbW92ZVNjb3BlKG9sZFNjb3BlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBzZWxmLnNldFNjb3BlKGVsbSwgc2NvcGUpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZGVsZWdhdG9ycyA9IHNlbGYuZXZlbnREZWxlZ2F0b3JzLmdldChzY29wZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkZWxlZ2F0b3JzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gZGVsZWdhdG9ycy5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGVnYXRvcnNbaV0udXBkYXRlVG9wRWxlbWVudChlbG0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGRlbGVnYXRvcnMgPT09IHZvaWQgMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5ldmVudERlbGVnYXRvcnMuc2V0KHNjb3BlLCBbXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG9sZFNjb3BlICYmICFzY29wZSkge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLnJlbW92ZVNjb3BlKHNjb3BlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdXBkYXRlOiBmdW5jdGlvbiAob2xkVk5vZGUsIHZOb2RlKSB7XG4gICAgICAgICAgICAgICAgdmFyIF9hID0gb2xkVk5vZGUuZGF0YSwgb2xkRGF0YSA9IF9hID09PSB2b2lkIDAgPyB7fSA6IF9hO1xuICAgICAgICAgICAgICAgIHZhciBlbG0gPSB2Tm9kZS5lbG0sIF9iID0gdk5vZGUuZGF0YSwgZGF0YSA9IF9iID09PSB2b2lkIDAgPyB7fSA6IF9iO1xuICAgICAgICAgICAgICAgIHZhciBvbGRTY29wZSA9IG9sZERhdGEuaXNvbGF0ZSB8fCBcIlwiO1xuICAgICAgICAgICAgICAgIHZhciBzY29wZSA9IGRhdGEuaXNvbGF0ZSB8fCBcIlwiO1xuICAgICAgICAgICAgICAgIGlmIChzY29wZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAob2xkU2NvcGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucmVtb3ZlU2NvcGUob2xkU2NvcGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuc2V0U2NvcGUoZWxtLCBzY29wZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChvbGRTY29wZSAmJiAhc2NvcGUpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5yZW1vdmVTY29wZShzY29wZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlbW92ZTogZnVuY3Rpb24gKF9hLCBjYikge1xuICAgICAgICAgICAgICAgIHZhciBkYXRhID0gX2EuZGF0YTtcbiAgICAgICAgICAgICAgICBkYXRhID0gZGF0YSB8fCB7fTtcbiAgICAgICAgICAgICAgICB2YXIgc2NvcGUgPSBkYXRhLmlzb2xhdGU7XG4gICAgICAgICAgICAgICAgaWYgKHNjb3BlKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYucmVtb3ZlU2NvcGUoc2NvcGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZi5ldmVudERlbGVnYXRvcnMuZ2V0KHNjb3BlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5ldmVudERlbGVnYXRvcnMuc2V0KHNjb3BlLCBbXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2IoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZXN0cm95OiBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IF9hLmRhdGE7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGRhdGEgfHwge307XG4gICAgICAgICAgICAgICAgdmFyIHNjb3BlID0gZGF0YS5pc29sYXRlO1xuICAgICAgICAgICAgICAgIGlmIChzY29wZSkge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLnJlbW92ZVNjb3BlKHNjb3BlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGYuZXZlbnREZWxlZ2F0b3JzLmdldChzY29wZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZXZlbnREZWxlZ2F0b3JzLnNldChzY29wZSwgW10pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH07XG4gICAgcmV0dXJuIElzb2xhdGVNb2R1bGU7XG59KCkpO1xuZXhwb3J0cy5Jc29sYXRlTW9kdWxlID0gSXNvbGF0ZU1vZHVsZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWlzb2xhdGVNb2R1bGUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgc25hYmJkb21fMSA9IHJlcXVpcmUoJ3NuYWJiZG9tJyk7XG52YXIgeHN0cmVhbV8xID0gcmVxdWlyZSgneHN0cmVhbScpO1xudmFyIE1haW5ET01Tb3VyY2VfMSA9IHJlcXVpcmUoJy4vTWFpbkRPTVNvdXJjZScpO1xudmFyIFZOb2RlV3JhcHBlcl8xID0gcmVxdWlyZSgnLi9WTm9kZVdyYXBwZXInKTtcbnZhciB1dGlsc18xID0gcmVxdWlyZSgnLi91dGlscycpO1xudmFyIG1vZHVsZXNfMSA9IHJlcXVpcmUoJy4vbW9kdWxlcycpO1xudmFyIGlzb2xhdGVNb2R1bGVfMSA9IHJlcXVpcmUoJy4vaXNvbGF0ZU1vZHVsZScpO1xudmFyIHRyYW5zcG9zaXRpb25fMSA9IHJlcXVpcmUoJy4vdHJhbnNwb3NpdGlvbicpO1xudmFyIHhzdHJlYW1fYWRhcHRlcl8xID0gcmVxdWlyZSgnQGN5Y2xlL3hzdHJlYW0tYWRhcHRlcicpO1xuZnVuY3Rpb24gbWFrZURPTURyaXZlcklucHV0R3VhcmQobW9kdWxlcykge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShtb2R1bGVzKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJPcHRpb25hbCBtb2R1bGVzIG9wdGlvbiBtdXN0IGJlIFwiICtcbiAgICAgICAgICAgIFwiYW4gYXJyYXkgZm9yIHNuYWJiZG9tIG1vZHVsZXNcIik7XG4gICAgfVxufVxuZnVuY3Rpb24gZG9tRHJpdmVySW5wdXRHdWFyZCh2aWV3JCkge1xuICAgIGlmICghdmlldyRcbiAgICAgICAgfHwgdHlwZW9mIHZpZXckLmFkZExpc3RlbmVyICE9PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgfHwgdHlwZW9mIHZpZXckLmZvbGQgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgRE9NIGRyaXZlciBmdW5jdGlvbiBleHBlY3RzIGFzIGlucHV0IGEgU3RyZWFtIG9mIFwiICtcbiAgICAgICAgICAgIFwidmlydHVhbCBET00gZWxlbWVudHNcIik7XG4gICAgfVxufVxuZnVuY3Rpb24gbWFrZURPTURyaXZlcihjb250YWluZXIsIG9wdGlvbnMpIHtcbiAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cbiAgICB2YXIgdHJhbnNwb3NpdGlvbiA9IG9wdGlvbnMudHJhbnNwb3NpdGlvbiB8fCBmYWxzZTtcbiAgICB2YXIgbW9kdWxlcyA9IG9wdGlvbnMubW9kdWxlcyB8fCBtb2R1bGVzXzEuZGVmYXVsdDtcbiAgICB2YXIgaXNvbGF0ZU1vZHVsZSA9IG5ldyBpc29sYXRlTW9kdWxlXzEuSXNvbGF0ZU1vZHVsZSgobmV3IE1hcCgpKSk7XG4gICAgdmFyIHBhdGNoID0gc25hYmJkb21fMS5pbml0KFtpc29sYXRlTW9kdWxlLmNyZWF0ZU1vZHVsZSgpXS5jb25jYXQobW9kdWxlcykpO1xuICAgIHZhciByb290RWxlbWVudCA9IHV0aWxzXzEuZ2V0RWxlbWVudChjb250YWluZXIpO1xuICAgIHZhciB2bm9kZVdyYXBwZXIgPSBuZXcgVk5vZGVXcmFwcGVyXzEuVk5vZGVXcmFwcGVyKHJvb3RFbGVtZW50KTtcbiAgICB2YXIgZGVsZWdhdG9ycyA9IG5ldyBNYXAoKTtcbiAgICBtYWtlRE9NRHJpdmVySW5wdXRHdWFyZChtb2R1bGVzKTtcbiAgICBmdW5jdGlvbiBET01Ecml2ZXIodm5vZGUkLCBydW5TdHJlYW1BZGFwdGVyKSB7XG4gICAgICAgIGRvbURyaXZlcklucHV0R3VhcmQodm5vZGUkKTtcbiAgICAgICAgdmFyIHRyYW5zcG9zZVZOb2RlID0gdHJhbnNwb3NpdGlvbl8xLm1ha2VUcmFuc3Bvc2VWTm9kZShydW5TdHJlYW1BZGFwdGVyKTtcbiAgICAgICAgdmFyIHByZXByb2Nlc3NlZFZOb2RlJCA9ICh0cmFuc3Bvc2l0aW9uID8gdm5vZGUkLm1hcCh0cmFuc3Bvc2VWTm9kZSkuZmxhdHRlbigpIDogdm5vZGUkKTtcbiAgICAgICAgdmFyIHJvb3RFbGVtZW50JCA9IHByZXByb2Nlc3NlZFZOb2RlJFxuICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAodm5vZGUpIHsgcmV0dXJuIHZub2RlV3JhcHBlci5jYWxsKHZub2RlKTsgfSlcbiAgICAgICAgICAgIC5mb2xkKHBhdGNoLCByb290RWxlbWVudClcbiAgICAgICAgICAgIC5kcm9wKDEpXG4gICAgICAgICAgICAubWFwKGZ1bmN0aW9uIHVud3JhcEVsZW1lbnRGcm9tVk5vZGUodm5vZGUpIHsgcmV0dXJuIHZub2RlLmVsbTsgfSlcbiAgICAgICAgICAgIC5jb21wb3NlKGZ1bmN0aW9uIChzdHJlYW0pIHsgcmV0dXJuIHhzdHJlYW1fMS5kZWZhdWx0Lm1lcmdlKHN0cmVhbSwgeHN0cmVhbV8xLmRlZmF1bHQubmV2ZXIoKSk7IH0pIC8vIGRvbid0IGNvbXBsZXRlIHRoaXMgc3RyZWFtXG4gICAgICAgICAgICAuc3RhcnRXaXRoKHJvb3RFbGVtZW50KTtcbiAgICAgICAgLyogdHNsaW50OmRpc2FibGU6bm8tZW1wdHkgKi9cbiAgICAgICAgcm9vdEVsZW1lbnQkLmFkZExpc3RlbmVyKHsgbmV4dDogZnVuY3Rpb24gKCkgeyB9LCBlcnJvcjogZnVuY3Rpb24gKCkgeyB9LCBjb21wbGV0ZTogZnVuY3Rpb24gKCkgeyB9IH0pO1xuICAgICAgICAvKiB0c2xpbnQ6ZW5hYmxlOm5vLWVtcHR5ICovXG4gICAgICAgIHJldHVybiBuZXcgTWFpbkRPTVNvdXJjZV8xLk1haW5ET01Tb3VyY2Uocm9vdEVsZW1lbnQkLCBydW5TdHJlYW1BZGFwdGVyLCBbXSwgaXNvbGF0ZU1vZHVsZSwgZGVsZWdhdG9ycyk7XG4gICAgfVxuICAgIDtcbiAgICBET01Ecml2ZXIuc3RyZWFtQWRhcHRlciA9IHhzdHJlYW1fYWRhcHRlcl8xLmRlZmF1bHQ7XG4gICAgcmV0dXJuIERPTURyaXZlcjtcbn1cbmV4cG9ydHMubWFrZURPTURyaXZlciA9IG1ha2VET01Ecml2ZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tYWtlRE9NRHJpdmVyLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIHhzdHJlYW1fYWRhcHRlcl8xID0gcmVxdWlyZSgnQGN5Y2xlL3hzdHJlYW0tYWRhcHRlcicpO1xudmFyIHRyYW5zcG9zaXRpb25fMSA9IHJlcXVpcmUoJy4vdHJhbnNwb3NpdGlvbicpO1xudmFyIEhUTUxTb3VyY2VfMSA9IHJlcXVpcmUoJy4vSFRNTFNvdXJjZScpO1xudmFyIHRvSFRNTCA9IHJlcXVpcmUoJ3NuYWJiZG9tLXRvLWh0bWwnKTtcbi8qIHRzbGludDpkaXNhYmxlOm5vLWVtcHR5ICovXG52YXIgbm9vcCA9IGZ1bmN0aW9uICgpIHsgfTtcbi8qIHRzbGludDplbmFibGU6bm8tZW1wdHkgKi9cbmZ1bmN0aW9uIG1ha2VIVE1MRHJpdmVyKGVmZmVjdCwgb3B0aW9ucykge1xuICAgIGlmICghb3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0ge307XG4gICAgfVxuICAgIHZhciB0cmFuc3Bvc2l0aW9uID0gb3B0aW9ucy50cmFuc3Bvc2l0aW9uIHx8IGZhbHNlO1xuICAgIGZ1bmN0aW9uIGh0bWxEcml2ZXIodm5vZGUkLCBydW5TdHJlYW1BZGFwdGVyKSB7XG4gICAgICAgIHZhciB0cmFuc3Bvc2VWTm9kZSA9IHRyYW5zcG9zaXRpb25fMS5tYWtlVHJhbnNwb3NlVk5vZGUocnVuU3RyZWFtQWRhcHRlcik7XG4gICAgICAgIHZhciBwcmVwcm9jZXNzZWRWTm9kZSQgPSAodHJhbnNwb3NpdGlvbiA/IHZub2RlJC5tYXAodHJhbnNwb3NlVk5vZGUpLmZsYXR0ZW4oKSA6IHZub2RlJCk7XG4gICAgICAgIHZhciBodG1sJCA9IHByZXByb2Nlc3NlZFZOb2RlJC5sYXN0KCkubWFwKHRvSFRNTCk7XG4gICAgICAgIGh0bWwkLmFkZExpc3RlbmVyKHtcbiAgICAgICAgICAgIG5leHQ6IGVmZmVjdCB8fCBub29wLFxuICAgICAgICAgICAgZXJyb3I6IG5vb3AsXG4gICAgICAgICAgICBjb21wbGV0ZTogbm9vcCxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBuZXcgSFRNTFNvdXJjZV8xLkhUTUxTb3VyY2UoaHRtbCQsIHJ1blN0cmVhbUFkYXB0ZXIpO1xuICAgIH1cbiAgICA7XG4gICAgaHRtbERyaXZlci5zdHJlYW1BZGFwdGVyID0geHN0cmVhbV9hZGFwdGVyXzEuZGVmYXVsdDtcbiAgICByZXR1cm4gaHRtbERyaXZlcjtcbn1cbmV4cG9ydHMubWFrZUhUTUxEcml2ZXIgPSBtYWtlSFRNTERyaXZlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW1ha2VIVE1MRHJpdmVyLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIHhzdHJlYW1fYWRhcHRlcl8xID0gcmVxdWlyZSgnQGN5Y2xlL3hzdHJlYW0tYWRhcHRlcicpO1xudmFyIHhzdHJlYW1fMSA9IHJlcXVpcmUoJ3hzdHJlYW0nKTtcbnZhciBNb2NrZWRET01Tb3VyY2UgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIE1vY2tlZERPTVNvdXJjZShfc3RyZWFtQWRhcHRlciwgX21vY2tDb25maWcpIHtcbiAgICAgICAgdGhpcy5fc3RyZWFtQWRhcHRlciA9IF9zdHJlYW1BZGFwdGVyO1xuICAgICAgICB0aGlzLl9tb2NrQ29uZmlnID0gX21vY2tDb25maWc7XG4gICAgICAgIGlmIChfbW9ja0NvbmZpZy5lbGVtZW50cykge1xuICAgICAgICAgICAgdGhpcy5fZWxlbWVudHMgPSBfbW9ja0NvbmZpZy5lbGVtZW50cztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2VsZW1lbnRzID0gX3N0cmVhbUFkYXB0ZXIuYWRhcHQoeHN0cmVhbV8xLmRlZmF1bHQuZW1wdHkoKSwgeHN0cmVhbV9hZGFwdGVyXzEuZGVmYXVsdC5zdHJlYW1TdWJzY3JpYmUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIE1vY2tlZERPTVNvdXJjZS5wcm90b3R5cGUuZWxlbWVudHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbGVtZW50cztcbiAgICB9O1xuICAgIE1vY2tlZERPTVNvdXJjZS5wcm90b3R5cGUuZXZlbnRzID0gZnVuY3Rpb24gKGV2ZW50VHlwZSwgb3B0aW9ucykge1xuICAgICAgICB2YXIgbW9ja0NvbmZpZyA9IHRoaXMuX21vY2tDb25maWc7XG4gICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMobW9ja0NvbmZpZyk7XG4gICAgICAgIHZhciBrZXlzTGVuID0ga2V5cy5sZW5ndGg7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5c0xlbjsgaSsrKSB7XG4gICAgICAgICAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgICAgIGlmIChrZXkgPT09IGV2ZW50VHlwZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBtb2NrQ29uZmlnW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0cmVhbUFkYXB0ZXIuYWRhcHQoeHN0cmVhbV8xLmRlZmF1bHQuZW1wdHkoKSwgeHN0cmVhbV9hZGFwdGVyXzEuZGVmYXVsdC5zdHJlYW1TdWJzY3JpYmUpO1xuICAgIH07XG4gICAgTW9ja2VkRE9NU291cmNlLnByb3RvdHlwZS5zZWxlY3QgPSBmdW5jdGlvbiAoc2VsZWN0b3IpIHtcbiAgICAgICAgdmFyIG1vY2tDb25maWcgPSB0aGlzLl9tb2NrQ29uZmlnO1xuICAgICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG1vY2tDb25maWcpO1xuICAgICAgICB2YXIga2V5c0xlbiA9IGtleXMubGVuZ3RoO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXNMZW47IGkrKykge1xuICAgICAgICAgICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgICAgICAgICBpZiAoa2V5ID09PSBzZWxlY3Rvcikge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTW9ja2VkRE9NU291cmNlKHRoaXMuX3N0cmVhbUFkYXB0ZXIsIG1vY2tDb25maWdba2V5XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBNb2NrZWRET01Tb3VyY2UodGhpcy5fc3RyZWFtQWRhcHRlciwge30pO1xuICAgIH07XG4gICAgcmV0dXJuIE1vY2tlZERPTVNvdXJjZTtcbn0oKSk7XG5leHBvcnRzLk1vY2tlZERPTVNvdXJjZSA9IE1vY2tlZERPTVNvdXJjZTtcbmZ1bmN0aW9uIG1vY2tET01Tb3VyY2Uoc3RyZWFtQWRhcHRlciwgbW9ja0NvbmZpZykge1xuICAgIHJldHVybiBuZXcgTW9ja2VkRE9NU291cmNlKHN0cmVhbUFkYXB0ZXIsIG1vY2tDb25maWcpO1xufVxuZXhwb3J0cy5tb2NrRE9NU291cmNlID0gbW9ja0RPTVNvdXJjZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW1vY2tET01Tb3VyY2UuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgQ2xhc3NNb2R1bGUgPSByZXF1aXJlKCdzbmFiYmRvbS9tb2R1bGVzL2NsYXNzJyk7XG5leHBvcnRzLkNsYXNzTW9kdWxlID0gQ2xhc3NNb2R1bGU7XG52YXIgUHJvcHNNb2R1bGUgPSByZXF1aXJlKCdzbmFiYmRvbS9tb2R1bGVzL3Byb3BzJyk7XG5leHBvcnRzLlByb3BzTW9kdWxlID0gUHJvcHNNb2R1bGU7XG52YXIgQXR0cnNNb2R1bGUgPSByZXF1aXJlKCdzbmFiYmRvbS9tb2R1bGVzL2F0dHJpYnV0ZXMnKTtcbmV4cG9ydHMuQXR0cnNNb2R1bGUgPSBBdHRyc01vZHVsZTtcbnZhciBFdmVudHNNb2R1bGUgPSByZXF1aXJlKCdzbmFiYmRvbS9tb2R1bGVzL2V2ZW50bGlzdGVuZXJzJyk7XG5leHBvcnRzLkV2ZW50c01vZHVsZSA9IEV2ZW50c01vZHVsZTtcbnZhciBTdHlsZU1vZHVsZSA9IHJlcXVpcmUoJ3NuYWJiZG9tL21vZHVsZXMvc3R5bGUnKTtcbmV4cG9ydHMuU3R5bGVNb2R1bGUgPSBTdHlsZU1vZHVsZTtcbnZhciBIZXJvTW9kdWxlID0gcmVxdWlyZSgnc25hYmJkb20vbW9kdWxlcy9oZXJvJyk7XG5leHBvcnRzLkhlcm9Nb2R1bGUgPSBIZXJvTW9kdWxlO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gW1N0eWxlTW9kdWxlLCBDbGFzc01vZHVsZSwgUHJvcHNNb2R1bGUsIEF0dHJzTW9kdWxlXTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW1vZHVsZXMuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgeHN0cmVhbV9hZGFwdGVyXzEgPSByZXF1aXJlKCdAY3ljbGUveHN0cmVhbS1hZGFwdGVyJyk7XG52YXIgeHN0cmVhbV8xID0gcmVxdWlyZSgneHN0cmVhbScpO1xuZnVuY3Rpb24gY3JlYXRlVlRyZWUodm5vZGUsIGNoaWxkcmVuKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgc2VsOiB2bm9kZS5zZWwsXG4gICAgICAgIGRhdGE6IHZub2RlLmRhdGEsXG4gICAgICAgIHRleHQ6IHZub2RlLnRleHQsXG4gICAgICAgIGVsbTogdm5vZGUuZWxtLFxuICAgICAgICBrZXk6IHZub2RlLmtleSxcbiAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuLFxuICAgIH07XG59XG5mdW5jdGlvbiBtYWtlVHJhbnNwb3NlVk5vZGUocnVuU3RyZWFtQWRhcHRlcikge1xuICAgIHJldHVybiBmdW5jdGlvbiB0cmFuc3Bvc2VWTm9kZSh2bm9kZSkge1xuICAgICAgICBpZiAoIXZub2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh2bm9kZSAmJiB0eXBlb2Ygdm5vZGUuZGF0YSA9PT0gXCJvYmplY3RcIiAmJiB2bm9kZS5kYXRhLnN0YXRpYykge1xuICAgICAgICAgICAgcmV0dXJuIHhzdHJlYW1fMS5kZWZhdWx0Lm9mKHZub2RlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChydW5TdHJlYW1BZGFwdGVyLmlzVmFsaWRTdHJlYW0odm5vZGUpKSB7XG4gICAgICAgICAgICB2YXIgeHNTdHJlYW0gPSB4c3RyZWFtX2FkYXB0ZXJfMS5kZWZhdWx0LmFkYXB0KHZub2RlLCBydW5TdHJlYW1BZGFwdGVyLnN0cmVhbVN1YnNjcmliZSk7XG4gICAgICAgICAgICByZXR1cm4geHNTdHJlYW0ubWFwKHRyYW5zcG9zZVZOb2RlKS5mbGF0dGVuKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHZub2RlID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICBpZiAoIXZub2RlLmNoaWxkcmVuIHx8IHZub2RlLmNoaWxkcmVuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB4c3RyZWFtXzEuZGVmYXVsdC5vZih2bm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgdm5vZGVDaGlsZHJlbiA9IHZub2RlLmNoaWxkcmVuXG4gICAgICAgICAgICAgICAgLm1hcCh0cmFuc3Bvc2VWTm9kZSlcbiAgICAgICAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4ICE9PSBudWxsOyB9KTtcbiAgICAgICAgICAgIGlmICh2bm9kZUNoaWxkcmVuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB4c3RyZWFtXzEuZGVmYXVsdC5vZihjcmVhdGVWVHJlZSh2bm9kZSwgW10pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB4c3RyZWFtXzEuZGVmYXVsdC5jb21iaW5lLmFwcGx5KHhzdHJlYW1fMS5kZWZhdWx0LCB2bm9kZUNoaWxkcmVuKVxuICAgICAgICAgICAgICAgICAgICAubWFwKGZ1bmN0aW9uIChjaGlsZHJlbikgeyByZXR1cm4gY3JlYXRlVlRyZWUodm5vZGUsIGNoaWxkcmVuLnNsaWNlKCkpOyB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuaGFuZGxlZCB2VHJlZSBWYWx1ZVwiKTtcbiAgICAgICAgfVxuICAgIH07XG59XG5leHBvcnRzLm1ha2VUcmFuc3Bvc2VWTm9kZSA9IG1ha2VUcmFuc3Bvc2VWTm9kZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRyYW5zcG9zaXRpb24uanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5mdW5jdGlvbiBpc0VsZW1lbnQob2JqKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBIVE1MRWxlbWVudCA9PT0gXCJvYmplY3RcIiA/XG4gICAgICAgIG9iaiBpbnN0YW5jZW9mIEhUTUxFbGVtZW50IHx8IG9iaiBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnQgOlxuICAgICAgICBvYmogJiYgdHlwZW9mIG9iaiA9PT0gXCJvYmplY3RcIiAmJiBvYmogIT09IG51bGwgJiZcbiAgICAgICAgICAgIChvYmoubm9kZVR5cGUgPT09IDEgfHwgb2JqLm5vZGVUeXBlID09PSAxMSkgJiZcbiAgICAgICAgICAgIHR5cGVvZiBvYmoubm9kZU5hbWUgPT09IFwic3RyaW5nXCI7XG59XG5leHBvcnRzLlNDT1BFX1BSRUZJWCA9IFwiJCRDWUNMRURPTSQkLVwiO1xuZnVuY3Rpb24gZ2V0RWxlbWVudChzZWxlY3RvcnMpIHtcbiAgICB2YXIgZG9tRWxlbWVudCA9ICh0eXBlb2Ygc2VsZWN0b3JzID09PSBcInN0cmluZ1wiID9cbiAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3RvcnMpIDpcbiAgICAgICAgc2VsZWN0b3JzKTtcbiAgICBpZiAodHlwZW9mIHNlbGVjdG9ycyA9PT0gXCJzdHJpbmdcIiAmJiBkb21FbGVtZW50ID09PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCByZW5kZXIgaW50byB1bmtub3duIGVsZW1lbnQgYFwiICsgc2VsZWN0b3JzICsgXCJgXCIpO1xuICAgIH1cbiAgICBlbHNlIGlmICghaXNFbGVtZW50KGRvbUVsZW1lbnQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkdpdmVuIGNvbnRhaW5lciBpcyBub3QgYSBET00gZWxlbWVudCBuZWl0aGVyIGEgXCIgK1xuICAgICAgICAgICAgXCJzZWxlY3RvciBzdHJpbmcuXCIpO1xuICAgIH1cbiAgICByZXR1cm4gZG9tRWxlbWVudDtcbn1cbmV4cG9ydHMuZ2V0RWxlbWVudCA9IGdldEVsZW1lbnQ7XG5mdW5jdGlvbiBnZXRTY29wZShuYW1lc3BhY2UpIHtcbiAgICByZXR1cm4gbmFtZXNwYWNlXG4gICAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKGMpIHsgcmV0dXJuIGMuaW5kZXhPZihleHBvcnRzLlNDT1BFX1BSRUZJWCkgPiAtMTsgfSlcbiAgICAgICAgLnNsaWNlKC0xKSAvLyBvbmx5IG5lZWQgdGhlIGxhdGVzdCwgbW9zdCBzcGVjaWZpYywgaXNvbGF0ZWQgYm91bmRhcnlcbiAgICAgICAgLmpvaW4oXCJcIik7XG59XG5leHBvcnRzLmdldFNjb3BlID0gZ2V0U2NvcGU7XG5mdW5jdGlvbiBnZXRTZWxlY3RvcnMobmFtZXNwYWNlKSB7XG4gICAgcmV0dXJuIG5hbWVzcGFjZS5maWx0ZXIoZnVuY3Rpb24gKGMpIHsgcmV0dXJuIGMuaW5kZXhPZihleHBvcnRzLlNDT1BFX1BSRUZJWCkgPT09IC0xOyB9KS5qb2luKFwiIFwiKTtcbn1cbmV4cG9ydHMuZ2V0U2VsZWN0b3JzID0gZ2V0U2VsZWN0b3JzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXRpbHMuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgeHN0cmVhbV8xID0gcmVxdWlyZSgneHN0cmVhbScpO1xudmFyIFhTdHJlYW1BZGFwdGVyID0ge1xuICAgIGFkYXB0OiBmdW5jdGlvbiAob3JpZ2luU3RyZWFtLCBvcmlnaW5TdHJlYW1TdWJzY3JpYmUpIHtcbiAgICAgICAgaWYgKFhTdHJlYW1BZGFwdGVyLmlzVmFsaWRTdHJlYW0ob3JpZ2luU3RyZWFtKSkge1xuICAgICAgICAgICAgcmV0dXJuIG9yaWdpblN0cmVhbTtcbiAgICAgICAgfVxuICAgICAgICA7XG4gICAgICAgIHZhciBkaXNwb3NlID0gbnVsbDtcbiAgICAgICAgcmV0dXJuIHhzdHJlYW1fMS5kZWZhdWx0LmNyZWF0ZSh7XG4gICAgICAgICAgICBzdGFydDogZnVuY3Rpb24gKG91dCkge1xuICAgICAgICAgICAgICAgIHZhciBvYnNlcnZlciA9IG91dDtcbiAgICAgICAgICAgICAgICBkaXNwb3NlID0gb3JpZ2luU3RyZWFtU3Vic2NyaWJlKG9yaWdpblN0cmVhbSwgb2JzZXJ2ZXIpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHN0b3A6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGRpc3Bvc2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgZGlzcG9zZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBtYWtlU3ViamVjdDogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgc3RyZWFtID0geHN0cmVhbV8xLmRlZmF1bHQuY3JlYXRlKCk7XG4gICAgICAgIHZhciBvYnNlcnZlciA9IHtcbiAgICAgICAgICAgIG5leHQ6IGZ1bmN0aW9uICh4KSB7IHN0cmVhbS5zaGFtZWZ1bGx5U2VuZE5leHQoeCk7IH0sXG4gICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGVycikgeyBzdHJlYW0uc2hhbWVmdWxseVNlbmRFcnJvcihlcnIpOyB9LFxuICAgICAgICAgICAgY29tcGxldGU6IGZ1bmN0aW9uICgpIHsgc3RyZWFtLnNoYW1lZnVsbHlTZW5kQ29tcGxldGUoKTsgfVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4geyBvYnNlcnZlcjogb2JzZXJ2ZXIsIHN0cmVhbTogc3RyZWFtIH07XG4gICAgfSxcbiAgICByZW1lbWJlcjogZnVuY3Rpb24gKHN0cmVhbSkge1xuICAgICAgICByZXR1cm4gc3RyZWFtLnJlbWVtYmVyKCk7XG4gICAgfSxcbiAgICBpc1ZhbGlkU3RyZWFtOiBmdW5jdGlvbiAoc3RyZWFtKSB7XG4gICAgICAgIHJldHVybiAodHlwZW9mIHN0cmVhbS5hZGRMaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgICAgICAgdHlwZW9mIHN0cmVhbS5zaGFtZWZ1bGx5U2VuZE5leHQgPT09ICdmdW5jdGlvbicpO1xuICAgIH0sXG4gICAgc3RyZWFtU3Vic2NyaWJlOiBmdW5jdGlvbiAoc3RyZWFtLCBvYnNlcnZlcikge1xuICAgICAgICBzdHJlYW0uYWRkTGlzdGVuZXIob2JzZXJ2ZXIpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gc3RyZWFtLnJlbW92ZUxpc3RlbmVyKG9ic2VydmVyKTsgfTtcbiAgICB9XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gWFN0cmVhbUFkYXB0ZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCIndXNlIHN0cmljdCc7XG5cbnZhciBwcm90byA9IEVsZW1lbnQucHJvdG90eXBlO1xudmFyIHZlbmRvciA9IHByb3RvLm1hdGNoZXNcbiAgfHwgcHJvdG8ubWF0Y2hlc1NlbGVjdG9yXG4gIHx8IHByb3RvLndlYmtpdE1hdGNoZXNTZWxlY3RvclxuICB8fCBwcm90by5tb3pNYXRjaGVzU2VsZWN0b3JcbiAgfHwgcHJvdG8ubXNNYXRjaGVzU2VsZWN0b3JcbiAgfHwgcHJvdG8ub01hdGNoZXNTZWxlY3RvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBtYXRjaDtcblxuLyoqXG4gKiBNYXRjaCBgZWxgIHRvIGBzZWxlY3RvcmAuXG4gKlxuICogQHBhcmFtIHtFbGVtZW50fSBlbFxuICogQHBhcmFtIHtTdHJpbmd9IHNlbGVjdG9yXG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBtYXRjaChlbCwgc2VsZWN0b3IpIHtcbiAgaWYgKHZlbmRvcikgcmV0dXJuIHZlbmRvci5jYWxsKGVsLCBzZWxlY3Rvcik7XG4gIHZhciBub2RlcyA9IGVsLnBhcmVudE5vZGUucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAobm9kZXNbaV0gPT0gZWwpIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn0iLCIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSBjbGFzc05hbWVGcm9tVk5vZGU7XG5cbnZhciBfc2VsZWN0b3JQYXJzZXIyID0gcmVxdWlyZSgnLi9zZWxlY3RvclBhcnNlcicpO1xuXG52YXIgX3NlbGVjdG9yUGFyc2VyMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3NlbGVjdG9yUGFyc2VyMik7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIGNsYXNzTmFtZUZyb21WTm9kZSh2Tm9kZSkge1xuICB2YXIgX3NlbGVjdG9yUGFyc2VyID0gKDAsIF9zZWxlY3RvclBhcnNlcjMuZGVmYXVsdCkodk5vZGUuc2VsKTtcblxuICB2YXIgY24gPSBfc2VsZWN0b3JQYXJzZXIuY2xhc3NOYW1lO1xuXG4gIGlmICghdk5vZGUuZGF0YSkge1xuICAgIHJldHVybiBjbjtcbiAgfVxuXG4gIHZhciBfdk5vZGUkZGF0YSA9IHZOb2RlLmRhdGE7XG4gIHZhciBkYXRhQ2xhc3MgPSBfdk5vZGUkZGF0YS5jbGFzcztcbiAgdmFyIHByb3BzID0gX3ZOb2RlJGRhdGEucHJvcHM7XG5cbiAgaWYgKGRhdGFDbGFzcykge1xuICAgIHZhciBjID0gT2JqZWN0LmtleXModk5vZGUuZGF0YS5jbGFzcykuZmlsdGVyKGZ1bmN0aW9uIChjbCkge1xuICAgICAgcmV0dXJuIHZOb2RlLmRhdGEuY2xhc3NbY2xdO1xuICAgIH0pO1xuICAgIGNuICs9ICcgJyArIGMuam9pbignICcpO1xuICB9XG5cbiAgaWYgKHByb3BzICYmIHByb3BzLmNsYXNzTmFtZSkge1xuICAgIGNuICs9ICcgJyArIHByb3BzLmNsYXNzTmFtZTtcbiAgfVxuXG4gIHJldHVybiBjbi50cmltKCk7XG59IiwiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gc2VsZWN0b3JQYXJzZXI7XG5cbnZhciBfYnJvd3NlclNwbGl0ID0gcmVxdWlyZSgnYnJvd3Nlci1zcGxpdCcpO1xuXG52YXIgX2Jyb3dzZXJTcGxpdDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9icm93c2VyU3BsaXQpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG52YXIgY2xhc3NJZFNwbGl0ID0gLyhbXFwuI10/W2EtekEtWjAtOVxcdTAwN0YtXFx1RkZGRl86LV0rKS87XG52YXIgbm90Q2xhc3NJZCA9IC9eXFwufCMvO1xuXG5mdW5jdGlvbiBzZWxlY3RvclBhcnNlcigpIHtcbiAgdmFyIHNlbGVjdG9yID0gYXJndW1lbnRzLmxlbmd0aCA8PSAwIHx8IGFyZ3VtZW50c1swXSA9PT0gdW5kZWZpbmVkID8gJycgOiBhcmd1bWVudHNbMF07XG5cbiAgdmFyIHRhZ05hbWUgPSB1bmRlZmluZWQ7XG4gIHZhciBpZCA9ICcnO1xuICB2YXIgY2xhc3NlcyA9IFtdO1xuXG4gIHZhciB0YWdQYXJ0cyA9ICgwLCBfYnJvd3NlclNwbGl0Mi5kZWZhdWx0KShzZWxlY3RvciwgY2xhc3NJZFNwbGl0KTtcblxuICBpZiAobm90Q2xhc3NJZC50ZXN0KHRhZ1BhcnRzWzFdKSB8fCBzZWxlY3RvciA9PT0gJycpIHtcbiAgICB0YWdOYW1lID0gJ2Rpdic7XG4gIH1cblxuICB2YXIgcGFydCA9IHVuZGVmaW5lZDtcbiAgdmFyIHR5cGUgPSB1bmRlZmluZWQ7XG4gIHZhciBpID0gdW5kZWZpbmVkO1xuXG4gIGZvciAoaSA9IDA7IGkgPCB0YWdQYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgIHBhcnQgPSB0YWdQYXJ0c1tpXTtcblxuICAgIGlmICghcGFydCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgdHlwZSA9IHBhcnQuY2hhckF0KDApO1xuXG4gICAgaWYgKCF0YWdOYW1lKSB7XG4gICAgICB0YWdOYW1lID0gcGFydDtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICcuJykge1xuICAgICAgY2xhc3Nlcy5wdXNoKHBhcnQuc3Vic3RyaW5nKDEsIHBhcnQubGVuZ3RoKSk7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnIycpIHtcbiAgICAgIGlkID0gcGFydC5zdWJzdHJpbmcoMSwgcGFydC5sZW5ndGgpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdGFnTmFtZTogdGFnTmFtZSxcbiAgICBpZDogaWQsXG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLmpvaW4oJyAnKVxuICB9O1xufSIsIi8qIVxuICogQ3Jvc3MtQnJvd3NlciBTcGxpdCAxLjEuMVxuICogQ29weXJpZ2h0IDIwMDctMjAxMiBTdGV2ZW4gTGV2aXRoYW4gPHN0ZXZlbmxldml0aGFuLmNvbT5cbiAqIEF2YWlsYWJsZSB1bmRlciB0aGUgTUlUIExpY2Vuc2VcbiAqIEVDTUFTY3JpcHQgY29tcGxpYW50LCB1bmlmb3JtIGNyb3NzLWJyb3dzZXIgc3BsaXQgbWV0aG9kXG4gKi9cblxuLyoqXG4gKiBTcGxpdHMgYSBzdHJpbmcgaW50byBhbiBhcnJheSBvZiBzdHJpbmdzIHVzaW5nIGEgcmVnZXggb3Igc3RyaW5nIHNlcGFyYXRvci4gTWF0Y2hlcyBvZiB0aGVcbiAqIHNlcGFyYXRvciBhcmUgbm90IGluY2x1ZGVkIGluIHRoZSByZXN1bHQgYXJyYXkuIEhvd2V2ZXIsIGlmIGBzZXBhcmF0b3JgIGlzIGEgcmVnZXggdGhhdCBjb250YWluc1xuICogY2FwdHVyaW5nIGdyb3VwcywgYmFja3JlZmVyZW5jZXMgYXJlIHNwbGljZWQgaW50byB0aGUgcmVzdWx0IGVhY2ggdGltZSBgc2VwYXJhdG9yYCBpcyBtYXRjaGVkLlxuICogRml4ZXMgYnJvd3NlciBidWdzIGNvbXBhcmVkIHRvIHRoZSBuYXRpdmUgYFN0cmluZy5wcm90b3R5cGUuc3BsaXRgIGFuZCBjYW4gYmUgdXNlZCByZWxpYWJseVxuICogY3Jvc3MtYnJvd3Nlci5cbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHIgU3RyaW5nIHRvIHNwbGl0LlxuICogQHBhcmFtIHtSZWdFeHB8U3RyaW5nfSBzZXBhcmF0b3IgUmVnZXggb3Igc3RyaW5nIHRvIHVzZSBmb3Igc2VwYXJhdGluZyB0aGUgc3RyaW5nLlxuICogQHBhcmFtIHtOdW1iZXJ9IFtsaW1pdF0gTWF4aW11bSBudW1iZXIgb2YgaXRlbXMgdG8gaW5jbHVkZSBpbiB0aGUgcmVzdWx0IGFycmF5LlxuICogQHJldHVybnMge0FycmF5fSBBcnJheSBvZiBzdWJzdHJpbmdzLlxuICogQGV4YW1wbGVcbiAqXG4gKiAvLyBCYXNpYyB1c2VcbiAqIHNwbGl0KCdhIGIgYyBkJywgJyAnKTtcbiAqIC8vIC0+IFsnYScsICdiJywgJ2MnLCAnZCddXG4gKlxuICogLy8gV2l0aCBsaW1pdFxuICogc3BsaXQoJ2EgYiBjIGQnLCAnICcsIDIpO1xuICogLy8gLT4gWydhJywgJ2InXVxuICpcbiAqIC8vIEJhY2tyZWZlcmVuY2VzIGluIHJlc3VsdCBhcnJheVxuICogc3BsaXQoJy4ud29yZDEgd29yZDIuLicsIC8oW2Etel0rKShcXGQrKS9pKTtcbiAqIC8vIC0+IFsnLi4nLCAnd29yZCcsICcxJywgJyAnLCAnd29yZCcsICcyJywgJy4uJ11cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSAoZnVuY3Rpb24gc3BsaXQodW5kZWYpIHtcblxuICB2YXIgbmF0aXZlU3BsaXQgPSBTdHJpbmcucHJvdG90eXBlLnNwbGl0LFxuICAgIGNvbXBsaWFudEV4ZWNOcGNnID0gLygpPz8vLmV4ZWMoXCJcIilbMV0gPT09IHVuZGVmLFxuICAgIC8vIE5QQ0c6IG5vbnBhcnRpY2lwYXRpbmcgY2FwdHVyaW5nIGdyb3VwXG4gICAgc2VsZjtcblxuICBzZWxmID0gZnVuY3Rpb24oc3RyLCBzZXBhcmF0b3IsIGxpbWl0KSB7XG4gICAgLy8gSWYgYHNlcGFyYXRvcmAgaXMgbm90IGEgcmVnZXgsIHVzZSBgbmF0aXZlU3BsaXRgXG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChzZXBhcmF0b3IpICE9PSBcIltvYmplY3QgUmVnRXhwXVwiKSB7XG4gICAgICByZXR1cm4gbmF0aXZlU3BsaXQuY2FsbChzdHIsIHNlcGFyYXRvciwgbGltaXQpO1xuICAgIH1cbiAgICB2YXIgb3V0cHV0ID0gW10sXG4gICAgICBmbGFncyA9IChzZXBhcmF0b3IuaWdub3JlQ2FzZSA/IFwiaVwiIDogXCJcIikgKyAoc2VwYXJhdG9yLm11bHRpbGluZSA/IFwibVwiIDogXCJcIikgKyAoc2VwYXJhdG9yLmV4dGVuZGVkID8gXCJ4XCIgOiBcIlwiKSArIC8vIFByb3Bvc2VkIGZvciBFUzZcbiAgICAgIChzZXBhcmF0b3Iuc3RpY2t5ID8gXCJ5XCIgOiBcIlwiKSxcbiAgICAgIC8vIEZpcmVmb3ggMytcbiAgICAgIGxhc3RMYXN0SW5kZXggPSAwLFxuICAgICAgLy8gTWFrZSBgZ2xvYmFsYCBhbmQgYXZvaWQgYGxhc3RJbmRleGAgaXNzdWVzIGJ5IHdvcmtpbmcgd2l0aCBhIGNvcHlcbiAgICAgIHNlcGFyYXRvciA9IG5ldyBSZWdFeHAoc2VwYXJhdG9yLnNvdXJjZSwgZmxhZ3MgKyBcImdcIiksXG4gICAgICBzZXBhcmF0b3IyLCBtYXRjaCwgbGFzdEluZGV4LCBsYXN0TGVuZ3RoO1xuICAgIHN0ciArPSBcIlwiOyAvLyBUeXBlLWNvbnZlcnRcbiAgICBpZiAoIWNvbXBsaWFudEV4ZWNOcGNnKSB7XG4gICAgICAvLyBEb2Vzbid0IG5lZWQgZmxhZ3MgZ3ksIGJ1dCB0aGV5IGRvbid0IGh1cnRcbiAgICAgIHNlcGFyYXRvcjIgPSBuZXcgUmVnRXhwKFwiXlwiICsgc2VwYXJhdG9yLnNvdXJjZSArIFwiJCg/IVxcXFxzKVwiLCBmbGFncyk7XG4gICAgfVxuICAgIC8qIFZhbHVlcyBmb3IgYGxpbWl0YCwgcGVyIHRoZSBzcGVjOlxuICAgICAqIElmIHVuZGVmaW5lZDogNDI5NDk2NzI5NSAvLyBNYXRoLnBvdygyLCAzMikgLSAxXG4gICAgICogSWYgMCwgSW5maW5pdHksIG9yIE5hTjogMFxuICAgICAqIElmIHBvc2l0aXZlIG51bWJlcjogbGltaXQgPSBNYXRoLmZsb29yKGxpbWl0KTsgaWYgKGxpbWl0ID4gNDI5NDk2NzI5NSkgbGltaXQgLT0gNDI5NDk2NzI5NjtcbiAgICAgKiBJZiBuZWdhdGl2ZSBudW1iZXI6IDQyOTQ5NjcyOTYgLSBNYXRoLmZsb29yKE1hdGguYWJzKGxpbWl0KSlcbiAgICAgKiBJZiBvdGhlcjogVHlwZS1jb252ZXJ0LCB0aGVuIHVzZSB0aGUgYWJvdmUgcnVsZXNcbiAgICAgKi9cbiAgICBsaW1pdCA9IGxpbWl0ID09PSB1bmRlZiA/IC0xID4+PiAwIDogLy8gTWF0aC5wb3coMiwgMzIpIC0gMVxuICAgIGxpbWl0ID4+PiAwOyAvLyBUb1VpbnQzMihsaW1pdClcbiAgICB3aGlsZSAobWF0Y2ggPSBzZXBhcmF0b3IuZXhlYyhzdHIpKSB7XG4gICAgICAvLyBgc2VwYXJhdG9yLmxhc3RJbmRleGAgaXMgbm90IHJlbGlhYmxlIGNyb3NzLWJyb3dzZXJcbiAgICAgIGxhc3RJbmRleCA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoO1xuICAgICAgaWYgKGxhc3RJbmRleCA+IGxhc3RMYXN0SW5kZXgpIHtcbiAgICAgICAgb3V0cHV0LnB1c2goc3RyLnNsaWNlKGxhc3RMYXN0SW5kZXgsIG1hdGNoLmluZGV4KSk7XG4gICAgICAgIC8vIEZpeCBicm93c2VycyB3aG9zZSBgZXhlY2AgbWV0aG9kcyBkb24ndCBjb25zaXN0ZW50bHkgcmV0dXJuIGB1bmRlZmluZWRgIGZvclxuICAgICAgICAvLyBub25wYXJ0aWNpcGF0aW5nIGNhcHR1cmluZyBncm91cHNcbiAgICAgICAgaWYgKCFjb21wbGlhbnRFeGVjTnBjZyAmJiBtYXRjaC5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgbWF0Y2hbMF0ucmVwbGFjZShzZXBhcmF0b3IyLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAtIDI7IGkrKykge1xuICAgICAgICAgICAgICBpZiAoYXJndW1lbnRzW2ldID09PSB1bmRlZikge1xuICAgICAgICAgICAgICAgIG1hdGNoW2ldID0gdW5kZWY7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2gubGVuZ3RoID4gMSAmJiBtYXRjaC5pbmRleCA8IHN0ci5sZW5ndGgpIHtcbiAgICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShvdXRwdXQsIG1hdGNoLnNsaWNlKDEpKTtcbiAgICAgICAgfVxuICAgICAgICBsYXN0TGVuZ3RoID0gbWF0Y2hbMF0ubGVuZ3RoO1xuICAgICAgICBsYXN0TGFzdEluZGV4ID0gbGFzdEluZGV4O1xuICAgICAgICBpZiAob3V0cHV0Lmxlbmd0aCA+PSBsaW1pdCkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoc2VwYXJhdG9yLmxhc3RJbmRleCA9PT0gbWF0Y2guaW5kZXgpIHtcbiAgICAgICAgc2VwYXJhdG9yLmxhc3RJbmRleCsrOyAvLyBBdm9pZCBhbiBpbmZpbml0ZSBsb29wXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChsYXN0TGFzdEluZGV4ID09PSBzdHIubGVuZ3RoKSB7XG4gICAgICBpZiAobGFzdExlbmd0aCB8fCAhc2VwYXJhdG9yLnRlc3QoXCJcIikpIHtcbiAgICAgICAgb3V0cHV0LnB1c2goXCJcIik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dHB1dC5wdXNoKHN0ci5zbGljZShsYXN0TGFzdEluZGV4KSk7XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXQubGVuZ3RoID4gbGltaXQgPyBvdXRwdXQuc2xpY2UoMCwgbGltaXQpIDogb3V0cHV0O1xuICB9O1xuXG4gIHJldHVybiBzZWxmO1xufSkoKTtcbiIsIlxuLy8gQWxsIFNWRyBjaGlsZHJlbiBlbGVtZW50cywgbm90IGluIHRoaXMgbGlzdCwgc2hvdWxkIHNlbGYtY2xvc2VcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRy9pbnRyby5odG1sI1Rlcm1Db250YWluZXJFbGVtZW50XG4gICdhJzogdHJ1ZSxcbiAgJ2RlZnMnOiB0cnVlLFxuICAnZ2x5cGgnOiB0cnVlLFxuICAnZyc6IHRydWUsXG4gICdtYXJrZXInOiB0cnVlLFxuICAnbWFzayc6IHRydWUsXG4gICdtaXNzaW5nLWdseXBoJzogdHJ1ZSxcbiAgJ3BhdHRlcm4nOiB0cnVlLFxuICAnc3ZnJzogdHJ1ZSxcbiAgJ3N3aXRjaCc6IHRydWUsXG4gICdzeW1ib2wnOiB0cnVlLFxuXG4gIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRy9pbnRyby5odG1sI1Rlcm1EZXNjcmlwdGl2ZUVsZW1lbnRcbiAgJ2Rlc2MnOiB0cnVlLFxuICAnbWV0YWRhdGEnOiB0cnVlLFxuICAndGl0bGUnOiB0cnVlXG59OyIsIlxudmFyIGluaXQgPSByZXF1aXJlKCcuL2luaXQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBpbml0KFtyZXF1aXJlKCcuL21vZHVsZXMvYXR0cmlidXRlcycpLCByZXF1aXJlKCcuL21vZHVsZXMvc3R5bGUnKV0pOyIsIlxudmFyIHBhcnNlU2VsZWN0b3IgPSByZXF1aXJlKCcuL3BhcnNlLXNlbGVjdG9yJyk7XG52YXIgVk9JRF9FTEVNRU5UUyA9IHJlcXVpcmUoJy4vdm9pZC1lbGVtZW50cycpO1xudmFyIENPTlRBSU5FUl9FTEVNRU5UUyA9IHJlcXVpcmUoJy4vY29udGFpbmVyLWVsZW1lbnRzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW5pdChtb2R1bGVzKSB7XG4gIGZ1bmN0aW9uIHBhcnNlKGRhdGEpIHtcbiAgICByZXR1cm4gbW9kdWxlcy5yZWR1Y2UoZnVuY3Rpb24gKGFyciwgZm4pIHtcbiAgICAgIGFyci5wdXNoKGZuKGRhdGEpKTtcbiAgICAgIHJldHVybiBhcnI7XG4gICAgfSwgW10pLmZpbHRlcihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICByZXR1cm4gcmVzdWx0ICE9PSAnJztcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiByZW5kZXJUb1N0cmluZyh2bm9kZSkge1xuICAgIGlmICghdm5vZGUuc2VsICYmIHZub2RlLnRleHQpIHtcbiAgICAgIHJldHVybiB2bm9kZS50ZXh0O1xuICAgIH1cblxuICAgIHZub2RlLmRhdGEgPSB2bm9kZS5kYXRhIHx8IHt9O1xuXG4gICAgLy8gU3VwcG9ydCB0aHVua3NcbiAgICBpZiAodHlwZW9mIHZub2RlLnNlbCA9PT0gJ3N0cmluZycgJiYgdm5vZGUuc2VsLnNsaWNlKDAsIDUpID09PSAndGh1bmsnKSB7XG4gICAgICB2bm9kZSA9IHZub2RlLmRhdGEuZm4uYXBwbHkobnVsbCwgdm5vZGUuZGF0YS5hcmdzKTtcbiAgICB9XG5cbiAgICB2YXIgdGFnTmFtZSA9IHBhcnNlU2VsZWN0b3Iodm5vZGUuc2VsKS50YWdOYW1lO1xuICAgIHZhciBhdHRyaWJ1dGVzID0gcGFyc2Uodm5vZGUpO1xuICAgIHZhciBzdmcgPSB2bm9kZS5kYXRhLm5zID09PSAnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnO1xuICAgIHZhciB0YWcgPSBbXTtcblxuICAgIC8vIE9wZW4gdGFnXG4gICAgdGFnLnB1c2goJzwnICsgdGFnTmFtZSk7XG4gICAgaWYgKGF0dHJpYnV0ZXMubGVuZ3RoKSB7XG4gICAgICB0YWcucHVzaCgnICcgKyBhdHRyaWJ1dGVzLmpvaW4oJyAnKSk7XG4gICAgfVxuICAgIGlmIChzdmcgJiYgQ09OVEFJTkVSX0VMRU1FTlRTW3RhZ05hbWVdICE9PSB0cnVlKSB7XG4gICAgICB0YWcucHVzaCgnIC8nKTtcbiAgICB9XG4gICAgdGFnLnB1c2goJz4nKTtcblxuICAgIC8vIENsb3NlIHRhZywgaWYgbmVlZGVkXG4gICAgaWYgKFZPSURfRUxFTUVOVFNbdGFnTmFtZV0gIT09IHRydWUgJiYgIXN2ZyB8fCBzdmcgJiYgQ09OVEFJTkVSX0VMRU1FTlRTW3RhZ05hbWVdID09PSB0cnVlKSB7XG4gICAgICBpZiAodm5vZGUuZGF0YS5wcm9wcyAmJiB2bm9kZS5kYXRhLnByb3BzLmlubmVySFRNTCkge1xuICAgICAgICB0YWcucHVzaCh2bm9kZS5kYXRhLnByb3BzLmlubmVySFRNTCk7XG4gICAgICB9IGVsc2UgaWYgKHZub2RlLnRleHQpIHtcbiAgICAgICAgdGFnLnB1c2godm5vZGUudGV4dCk7XG4gICAgICB9IGVsc2UgaWYgKHZub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgIHZub2RlLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAgICAgdGFnLnB1c2gocmVuZGVyVG9TdHJpbmcoY2hpbGQpKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB0YWcucHVzaCgnPC8nICsgdGFnTmFtZSArICc+Jyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhZy5qb2luKCcnKTtcbiAgfTtcbn07IiwiXG52YXIgZm9yT3duID0gcmVxdWlyZSgnbG9kYXNoLmZvcm93bicpO1xudmFyIGVzY2FwZSA9IHJlcXVpcmUoJ2xvZGFzaC5lc2NhcGUnKTtcbnZhciB1bmlvbiA9IHJlcXVpcmUoJ2xvZGFzaC51bmlvbicpO1xuXG52YXIgcGFyc2VTZWxlY3RvciA9IHJlcXVpcmUoJy4uL3BhcnNlLXNlbGVjdG9yJyk7XG5cbi8vIGRhdGEuYXR0cnMsIGRhdGEucHJvcHMsIGRhdGEuY2xhc3NcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBhdHRyaWJ1dGVzKHZub2RlKSB7XG4gIHZhciBzZWxlY3RvciA9IHBhcnNlU2VsZWN0b3Iodm5vZGUuc2VsKTtcbiAgdmFyIHBhcnNlZENsYXNzZXMgPSBzZWxlY3Rvci5jbGFzc05hbWUuc3BsaXQoJyAnKTtcblxuICB2YXIgYXR0cmlidXRlcyA9IFtdO1xuICB2YXIgY2xhc3NlcyA9IFtdO1xuICB2YXIgdmFsdWVzID0ge307XG5cbiAgaWYgKHNlbGVjdG9yLmlkKSB7XG4gICAgdmFsdWVzLmlkID0gc2VsZWN0b3IuaWQ7XG4gIH1cblxuICBzZXRBdHRyaWJ1dGVzKHZub2RlLmRhdGEucHJvcHMsIHZhbHVlcyk7XG4gIHNldEF0dHJpYnV0ZXModm5vZGUuZGF0YS5hdHRycywgdmFsdWVzKTsgLy8gYGF0dHJzYCBvdmVycmlkZSBgcHJvcHNgLCBub3Qgc3VyZSBpZiB0aGlzIGlzIGdvb2Qgc29cblxuICBpZiAodm5vZGUuZGF0YS5jbGFzcykge1xuICAgIC8vIE9taXQgYGNsYXNzTmFtZWAgYXR0cmlidXRlIGlmIGBjbGFzc2AgaXMgc2V0IG9uIHZub2RlXG4gICAgdmFsdWVzLmNsYXNzID0gdW5kZWZpbmVkO1xuICB9XG4gIGZvck93bih2bm9kZS5kYXRhLmNsYXNzLCBmdW5jdGlvbiAodmFsdWUsIGtleSkge1xuICAgIGlmICh2YWx1ZSA9PT0gdHJ1ZSkge1xuICAgICAgY2xhc3Nlcy5wdXNoKGtleSk7XG4gICAgfVxuICB9KTtcbiAgY2xhc3NlcyA9IHVuaW9uKGNsYXNzZXMsIHZhbHVlcy5jbGFzcywgcGFyc2VkQ2xhc3NlcykuZmlsdGVyKGZ1bmN0aW9uICh4KSB7XG4gICAgcmV0dXJuIHggIT09ICcnO1xuICB9KTtcblxuICBpZiAoY2xhc3Nlcy5sZW5ndGgpIHtcbiAgICB2YWx1ZXMuY2xhc3MgPSBjbGFzc2VzLmpvaW4oJyAnKTtcbiAgfVxuXG4gIGZvck93bih2YWx1ZXMsIGZ1bmN0aW9uICh2YWx1ZSwga2V5KSB7XG4gICAgYXR0cmlidXRlcy5wdXNoKHZhbHVlID09PSB0cnVlID8ga2V5IDoga2V5ICsgJz1cIicgKyBlc2NhcGUodmFsdWUpICsgJ1wiJyk7XG4gIH0pO1xuXG4gIHJldHVybiBhdHRyaWJ1dGVzLmxlbmd0aCA/IGF0dHJpYnV0ZXMuam9pbignICcpIDogJyc7XG59O1xuXG5mdW5jdGlvbiBzZXRBdHRyaWJ1dGVzKHZhbHVlcywgdGFyZ2V0KSB7XG4gIGZvck93bih2YWx1ZXMsIGZ1bmN0aW9uICh2YWx1ZSwga2V5KSB7XG4gICAgaWYgKGtleSA9PT0gJ2h0bWxGb3InKSB7XG4gICAgICB0YXJnZXRbJ2ZvciddID0gdmFsdWU7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChrZXkgPT09ICdjbGFzc05hbWUnKSB7XG4gICAgICB0YXJnZXRbJ2NsYXNzJ10gPSB2YWx1ZS5zcGxpdCgnICcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoa2V5ID09PSAnaW5uZXJIVE1MJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0YXJnZXRba2V5XSA9IHZhbHVlO1xuICB9KTtcbn0iLCJ2YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xuXG52YXIgZm9yT3duID0gcmVxdWlyZSgnbG9kYXNoLmZvcm93bicpO1xudmFyIGVzY2FwZSA9IHJlcXVpcmUoJ2xvZGFzaC5lc2NhcGUnKTtcbnZhciBrZWJhYkNhc2UgPSByZXF1aXJlKCdsb2Rhc2gua2ViYWJjYXNlJyk7XG5cbi8vIGRhdGEuc3R5bGVcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzdHlsZSh2bm9kZSkge1xuICB2YXIgc3R5bGVzID0gW107XG4gIHZhciBzdHlsZSA9IHZub2RlLmRhdGEuc3R5bGUgfHwge307XG5cbiAgLy8gbWVyZ2UgaW4gYGRlbGF5ZWRgIHByb3BlcnRpZXNcbiAgaWYgKHN0eWxlLmRlbGF5ZWQpIHtcbiAgICBfZXh0ZW5kcyhzdHlsZSwgc3R5bGUuZGVsYXllZCk7XG4gIH1cblxuICBmb3JPd24oc3R5bGUsIGZ1bmN0aW9uICh2YWx1ZSwga2V5KSB7XG4gICAgLy8gb21pdCBob29rIG9iamVjdHNcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgc3R5bGVzLnB1c2goa2ViYWJDYXNlKGtleSkgKyAnOiAnICsgZXNjYXBlKHZhbHVlKSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gc3R5bGVzLmxlbmd0aCA/ICdzdHlsZT1cIicgKyBzdHlsZXMuam9pbignOyAnKSArICdcIicgOiAnJztcbn07IiwiXG4vLyBodHRwczovL2dpdGh1Yi5jb20vTWF0dC1Fc2NoL3ZpcnR1YWwtZG9tL2Jsb2IvbWFzdGVyL3ZpcnR1YWwtaHlwZXJzY3JpcHQvcGFyc2UtdGFnLmpzXG5cbnZhciBzcGxpdCA9IHJlcXVpcmUoJ2Jyb3dzZXItc3BsaXQnKTtcblxudmFyIGNsYXNzSWRTcGxpdCA9IC8oW1xcLiNdP1thLXpBLVowLTlcXHUwMDdGLVxcdUZGRkZfOi1dKykvO1xudmFyIG5vdENsYXNzSWQgPSAvXlxcLnwjLztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBwYXJzZVNlbGVjdG9yKHNlbGVjdG9yLCB1cHBlcikge1xuICBzZWxlY3RvciA9IHNlbGVjdG9yIHx8ICcnO1xuICB2YXIgdGFnTmFtZTtcbiAgdmFyIGlkID0gJyc7XG4gIHZhciBjbGFzc2VzID0gW107XG5cbiAgdmFyIHRhZ1BhcnRzID0gc3BsaXQoc2VsZWN0b3IsIGNsYXNzSWRTcGxpdCk7XG5cbiAgaWYgKG5vdENsYXNzSWQudGVzdCh0YWdQYXJ0c1sxXSkgfHwgc2VsZWN0b3IgPT09ICcnKSB7XG4gICAgdGFnTmFtZSA9ICdkaXYnO1xuICB9XG5cbiAgdmFyIHBhcnQsIHR5cGUsIGk7XG5cbiAgZm9yIChpID0gMDsgaSA8IHRhZ1BhcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgcGFydCA9IHRhZ1BhcnRzW2ldO1xuXG4gICAgaWYgKCFwYXJ0KSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICB0eXBlID0gcGFydC5jaGFyQXQoMCk7XG5cbiAgICBpZiAoIXRhZ05hbWUpIHtcbiAgICAgIHRhZ05hbWUgPSBwYXJ0O1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJy4nKSB7XG4gICAgICBjbGFzc2VzLnB1c2gocGFydC5zdWJzdHJpbmcoMSwgcGFydC5sZW5ndGgpKTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICcjJykge1xuICAgICAgaWQgPSBwYXJ0LnN1YnN0cmluZygxLCBwYXJ0Lmxlbmd0aCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0YWdOYW1lOiB1cHBlciA9PT0gdHJ1ZSA/IHRhZ05hbWUudG9VcHBlckNhc2UoKSA6IHRhZ05hbWUsXG4gICAgaWQ6IGlkLFxuICAgIGNsYXNzTmFtZTogY2xhc3Nlcy5qb2luKCcgJylcbiAgfTtcbn07IiwiXG4vLyBodHRwOi8vd3d3LnczLm9yZy9odG1sL3dnL2RyYWZ0cy9odG1sL21hc3Rlci9zeW50YXguaHRtbCN2b2lkLWVsZW1lbnRzXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBhcmVhOiB0cnVlLFxuICBiYXNlOiB0cnVlLFxuICBicjogdHJ1ZSxcbiAgY29sOiB0cnVlLFxuICBlbWJlZDogdHJ1ZSxcbiAgaHI6IHRydWUsXG4gIGltZzogdHJ1ZSxcbiAgaW5wdXQ6IHRydWUsXG4gIGtleWdlbjogdHJ1ZSxcbiAgbGluazogdHJ1ZSxcbiAgbWV0YTogdHJ1ZSxcbiAgcGFyYW06IHRydWUsXG4gIHNvdXJjZTogdHJ1ZSxcbiAgdHJhY2s6IHRydWUsXG4gIHdicjogdHJ1ZVxufTsiLCIvKipcbiAqIGxvZGFzaCAzLjIuMCAoQ3VzdG9tIEJ1aWxkKSA8aHR0cHM6Ly9sb2Rhc2guY29tLz5cbiAqIEJ1aWxkOiBgbG9kYXNoIG1vZHVsYXJpemUgZXhwb3J0cz1cIm5wbVwiIC1vIC4vYFxuICogQ29weXJpZ2h0IDIwMTItMjAxNiBUaGUgRG9qbyBGb3VuZGF0aW9uIDxodHRwOi8vZG9qb2ZvdW5kYXRpb24ub3JnLz5cbiAqIEJhc2VkIG9uIFVuZGVyc2NvcmUuanMgMS44LjMgPGh0dHA6Ly91bmRlcnNjb3JlanMub3JnL0xJQ0VOU0U+XG4gKiBDb3B5cmlnaHQgMjAwOS0yMDE2IEplcmVteSBBc2hrZW5hcywgRG9jdW1lbnRDbG91ZCBhbmQgSW52ZXN0aWdhdGl2ZSBSZXBvcnRlcnMgJiBFZGl0b3JzXG4gKiBBdmFpbGFibGUgdW5kZXIgTUlUIGxpY2Vuc2UgPGh0dHBzOi8vbG9kYXNoLmNvbS9saWNlbnNlPlxuICovXG52YXIgcm9vdCA9IHJlcXVpcmUoJ2xvZGFzaC5fcm9vdCcpO1xuXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBJTkZJTklUWSA9IDEgLyAwO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgc3ltYm9sVGFnID0gJ1tvYmplY3QgU3ltYm9sXSc7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIEhUTUwgZW50aXRpZXMgYW5kIEhUTUwgY2hhcmFjdGVycy4gKi9cbnZhciByZVVuZXNjYXBlZEh0bWwgPSAvWyY8PlwiJ2BdL2csXG4gICAgcmVIYXNVbmVzY2FwZWRIdG1sID0gUmVnRXhwKHJlVW5lc2NhcGVkSHRtbC5zb3VyY2UpO1xuXG4vKiogVXNlZCB0byBtYXAgY2hhcmFjdGVycyB0byBIVE1MIGVudGl0aWVzLiAqL1xudmFyIGh0bWxFc2NhcGVzID0ge1xuICAnJic6ICcmYW1wOycsXG4gICc8JzogJyZsdDsnLFxuICAnPic6ICcmZ3Q7JyxcbiAgJ1wiJzogJyZxdW90OycsXG4gIFwiJ1wiOiAnJiMzOTsnLFxuICAnYCc6ICcmIzk2Oydcbn07XG5cbi8qKlxuICogVXNlZCBieSBgXy5lc2NhcGVgIHRvIGNvbnZlcnQgY2hhcmFjdGVycyB0byBIVE1MIGVudGl0aWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gY2hyIFRoZSBtYXRjaGVkIGNoYXJhY3RlciB0byBlc2NhcGUuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBlc2NhcGVkIGNoYXJhY3Rlci5cbiAqL1xuZnVuY3Rpb24gZXNjYXBlSHRtbENoYXIoY2hyKSB7XG4gIHJldHVybiBodG1sRXNjYXBlc1tjaHJdO1xufVxuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKipcbiAqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgW2B0b1N0cmluZ1RhZ2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmcpXG4gKiBvZiB2YWx1ZXMuXG4gKi9cbnZhciBvYmplY3RUb1N0cmluZyA9IG9iamVjdFByb3RvLnRvU3RyaW5nO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBTeW1ib2wgPSByb290LlN5bWJvbDtcblxuLyoqIFVzZWQgdG8gY29udmVydCBzeW1ib2xzIHRvIHByaW1pdGl2ZXMgYW5kIHN0cmluZ3MuICovXG52YXIgc3ltYm9sUHJvdG8gPSBTeW1ib2wgPyBTeW1ib2wucHJvdG90eXBlIDogdW5kZWZpbmVkLFxuICAgIHN5bWJvbFRvU3RyaW5nID0gU3ltYm9sID8gc3ltYm9sUHJvdG8udG9TdHJpbmcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UuIEEgdmFsdWUgaXMgb2JqZWN0LWxpa2UgaWYgaXQncyBub3QgYG51bGxgXG4gKiBhbmQgaGFzIGEgYHR5cGVvZmAgcmVzdWx0IG9mIFwib2JqZWN0XCIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3RMaWtlKHZhbHVlKSB7XG4gIHJldHVybiAhIXZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0Jztcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFN5bWJvbGAgcHJpbWl0aXZlIG9yIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgY29ycmVjdGx5IGNsYXNzaWZpZWQsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1N5bWJvbChTeW1ib2wuaXRlcmF0b3IpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNTeW1ib2woJ2FiYycpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNTeW1ib2wodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnc3ltYm9sJyB8fFxuICAgIChpc09iamVjdExpa2UodmFsdWUpICYmIG9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpID09IHN5bWJvbFRhZyk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZyBpZiBpdCdzIG5vdCBvbmUuIEFuIGVtcHR5IHN0cmluZyBpcyByZXR1cm5lZFxuICogZm9yIGBudWxsYCBhbmQgYHVuZGVmaW5lZGAgdmFsdWVzLiBUaGUgc2lnbiBvZiBgLTBgIGlzIHByZXNlcnZlZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHByb2Nlc3MuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBzdHJpbmcuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udG9TdHJpbmcobnVsbCk7XG4gKiAvLyA9PiAnJ1xuICpcbiAqIF8udG9TdHJpbmcoLTApO1xuICogLy8gPT4gJy0wJ1xuICpcbiAqIF8udG9TdHJpbmcoWzEsIDIsIDNdKTtcbiAqIC8vID0+ICcxLDIsMydcbiAqL1xuZnVuY3Rpb24gdG9TdHJpbmcodmFsdWUpIHtcbiAgLy8gRXhpdCBlYXJseSBmb3Igc3RyaW5ncyB0byBhdm9pZCBhIHBlcmZvcm1hbmNlIGhpdCBpbiBzb21lIGVudmlyb25tZW50cy5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuICBpZiAoaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgcmV0dXJuIFN5bWJvbCA/IHN5bWJvbFRvU3RyaW5nLmNhbGwodmFsdWUpIDogJyc7XG4gIH1cbiAgdmFyIHJlc3VsdCA9ICh2YWx1ZSArICcnKTtcbiAgcmV0dXJuIChyZXN1bHQgPT0gJzAnICYmICgxIC8gdmFsdWUpID09IC1JTkZJTklUWSkgPyAnLTAnIDogcmVzdWx0O1xufVxuXG4vKipcbiAqIENvbnZlcnRzIHRoZSBjaGFyYWN0ZXJzIFwiJlwiLCBcIjxcIiwgXCI+XCIsICdcIicsIFwiJ1wiLCBhbmQgXCJcXGBcIiBpbiBgc3RyaW5nYCB0b1xuICogdGhlaXIgY29ycmVzcG9uZGluZyBIVE1MIGVudGl0aWVzLlxuICpcbiAqICoqTm90ZToqKiBObyBvdGhlciBjaGFyYWN0ZXJzIGFyZSBlc2NhcGVkLiBUbyBlc2NhcGUgYWRkaXRpb25hbFxuICogY2hhcmFjdGVycyB1c2UgYSB0aGlyZC1wYXJ0eSBsaWJyYXJ5IGxpa2UgW19oZV9dKGh0dHBzOi8vbXRocy5iZS9oZSkuXG4gKlxuICogVGhvdWdoIHRoZSBcIj5cIiBjaGFyYWN0ZXIgaXMgZXNjYXBlZCBmb3Igc3ltbWV0cnksIGNoYXJhY3RlcnMgbGlrZVxuICogXCI+XCIgYW5kIFwiL1wiIGRvbid0IG5lZWQgZXNjYXBpbmcgaW4gSFRNTCBhbmQgaGF2ZSBubyBzcGVjaWFsIG1lYW5pbmdcbiAqIHVubGVzcyB0aGV5J3JlIHBhcnQgb2YgYSB0YWcgb3IgdW5xdW90ZWQgYXR0cmlidXRlIHZhbHVlLlxuICogU2VlIFtNYXRoaWFzIEJ5bmVucydzIGFydGljbGVdKGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9hbWJpZ3VvdXMtYW1wZXJzYW5kcylcbiAqICh1bmRlciBcInNlbWktcmVsYXRlZCBmdW4gZmFjdFwiKSBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIEJhY2t0aWNrcyBhcmUgZXNjYXBlZCBiZWNhdXNlIGluIElFIDwgOSwgdGhleSBjYW4gYnJlYWsgb3V0IG9mXG4gKiBhdHRyaWJ1dGUgdmFsdWVzIG9yIEhUTUwgY29tbWVudHMuIFNlZSBbIzU5XShodHRwczovL2h0bWw1c2VjLm9yZy8jNTkpLFxuICogWyMxMDJdKGh0dHBzOi8vaHRtbDVzZWMub3JnLyMxMDIpLCBbIzEwOF0oaHR0cHM6Ly9odG1sNXNlYy5vcmcvIzEwOCksIGFuZFxuICogWyMxMzNdKGh0dHBzOi8vaHRtbDVzZWMub3JnLyMxMzMpIG9mIHRoZSBbSFRNTDUgU2VjdXJpdHkgQ2hlYXRzaGVldF0oaHR0cHM6Ly9odG1sNXNlYy5vcmcvKVxuICogZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBXaGVuIHdvcmtpbmcgd2l0aCBIVE1MIHlvdSBzaG91bGQgYWx3YXlzIFtxdW90ZSBhdHRyaWJ1dGUgdmFsdWVzXShodHRwOi8vd29ua28uY29tL3Bvc3QvaHRtbC1lc2NhcGluZylcbiAqIHRvIHJlZHVjZSBYU1MgdmVjdG9ycy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IFN0cmluZ1xuICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gZXNjYXBlLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgZXNjYXBlZCBzdHJpbmcuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uZXNjYXBlKCdmcmVkLCBiYXJuZXksICYgcGViYmxlcycpO1xuICogLy8gPT4gJ2ZyZWQsIGJhcm5leSwgJmFtcDsgcGViYmxlcydcbiAqL1xuZnVuY3Rpb24gZXNjYXBlKHN0cmluZykge1xuICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuICByZXR1cm4gKHN0cmluZyAmJiByZUhhc1VuZXNjYXBlZEh0bWwudGVzdChzdHJpbmcpKVxuICAgID8gc3RyaW5nLnJlcGxhY2UocmVVbmVzY2FwZWRIdG1sLCBlc2NhcGVIdG1sQ2hhcilcbiAgICA6IHN0cmluZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBlc2NhcGU7XG4iLCIvKipcbiAqIGxvZGFzaCAzLjAuMSAoQ3VzdG9tIEJ1aWxkKSA8aHR0cHM6Ly9sb2Rhc2guY29tLz5cbiAqIEJ1aWxkOiBgbG9kYXNoIG1vZHVsYXJpemUgZXhwb3J0cz1cIm5wbVwiIC1vIC4vYFxuICogQ29weXJpZ2h0IDIwMTItMjAxNiBUaGUgRG9qbyBGb3VuZGF0aW9uIDxodHRwOi8vZG9qb2ZvdW5kYXRpb24ub3JnLz5cbiAqIEJhc2VkIG9uIFVuZGVyc2NvcmUuanMgMS44LjMgPGh0dHA6Ly91bmRlcnNjb3JlanMub3JnL0xJQ0VOU0U+XG4gKiBDb3B5cmlnaHQgMjAwOS0yMDE2IEplcmVteSBBc2hrZW5hcywgRG9jdW1lbnRDbG91ZCBhbmQgSW52ZXN0aWdhdGl2ZSBSZXBvcnRlcnMgJiBFZGl0b3JzXG4gKiBBdmFpbGFibGUgdW5kZXIgTUlUIGxpY2Vuc2UgPGh0dHBzOi8vbG9kYXNoLmNvbS9saWNlbnNlPlxuICovXG5cbi8qKiBVc2VkIHRvIGRldGVybWluZSBpZiB2YWx1ZXMgYXJlIG9mIHRoZSBsYW5ndWFnZSB0eXBlIGBPYmplY3RgLiAqL1xudmFyIG9iamVjdFR5cGVzID0ge1xuICAnZnVuY3Rpb24nOiB0cnVlLFxuICAnb2JqZWN0JzogdHJ1ZVxufTtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBleHBvcnRzYC4gKi9cbnZhciBmcmVlRXhwb3J0cyA9IChvYmplY3RUeXBlc1t0eXBlb2YgZXhwb3J0c10gJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSlcbiAgPyBleHBvcnRzXG4gIDogdW5kZWZpbmVkO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IChvYmplY3RUeXBlc1t0eXBlb2YgbW9kdWxlXSAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSlcbiAgPyBtb2R1bGVcbiAgOiB1bmRlZmluZWQ7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZ2xvYmFsYCBmcm9tIE5vZGUuanMuICovXG52YXIgZnJlZUdsb2JhbCA9IGNoZWNrR2xvYmFsKGZyZWVFeHBvcnRzICYmIGZyZWVNb2R1bGUgJiYgdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYHNlbGZgLiAqL1xudmFyIGZyZWVTZWxmID0gY2hlY2tHbG9iYWwob2JqZWN0VHlwZXNbdHlwZW9mIHNlbGZdICYmIHNlbGYpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYHdpbmRvd2AuICovXG52YXIgZnJlZVdpbmRvdyA9IGNoZWNrR2xvYmFsKG9iamVjdFR5cGVzW3R5cGVvZiB3aW5kb3ddICYmIHdpbmRvdyk7XG5cbi8qKiBEZXRlY3QgYHRoaXNgIGFzIHRoZSBnbG9iYWwgb2JqZWN0LiAqL1xudmFyIHRoaXNHbG9iYWwgPSBjaGVja0dsb2JhbChvYmplY3RUeXBlc1t0eXBlb2YgdGhpc10gJiYgdGhpcyk7XG5cbi8qKlxuICogVXNlZCBhcyBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIG9iamVjdC5cbiAqXG4gKiBUaGUgYHRoaXNgIHZhbHVlIGlzIHVzZWQgaWYgaXQncyB0aGUgZ2xvYmFsIG9iamVjdCB0byBhdm9pZCBHcmVhc2Vtb25rZXknc1xuICogcmVzdHJpY3RlZCBgd2luZG93YCBvYmplY3QsIG90aGVyd2lzZSB0aGUgYHdpbmRvd2Agb2JqZWN0IGlzIHVzZWQuXG4gKi9cbnZhciByb290ID0gZnJlZUdsb2JhbCB8fFxuICAoKGZyZWVXaW5kb3cgIT09ICh0aGlzR2xvYmFsICYmIHRoaXNHbG9iYWwud2luZG93KSkgJiYgZnJlZVdpbmRvdykgfHxcbiAgICBmcmVlU2VsZiB8fCB0aGlzR2xvYmFsIHx8IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBnbG9iYWwgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtudWxsfE9iamVjdH0gUmV0dXJucyBgdmFsdWVgIGlmIGl0J3MgYSBnbG9iYWwgb2JqZWN0LCBlbHNlIGBudWxsYC5cbiAqL1xuZnVuY3Rpb24gY2hlY2tHbG9iYWwodmFsdWUpIHtcbiAgcmV0dXJuICh2YWx1ZSAmJiB2YWx1ZS5PYmplY3QgPT09IE9iamVjdCkgPyB2YWx1ZSA6IG51bGw7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcm9vdDtcbiIsIi8qKlxuICogbG9kYXNoIDMuMC4yIChDdXN0b20gQnVpbGQpIDxodHRwczovL2xvZGFzaC5jb20vPlxuICogQnVpbGQ6IGBsb2Rhc2ggbW9kZXJuIG1vZHVsYXJpemUgZXhwb3J0cz1cIm5wbVwiIC1vIC4vYFxuICogQ29weXJpZ2h0IDIwMTItMjAxNSBUaGUgRG9qbyBGb3VuZGF0aW9uIDxodHRwOi8vZG9qb2ZvdW5kYXRpb24ub3JnLz5cbiAqIEJhc2VkIG9uIFVuZGVyc2NvcmUuanMgMS44LjMgPGh0dHA6Ly91bmRlcnNjb3JlanMub3JnL0xJQ0VOU0U+XG4gKiBDb3B5cmlnaHQgMjAwOS0yMDE1IEplcmVteSBBc2hrZW5hcywgRG9jdW1lbnRDbG91ZCBhbmQgSW52ZXN0aWdhdGl2ZSBSZXBvcnRlcnMgJiBFZGl0b3JzXG4gKiBBdmFpbGFibGUgdW5kZXIgTUlUIGxpY2Vuc2UgPGh0dHBzOi8vbG9kYXNoLmNvbS9saWNlbnNlPlxuICovXG52YXIgYmFzZUZvciA9IHJlcXVpcmUoJ2xvZGFzaC5fYmFzZWZvcicpLFxuICAgIGJpbmRDYWxsYmFjayA9IHJlcXVpcmUoJ2xvZGFzaC5fYmluZGNhbGxiYWNrJyksXG4gICAga2V5cyA9IHJlcXVpcmUoJ2xvZGFzaC5rZXlzJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZm9yT3duYCB3aXRob3V0IHN1cHBvcnQgZm9yIGNhbGxiYWNrXG4gKiBzaG9ydGhhbmRzIGFuZCBgdGhpc2AgYmluZGluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG5mdW5jdGlvbiBiYXNlRm9yT3duKG9iamVjdCwgaXRlcmF0ZWUpIHtcbiAgcmV0dXJuIGJhc2VGb3Iob2JqZWN0LCBpdGVyYXRlZSwga2V5cyk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIGZvciBgXy5mb3JPd25gIG9yIGBfLmZvck93blJpZ2h0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gb2JqZWN0RnVuYyBUaGUgZnVuY3Rpb24gdG8gaXRlcmF0ZSBvdmVyIGFuIG9iamVjdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGVhY2ggZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUZvck93bihvYmplY3RGdW5jKSB7XG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QsIGl0ZXJhdGVlLCB0aGlzQXJnKSB7XG4gICAgaWYgKHR5cGVvZiBpdGVyYXRlZSAhPSAnZnVuY3Rpb24nIHx8IHRoaXNBcmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaXRlcmF0ZWUgPSBiaW5kQ2FsbGJhY2soaXRlcmF0ZWUsIHRoaXNBcmcsIDMpO1xuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0RnVuYyhvYmplY3QsIGl0ZXJhdGVlKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBJdGVyYXRlcyBvdmVyIG93biBlbnVtZXJhYmxlIHByb3BlcnRpZXMgb2YgYW4gb2JqZWN0IGludm9raW5nIGBpdGVyYXRlZWBcbiAqIGZvciBlYWNoIHByb3BlcnR5LiBUaGUgYGl0ZXJhdGVlYCBpcyBib3VuZCB0byBgdGhpc0FyZ2AgYW5kIGludm9rZWQgd2l0aFxuICogdGhyZWUgYXJndW1lbnRzOiAodmFsdWUsIGtleSwgb2JqZWN0KS4gSXRlcmF0ZWUgZnVuY3Rpb25zIG1heSBleGl0IGl0ZXJhdGlvblxuICogZWFybHkgYnkgZXhwbGljaXRseSByZXR1cm5pbmcgYGZhbHNlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHBhcmFtIHsqfSBbdGhpc0FyZ10gVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBpdGVyYXRlZWAuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYSA9IDE7XG4gKiAgIHRoaXMuYiA9IDI7XG4gKiB9XG4gKlxuICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAqXG4gKiBfLmZvck93bihuZXcgRm9vLCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gKiAgIGNvbnNvbGUubG9nKGtleSk7XG4gKiB9KTtcbiAqIC8vID0+IGxvZ3MgJ2EnIGFuZCAnYicgKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAqL1xudmFyIGZvck93biA9IGNyZWF0ZUZvck93bihiYXNlRm9yT3duKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmb3JPd247XG4iLCIvKipcbiAqIGxvZGFzaCAzLjAuMyAoQ3VzdG9tIEJ1aWxkKSA8aHR0cHM6Ly9sb2Rhc2guY29tLz5cbiAqIEJ1aWxkOiBgbG9kYXNoIG1vZHVsYXJpemUgZXhwb3J0cz1cIm5wbVwiIC1vIC4vYFxuICogQ29weXJpZ2h0IDIwMTItMjAxNiBUaGUgRG9qbyBGb3VuZGF0aW9uIDxodHRwOi8vZG9qb2ZvdW5kYXRpb24ub3JnLz5cbiAqIEJhc2VkIG9uIFVuZGVyc2NvcmUuanMgMS44LjMgPGh0dHA6Ly91bmRlcnNjb3JlanMub3JnL0xJQ0VOU0U+XG4gKiBDb3B5cmlnaHQgMjAwOS0yMDE2IEplcmVteSBBc2hrZW5hcywgRG9jdW1lbnRDbG91ZCBhbmQgSW52ZXN0aWdhdGl2ZSBSZXBvcnRlcnMgJiBFZGl0b3JzXG4gKiBBdmFpbGFibGUgdW5kZXIgTUlUIGxpY2Vuc2UgPGh0dHBzOi8vbG9kYXNoLmNvbS9saWNlbnNlPlxuICovXG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGJhc2VGb3JJbmAgYW5kIGBiYXNlRm9yT3duYCB3aGljaCBpdGVyYXRlc1xuICogb3ZlciBgb2JqZWN0YCBwcm9wZXJ0aWVzIHJldHVybmVkIGJ5IGBrZXlzRnVuY2AgaW52b2tpbmcgYGl0ZXJhdGVlYCBmb3JcbiAqIGVhY2ggcHJvcGVydHkuIEl0ZXJhdGVlIGZ1bmN0aW9ucyBtYXkgZXhpdCBpdGVyYXRpb24gZWFybHkgYnkgZXhwbGljaXRseVxuICogcmV0dXJuaW5nIGBmYWxzZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHBhcmFtIHtGdW5jdGlvbn0ga2V5c0Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGdldCB0aGUga2V5cyBvZiBgb2JqZWN0YC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKi9cbnZhciBiYXNlRm9yID0gY3JlYXRlQmFzZUZvcigpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBiYXNlIGZ1bmN0aW9uIGZvciBtZXRob2RzIGxpa2UgYF8uZm9ySW5gLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtmcm9tUmlnaHRdIFNwZWNpZnkgaXRlcmF0aW5nIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGJhc2UgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VGb3IoZnJvbVJpZ2h0KSB7XG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QsIGl0ZXJhdGVlLCBrZXlzRnVuYykge1xuICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICBpdGVyYWJsZSA9IE9iamVjdChvYmplY3QpLFxuICAgICAgICBwcm9wcyA9IGtleXNGdW5jKG9iamVjdCksXG4gICAgICAgIGxlbmd0aCA9IHByb3BzLmxlbmd0aDtcblxuICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgdmFyIGtleSA9IHByb3BzW2Zyb21SaWdodCA/IGxlbmd0aCA6ICsraW5kZXhdO1xuICAgICAgaWYgKGl0ZXJhdGVlKGl0ZXJhYmxlW2tleV0sIGtleSwgaXRlcmFibGUpID09PSBmYWxzZSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdDtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlRm9yO1xuIiwiLyoqXG4gKiBsb2Rhc2ggMy4wLjEgKEN1c3RvbSBCdWlsZCkgPGh0dHBzOi8vbG9kYXNoLmNvbS8+XG4gKiBCdWlsZDogYGxvZGFzaCBtb2Rlcm4gbW9kdWxhcml6ZSBleHBvcnRzPVwibnBtXCIgLW8gLi9gXG4gKiBDb3B5cmlnaHQgMjAxMi0yMDE1IFRoZSBEb2pvIEZvdW5kYXRpb24gPGh0dHA6Ly9kb2pvZm91bmRhdGlvbi5vcmcvPlxuICogQmFzZWQgb24gVW5kZXJzY29yZS5qcyAxLjguMyA8aHR0cDovL3VuZGVyc2NvcmVqcy5vcmcvTElDRU5TRT5cbiAqIENvcHlyaWdodCAyMDA5LTIwMTUgSmVyZW15IEFzaGtlbmFzLCBEb2N1bWVudENsb3VkIGFuZCBJbnZlc3RpZ2F0aXZlIFJlcG9ydGVycyAmIEVkaXRvcnNcbiAqIEF2YWlsYWJsZSB1bmRlciBNSVQgbGljZW5zZSA8aHR0cHM6Ly9sb2Rhc2guY29tL2xpY2Vuc2U+XG4gKi9cblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VDYWxsYmFja2Agd2hpY2ggb25seSBzdXBwb3J0cyBgdGhpc2AgYmluZGluZ1xuICogYW5kIHNwZWNpZnlpbmcgdGhlIG51bWJlciBvZiBhcmd1bWVudHMgdG8gcHJvdmlkZSB0byBgZnVuY2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGJpbmQuXG4gKiBAcGFyYW0geyp9IHRoaXNBcmcgVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbYXJnQ291bnRdIFRoZSBudW1iZXIgb2YgYXJndW1lbnRzIHRvIHByb3ZpZGUgdG8gYGZ1bmNgLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBjYWxsYmFjay5cbiAqL1xuZnVuY3Rpb24gYmluZENhbGxiYWNrKGZ1bmMsIHRoaXNBcmcsIGFyZ0NvdW50KSB7XG4gIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGlkZW50aXR5O1xuICB9XG4gIGlmICh0aGlzQXJnID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gZnVuYztcbiAgfVxuICBzd2l0Y2ggKGFyZ0NvdW50KSB7XG4gICAgY2FzZSAxOiByZXR1cm4gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgdmFsdWUpO1xuICAgIH07XG4gICAgY2FzZSAzOiByZXR1cm4gZnVuY3Rpb24odmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKSB7XG4gICAgICByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbik7XG4gICAgfTtcbiAgICBjYXNlIDQ6IHJldHVybiBmdW5jdGlvbihhY2N1bXVsYXRvciwgdmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKSB7XG4gICAgICByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFjY3VtdWxhdG9yLCB2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pO1xuICAgIH07XG4gICAgY2FzZSA1OiByZXR1cm4gZnVuY3Rpb24odmFsdWUsIG90aGVyLCBrZXksIG9iamVjdCwgc291cmNlKSB7XG4gICAgICByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIHZhbHVlLCBvdGhlciwga2V5LCBvYmplY3QsIHNvdXJjZSk7XG4gICAgfTtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpc0FyZywgYXJndW1lbnRzKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBmaXJzdCBhcmd1bWVudCBwcm92aWRlZCB0byBpdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IFV0aWxpdHlcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgQW55IHZhbHVlLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgYHZhbHVlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ3VzZXInOiAnZnJlZCcgfTtcbiAqXG4gKiBfLmlkZW50aXR5KG9iamVjdCkgPT09IG9iamVjdDtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gaWRlbnRpdHkodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJpbmRDYWxsYmFjaztcbiIsIi8qKlxuICogbG9kYXNoIDMuMS4yIChDdXN0b20gQnVpbGQpIDxodHRwczovL2xvZGFzaC5jb20vPlxuICogQnVpbGQ6IGBsb2Rhc2ggbW9kZXJuIG1vZHVsYXJpemUgZXhwb3J0cz1cIm5wbVwiIC1vIC4vYFxuICogQ29weXJpZ2h0IDIwMTItMjAxNSBUaGUgRG9qbyBGb3VuZGF0aW9uIDxodHRwOi8vZG9qb2ZvdW5kYXRpb24ub3JnLz5cbiAqIEJhc2VkIG9uIFVuZGVyc2NvcmUuanMgMS44LjMgPGh0dHA6Ly91bmRlcnNjb3JlanMub3JnL0xJQ0VOU0U+XG4gKiBDb3B5cmlnaHQgMjAwOS0yMDE1IEplcmVteSBBc2hrZW5hcywgRG9jdW1lbnRDbG91ZCBhbmQgSW52ZXN0aWdhdGl2ZSBSZXBvcnRlcnMgJiBFZGl0b3JzXG4gKiBBdmFpbGFibGUgdW5kZXIgTUlUIGxpY2Vuc2UgPGh0dHBzOi8vbG9kYXNoLmNvbS9saWNlbnNlPlxuICovXG52YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnbG9kYXNoLl9nZXRuYXRpdmUnKSxcbiAgICBpc0FyZ3VtZW50cyA9IHJlcXVpcmUoJ2xvZGFzaC5pc2FyZ3VtZW50cycpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCdsb2Rhc2guaXNhcnJheScpO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgdW5zaWduZWQgaW50ZWdlciB2YWx1ZXMuICovXG52YXIgcmVJc1VpbnQgPSAvXlxcZCskLztcblxuLyoqIFVzZWQgZm9yIG5hdGl2ZSBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qIE5hdGl2ZSBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlS2V5cyA9IGdldE5hdGl2ZShPYmplY3QsICdrZXlzJyk7XG5cbi8qKlxuICogVXNlZCBhcyB0aGUgW21heGltdW0gbGVuZ3RoXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1udW1iZXIubWF4X3NhZmVfaW50ZWdlcilcbiAqIG9mIGFuIGFycmF5LWxpa2UgdmFsdWUuXG4gKi9cbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gOTAwNzE5OTI1NDc0MDk5MTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5wcm9wZXJ0eWAgd2l0aG91dCBzdXBwb3J0IGZvciBkZWVwIHBhdGhzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlUHJvcGVydHkoa2V5KSB7XG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBvYmplY3Rba2V5XTtcbiAgfTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBcImxlbmd0aFwiIHByb3BlcnR5IHZhbHVlIG9mIGBvYmplY3RgLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gYXZvaWQgYSBbSklUIGJ1Z10oaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0Mjc5MilcbiAqIHRoYXQgYWZmZWN0cyBTYWZhcmkgb24gYXQgbGVhc3QgaU9TIDguMS04LjMgQVJNNjQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBcImxlbmd0aFwiIHZhbHVlLlxuICovXG52YXIgZ2V0TGVuZ3RoID0gYmFzZVByb3BlcnR5KCdsZW5ndGgnKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhcnJheS1saWtlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFycmF5LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNBcnJheUxpa2UodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgaXNMZW5ndGgoZ2V0TGVuZ3RoKHZhbHVlKSk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGluZGV4LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoPU1BWF9TQUZFX0lOVEVHRVJdIFRoZSB1cHBlciBib3VuZHMgb2YgYSB2YWxpZCBpbmRleC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgaW5kZXgsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNJbmRleCh2YWx1ZSwgbGVuZ3RoKSB7XG4gIHZhbHVlID0gKHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJyB8fCByZUlzVWludC50ZXN0KHZhbHVlKSkgPyArdmFsdWUgOiAtMTtcbiAgbGVuZ3RoID0gbGVuZ3RoID09IG51bGwgPyBNQVhfU0FGRV9JTlRFR0VSIDogbGVuZ3RoO1xuICByZXR1cm4gdmFsdWUgPiAtMSAmJiB2YWx1ZSAlIDEgPT0gMCAmJiB2YWx1ZSA8IGxlbmd0aDtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGFycmF5LWxpa2UgbGVuZ3RoLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIGZ1bmN0aW9uIGlzIGJhc2VkIG9uIFtgVG9MZW5ndGhgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy10b2xlbmd0aCkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBsZW5ndGgsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNMZW5ndGgodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJyAmJiB2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDw9IE1BWF9TQUZFX0lOVEVHRVI7XG59XG5cbi8qKlxuICogQSBmYWxsYmFjayBpbXBsZW1lbnRhdGlvbiBvZiBgT2JqZWN0LmtleXNgIHdoaWNoIGNyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlXG4gKiBvd24gZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gc2hpbUtleXMob2JqZWN0KSB7XG4gIHZhciBwcm9wcyA9IGtleXNJbihvYmplY3QpLFxuICAgICAgcHJvcHNMZW5ndGggPSBwcm9wcy5sZW5ndGgsXG4gICAgICBsZW5ndGggPSBwcm9wc0xlbmd0aCAmJiBvYmplY3QubGVuZ3RoO1xuXG4gIHZhciBhbGxvd0luZGV4ZXMgPSAhIWxlbmd0aCAmJiBpc0xlbmd0aChsZW5ndGgpICYmXG4gICAgKGlzQXJyYXkob2JqZWN0KSB8fCBpc0FyZ3VtZW50cyhvYmplY3QpKTtcblxuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IFtdO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgcHJvcHNMZW5ndGgpIHtcbiAgICB2YXIga2V5ID0gcHJvcHNbaW5kZXhdO1xuICAgIGlmICgoYWxsb3dJbmRleGVzICYmIGlzSW5kZXgoa2V5LCBsZW5ndGgpKSB8fCBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyB0aGUgW2xhbmd1YWdlIHR5cGVdKGh0dHBzOi8vZXM1LmdpdGh1Yi5pby8jeDgpIG9mIGBPYmplY3RgLlxuICogKGUuZy4gYXJyYXlzLCBmdW5jdGlvbnMsIG9iamVjdHMsIHJlZ2V4ZXMsIGBuZXcgTnVtYmVyKDApYCwgYW5kIGBuZXcgU3RyaW5nKCcnKWApXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzT2JqZWN0KHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdCgxKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7XG4gIC8vIEF2b2lkIGEgVjggSklUIGJ1ZyBpbiBDaHJvbWUgMTktMjAuXG4gIC8vIFNlZSBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MjI5MSBmb3IgbW9yZSBkZXRhaWxzLlxuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgcmV0dXJuICEhdmFsdWUgJiYgKHR5cGUgPT0gJ29iamVjdCcgfHwgdHlwZSA9PSAnZnVuY3Rpb24nKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiBgb2JqZWN0YC5cbiAqXG4gKiAqKk5vdGU6KiogTm9uLW9iamVjdCB2YWx1ZXMgYXJlIGNvZXJjZWQgdG8gb2JqZWN0cy4gU2VlIHRoZVxuICogW0VTIHNwZWNdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLW9iamVjdC5rZXlzKVxuICogZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSAxO1xuICogICB0aGlzLmIgPSAyO1xuICogfVxuICpcbiAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gKlxuICogXy5rZXlzKG5ldyBGb28pO1xuICogLy8gPT4gWydhJywgJ2InXSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICpcbiAqIF8ua2V5cygnaGknKTtcbiAqIC8vID0+IFsnMCcsICcxJ11cbiAqL1xudmFyIGtleXMgPSAhbmF0aXZlS2V5cyA/IHNoaW1LZXlzIDogZnVuY3Rpb24ob2JqZWN0KSB7XG4gIHZhciBDdG9yID0gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBvYmplY3QuY29uc3RydWN0b3I7XG4gIGlmICgodHlwZW9mIEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBDdG9yLnByb3RvdHlwZSA9PT0gb2JqZWN0KSB8fFxuICAgICAgKHR5cGVvZiBvYmplY3QgIT0gJ2Z1bmN0aW9uJyAmJiBpc0FycmF5TGlrZShvYmplY3QpKSkge1xuICAgIHJldHVybiBzaGltS2V5cyhvYmplY3QpO1xuICB9XG4gIHJldHVybiBpc09iamVjdChvYmplY3QpID8gbmF0aXZlS2V5cyhvYmplY3QpIDogW107XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgYG9iamVjdGAuXG4gKlxuICogKipOb3RlOioqIE5vbi1vYmplY3QgdmFsdWVzIGFyZSBjb2VyY2VkIHRvIG9iamVjdHMuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqICAgdGhpcy5iID0gMjtcbiAqIH1cbiAqXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICpcbiAqIF8ua2V5c0luKG5ldyBGb28pO1xuICogLy8gPT4gWydhJywgJ2InLCAnYyddIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gKi9cbmZ1bmN0aW9uIGtleXNJbihvYmplY3QpIHtcbiAgaWYgKG9iamVjdCA9PSBudWxsKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIGlmICghaXNPYmplY3Qob2JqZWN0KSkge1xuICAgIG9iamVjdCA9IE9iamVjdChvYmplY3QpO1xuICB9XG4gIHZhciBsZW5ndGggPSBvYmplY3QubGVuZ3RoO1xuICBsZW5ndGggPSAobGVuZ3RoICYmIGlzTGVuZ3RoKGxlbmd0aCkgJiZcbiAgICAoaXNBcnJheShvYmplY3QpIHx8IGlzQXJndW1lbnRzKG9iamVjdCkpICYmIGxlbmd0aCkgfHwgMDtcblxuICB2YXIgQ3RvciA9IG9iamVjdC5jb25zdHJ1Y3RvcixcbiAgICAgIGluZGV4ID0gLTEsXG4gICAgICBpc1Byb3RvID0gdHlwZW9mIEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBDdG9yLnByb3RvdHlwZSA9PT0gb2JqZWN0LFxuICAgICAgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKSxcbiAgICAgIHNraXBJbmRleGVzID0gbGVuZ3RoID4gMDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHJlc3VsdFtpbmRleF0gPSAoaW5kZXggKyAnJyk7XG4gIH1cbiAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgIGlmICghKHNraXBJbmRleGVzICYmIGlzSW5kZXgoa2V5LCBsZW5ndGgpKSAmJlxuICAgICAgICAhKGtleSA9PSAnY29uc3RydWN0b3InICYmIChpc1Byb3RvIHx8ICFoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSkpKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGtleXM7XG4iLCIvKipcbiAqIGxvZGFzaCAzLjkuMSAoQ3VzdG9tIEJ1aWxkKSA8aHR0cHM6Ly9sb2Rhc2guY29tLz5cbiAqIEJ1aWxkOiBgbG9kYXNoIG1vZGVybiBtb2R1bGFyaXplIGV4cG9ydHM9XCJucG1cIiAtbyAuL2BcbiAqIENvcHlyaWdodCAyMDEyLTIwMTUgVGhlIERvam8gRm91bmRhdGlvbiA8aHR0cDovL2Rvam9mb3VuZGF0aW9uLm9yZy8+XG4gKiBCYXNlZCBvbiBVbmRlcnNjb3JlLmpzIDEuOC4zIDxodHRwOi8vdW5kZXJzY29yZWpzLm9yZy9MSUNFTlNFPlxuICogQ29weXJpZ2h0IDIwMDktMjAxNSBKZXJlbXkgQXNoa2VuYXMsIERvY3VtZW50Q2xvdWQgYW5kIEludmVzdGlnYXRpdmUgUmVwb3J0ZXJzICYgRWRpdG9yc1xuICogQXZhaWxhYmxlIHVuZGVyIE1JVCBsaWNlbnNlIDxodHRwczovL2xvZGFzaC5jb20vbGljZW5zZT5cbiAqL1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1RhZyA9ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBob3N0IGNvbnN0cnVjdG9ycyAoU2FmYXJpID4gNSkuICovXG52YXIgcmVJc0hvc3RDdG9yID0gL15cXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXF0kLztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBvYmplY3QtbGlrZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBvYmplY3QtbGlrZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc09iamVjdExpa2UodmFsdWUpIHtcbiAgcmV0dXJuICEhdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnO1xufVxuXG4vKiogVXNlZCBmb3IgbmF0aXZlIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZuVG9TdHJpbmcgPSBGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVXNlZCB0byByZXNvbHZlIHRoZSBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG9ialRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBpZiBhIG1ldGhvZCBpcyBuYXRpdmUuICovXG52YXIgcmVJc05hdGl2ZSA9IFJlZ0V4cCgnXicgK1xuICBmblRvU3RyaW5nLmNhbGwoaGFzT3duUHJvcGVydHkpLnJlcGxhY2UoL1tcXFxcXiQuKis/KClbXFxde318XS9nLCAnXFxcXCQmJylcbiAgLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFxcXFwoKXwgZm9yIC4rPyg/PVxcXFxcXF0pL2csICckMS4qPycpICsgJyQnXG4pO1xuXG4vKipcbiAqIEdldHMgdGhlIG5hdGl2ZSBmdW5jdGlvbiBhdCBga2V5YCBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBtZXRob2QgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGZ1bmN0aW9uIGlmIGl0J3MgbmF0aXZlLCBlbHNlIGB1bmRlZmluZWRgLlxuICovXG5mdW5jdGlvbiBnZXROYXRpdmUob2JqZWN0LCBrZXkpIHtcbiAgdmFyIHZhbHVlID0gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBvYmplY3Rba2V5XTtcbiAgcmV0dXJuIGlzTmF0aXZlKHZhbHVlKSA/IHZhbHVlIDogdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgRnVuY3Rpb25gIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgY29ycmVjdGx5IGNsYXNzaWZpZWQsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0Z1bmN0aW9uKF8pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNGdW5jdGlvbigvYWJjLyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlKSB7XG4gIC8vIFRoZSB1c2Ugb2YgYE9iamVjdCN0b1N0cmluZ2AgYXZvaWRzIGlzc3VlcyB3aXRoIHRoZSBgdHlwZW9mYCBvcGVyYXRvclxuICAvLyBpbiBvbGRlciB2ZXJzaW9ucyBvZiBDaHJvbWUgYW5kIFNhZmFyaSB3aGljaCByZXR1cm4gJ2Z1bmN0aW9uJyBmb3IgcmVnZXhlc1xuICAvLyBhbmQgU2FmYXJpIDggZXF1aXZhbGVudHMgd2hpY2ggcmV0dXJuICdvYmplY3QnIGZvciB0eXBlZCBhcnJheSBjb25zdHJ1Y3RvcnMuXG4gIHJldHVybiBpc09iamVjdCh2YWx1ZSkgJiYgb2JqVG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT0gZnVuY1RhZztcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyB0aGUgW2xhbmd1YWdlIHR5cGVdKGh0dHBzOi8vZXM1LmdpdGh1Yi5pby8jeDgpIG9mIGBPYmplY3RgLlxuICogKGUuZy4gYXJyYXlzLCBmdW5jdGlvbnMsIG9iamVjdHMsIHJlZ2V4ZXMsIGBuZXcgTnVtYmVyKDApYCwgYW5kIGBuZXcgU3RyaW5nKCcnKWApXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzT2JqZWN0KHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdCgxKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7XG4gIC8vIEF2b2lkIGEgVjggSklUIGJ1ZyBpbiBDaHJvbWUgMTktMjAuXG4gIC8vIFNlZSBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MjI5MSBmb3IgbW9yZSBkZXRhaWxzLlxuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgcmV0dXJuICEhdmFsdWUgJiYgKHR5cGUgPT0gJ29iamVjdCcgfHwgdHlwZSA9PSAnZnVuY3Rpb24nKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIG5hdGl2ZSBmdW5jdGlvbi5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBuYXRpdmUgZnVuY3Rpb24sIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc05hdGl2ZShBcnJheS5wcm90b3R5cGUucHVzaCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc05hdGl2ZShfKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzTmF0aXZlKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgIHJldHVybiByZUlzTmF0aXZlLnRlc3QoZm5Ub1N0cmluZy5jYWxsKHZhbHVlKSk7XG4gIH1cbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgcmVJc0hvc3RDdG9yLnRlc3QodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldE5hdGl2ZTtcbiIsIi8qKlxuICogbG9kYXNoIChDdXN0b20gQnVpbGQpIDxodHRwczovL2xvZGFzaC5jb20vPlxuICogQnVpbGQ6IGBsb2Rhc2ggbW9kdWxhcml6ZSBleHBvcnRzPVwibnBtXCIgLW8gLi9gXG4gKiBDb3B5cmlnaHQgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9ycyA8aHR0cHM6Ly9qcXVlcnkub3JnLz5cbiAqIFJlbGVhc2VkIHVuZGVyIE1JVCBsaWNlbnNlIDxodHRwczovL2xvZGFzaC5jb20vbGljZW5zZT5cbiAqIEJhc2VkIG9uIFVuZGVyc2NvcmUuanMgMS44LjMgPGh0dHA6Ly91bmRlcnNjb3JlanMub3JnL0xJQ0VOU0U+XG4gKiBDb3B5cmlnaHQgSmVyZW15IEFzaGtlbmFzLCBEb2N1bWVudENsb3VkIGFuZCBJbnZlc3RpZ2F0aXZlIFJlcG9ydGVycyAmIEVkaXRvcnNcbiAqL1xuXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gOTAwNzE5OTI1NDc0MDk5MTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJyxcbiAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcbiAgICBnZW5UYWcgPSAnW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0nO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnByb3BlcnR5YCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZXAgcGF0aHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYWNjZXNzb3IgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VQcm9wZXJ0eShrZXkpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFtrZXldO1xuICB9O1xufVxuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFVzZWQgdG8gcmVzb2x2ZSB0aGVcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxuICogb2YgdmFsdWVzLlxuICovXG52YXIgb2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgcHJvcGVydHlJc0VudW1lcmFibGUgPSBvYmplY3RQcm90by5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblxuLyoqXG4gKiBHZXRzIHRoZSBcImxlbmd0aFwiIHByb3BlcnR5IHZhbHVlIG9mIGBvYmplY3RgLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gYXZvaWQgYVxuICogW0pJVCBidWddKGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDI3OTIpIHRoYXQgYWZmZWN0c1xuICogU2FmYXJpIG9uIGF0IGxlYXN0IGlPUyA4LjEtOC4zIEFSTTY0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgXCJsZW5ndGhcIiB2YWx1ZS5cbiAqL1xudmFyIGdldExlbmd0aCA9IGJhc2VQcm9wZXJ0eSgnbGVuZ3RoJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGFuIGBhcmd1bWVudHNgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJndW1lbnRzKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcmd1bWVudHMoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJndW1lbnRzKHZhbHVlKSB7XG4gIC8vIFNhZmFyaSA4LjEgaW5jb3JyZWN0bHkgbWFrZXMgYGFyZ3VtZW50cy5jYWxsZWVgIGVudW1lcmFibGUgaW4gc3RyaWN0IG1vZGUuXG4gIHJldHVybiBpc0FycmF5TGlrZU9iamVjdCh2YWx1ZSkgJiYgaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgJ2NhbGxlZScpICYmXG4gICAgKCFwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHZhbHVlLCAnY2FsbGVlJykgfHwgb2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT0gYXJnc1RhZyk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYXJyYXktbGlrZS4gQSB2YWx1ZSBpcyBjb25zaWRlcmVkIGFycmF5LWxpa2UgaWYgaXQnc1xuICogbm90IGEgZnVuY3Rpb24gYW5kIGhhcyBhIGB2YWx1ZS5sZW5ndGhgIHRoYXQncyBhbiBpbnRlZ2VyIGdyZWF0ZXIgdGhhbiBvclxuICogZXF1YWwgdG8gYDBgIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYE51bWJlci5NQVhfU0FGRV9JTlRFR0VSYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhcnJheS1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoJ2FiYycpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlMaWtlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIGlzTGVuZ3RoKGdldExlbmd0aCh2YWx1ZSkpICYmICFpc0Z1bmN0aW9uKHZhbHVlKTtcbn1cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmlzQXJyYXlMaWtlYCBleGNlcHQgdGhhdCBpdCBhbHNvIGNoZWNrcyBpZiBgdmFsdWVgXG4gKiBpcyBhbiBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYXJyYXktbGlrZSBvYmplY3QsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlT2JqZWN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZU9iamVjdChkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlT2JqZWN0KCdhYmMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5TGlrZU9iamVjdChfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUxpa2VPYmplY3QodmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgaXNBcnJheUxpa2UodmFsdWUpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgRnVuY3Rpb25gIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGZ1bmN0aW9uLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNGdW5jdGlvbihfKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oL2FiYy8pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuICAvLyBUaGUgdXNlIG9mIGBPYmplY3QjdG9TdHJpbmdgIGF2b2lkcyBpc3N1ZXMgd2l0aCB0aGUgYHR5cGVvZmAgb3BlcmF0b3JcbiAgLy8gaW4gU2FmYXJpIDggd2hpY2ggcmV0dXJucyAnb2JqZWN0JyBmb3IgdHlwZWQgYXJyYXkgYW5kIHdlYWsgbWFwIGNvbnN0cnVjdG9ycyxcbiAgLy8gYW5kIFBoYW50b21KUyAxLjkgd2hpY2ggcmV0dXJucyAnZnVuY3Rpb24nIGZvciBgTm9kZUxpc3RgIGluc3RhbmNlcy5cbiAgdmFyIHRhZyA9IGlzT2JqZWN0KHZhbHVlKSA/IG9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpIDogJyc7XG4gIHJldHVybiB0YWcgPT0gZnVuY1RhZyB8fCB0YWcgPT0gZ2VuVGFnO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgYXJyYXktbGlrZSBsZW5ndGguXG4gKlxuICogKipOb3RlOioqIFRoaXMgZnVuY3Rpb24gaXMgbG9vc2VseSBiYXNlZCBvblxuICogW2BUb0xlbmd0aGBdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXRvbGVuZ3RoKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGxlbmd0aCxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNMZW5ndGgoMyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0xlbmd0aChOdW1iZXIuTUlOX1ZBTFVFKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0xlbmd0aChJbmZpbml0eSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNMZW5ndGgoJzMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzTGVuZ3RoKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicgJiZcbiAgICB2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDw9IE1BWF9TQUZFX0lOVEVHRVI7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgdGhlXG4gKiBbbGFuZ3VhZ2UgdHlwZV0oaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWVjbWFzY3JpcHQtbGFuZ3VhZ2UtdHlwZXMpXG4gKiBvZiBgT2JqZWN0YC4gKGUuZy4gYXJyYXlzLCBmdW5jdGlvbnMsIG9iamVjdHMsIHJlZ2V4ZXMsIGBuZXcgTnVtYmVyKDApYCwgYW5kIGBuZXcgU3RyaW5nKCcnKWApXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3Qoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KF8ubm9vcCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChudWxsKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICByZXR1cm4gISF2YWx1ZSAmJiAodHlwZSA9PSAnb2JqZWN0JyB8fCB0eXBlID09ICdmdW5jdGlvbicpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLiBBIHZhbHVlIGlzIG9iamVjdC1saWtlIGlmIGl0J3Mgbm90IGBudWxsYFxuICogYW5kIGhhcyBhIGB0eXBlb2ZgIHJlc3VsdCBvZiBcIm9iamVjdFwiLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3RMaWtlKHZhbHVlKSB7XG4gIHJldHVybiAhIXZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0Jztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0FyZ3VtZW50cztcbiIsIi8qKlxuICogbG9kYXNoIDMuMC40IChDdXN0b20gQnVpbGQpIDxodHRwczovL2xvZGFzaC5jb20vPlxuICogQnVpbGQ6IGBsb2Rhc2ggbW9kZXJuIG1vZHVsYXJpemUgZXhwb3J0cz1cIm5wbVwiIC1vIC4vYFxuICogQ29weXJpZ2h0IDIwMTItMjAxNSBUaGUgRG9qbyBGb3VuZGF0aW9uIDxodHRwOi8vZG9qb2ZvdW5kYXRpb24ub3JnLz5cbiAqIEJhc2VkIG9uIFVuZGVyc2NvcmUuanMgMS44LjMgPGh0dHA6Ly91bmRlcnNjb3JlanMub3JnL0xJQ0VOU0U+XG4gKiBDb3B5cmlnaHQgMjAwOS0yMDE1IEplcmVteSBBc2hrZW5hcywgRG9jdW1lbnRDbG91ZCBhbmQgSW52ZXN0aWdhdGl2ZSBSZXBvcnRlcnMgJiBFZGl0b3JzXG4gKiBBdmFpbGFibGUgdW5kZXIgTUlUIGxpY2Vuc2UgPGh0dHBzOi8vbG9kYXNoLmNvbS9saWNlbnNlPlxuICovXG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcnJheVRhZyA9ICdbb2JqZWN0IEFycmF5XScsXG4gICAgZnVuY1RhZyA9ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBob3N0IGNvbnN0cnVjdG9ycyAoU2FmYXJpID4gNSkuICovXG52YXIgcmVJc0hvc3RDdG9yID0gL15cXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXF0kLztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBvYmplY3QtbGlrZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBvYmplY3QtbGlrZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc09iamVjdExpa2UodmFsdWUpIHtcbiAgcmV0dXJuICEhdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnO1xufVxuXG4vKiogVXNlZCBmb3IgbmF0aXZlIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZuVG9TdHJpbmcgPSBGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVXNlZCB0byByZXNvbHZlIHRoZSBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG9ialRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBpZiBhIG1ldGhvZCBpcyBuYXRpdmUuICovXG52YXIgcmVJc05hdGl2ZSA9IFJlZ0V4cCgnXicgK1xuICBmblRvU3RyaW5nLmNhbGwoaGFzT3duUHJvcGVydHkpLnJlcGxhY2UoL1tcXFxcXiQuKis/KClbXFxde318XS9nLCAnXFxcXCQmJylcbiAgLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFxcXFwoKXwgZm9yIC4rPyg/PVxcXFxcXF0pL2csICckMS4qPycpICsgJyQnXG4pO1xuXG4vKiBOYXRpdmUgbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZUlzQXJyYXkgPSBnZXROYXRpdmUoQXJyYXksICdpc0FycmF5Jyk7XG5cbi8qKlxuICogVXNlZCBhcyB0aGUgW21heGltdW0gbGVuZ3RoXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1udW1iZXIubWF4X3NhZmVfaW50ZWdlcilcbiAqIG9mIGFuIGFycmF5LWxpa2UgdmFsdWUuXG4gKi9cbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gOTAwNzE5OTI1NDc0MDk5MTtcblxuLyoqXG4gKiBHZXRzIHRoZSBuYXRpdmUgZnVuY3Rpb24gYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgbWV0aG9kIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBmdW5jdGlvbiBpZiBpdCdzIG5hdGl2ZSwgZWxzZSBgdW5kZWZpbmVkYC5cbiAqL1xuZnVuY3Rpb24gZ2V0TmF0aXZlKG9iamVjdCwga2V5KSB7XG4gIHZhciB2YWx1ZSA9IG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogb2JqZWN0W2tleV07XG4gIHJldHVybiBpc05hdGl2ZSh2YWx1ZSkgPyB2YWx1ZSA6IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGFycmF5LWxpa2UgbGVuZ3RoLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIGZ1bmN0aW9uIGlzIGJhc2VkIG9uIFtgVG9MZW5ndGhgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy10b2xlbmd0aCkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBsZW5ndGgsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNMZW5ndGgodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJyAmJiB2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDw9IE1BWF9TQUZFX0lOVEVHRVI7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhbiBgQXJyYXlgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgY29ycmVjdGx5IGNsYXNzaWZpZWQsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5KGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQXJyYXkgPSBuYXRpdmVJc0FycmF5IHx8IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGlzTGVuZ3RoKHZhbHVlLmxlbmd0aCkgJiYgb2JqVG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT0gYXJyYXlUYWc7XG59O1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgRnVuY3Rpb25gIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgY29ycmVjdGx5IGNsYXNzaWZpZWQsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0Z1bmN0aW9uKF8pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNGdW5jdGlvbigvYWJjLyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlKSB7XG4gIC8vIFRoZSB1c2Ugb2YgYE9iamVjdCN0b1N0cmluZ2AgYXZvaWRzIGlzc3VlcyB3aXRoIHRoZSBgdHlwZW9mYCBvcGVyYXRvclxuICAvLyBpbiBvbGRlciB2ZXJzaW9ucyBvZiBDaHJvbWUgYW5kIFNhZmFyaSB3aGljaCByZXR1cm4gJ2Z1bmN0aW9uJyBmb3IgcmVnZXhlc1xuICAvLyBhbmQgU2FmYXJpIDggZXF1aXZhbGVudHMgd2hpY2ggcmV0dXJuICdvYmplY3QnIGZvciB0eXBlZCBhcnJheSBjb25zdHJ1Y3RvcnMuXG4gIHJldHVybiBpc09iamVjdCh2YWx1ZSkgJiYgb2JqVG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT0gZnVuY1RhZztcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyB0aGUgW2xhbmd1YWdlIHR5cGVdKGh0dHBzOi8vZXM1LmdpdGh1Yi5pby8jeDgpIG9mIGBPYmplY3RgLlxuICogKGUuZy4gYXJyYXlzLCBmdW5jdGlvbnMsIG9iamVjdHMsIHJlZ2V4ZXMsIGBuZXcgTnVtYmVyKDApYCwgYW5kIGBuZXcgU3RyaW5nKCcnKWApXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzT2JqZWN0KHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdCgxKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7XG4gIC8vIEF2b2lkIGEgVjggSklUIGJ1ZyBpbiBDaHJvbWUgMTktMjAuXG4gIC8vIFNlZSBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MjI5MSBmb3IgbW9yZSBkZXRhaWxzLlxuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgcmV0dXJuICEhdmFsdWUgJiYgKHR5cGUgPT0gJ29iamVjdCcgfHwgdHlwZSA9PSAnZnVuY3Rpb24nKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIG5hdGl2ZSBmdW5jdGlvbi5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBuYXRpdmUgZnVuY3Rpb24sIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc05hdGl2ZShBcnJheS5wcm90b3R5cGUucHVzaCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc05hdGl2ZShfKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzTmF0aXZlKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgIHJldHVybiByZUlzTmF0aXZlLnRlc3QoZm5Ub1N0cmluZy5jYWxsKHZhbHVlKSk7XG4gIH1cbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgcmVJc0hvc3RDdG9yLnRlc3QodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJyYXk7XG4iLCIvKipcbiAqIGxvZGFzaCAzLjEuMSAoQ3VzdG9tIEJ1aWxkKSA8aHR0cHM6Ly9sb2Rhc2guY29tLz5cbiAqIEJ1aWxkOiBgbG9kYXNoIG1vZHVsYXJpemUgZXhwb3J0cz1cIm5wbVwiIC1vIC4vYFxuICogQ29weXJpZ2h0IDIwMTItMjAxNiBUaGUgRG9qbyBGb3VuZGF0aW9uIDxodHRwOi8vZG9qb2ZvdW5kYXRpb24ub3JnLz5cbiAqIEJhc2VkIG9uIFVuZGVyc2NvcmUuanMgMS44LjMgPGh0dHA6Ly91bmRlcnNjb3JlanMub3JnL0xJQ0VOU0U+XG4gKiBDb3B5cmlnaHQgMjAwOS0yMDE2IEplcmVteSBBc2hrZW5hcywgRG9jdW1lbnRDbG91ZCBhbmQgSW52ZXN0aWdhdGl2ZSBSZXBvcnRlcnMgJiBFZGl0b3JzXG4gKiBBdmFpbGFibGUgdW5kZXIgTUlUIGxpY2Vuc2UgPGh0dHBzOi8vbG9kYXNoLmNvbS9saWNlbnNlPlxuICovXG52YXIgZGVidXJyID0gcmVxdWlyZSgnbG9kYXNoLmRlYnVycicpLFxuICAgIHdvcmRzID0gcmVxdWlyZSgnbG9kYXNoLndvcmRzJyk7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLnJlZHVjZWAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yXG4gKiBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEBwYXJhbSB7Kn0gW2FjY3VtdWxhdG9yXSBUaGUgaW5pdGlhbCB2YWx1ZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2luaXRBY2N1bV0gU3BlY2lmeSB1c2luZyB0aGUgZmlyc3QgZWxlbWVudCBvZiBgYXJyYXlgIGFzIHRoZSBpbml0aWFsIHZhbHVlLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGFjY3VtdWxhdGVkIHZhbHVlLlxuICovXG5mdW5jdGlvbiBhcnJheVJlZHVjZShhcnJheSwgaXRlcmF0ZWUsIGFjY3VtdWxhdG9yLCBpbml0QWNjdW0pIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgaWYgKGluaXRBY2N1bSAmJiBsZW5ndGgpIHtcbiAgICBhY2N1bXVsYXRvciA9IGFycmF5WysraW5kZXhdO1xuICB9XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgYWNjdW11bGF0b3IgPSBpdGVyYXRlZShhY2N1bXVsYXRvciwgYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpO1xuICB9XG4gIHJldHVybiBhY2N1bXVsYXRvcjtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gbGlrZSBgXy5jYW1lbENhc2VgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdG8gY29tYmluZSBlYWNoIHdvcmQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjb21wb3VuZGVyIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVDb21wb3VuZGVyKGNhbGxiYWNrKSB7XG4gIHJldHVybiBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICByZXR1cm4gYXJyYXlSZWR1Y2Uod29yZHMoZGVidXJyKHN0cmluZykpLCBjYWxsYmFjaywgJycpO1xuICB9O1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGBzdHJpbmdgIHRvIFtrZWJhYiBjYXNlXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9MZXR0ZXJfY2FzZSNTcGVjaWFsX2Nhc2Vfc3R5bGVzKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IFN0cmluZ1xuICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGtlYmFiIGNhc2VkIHN0cmluZy5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5rZWJhYkNhc2UoJ0ZvbyBCYXInKTtcbiAqIC8vID0+ICdmb28tYmFyJ1xuICpcbiAqIF8ua2ViYWJDYXNlKCdmb29CYXInKTtcbiAqIC8vID0+ICdmb28tYmFyJ1xuICpcbiAqIF8ua2ViYWJDYXNlKCdfX2Zvb19iYXJfXycpO1xuICogLy8gPT4gJ2Zvby1iYXInXG4gKi9cbnZhciBrZWJhYkNhc2UgPSBjcmVhdGVDb21wb3VuZGVyKGZ1bmN0aW9uKHJlc3VsdCwgd29yZCwgaW5kZXgpIHtcbiAgcmV0dXJuIHJlc3VsdCArIChpbmRleCA/ICctJyA6ICcnKSArIHdvcmQudG9Mb3dlckNhc2UoKTtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGtlYmFiQ2FzZTtcbiIsIi8qKlxuICogbG9kYXNoIDMuMi4wIChDdXN0b20gQnVpbGQpIDxodHRwczovL2xvZGFzaC5jb20vPlxuICogQnVpbGQ6IGBsb2Rhc2ggbW9kdWxhcml6ZSBleHBvcnRzPVwibnBtXCIgLW8gLi9gXG4gKiBDb3B5cmlnaHQgMjAxMi0yMDE2IFRoZSBEb2pvIEZvdW5kYXRpb24gPGh0dHA6Ly9kb2pvZm91bmRhdGlvbi5vcmcvPlxuICogQmFzZWQgb24gVW5kZXJzY29yZS5qcyAxLjguMyA8aHR0cDovL3VuZGVyc2NvcmVqcy5vcmcvTElDRU5TRT5cbiAqIENvcHlyaWdodCAyMDA5LTIwMTYgSmVyZW15IEFzaGtlbmFzLCBEb2N1bWVudENsb3VkIGFuZCBJbnZlc3RpZ2F0aXZlIFJlcG9ydGVycyAmIEVkaXRvcnNcbiAqIEF2YWlsYWJsZSB1bmRlciBNSVQgbGljZW5zZSA8aHR0cHM6Ly9sb2Rhc2guY29tL2xpY2Vuc2U+XG4gKi9cbnZhciByb290ID0gcmVxdWlyZSgnbG9kYXNoLl9yb290Jyk7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIElORklOSVRZID0gMSAvIDA7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1ib2xUYWcgPSAnW29iamVjdCBTeW1ib2xdJztcblxuLyoqIFVzZWQgdG8gbWF0Y2ggbGF0aW4tMSBzdXBwbGVtZW50YXJ5IGxldHRlcnMgKGV4Y2x1ZGluZyBtYXRoZW1hdGljYWwgb3BlcmF0b3JzKS4gKi9cbnZhciByZUxhdGluMSA9IC9bXFx4YzAtXFx4ZDZcXHhkOC1cXHhkZVxceGRmLVxceGY2XFx4ZjgtXFx4ZmZdL2c7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgdW5pY29kZSBjaGFyYWN0ZXIgY2xhc3Nlcy4gKi9cbnZhciByc0NvbWJvTWFya3NSYW5nZSA9ICdcXFxcdTAzMDAtXFxcXHUwMzZmXFxcXHVmZTIwLVxcXFx1ZmUyMycsXG4gICAgcnNDb21ib1N5bWJvbHNSYW5nZSA9ICdcXFxcdTIwZDAtXFxcXHUyMGYwJztcblxuLyoqIFVzZWQgdG8gY29tcG9zZSB1bmljb2RlIGNhcHR1cmUgZ3JvdXBzLiAqL1xudmFyIHJzQ29tYm8gPSAnWycgKyByc0NvbWJvTWFya3NSYW5nZSArIHJzQ29tYm9TeW1ib2xzUmFuZ2UgKyAnXSc7XG5cbi8qKlxuICogVXNlZCB0byBtYXRjaCBbY29tYmluaW5nIGRpYWNyaXRpY2FsIG1hcmtzXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Db21iaW5pbmdfRGlhY3JpdGljYWxfTWFya3MpIGFuZFxuICogW2NvbWJpbmluZyBkaWFjcml0aWNhbCBtYXJrcyBmb3Igc3ltYm9sc10oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ29tYmluaW5nX0RpYWNyaXRpY2FsX01hcmtzX2Zvcl9TeW1ib2xzKS5cbiAqL1xudmFyIHJlQ29tYm9NYXJrID0gUmVnRXhwKHJzQ29tYm8sICdnJyk7XG5cbi8qKiBVc2VkIHRvIG1hcCBsYXRpbi0xIHN1cHBsZW1lbnRhcnkgbGV0dGVycyB0byBiYXNpYyBsYXRpbiBsZXR0ZXJzLiAqL1xudmFyIGRlYnVycmVkTGV0dGVycyA9IHtcbiAgJ1xceGMwJzogJ0EnLCAgJ1xceGMxJzogJ0EnLCAnXFx4YzInOiAnQScsICdcXHhjMyc6ICdBJywgJ1xceGM0JzogJ0EnLCAnXFx4YzUnOiAnQScsXG4gICdcXHhlMCc6ICdhJywgICdcXHhlMSc6ICdhJywgJ1xceGUyJzogJ2EnLCAnXFx4ZTMnOiAnYScsICdcXHhlNCc6ICdhJywgJ1xceGU1JzogJ2EnLFxuICAnXFx4YzcnOiAnQycsICAnXFx4ZTcnOiAnYycsXG4gICdcXHhkMCc6ICdEJywgICdcXHhmMCc6ICdkJyxcbiAgJ1xceGM4JzogJ0UnLCAgJ1xceGM5JzogJ0UnLCAnXFx4Y2EnOiAnRScsICdcXHhjYic6ICdFJyxcbiAgJ1xceGU4JzogJ2UnLCAgJ1xceGU5JzogJ2UnLCAnXFx4ZWEnOiAnZScsICdcXHhlYic6ICdlJyxcbiAgJ1xceGNDJzogJ0knLCAgJ1xceGNkJzogJ0knLCAnXFx4Y2UnOiAnSScsICdcXHhjZic6ICdJJyxcbiAgJ1xceGVDJzogJ2knLCAgJ1xceGVkJzogJ2knLCAnXFx4ZWUnOiAnaScsICdcXHhlZic6ICdpJyxcbiAgJ1xceGQxJzogJ04nLCAgJ1xceGYxJzogJ24nLFxuICAnXFx4ZDInOiAnTycsICAnXFx4ZDMnOiAnTycsICdcXHhkNCc6ICdPJywgJ1xceGQ1JzogJ08nLCAnXFx4ZDYnOiAnTycsICdcXHhkOCc6ICdPJyxcbiAgJ1xceGYyJzogJ28nLCAgJ1xceGYzJzogJ28nLCAnXFx4ZjQnOiAnbycsICdcXHhmNSc6ICdvJywgJ1xceGY2JzogJ28nLCAnXFx4ZjgnOiAnbycsXG4gICdcXHhkOSc6ICdVJywgICdcXHhkYSc6ICdVJywgJ1xceGRiJzogJ1UnLCAnXFx4ZGMnOiAnVScsXG4gICdcXHhmOSc6ICd1JywgICdcXHhmYSc6ICd1JywgJ1xceGZiJzogJ3UnLCAnXFx4ZmMnOiAndScsXG4gICdcXHhkZCc6ICdZJywgICdcXHhmZCc6ICd5JywgJ1xceGZmJzogJ3knLFxuICAnXFx4YzYnOiAnQWUnLCAnXFx4ZTYnOiAnYWUnLFxuICAnXFx4ZGUnOiAnVGgnLCAnXFx4ZmUnOiAndGgnLFxuICAnXFx4ZGYnOiAnc3MnXG59O1xuXG4vKipcbiAqIFVzZWQgYnkgYF8uZGVidXJyYCB0byBjb252ZXJ0IGxhdGluLTEgc3VwcGxlbWVudGFyeSBsZXR0ZXJzIHRvIGJhc2ljIGxhdGluIGxldHRlcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBsZXR0ZXIgVGhlIG1hdGNoZWQgbGV0dGVyIHRvIGRlYnVyci5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGRlYnVycmVkIGxldHRlci5cbiAqL1xuZnVuY3Rpb24gZGVidXJyTGV0dGVyKGxldHRlcikge1xuICByZXR1cm4gZGVidXJyZWRMZXR0ZXJzW2xldHRlcl07XG59XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKlxuICogVXNlZCB0byByZXNvbHZlIHRoZSBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIFN5bWJvbCA9IHJvb3QuU3ltYm9sO1xuXG4vKiogVXNlZCB0byBjb252ZXJ0IHN5bWJvbHMgdG8gcHJpbWl0aXZlcyBhbmQgc3RyaW5ncy4gKi9cbnZhciBzeW1ib2xQcm90byA9IFN5bWJvbCA/IFN5bWJvbC5wcm90b3R5cGUgOiB1bmRlZmluZWQsXG4gICAgc3ltYm9sVG9TdHJpbmcgPSBTeW1ib2wgPyBzeW1ib2xQcm90by50b1N0cmluZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBvYmplY3QtbGlrZS4gQSB2YWx1ZSBpcyBvYmplY3QtbGlrZSBpZiBpdCdzIG5vdCBgbnVsbGBcbiAqIGFuZCBoYXMgYSBgdHlwZW9mYCByZXN1bHQgb2YgXCJvYmplY3RcIi5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdExpa2Uoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdExpa2UoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc09iamVjdExpa2UobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdExpa2UodmFsdWUpIHtcbiAgcmV0dXJuICEhdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgU3ltYm9sYCBwcmltaXRpdmUgb3Igb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBjb3JyZWN0bHkgY2xhc3NpZmllZCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzU3ltYm9sKFN5bWJvbC5pdGVyYXRvcik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1N5bWJvbCgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdzeW1ib2wnIHx8XG4gICAgKGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgb2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT0gc3ltYm9sVGFnKTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIGlmIGl0J3Mgbm90IG9uZS4gQW4gZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkXG4gKiBmb3IgYG51bGxgIGFuZCBgdW5kZWZpbmVkYCB2YWx1ZXMuIFRoZSBzaWduIG9mIGAtMGAgaXMgcHJlc2VydmVkLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcHJvY2Vzcy5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHN0cmluZy5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50b1N0cmluZyhudWxsKTtcbiAqIC8vID0+ICcnXG4gKlxuICogXy50b1N0cmluZygtMCk7XG4gKiAvLyA9PiAnLTAnXG4gKlxuICogXy50b1N0cmluZyhbMSwgMiwgM10pO1xuICogLy8gPT4gJzEsMiwzJ1xuICovXG5mdW5jdGlvbiB0b1N0cmluZyh2YWx1ZSkge1xuICAvLyBFeGl0IGVhcmx5IGZvciBzdHJpbmdzIHRvIGF2b2lkIGEgcGVyZm9ybWFuY2UgaGl0IGluIHNvbWUgZW52aXJvbm1lbnRzLlxuICBpZiAodHlwZW9mIHZhbHVlID09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIGlmIChpc1N5bWJvbCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gU3ltYm9sID8gc3ltYm9sVG9TdHJpbmcuY2FsbCh2YWx1ZSkgOiAnJztcbiAgfVxuICB2YXIgcmVzdWx0ID0gKHZhbHVlICsgJycpO1xuICByZXR1cm4gKHJlc3VsdCA9PSAnMCcgJiYgKDEgLyB2YWx1ZSkgPT0gLUlORklOSVRZKSA/ICctMCcgOiByZXN1bHQ7XG59XG5cbi8qKlxuICogRGVidXJycyBgc3RyaW5nYCBieSBjb252ZXJ0aW5nIFtsYXRpbi0xIHN1cHBsZW1lbnRhcnkgbGV0dGVyc10oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTGF0aW4tMV9TdXBwbGVtZW50XyhVbmljb2RlX2Jsb2NrKSNDaGFyYWN0ZXJfdGFibGUpXG4gKiB0byBiYXNpYyBsYXRpbiBsZXR0ZXJzIGFuZCByZW1vdmluZyBbY29tYmluaW5nIGRpYWNyaXRpY2FsIG1hcmtzXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Db21iaW5pbmdfRGlhY3JpdGljYWxfTWFya3MpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgU3RyaW5nXG4gKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBkZWJ1cnIuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBkZWJ1cnJlZCBzdHJpbmcuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uZGVidXJyKCdkw6lqw6AgdnUnKTtcbiAqIC8vID0+ICdkZWphIHZ1J1xuICovXG5mdW5jdGlvbiBkZWJ1cnIoc3RyaW5nKSB7XG4gIHN0cmluZyA9IHRvU3RyaW5nKHN0cmluZyk7XG4gIHJldHVybiBzdHJpbmcgJiYgc3RyaW5nLnJlcGxhY2UocmVMYXRpbjEsIGRlYnVyckxldHRlcikucmVwbGFjZShyZUNvbWJvTWFyaywgJycpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGRlYnVycjtcbiIsIi8qKlxuICogbG9kYXNoIDMuMC4xIChDdXN0b20gQnVpbGQpIDxodHRwczovL2xvZGFzaC5jb20vPlxuICogQnVpbGQ6IGBsb2Rhc2ggbW9kdWxhcml6ZSBleHBvcnRzPVwibnBtXCIgLW8gLi9gXG4gKiBDb3B5cmlnaHQgMjAxMi0yMDE2IFRoZSBEb2pvIEZvdW5kYXRpb24gPGh0dHA6Ly9kb2pvZm91bmRhdGlvbi5vcmcvPlxuICogQmFzZWQgb24gVW5kZXJzY29yZS5qcyAxLjguMyA8aHR0cDovL3VuZGVyc2NvcmVqcy5vcmcvTElDRU5TRT5cbiAqIENvcHlyaWdodCAyMDA5LTIwMTYgSmVyZW15IEFzaGtlbmFzLCBEb2N1bWVudENsb3VkIGFuZCBJbnZlc3RpZ2F0aXZlIFJlcG9ydGVycyAmIEVkaXRvcnNcbiAqIEF2YWlsYWJsZSB1bmRlciBNSVQgbGljZW5zZSA8aHR0cHM6Ly9sb2Rhc2guY29tL2xpY2Vuc2U+XG4gKi9cblxuLyoqIFVzZWQgdG8gZGV0ZXJtaW5lIGlmIHZhbHVlcyBhcmUgb2YgdGhlIGxhbmd1YWdlIHR5cGUgYE9iamVjdGAuICovXG52YXIgb2JqZWN0VHlwZXMgPSB7XG4gICdmdW5jdGlvbic6IHRydWUsXG4gICdvYmplY3QnOiB0cnVlXG59O1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gKG9iamVjdFR5cGVzW3R5cGVvZiBleHBvcnRzXSAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlKVxuICA/IGV4cG9ydHNcbiAgOiB1bmRlZmluZWQ7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cbnZhciBmcmVlTW9kdWxlID0gKG9iamVjdFR5cGVzW3R5cGVvZiBtb2R1bGVdICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlKVxuICA/IG1vZHVsZVxuICA6IHVuZGVmaW5lZDtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBnbG9iYWxgIGZyb20gTm9kZS5qcy4gKi9cbnZhciBmcmVlR2xvYmFsID0gY2hlY2tHbG9iYWwoZnJlZUV4cG9ydHMgJiYgZnJlZU1vZHVsZSAmJiB0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCk7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgc2VsZmAuICovXG52YXIgZnJlZVNlbGYgPSBjaGVja0dsb2JhbChvYmplY3RUeXBlc1t0eXBlb2Ygc2VsZl0gJiYgc2VsZik7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgd2luZG93YC4gKi9cbnZhciBmcmVlV2luZG93ID0gY2hlY2tHbG9iYWwob2JqZWN0VHlwZXNbdHlwZW9mIHdpbmRvd10gJiYgd2luZG93KTtcblxuLyoqIERldGVjdCBgdGhpc2AgYXMgdGhlIGdsb2JhbCBvYmplY3QuICovXG52YXIgdGhpc0dsb2JhbCA9IGNoZWNrR2xvYmFsKG9iamVjdFR5cGVzW3R5cGVvZiB0aGlzXSAmJiB0aGlzKTtcblxuLyoqXG4gKiBVc2VkIGFzIGEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWwgb2JqZWN0LlxuICpcbiAqIFRoZSBgdGhpc2AgdmFsdWUgaXMgdXNlZCBpZiBpdCdzIHRoZSBnbG9iYWwgb2JqZWN0IHRvIGF2b2lkIEdyZWFzZW1vbmtleSdzXG4gKiByZXN0cmljdGVkIGB3aW5kb3dgIG9iamVjdCwgb3RoZXJ3aXNlIHRoZSBgd2luZG93YCBvYmplY3QgaXMgdXNlZC5cbiAqL1xudmFyIHJvb3QgPSBmcmVlR2xvYmFsIHx8XG4gICgoZnJlZVdpbmRvdyAhPT0gKHRoaXNHbG9iYWwgJiYgdGhpc0dsb2JhbC53aW5kb3cpKSAmJiBmcmVlV2luZG93KSB8fFxuICAgIGZyZWVTZWxmIHx8IHRoaXNHbG9iYWwgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIGdsb2JhbCBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge251bGx8T2JqZWN0fSBSZXR1cm5zIGB2YWx1ZWAgaWYgaXQncyBhIGdsb2JhbCBvYmplY3QsIGVsc2UgYG51bGxgLlxuICovXG5mdW5jdGlvbiBjaGVja0dsb2JhbCh2YWx1ZSkge1xuICByZXR1cm4gKHZhbHVlICYmIHZhbHVlLk9iamVjdCA9PT0gT2JqZWN0KSA/IHZhbHVlIDogbnVsbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSByb290O1xuIiwiLyoqXG4gKiBsb2Rhc2ggMy4yLjAgKEN1c3RvbSBCdWlsZCkgPGh0dHBzOi8vbG9kYXNoLmNvbS8+XG4gKiBCdWlsZDogYGxvZGFzaCBtb2R1bGFyaXplIGV4cG9ydHM9XCJucG1cIiAtbyAuL2BcbiAqIENvcHlyaWdodCAyMDEyLTIwMTYgVGhlIERvam8gRm91bmRhdGlvbiA8aHR0cDovL2Rvam9mb3VuZGF0aW9uLm9yZy8+XG4gKiBCYXNlZCBvbiBVbmRlcnNjb3JlLmpzIDEuOC4zIDxodHRwOi8vdW5kZXJzY29yZWpzLm9yZy9MSUNFTlNFPlxuICogQ29weXJpZ2h0IDIwMDktMjAxNiBKZXJlbXkgQXNoa2VuYXMsIERvY3VtZW50Q2xvdWQgYW5kIEludmVzdGlnYXRpdmUgUmVwb3J0ZXJzICYgRWRpdG9yc1xuICogQXZhaWxhYmxlIHVuZGVyIE1JVCBsaWNlbnNlIDxodHRwczovL2xvZGFzaC5jb20vbGljZW5zZT5cbiAqL1xudmFyIHJvb3QgPSByZXF1aXJlKCdsb2Rhc2guX3Jvb3QnKTtcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgSU5GSU5JVFkgPSAxIC8gMDtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIHN5bWJvbFRhZyA9ICdbb2JqZWN0IFN5bWJvbF0nO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIHVuaWNvZGUgY2hhcmFjdGVyIGNsYXNzZXMuICovXG52YXIgcnNBc3RyYWxSYW5nZSA9ICdcXFxcdWQ4MDAtXFxcXHVkZmZmJyxcbiAgICByc0NvbWJvTWFya3NSYW5nZSA9ICdcXFxcdTAzMDAtXFxcXHUwMzZmXFxcXHVmZTIwLVxcXFx1ZmUyMycsXG4gICAgcnNDb21ib1N5bWJvbHNSYW5nZSA9ICdcXFxcdTIwZDAtXFxcXHUyMGYwJyxcbiAgICByc0RpbmdiYXRSYW5nZSA9ICdcXFxcdTI3MDAtXFxcXHUyN2JmJyxcbiAgICByc0xvd2VyUmFuZ2UgPSAnYS16XFxcXHhkZi1cXFxceGY2XFxcXHhmOC1cXFxceGZmJyxcbiAgICByc01hdGhPcFJhbmdlID0gJ1xcXFx4YWNcXFxceGIxXFxcXHhkN1xcXFx4ZjcnLFxuICAgIHJzTm9uQ2hhclJhbmdlID0gJ1xcXFx4MDAtXFxcXHgyZlxcXFx4M2EtXFxcXHg0MFxcXFx4NWItXFxcXHg2MFxcXFx4N2ItXFxcXHhiZicsXG4gICAgcnNRdW90ZVJhbmdlID0gJ1xcXFx1MjAxOFxcXFx1MjAxOVxcXFx1MjAxY1xcXFx1MjAxZCcsXG4gICAgcnNTcGFjZVJhbmdlID0gJyBcXFxcdFxcXFx4MGJcXFxcZlxcXFx4YTBcXFxcdWZlZmZcXFxcblxcXFxyXFxcXHUyMDI4XFxcXHUyMDI5XFxcXHUxNjgwXFxcXHUxODBlXFxcXHUyMDAwXFxcXHUyMDAxXFxcXHUyMDAyXFxcXHUyMDAzXFxcXHUyMDA0XFxcXHUyMDA1XFxcXHUyMDA2XFxcXHUyMDA3XFxcXHUyMDA4XFxcXHUyMDA5XFxcXHUyMDBhXFxcXHUyMDJmXFxcXHUyMDVmXFxcXHUzMDAwJyxcbiAgICByc1VwcGVyUmFuZ2UgPSAnQS1aXFxcXHhjMC1cXFxceGQ2XFxcXHhkOC1cXFxceGRlJyxcbiAgICByc1ZhclJhbmdlID0gJ1xcXFx1ZmUwZVxcXFx1ZmUwZicsXG4gICAgcnNCcmVha1JhbmdlID0gcnNNYXRoT3BSYW5nZSArIHJzTm9uQ2hhclJhbmdlICsgcnNRdW90ZVJhbmdlICsgcnNTcGFjZVJhbmdlO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIHVuaWNvZGUgY2FwdHVyZSBncm91cHMuICovXG52YXIgcnNCcmVhayA9ICdbJyArIHJzQnJlYWtSYW5nZSArICddJyxcbiAgICByc0NvbWJvID0gJ1snICsgcnNDb21ib01hcmtzUmFuZ2UgKyByc0NvbWJvU3ltYm9sc1JhbmdlICsgJ10nLFxuICAgIHJzRGlnaXRzID0gJ1xcXFxkKycsXG4gICAgcnNEaW5nYmF0ID0gJ1snICsgcnNEaW5nYmF0UmFuZ2UgKyAnXScsXG4gICAgcnNMb3dlciA9ICdbJyArIHJzTG93ZXJSYW5nZSArICddJyxcbiAgICByc01pc2MgPSAnW14nICsgcnNBc3RyYWxSYW5nZSArIHJzQnJlYWtSYW5nZSArIHJzRGlnaXRzICsgcnNEaW5nYmF0UmFuZ2UgKyByc0xvd2VyUmFuZ2UgKyByc1VwcGVyUmFuZ2UgKyAnXScsXG4gICAgcnNGaXR6ID0gJ1xcXFx1ZDgzY1tcXFxcdWRmZmItXFxcXHVkZmZmXScsXG4gICAgcnNNb2RpZmllciA9ICcoPzonICsgcnNDb21ibyArICd8JyArIHJzRml0eiArICcpJyxcbiAgICByc05vbkFzdHJhbCA9ICdbXicgKyByc0FzdHJhbFJhbmdlICsgJ10nLFxuICAgIHJzUmVnaW9uYWwgPSAnKD86XFxcXHVkODNjW1xcXFx1ZGRlNi1cXFxcdWRkZmZdKXsyfScsXG4gICAgcnNTdXJyUGFpciA9ICdbXFxcXHVkODAwLVxcXFx1ZGJmZl1bXFxcXHVkYzAwLVxcXFx1ZGZmZl0nLFxuICAgIHJzVXBwZXIgPSAnWycgKyByc1VwcGVyUmFuZ2UgKyAnXScsXG4gICAgcnNaV0ogPSAnXFxcXHUyMDBkJztcblxuLyoqIFVzZWQgdG8gY29tcG9zZSB1bmljb2RlIHJlZ2V4ZXMuICovXG52YXIgcnNMb3dlck1pc2MgPSAnKD86JyArIHJzTG93ZXIgKyAnfCcgKyByc01pc2MgKyAnKScsXG4gICAgcnNVcHBlck1pc2MgPSAnKD86JyArIHJzVXBwZXIgKyAnfCcgKyByc01pc2MgKyAnKScsXG4gICAgcmVPcHRNb2QgPSByc01vZGlmaWVyICsgJz8nLFxuICAgIHJzT3B0VmFyID0gJ1snICsgcnNWYXJSYW5nZSArICddPycsXG4gICAgcnNPcHRKb2luID0gJyg/OicgKyByc1pXSiArICcoPzonICsgW3JzTm9uQXN0cmFsLCByc1JlZ2lvbmFsLCByc1N1cnJQYWlyXS5qb2luKCd8JykgKyAnKScgKyByc09wdFZhciArIHJlT3B0TW9kICsgJykqJyxcbiAgICByc1NlcSA9IHJzT3B0VmFyICsgcmVPcHRNb2QgKyByc09wdEpvaW4sXG4gICAgcnNFbW9qaSA9ICcoPzonICsgW3JzRGluZ2JhdCwgcnNSZWdpb25hbCwgcnNTdXJyUGFpcl0uam9pbignfCcpICsgJyknICsgcnNTZXE7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIG5vbi1jb21wb3VuZCB3b3JkcyBjb21wb3NlZCBvZiBhbHBoYW51bWVyaWMgY2hhcmFjdGVycy4gKi9cbnZhciByZUJhc2ljV29yZCA9IC9bYS16QS1aMC05XSsvZztcblxuLyoqIFVzZWQgdG8gbWF0Y2ggY29tcGxleCBvciBjb21wb3VuZCB3b3Jkcy4gKi9cbnZhciByZUNvbXBsZXhXb3JkID0gUmVnRXhwKFtcbiAgcnNVcHBlciArICc/JyArIHJzTG93ZXIgKyAnKyg/PScgKyBbcnNCcmVhaywgcnNVcHBlciwgJyQnXS5qb2luKCd8JykgKyAnKScsXG4gIHJzVXBwZXJNaXNjICsgJysoPz0nICsgW3JzQnJlYWssIHJzVXBwZXIgKyByc0xvd2VyTWlzYywgJyQnXS5qb2luKCd8JykgKyAnKScsXG4gIHJzVXBwZXIgKyAnPycgKyByc0xvd2VyTWlzYyArICcrJyxcbiAgcnNVcHBlciArICcrJyxcbiAgcnNEaWdpdHMsXG4gIHJzRW1vamlcbl0uam9pbignfCcpLCAnZycpO1xuXG4vKiogVXNlZCB0byBkZXRlY3Qgc3RyaW5ncyB0aGF0IG5lZWQgYSBtb3JlIHJvYnVzdCByZWdleHAgdG8gbWF0Y2ggd29yZHMuICovXG52YXIgcmVIYXNDb21wbGV4V29yZCA9IC9bYS16XVtBLVpdfFswLTldW2EtekEtWl18W2EtekEtWl1bMC05XXxbXmEtekEtWjAtOSBdLztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxuICogb2YgdmFsdWVzLlxuICovXG52YXIgb2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgU3ltYm9sID0gcm9vdC5TeW1ib2w7XG5cbi8qKiBVc2VkIHRvIGNvbnZlcnQgc3ltYm9scyB0byBwcmltaXRpdmVzIGFuZCBzdHJpbmdzLiAqL1xudmFyIHN5bWJvbFByb3RvID0gU3ltYm9sID8gU3ltYm9sLnByb3RvdHlwZSA6IHVuZGVmaW5lZCxcbiAgICBzeW1ib2xUb1N0cmluZyA9IFN5bWJvbCA/IHN5bWJvbFByb3RvLnRvU3RyaW5nIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLiBBIHZhbHVlIGlzIG9iamVjdC1saWtlIGlmIGl0J3Mgbm90IGBudWxsYFxuICogYW5kIGhhcyBhIGB0eXBlb2ZgIHJlc3VsdCBvZiBcIm9iamVjdFwiLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBvYmplY3QtbGlrZSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZSh7fSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdExpa2UoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShudWxsKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0TGlrZSh2YWx1ZSkge1xuICByZXR1cm4gISF2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT0gJ29iamVjdCc7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBTeW1ib2xgIHByaW1pdGl2ZSBvciBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGNvcnJlY3RseSBjbGFzc2lmaWVkLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNTeW1ib2woU3ltYm9sLml0ZXJhdG9yKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzU3ltYm9sKCdhYmMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzU3ltYm9sKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ3N5bWJvbCcgfHxcbiAgICAoaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBvYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKSA9PSBzeW1ib2xUYWcpO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBzdHJpbmcgaWYgaXQncyBub3Qgb25lLiBBbiBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWRcbiAqIGZvciBgbnVsbGAgYW5kIGB1bmRlZmluZWRgIHZhbHVlcy4gVGhlIHNpZ24gb2YgYC0wYCBpcyBwcmVzZXJ2ZWQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwcm9jZXNzLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc3RyaW5nLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRvU3RyaW5nKG51bGwpO1xuICogLy8gPT4gJydcbiAqXG4gKiBfLnRvU3RyaW5nKC0wKTtcbiAqIC8vID0+ICctMCdcbiAqXG4gKiBfLnRvU3RyaW5nKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiAnMSwyLDMnXG4gKi9cbmZ1bmN0aW9uIHRvU3RyaW5nKHZhbHVlKSB7XG4gIC8vIEV4aXQgZWFybHkgZm9yIHN0cmluZ3MgdG8gYXZvaWQgYSBwZXJmb3JtYW5jZSBoaXQgaW4gc29tZSBlbnZpcm9ubWVudHMuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgaWYgKGlzU3ltYm9sKHZhbHVlKSkge1xuICAgIHJldHVybiBTeW1ib2wgPyBzeW1ib2xUb1N0cmluZy5jYWxsKHZhbHVlKSA6ICcnO1xuICB9XG4gIHZhciByZXN1bHQgPSAodmFsdWUgKyAnJyk7XG4gIHJldHVybiAocmVzdWx0ID09ICcwJyAmJiAoMSAvIHZhbHVlKSA9PSAtSU5GSU5JVFkpID8gJy0wJyA6IHJlc3VsdDtcbn1cblxuLyoqXG4gKiBTcGxpdHMgYHN0cmluZ2AgaW50byBhbiBhcnJheSBvZiBpdHMgd29yZHMuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBTdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge1JlZ0V4cHxzdHJpbmd9IFtwYXR0ZXJuXSBUaGUgcGF0dGVybiB0byBtYXRjaCB3b3Jkcy5cbiAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgZnVuY3Rpb25zIGxpa2UgYF8ubWFwYC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgd29yZHMgb2YgYHN0cmluZ2AuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8ud29yZHMoJ2ZyZWQsIGJhcm5leSwgJiBwZWJibGVzJyk7XG4gKiAvLyA9PiBbJ2ZyZWQnLCAnYmFybmV5JywgJ3BlYmJsZXMnXVxuICpcbiAqIF8ud29yZHMoJ2ZyZWQsIGJhcm5leSwgJiBwZWJibGVzJywgL1teLCBdKy9nKTtcbiAqIC8vID0+IFsnZnJlZCcsICdiYXJuZXknLCAnJicsICdwZWJibGVzJ11cbiAqL1xuZnVuY3Rpb24gd29yZHMoc3RyaW5nLCBwYXR0ZXJuLCBndWFyZCkge1xuICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuICBwYXR0ZXJuID0gZ3VhcmQgPyB1bmRlZmluZWQgOiBwYXR0ZXJuO1xuXG4gIGlmIChwYXR0ZXJuID09PSB1bmRlZmluZWQpIHtcbiAgICBwYXR0ZXJuID0gcmVIYXNDb21wbGV4V29yZC50ZXN0KHN0cmluZykgPyByZUNvbXBsZXhXb3JkIDogcmVCYXNpY1dvcmQ7XG4gIH1cbiAgcmV0dXJuIHN0cmluZy5tYXRjaChwYXR0ZXJuKSB8fCBbXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB3b3JkcztcbiIsIi8qKlxuICogbG9kYXNoIDMuMC4xIChDdXN0b20gQnVpbGQpIDxodHRwczovL2xvZGFzaC5jb20vPlxuICogQnVpbGQ6IGBsb2Rhc2ggbW9kdWxhcml6ZSBleHBvcnRzPVwibnBtXCIgLW8gLi9gXG4gKiBDb3B5cmlnaHQgMjAxMi0yMDE2IFRoZSBEb2pvIEZvdW5kYXRpb24gPGh0dHA6Ly9kb2pvZm91bmRhdGlvbi5vcmcvPlxuICogQmFzZWQgb24gVW5kZXJzY29yZS5qcyAxLjguMyA8aHR0cDovL3VuZGVyc2NvcmVqcy5vcmcvTElDRU5TRT5cbiAqIENvcHlyaWdodCAyMDA5LTIwMTYgSmVyZW15IEFzaGtlbmFzLCBEb2N1bWVudENsb3VkIGFuZCBJbnZlc3RpZ2F0aXZlIFJlcG9ydGVycyAmIEVkaXRvcnNcbiAqIEF2YWlsYWJsZSB1bmRlciBNSVQgbGljZW5zZSA8aHR0cHM6Ly9sb2Rhc2guY29tL2xpY2Vuc2U+XG4gKi9cblxuLyoqIFVzZWQgdG8gZGV0ZXJtaW5lIGlmIHZhbHVlcyBhcmUgb2YgdGhlIGxhbmd1YWdlIHR5cGUgYE9iamVjdGAuICovXG52YXIgb2JqZWN0VHlwZXMgPSB7XG4gICdmdW5jdGlvbic6IHRydWUsXG4gICdvYmplY3QnOiB0cnVlXG59O1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gKG9iamVjdFR5cGVzW3R5cGVvZiBleHBvcnRzXSAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlKVxuICA/IGV4cG9ydHNcbiAgOiB1bmRlZmluZWQ7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cbnZhciBmcmVlTW9kdWxlID0gKG9iamVjdFR5cGVzW3R5cGVvZiBtb2R1bGVdICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlKVxuICA/IG1vZHVsZVxuICA6IHVuZGVmaW5lZDtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBnbG9iYWxgIGZyb20gTm9kZS5qcy4gKi9cbnZhciBmcmVlR2xvYmFsID0gY2hlY2tHbG9iYWwoZnJlZUV4cG9ydHMgJiYgZnJlZU1vZHVsZSAmJiB0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCk7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgc2VsZmAuICovXG52YXIgZnJlZVNlbGYgPSBjaGVja0dsb2JhbChvYmplY3RUeXBlc1t0eXBlb2Ygc2VsZl0gJiYgc2VsZik7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgd2luZG93YC4gKi9cbnZhciBmcmVlV2luZG93ID0gY2hlY2tHbG9iYWwob2JqZWN0VHlwZXNbdHlwZW9mIHdpbmRvd10gJiYgd2luZG93KTtcblxuLyoqIERldGVjdCBgdGhpc2AgYXMgdGhlIGdsb2JhbCBvYmplY3QuICovXG52YXIgdGhpc0dsb2JhbCA9IGNoZWNrR2xvYmFsKG9iamVjdFR5cGVzW3R5cGVvZiB0aGlzXSAmJiB0aGlzKTtcblxuLyoqXG4gKiBVc2VkIGFzIGEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWwgb2JqZWN0LlxuICpcbiAqIFRoZSBgdGhpc2AgdmFsdWUgaXMgdXNlZCBpZiBpdCdzIHRoZSBnbG9iYWwgb2JqZWN0IHRvIGF2b2lkIEdyZWFzZW1vbmtleSdzXG4gKiByZXN0cmljdGVkIGB3aW5kb3dgIG9iamVjdCwgb3RoZXJ3aXNlIHRoZSBgd2luZG93YCBvYmplY3QgaXMgdXNlZC5cbiAqL1xudmFyIHJvb3QgPSBmcmVlR2xvYmFsIHx8XG4gICgoZnJlZVdpbmRvdyAhPT0gKHRoaXNHbG9iYWwgJiYgdGhpc0dsb2JhbC53aW5kb3cpKSAmJiBmcmVlV2luZG93KSB8fFxuICAgIGZyZWVTZWxmIHx8IHRoaXNHbG9iYWwgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIGdsb2JhbCBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge251bGx8T2JqZWN0fSBSZXR1cm5zIGB2YWx1ZWAgaWYgaXQncyBhIGdsb2JhbCBvYmplY3QsIGVsc2UgYG51bGxgLlxuICovXG5mdW5jdGlvbiBjaGVja0dsb2JhbCh2YWx1ZSkge1xuICByZXR1cm4gKHZhbHVlICYmIHZhbHVlLk9iamVjdCA9PT0gT2JqZWN0KSA/IHZhbHVlIDogbnVsbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSByb290O1xuIiwiLyoqXG4gKiBsb2Rhc2ggMy4xLjAgKEN1c3RvbSBCdWlsZCkgPGh0dHBzOi8vbG9kYXNoLmNvbS8+XG4gKiBCdWlsZDogYGxvZGFzaCBtb2Rlcm4gbW9kdWxhcml6ZSBleHBvcnRzPVwibnBtXCIgLW8gLi9gXG4gKiBDb3B5cmlnaHQgMjAxMi0yMDE1IFRoZSBEb2pvIEZvdW5kYXRpb24gPGh0dHA6Ly9kb2pvZm91bmRhdGlvbi5vcmcvPlxuICogQmFzZWQgb24gVW5kZXJzY29yZS5qcyAxLjguMiA8aHR0cDovL3VuZGVyc2NvcmVqcy5vcmcvTElDRU5TRT5cbiAqIENvcHlyaWdodCAyMDA5LTIwMTUgSmVyZW15IEFzaGtlbmFzLCBEb2N1bWVudENsb3VkIGFuZCBJbnZlc3RpZ2F0aXZlIFJlcG9ydGVycyAmIEVkaXRvcnNcbiAqIEF2YWlsYWJsZSB1bmRlciBNSVQgbGljZW5zZSA8aHR0cHM6Ly9sb2Rhc2guY29tL2xpY2Vuc2U+XG4gKi9cbnZhciBiYXNlRmxhdHRlbiA9IHJlcXVpcmUoJ2xvZGFzaC5fYmFzZWZsYXR0ZW4nKSxcbiAgICBiYXNlVW5pcSA9IHJlcXVpcmUoJ2xvZGFzaC5fYmFzZXVuaXEnKSxcbiAgICByZXN0UGFyYW0gPSByZXF1aXJlKCdsb2Rhc2gucmVzdHBhcmFtJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB1bmlxdWUgdmFsdWVzLCBpbiBvcmRlciwgb2YgdGhlIHByb3ZpZGVkIGFycmF5cyB1c2luZ1xuICogYFNhbWVWYWx1ZVplcm9gIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucy5cbiAqXG4gKiAqKk5vdGU6KiogW2BTYW1lVmFsdWVaZXJvYF0oaHR0cHM6Ly9wZW9wbGUubW96aWxsYS5vcmcvfmpvcmVuZG9yZmYvZXM2LWRyYWZ0Lmh0bWwjc2VjLXNhbWV2YWx1ZXplcm8pXG4gKiBjb21wYXJpc29ucyBhcmUgbGlrZSBzdHJpY3QgZXF1YWxpdHkgY29tcGFyaXNvbnMsIGUuZy4gYD09PWAsIGV4Y2VwdCB0aGF0XG4gKiBgTmFOYCBtYXRjaGVzIGBOYU5gLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7Li4uQXJyYXl9IFthcnJheXNdIFRoZSBhcnJheXMgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGNvbWJpbmVkIHZhbHVlcy5cbiAqIEBleGFtcGxlXG4gKlxuICogXy51bmlvbihbMSwgMl0sIFs0LCAyXSwgWzIsIDFdKTtcbiAqIC8vID0+IFsxLCAyLCA0XVxuICovXG52YXIgdW5pb24gPSByZXN0UGFyYW0oZnVuY3Rpb24oYXJyYXlzKSB7XG4gIHJldHVybiBiYXNlVW5pcShiYXNlRmxhdHRlbihhcnJheXMsIGZhbHNlLCB0cnVlKSk7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSB1bmlvbjtcbiIsIi8qKlxuICogbG9kYXNoIDMuMS40IChDdXN0b20gQnVpbGQpIDxodHRwczovL2xvZGFzaC5jb20vPlxuICogQnVpbGQ6IGBsb2Rhc2ggbW9kZXJuIG1vZHVsYXJpemUgZXhwb3J0cz1cIm5wbVwiIC1vIC4vYFxuICogQ29weXJpZ2h0IDIwMTItMjAxNSBUaGUgRG9qbyBGb3VuZGF0aW9uIDxodHRwOi8vZG9qb2ZvdW5kYXRpb24ub3JnLz5cbiAqIEJhc2VkIG9uIFVuZGVyc2NvcmUuanMgMS44LjMgPGh0dHA6Ly91bmRlcnNjb3JlanMub3JnL0xJQ0VOU0U+XG4gKiBDb3B5cmlnaHQgMjAwOS0yMDE1IEplcmVteSBBc2hrZW5hcywgRG9jdW1lbnRDbG91ZCBhbmQgSW52ZXN0aWdhdGl2ZSBSZXBvcnRlcnMgJiBFZGl0b3JzXG4gKiBBdmFpbGFibGUgdW5kZXIgTUlUIGxpY2Vuc2UgPGh0dHBzOi8vbG9kYXNoLmNvbS9saWNlbnNlPlxuICovXG52YXIgaXNBcmd1bWVudHMgPSByZXF1aXJlKCdsb2Rhc2guaXNhcmd1bWVudHMnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnbG9kYXNoLmlzYXJyYXknKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBvYmplY3QtbGlrZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBvYmplY3QtbGlrZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc09iamVjdExpa2UodmFsdWUpIHtcbiAgcmV0dXJuICEhdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnO1xufVxuXG4vKipcbiAqIFVzZWQgYXMgdGhlIFttYXhpbXVtIGxlbmd0aF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtbnVtYmVyLm1heF9zYWZlX2ludGVnZXIpXG4gKiBvZiBhbiBhcnJheS1saWtlIHZhbHVlLlxuICovXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XG5cbi8qKlxuICogQXBwZW5kcyB0aGUgZWxlbWVudHMgb2YgYHZhbHVlc2AgdG8gYGFycmF5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBUaGUgdmFsdWVzIHRvIGFwcGVuZC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICovXG5mdW5jdGlvbiBhcnJheVB1c2goYXJyYXksIHZhbHVlcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHZhbHVlcy5sZW5ndGgsXG4gICAgICBvZmZzZXQgPSBhcnJheS5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBhcnJheVtvZmZzZXQgKyBpbmRleF0gPSB2YWx1ZXNbaW5kZXhdO1xuICB9XG4gIHJldHVybiBhcnJheTtcbn1cblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5mbGF0dGVuYCB3aXRoIGFkZGVkIHN1cHBvcnQgZm9yIHJlc3RyaWN0aW5nXG4gKiBmbGF0dGVuaW5nIGFuZCBzcGVjaWZ5aW5nIHRoZSBzdGFydCBpbmRleC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGZsYXR0ZW4uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtpc0RlZXBdIFNwZWNpZnkgYSBkZWVwIGZsYXR0ZW4uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtpc1N0cmljdF0gUmVzdHJpY3QgZmxhdHRlbmluZyB0byBhcnJheXMtbGlrZSBvYmplY3RzLlxuICogQHBhcmFtIHtBcnJheX0gW3Jlc3VsdD1bXV0gVGhlIGluaXRpYWwgcmVzdWx0IHZhbHVlLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmxhdHRlbmVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBiYXNlRmxhdHRlbihhcnJheSwgaXNEZWVwLCBpc1N0cmljdCwgcmVzdWx0KSB7XG4gIHJlc3VsdCB8fCAocmVzdWx0ID0gW10pO1xuXG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdO1xuICAgIGlmIChpc09iamVjdExpa2UodmFsdWUpICYmIGlzQXJyYXlMaWtlKHZhbHVlKSAmJlxuICAgICAgICAoaXNTdHJpY3QgfHwgaXNBcnJheSh2YWx1ZSkgfHwgaXNBcmd1bWVudHModmFsdWUpKSkge1xuICAgICAgaWYgKGlzRGVlcCkge1xuICAgICAgICAvLyBSZWN1cnNpdmVseSBmbGF0dGVuIGFycmF5cyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgICAgICBiYXNlRmxhdHRlbih2YWx1ZSwgaXNEZWVwLCBpc1N0cmljdCwgcmVzdWx0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFycmF5UHVzaChyZXN1bHQsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFpc1N0cmljdCkge1xuICAgICAgcmVzdWx0W3Jlc3VsdC5sZW5ndGhdID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ucHJvcGVydHlgIHdpdGhvdXQgc3VwcG9ydCBmb3IgZGVlcCBwYXRocy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZVByb3BlcnR5KGtleSkge1xuICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogb2JqZWN0W2tleV07XG4gIH07XG59XG5cbi8qKlxuICogR2V0cyB0aGUgXCJsZW5ndGhcIiBwcm9wZXJ0eSB2YWx1ZSBvZiBgb2JqZWN0YC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGF2b2lkIGEgW0pJVCBidWddKGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDI3OTIpXG4gKiB0aGF0IGFmZmVjdHMgU2FmYXJpIG9uIGF0IGxlYXN0IGlPUyA4LjEtOC4zIEFSTTY0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgXCJsZW5ndGhcIiB2YWx1ZS5cbiAqL1xudmFyIGdldExlbmd0aCA9IGJhc2VQcm9wZXJ0eSgnbGVuZ3RoJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYXJyYXktbGlrZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhcnJheS1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlMaWtlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIGlzTGVuZ3RoKGdldExlbmd0aCh2YWx1ZSkpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgYXJyYXktbGlrZSBsZW5ndGguXG4gKlxuICogKipOb3RlOioqIFRoaXMgZnVuY3Rpb24gaXMgYmFzZWQgb24gW2BUb0xlbmd0aGBdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXRvbGVuZ3RoKS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGxlbmd0aCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0xlbmd0aCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdudW1iZXInICYmIHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPD0gTUFYX1NBRkVfSU5URUdFUjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlRmxhdHRlbjtcbiIsIi8qKlxuICogbG9kYXNoIDMuMC4zIChDdXN0b20gQnVpbGQpIDxodHRwczovL2xvZGFzaC5jb20vPlxuICogQnVpbGQ6IGBsb2Rhc2ggbW9kZXJuIG1vZHVsYXJpemUgZXhwb3J0cz1cIm5wbVwiIC1vIC4vYFxuICogQ29weXJpZ2h0IDIwMTItMjAxNSBUaGUgRG9qbyBGb3VuZGF0aW9uIDxodHRwOi8vZG9qb2ZvdW5kYXRpb24ub3JnLz5cbiAqIEJhc2VkIG9uIFVuZGVyc2NvcmUuanMgMS44LjMgPGh0dHA6Ly91bmRlcnNjb3JlanMub3JnL0xJQ0VOU0U+XG4gKiBDb3B5cmlnaHQgMjAwOS0yMDE1IEplcmVteSBBc2hrZW5hcywgRG9jdW1lbnRDbG91ZCBhbmQgSW52ZXN0aWdhdGl2ZSBSZXBvcnRlcnMgJiBFZGl0b3JzXG4gKiBBdmFpbGFibGUgdW5kZXIgTUlUIGxpY2Vuc2UgPGh0dHBzOi8vbG9kYXNoLmNvbS9saWNlbnNlPlxuICovXG52YXIgYmFzZUluZGV4T2YgPSByZXF1aXJlKCdsb2Rhc2guX2Jhc2VpbmRleG9mJyksXG4gICAgY2FjaGVJbmRleE9mID0gcmVxdWlyZSgnbG9kYXNoLl9jYWNoZWluZGV4b2YnKSxcbiAgICBjcmVhdGVDYWNoZSA9IHJlcXVpcmUoJ2xvZGFzaC5fY3JlYXRlY2FjaGUnKTtcblxuLyoqIFVzZWQgYXMgdGhlIHNpemUgdG8gZW5hYmxlIGxhcmdlIGFycmF5IG9wdGltaXphdGlvbnMuICovXG52YXIgTEFSR0VfQVJSQVlfU0laRSA9IDIwMDtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy51bmlxYCB3aXRob3V0IHN1cHBvcnQgZm9yIGNhbGxiYWNrIHNob3J0aGFuZHNcbiAqIGFuZCBgdGhpc2AgYmluZGluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWVdIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBkdXBsaWNhdGUtdmFsdWUtZnJlZSBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYmFzZVVuaXEoYXJyYXksIGl0ZXJhdGVlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgaW5kZXhPZiA9IGJhc2VJbmRleE9mLFxuICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgaXNDb21tb24gPSB0cnVlLFxuICAgICAgaXNMYXJnZSA9IGlzQ29tbW9uICYmIGxlbmd0aCA+PSBMQVJHRV9BUlJBWV9TSVpFLFxuICAgICAgc2VlbiA9IGlzTGFyZ2UgPyBjcmVhdGVDYWNoZSgpIDogbnVsbCxcbiAgICAgIHJlc3VsdCA9IFtdO1xuXG4gIGlmIChzZWVuKSB7XG4gICAgaW5kZXhPZiA9IGNhY2hlSW5kZXhPZjtcbiAgICBpc0NvbW1vbiA9IGZhbHNlO1xuICB9IGVsc2Uge1xuICAgIGlzTGFyZ2UgPSBmYWxzZTtcbiAgICBzZWVuID0gaXRlcmF0ZWUgPyBbXSA6IHJlc3VsdDtcbiAgfVxuICBvdXRlcjpcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF0sXG4gICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUgPyBpdGVyYXRlZSh2YWx1ZSwgaW5kZXgsIGFycmF5KSA6IHZhbHVlO1xuXG4gICAgaWYgKGlzQ29tbW9uICYmIHZhbHVlID09PSB2YWx1ZSkge1xuICAgICAgdmFyIHNlZW5JbmRleCA9IHNlZW4ubGVuZ3RoO1xuICAgICAgd2hpbGUgKHNlZW5JbmRleC0tKSB7XG4gICAgICAgIGlmIChzZWVuW3NlZW5JbmRleF0gPT09IGNvbXB1dGVkKSB7XG4gICAgICAgICAgY29udGludWUgb3V0ZXI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChpdGVyYXRlZSkge1xuICAgICAgICBzZWVuLnB1c2goY29tcHV0ZWQpO1xuICAgICAgfVxuICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgIH1cbiAgICBlbHNlIGlmIChpbmRleE9mKHNlZW4sIGNvbXB1dGVkLCAwKSA8IDApIHtcbiAgICAgIGlmIChpdGVyYXRlZSB8fCBpc0xhcmdlKSB7XG4gICAgICAgIHNlZW4ucHVzaChjb21wdXRlZCk7XG4gICAgICB9XG4gICAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVVuaXE7XG4iLCIvKipcbiAqIGxvZGFzaCAzLjEuMCAoQ3VzdG9tIEJ1aWxkKSA8aHR0cHM6Ly9sb2Rhc2guY29tLz5cbiAqIEJ1aWxkOiBgbG9kYXNoIG1vZGVybiBtb2R1bGFyaXplIGV4cG9ydHM9XCJucG1cIiAtbyAuL2BcbiAqIENvcHlyaWdodCAyMDEyLTIwMTUgVGhlIERvam8gRm91bmRhdGlvbiA8aHR0cDovL2Rvam9mb3VuZGF0aW9uLm9yZy8+XG4gKiBCYXNlZCBvbiBVbmRlcnNjb3JlLmpzIDEuOC4yIDxodHRwOi8vdW5kZXJzY29yZWpzLm9yZy9MSUNFTlNFPlxuICogQ29weXJpZ2h0IDIwMDktMjAxNSBKZXJlbXkgQXNoa2VuYXMsIERvY3VtZW50Q2xvdWQgYW5kIEludmVzdGlnYXRpdmUgUmVwb3J0ZXJzICYgRWRpdG9yc1xuICogQXZhaWxhYmxlIHVuZGVyIE1JVCBsaWNlbnNlIDxodHRwczovL2xvZGFzaC5jb20vbGljZW5zZT5cbiAqL1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmluZGV4T2ZgIHdpdGhvdXQgc3VwcG9ydCBmb3IgYmluYXJ5IHNlYXJjaGVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gc2VhcmNoLlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tSW5kZXggVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUluZGV4T2YoYXJyYXksIHZhbHVlLCBmcm9tSW5kZXgpIHtcbiAgaWYgKHZhbHVlICE9PSB2YWx1ZSkge1xuICAgIHJldHVybiBpbmRleE9mTmFOKGFycmF5LCBmcm9tSW5kZXgpO1xuICB9XG4gIHZhciBpbmRleCA9IGZyb21JbmRleCAtIDEsXG4gICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBpZiAoYXJyYXlbaW5kZXhdID09PSB2YWx1ZSkge1xuICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cbiAgfVxuICByZXR1cm4gLTE7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgaW5kZXggYXQgd2hpY2ggdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgYE5hTmAgaXMgZm91bmQgaW4gYGFycmF5YC5cbiAqIElmIGBmcm9tUmlnaHRgIGlzIHByb3ZpZGVkIGVsZW1lbnRzIG9mIGBhcnJheWAgYXJlIGl0ZXJhdGVkIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHNlYXJjaC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tSW5kZXggVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICogQHBhcmFtIHtib29sZWFufSBbZnJvbVJpZ2h0XSBTcGVjaWZ5IGl0ZXJhdGluZyBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCBgTmFOYCwgZWxzZSBgLTFgLlxuICovXG5mdW5jdGlvbiBpbmRleE9mTmFOKGFycmF5LCBmcm9tSW5kZXgsIGZyb21SaWdodCkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgaW5kZXggPSBmcm9tSW5kZXggKyAoZnJvbVJpZ2h0ID8gMCA6IC0xKTtcblxuICB3aGlsZSAoKGZyb21SaWdodCA/IGluZGV4LS0gOiArK2luZGV4IDwgbGVuZ3RoKSkge1xuICAgIHZhciBvdGhlciA9IGFycmF5W2luZGV4XTtcbiAgICBpZiAob3RoZXIgIT09IG90aGVyKSB7XG4gICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSW5kZXhPZjtcbiIsIi8qKlxuICogbG9kYXNoIDMuMC4yIChDdXN0b20gQnVpbGQpIDxodHRwczovL2xvZGFzaC5jb20vPlxuICogQnVpbGQ6IGBsb2Rhc2ggbW9kZXJuIG1vZHVsYXJpemUgZXhwb3J0cz1cIm5wbVwiIC1vIC4vYFxuICogQ29weXJpZ2h0IDIwMTItMjAxNSBUaGUgRG9qbyBGb3VuZGF0aW9uIDxodHRwOi8vZG9qb2ZvdW5kYXRpb24ub3JnLz5cbiAqIEJhc2VkIG9uIFVuZGVyc2NvcmUuanMgMS44LjMgPGh0dHA6Ly91bmRlcnNjb3JlanMub3JnL0xJQ0VOU0U+XG4gKiBDb3B5cmlnaHQgMjAwOS0yMDE1IEplcmVteSBBc2hrZW5hcywgRG9jdW1lbnRDbG91ZCBhbmQgSW52ZXN0aWdhdGl2ZSBSZXBvcnRlcnMgJiBFZGl0b3JzXG4gKiBBdmFpbGFibGUgdW5kZXIgTUlUIGxpY2Vuc2UgPGh0dHBzOi8vbG9kYXNoLmNvbS9saWNlbnNlPlxuICovXG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgaW4gYGNhY2hlYCBtaW1pY2tpbmcgdGhlIHJldHVybiBzaWduYXR1cmUgb2ZcbiAqIGBfLmluZGV4T2ZgIGJ5IHJldHVybmluZyBgMGAgaWYgdGhlIHZhbHVlIGlzIGZvdW5kLCBlbHNlIGAtMWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBjYWNoZSBUaGUgY2FjaGUgdG8gc2VhcmNoLlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgYDBgIGlmIGB2YWx1ZWAgaXMgZm91bmQsIGVsc2UgYC0xYC5cbiAqL1xuZnVuY3Rpb24gY2FjaGVJbmRleE9mKGNhY2hlLCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IGNhY2hlLmRhdGEsXG4gICAgICByZXN1bHQgPSAodHlwZW9mIHZhbHVlID09ICdzdHJpbmcnIHx8IGlzT2JqZWN0KHZhbHVlKSkgPyBkYXRhLnNldC5oYXModmFsdWUpIDogZGF0YS5oYXNoW3ZhbHVlXTtcblxuICByZXR1cm4gcmVzdWx0ID8gMCA6IC0xO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHRoZSBbbGFuZ3VhZ2UgdHlwZV0oaHR0cHM6Ly9lczUuZ2l0aHViLmlvLyN4OCkgb2YgYE9iamVjdGAuXG4gKiAoZS5nLiBhcnJheXMsIGZ1bmN0aW9ucywgb2JqZWN0cywgcmVnZXhlcywgYG5ldyBOdW1iZXIoMClgLCBhbmQgYG5ldyBTdHJpbmcoJycpYClcbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3Qoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KDEpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgLy8gQXZvaWQgYSBWOCBKSVQgYnVnIGluIENocm9tZSAxOS0yMC5cbiAgLy8gU2VlIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0yMjkxIGZvciBtb3JlIGRldGFpbHMuXG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICByZXR1cm4gISF2YWx1ZSAmJiAodHlwZSA9PSAnb2JqZWN0JyB8fCB0eXBlID09ICdmdW5jdGlvbicpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNhY2hlSW5kZXhPZjtcbiIsIi8qKlxuICogbG9kYXNoIDMuMS4yIChDdXN0b20gQnVpbGQpIDxodHRwczovL2xvZGFzaC5jb20vPlxuICogQnVpbGQ6IGBsb2Rhc2ggbW9kZXJuIG1vZHVsYXJpemUgZXhwb3J0cz1cIm5wbVwiIC1vIC4vYFxuICogQ29weXJpZ2h0IDIwMTItMjAxNSBUaGUgRG9qbyBGb3VuZGF0aW9uIDxodHRwOi8vZG9qb2ZvdW5kYXRpb24ub3JnLz5cbiAqIEJhc2VkIG9uIFVuZGVyc2NvcmUuanMgMS44LjMgPGh0dHA6Ly91bmRlcnNjb3JlanMub3JnL0xJQ0VOU0U+XG4gKiBDb3B5cmlnaHQgMjAwOS0yMDE1IEplcmVteSBBc2hrZW5hcywgRG9jdW1lbnRDbG91ZCBhbmQgSW52ZXN0aWdhdGl2ZSBSZXBvcnRlcnMgJiBFZGl0b3JzXG4gKiBBdmFpbGFibGUgdW5kZXIgTUlUIGxpY2Vuc2UgPGh0dHBzOi8vbG9kYXNoLmNvbS9saWNlbnNlPlxuICovXG52YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnbG9kYXNoLl9nZXRuYXRpdmUnKTtcblxuLyoqIE5hdGl2ZSBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBTZXQgPSBnZXROYXRpdmUoZ2xvYmFsLCAnU2V0Jyk7XG5cbi8qIE5hdGl2ZSBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlQ3JlYXRlID0gZ2V0TmF0aXZlKE9iamVjdCwgJ2NyZWF0ZScpO1xuXG4vKipcbiAqXG4gKiBDcmVhdGVzIGEgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIHVuaXF1ZSB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFt2YWx1ZXNdIFRoZSB2YWx1ZXMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIFNldENhY2hlKHZhbHVlcykge1xuICB2YXIgbGVuZ3RoID0gdmFsdWVzID8gdmFsdWVzLmxlbmd0aCA6IDA7XG5cbiAgdGhpcy5kYXRhID0geyAnaGFzaCc6IG5hdGl2ZUNyZWF0ZShudWxsKSwgJ3NldCc6IG5ldyBTZXQgfTtcbiAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgdGhpcy5wdXNoKHZhbHVlc1tsZW5ndGhdKTtcbiAgfVxufVxuXG4vKipcbiAqIEFkZHMgYHZhbHVlYCB0byB0aGUgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHB1c2hcbiAqIEBtZW1iZXJPZiBTZXRDYWNoZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIGNhY2hlUHVzaCh2YWx1ZSkge1xuICB2YXIgZGF0YSA9IHRoaXMuZGF0YTtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJyB8fCBpc09iamVjdCh2YWx1ZSkpIHtcbiAgICBkYXRhLnNldC5hZGQodmFsdWUpO1xuICB9IGVsc2Uge1xuICAgIGRhdGEuaGFzaFt2YWx1ZV0gPSB0cnVlO1xuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIGBTZXRgIGNhY2hlIG9iamVjdCB0byBvcHRpbWl6ZSBsaW5lYXIgc2VhcmNoZXMgb2YgbGFyZ2UgYXJyYXlzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbdmFsdWVzXSBUaGUgdmFsdWVzIHRvIGNhY2hlLlxuICogQHJldHVybnMge251bGx8T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgY2FjaGUgb2JqZWN0IGlmIGBTZXRgIGlzIHN1cHBvcnRlZCwgZWxzZSBgbnVsbGAuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUNhY2hlKHZhbHVlcykge1xuICByZXR1cm4gKG5hdGl2ZUNyZWF0ZSAmJiBTZXQpID8gbmV3IFNldENhY2hlKHZhbHVlcykgOiBudWxsO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHRoZSBbbGFuZ3VhZ2UgdHlwZV0oaHR0cHM6Ly9lczUuZ2l0aHViLmlvLyN4OCkgb2YgYE9iamVjdGAuXG4gKiAoZS5nLiBhcnJheXMsIGZ1bmN0aW9ucywgb2JqZWN0cywgcmVnZXhlcywgYG5ldyBOdW1iZXIoMClgLCBhbmQgYG5ldyBTdHJpbmcoJycpYClcbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3Qoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KDEpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgLy8gQXZvaWQgYSBWOCBKSVQgYnVnIGluIENocm9tZSAxOS0yMC5cbiAgLy8gU2VlIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0yMjkxIGZvciBtb3JlIGRldGFpbHMuXG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICByZXR1cm4gISF2YWx1ZSAmJiAodHlwZSA9PSAnb2JqZWN0JyB8fCB0eXBlID09ICdmdW5jdGlvbicpO1xufVxuXG4vLyBBZGQgZnVuY3Rpb25zIHRvIHRoZSBgU2V0YCBjYWNoZS5cblNldENhY2hlLnByb3RvdHlwZS5wdXNoID0gY2FjaGVQdXNoO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUNhY2hlO1xuIiwiLyoqXG4gKiBsb2Rhc2ggMy42LjEgKEN1c3RvbSBCdWlsZCkgPGh0dHBzOi8vbG9kYXNoLmNvbS8+XG4gKiBCdWlsZDogYGxvZGFzaCBtb2Rlcm4gbW9kdWxhcml6ZSBleHBvcnRzPVwibnBtXCIgLW8gLi9gXG4gKiBDb3B5cmlnaHQgMjAxMi0yMDE1IFRoZSBEb2pvIEZvdW5kYXRpb24gPGh0dHA6Ly9kb2pvZm91bmRhdGlvbi5vcmcvPlxuICogQmFzZWQgb24gVW5kZXJzY29yZS5qcyAxLjguMyA8aHR0cDovL3VuZGVyc2NvcmVqcy5vcmcvTElDRU5TRT5cbiAqIENvcHlyaWdodCAyMDA5LTIwMTUgSmVyZW15IEFzaGtlbmFzLCBEb2N1bWVudENsb3VkIGFuZCBJbnZlc3RpZ2F0aXZlIFJlcG9ydGVycyAmIEVkaXRvcnNcbiAqIEF2YWlsYWJsZSB1bmRlciBNSVQgbGljZW5zZSA8aHR0cHM6Ly9sb2Rhc2guY29tL2xpY2Vuc2U+XG4gKi9cblxuLyoqIFVzZWQgYXMgdGhlIGBUeXBlRXJyb3JgIG1lc3NhZ2UgZm9yIFwiRnVuY3Rpb25zXCIgbWV0aG9kcy4gKi9cbnZhciBGVU5DX0VSUk9SX1RFWFQgPSAnRXhwZWN0ZWQgYSBmdW5jdGlvbic7XG5cbi8qIE5hdGl2ZSBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWF4ID0gTWF0aC5tYXg7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2Agd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgb2YgdGhlXG4gKiBjcmVhdGVkIGZ1bmN0aW9uIGFuZCBhcmd1bWVudHMgZnJvbSBgc3RhcnRgIGFuZCBiZXlvbmQgcHJvdmlkZWQgYXMgYW4gYXJyYXkuXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGJhc2VkIG9uIHRoZSBbcmVzdCBwYXJhbWV0ZXJdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0Z1bmN0aW9ucy9yZXN0X3BhcmFtZXRlcnMpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PWZ1bmMubGVuZ3RoLTFdIFRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgcmVzdCBwYXJhbWV0ZXIuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIHNheSA9IF8ucmVzdFBhcmFtKGZ1bmN0aW9uKHdoYXQsIG5hbWVzKSB7XG4gKiAgIHJldHVybiB3aGF0ICsgJyAnICsgXy5pbml0aWFsKG5hbWVzKS5qb2luKCcsICcpICtcbiAqICAgICAoXy5zaXplKG5hbWVzKSA+IDEgPyAnLCAmICcgOiAnJykgKyBfLmxhc3QobmFtZXMpO1xuICogfSk7XG4gKlxuICogc2F5KCdoZWxsbycsICdmcmVkJywgJ2Jhcm5leScsICdwZWJibGVzJyk7XG4gKiAvLyA9PiAnaGVsbG8gZnJlZCwgYmFybmV5LCAmIHBlYmJsZXMnXG4gKi9cbmZ1bmN0aW9uIHJlc3RQYXJhbShmdW5jLCBzdGFydCkge1xuICBpZiAodHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtcbiAgfVxuICBzdGFydCA9IG5hdGl2ZU1heChzdGFydCA9PT0gdW5kZWZpbmVkID8gKGZ1bmMubGVuZ3RoIC0gMSkgOiAoK3N0YXJ0IHx8IDApLCAwKTtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBhcmdzID0gYXJndW1lbnRzLFxuICAgICAgICBpbmRleCA9IC0xLFxuICAgICAgICBsZW5ndGggPSBuYXRpdmVNYXgoYXJncy5sZW5ndGggLSBzdGFydCwgMCksXG4gICAgICAgIHJlc3QgPSBBcnJheShsZW5ndGgpO1xuXG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIHJlc3RbaW5kZXhdID0gYXJnc1tzdGFydCArIGluZGV4XTtcbiAgICB9XG4gICAgc3dpdGNoIChzdGFydCkge1xuICAgICAgY2FzZSAwOiByZXR1cm4gZnVuYy5jYWxsKHRoaXMsIHJlc3QpO1xuICAgICAgY2FzZSAxOiByZXR1cm4gZnVuYy5jYWxsKHRoaXMsIGFyZ3NbMF0sIHJlc3QpO1xuICAgICAgY2FzZSAyOiByZXR1cm4gZnVuYy5jYWxsKHRoaXMsIGFyZ3NbMF0sIGFyZ3NbMV0sIHJlc3QpO1xuICAgIH1cbiAgICB2YXIgb3RoZXJBcmdzID0gQXJyYXkoc3RhcnQgKyAxKTtcbiAgICBpbmRleCA9IC0xO1xuICAgIHdoaWxlICgrK2luZGV4IDwgc3RhcnQpIHtcbiAgICAgIG90aGVyQXJnc1tpbmRleF0gPSBhcmdzW2luZGV4XTtcbiAgICB9XG4gICAgb3RoZXJBcmdzW3N0YXJ0XSA9IHJlc3Q7XG4gICAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpcywgb3RoZXJBcmdzKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZXN0UGFyYW07XG4iLCJ2YXIgVk5vZGUgPSByZXF1aXJlKCcuL3Zub2RlJyk7XG52YXIgaXMgPSByZXF1aXJlKCcuL2lzJyk7XG5cbmZ1bmN0aW9uIGFkZE5TKGRhdGEsIGNoaWxkcmVuKSB7XG4gIGRhdGEubnMgPSAnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnO1xuICBpZiAoY2hpbGRyZW4gIT09IHVuZGVmaW5lZCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyArK2kpIHtcbiAgICAgIGFkZE5TKGNoaWxkcmVuW2ldLmRhdGEsIGNoaWxkcmVuW2ldLmNoaWxkcmVuKTtcbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoKHNlbCwgYiwgYykge1xuICB2YXIgZGF0YSA9IHt9LCBjaGlsZHJlbiwgdGV4dCwgaTtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHtcbiAgICBkYXRhID0gYjtcbiAgICBpZiAoaXMuYXJyYXkoYykpIHsgY2hpbGRyZW4gPSBjOyB9XG4gICAgZWxzZSBpZiAoaXMucHJpbWl0aXZlKGMpKSB7IHRleHQgPSBjOyB9XG4gIH0gZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuICAgIGlmIChpcy5hcnJheShiKSkgeyBjaGlsZHJlbiA9IGI7IH1cbiAgICBlbHNlIGlmIChpcy5wcmltaXRpdmUoYikpIHsgdGV4dCA9IGI7IH1cbiAgICBlbHNlIHsgZGF0YSA9IGI7IH1cbiAgfVxuICBpZiAoaXMuYXJyYXkoY2hpbGRyZW4pKSB7XG4gICAgZm9yIChpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgKytpKSB7XG4gICAgICBpZiAoaXMucHJpbWl0aXZlKGNoaWxkcmVuW2ldKSkgY2hpbGRyZW5baV0gPSBWTm9kZSh1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBjaGlsZHJlbltpXSk7XG4gICAgfVxuICB9XG4gIGlmIChzZWxbMF0gPT09ICdzJyAmJiBzZWxbMV0gPT09ICd2JyAmJiBzZWxbMl0gPT09ICdnJykge1xuICAgIGFkZE5TKGRhdGEsIGNoaWxkcmVuKTtcbiAgfVxuICByZXR1cm4gVk5vZGUoc2VsLCBkYXRhLCBjaGlsZHJlbiwgdGV4dCwgdW5kZWZpbmVkKTtcbn07XG4iLCJmdW5jdGlvbiBjcmVhdGVFbGVtZW50KHRhZ05hbWUpe1xuICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRWxlbWVudE5TKG5hbWVzcGFjZVVSSSwgcXVhbGlmaWVkTmFtZSl7XG4gIHJldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMobmFtZXNwYWNlVVJJLCBxdWFsaWZpZWROYW1lKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlVGV4dE5vZGUodGV4dCl7XG4gIHJldHVybiBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0ZXh0KTtcbn1cblxuXG5mdW5jdGlvbiBpbnNlcnRCZWZvcmUocGFyZW50Tm9kZSwgbmV3Tm9kZSwgcmVmZXJlbmNlTm9kZSl7XG4gIHBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG5ld05vZGUsIHJlZmVyZW5jZU5vZGUpO1xufVxuXG5cbmZ1bmN0aW9uIHJlbW92ZUNoaWxkKG5vZGUsIGNoaWxkKXtcbiAgbm9kZS5yZW1vdmVDaGlsZChjaGlsZCk7XG59XG5cbmZ1bmN0aW9uIGFwcGVuZENoaWxkKG5vZGUsIGNoaWxkKXtcbiAgbm9kZS5hcHBlbmRDaGlsZChjaGlsZCk7XG59XG5cbmZ1bmN0aW9uIHBhcmVudE5vZGUobm9kZSl7XG4gIHJldHVybiBub2RlLnBhcmVudEVsZW1lbnQ7XG59XG5cbmZ1bmN0aW9uIG5leHRTaWJsaW5nKG5vZGUpe1xuICByZXR1cm4gbm9kZS5uZXh0U2libGluZztcbn1cblxuZnVuY3Rpb24gdGFnTmFtZShub2RlKXtcbiAgcmV0dXJuIG5vZGUudGFnTmFtZTtcbn1cblxuZnVuY3Rpb24gc2V0VGV4dENvbnRlbnQobm9kZSwgdGV4dCl7XG4gIG5vZGUudGV4dENvbnRlbnQgPSB0ZXh0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgY3JlYXRlRWxlbWVudDogY3JlYXRlRWxlbWVudCxcbiAgY3JlYXRlRWxlbWVudE5TOiBjcmVhdGVFbGVtZW50TlMsXG4gIGNyZWF0ZVRleHROb2RlOiBjcmVhdGVUZXh0Tm9kZSxcbiAgYXBwZW5kQ2hpbGQ6IGFwcGVuZENoaWxkLFxuICByZW1vdmVDaGlsZDogcmVtb3ZlQ2hpbGQsXG4gIGluc2VydEJlZm9yZTogaW5zZXJ0QmVmb3JlLFxuICBwYXJlbnROb2RlOiBwYXJlbnROb2RlLFxuICBuZXh0U2libGluZzogbmV4dFNpYmxpbmcsXG4gIHRhZ05hbWU6IHRhZ05hbWUsXG4gIHNldFRleHRDb250ZW50OiBzZXRUZXh0Q29udGVudFxufTtcbiIsIm1vZHVsZS5leHBvcnRzID0ge1xuICBhcnJheTogQXJyYXkuaXNBcnJheSxcbiAgcHJpbWl0aXZlOiBmdW5jdGlvbihzKSB7IHJldHVybiB0eXBlb2YgcyA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHMgPT09ICdudW1iZXInOyB9LFxufTtcbiIsInZhciBib29sZWFuQXR0cnMgPSBbXCJhbGxvd2Z1bGxzY3JlZW5cIiwgXCJhc3luY1wiLCBcImF1dG9mb2N1c1wiLCBcImF1dG9wbGF5XCIsIFwiY2hlY2tlZFwiLCBcImNvbXBhY3RcIiwgXCJjb250cm9sc1wiLCBcImRlY2xhcmVcIiwgXG4gICAgICAgICAgICAgICAgXCJkZWZhdWx0XCIsIFwiZGVmYXVsdGNoZWNrZWRcIiwgXCJkZWZhdWx0bXV0ZWRcIiwgXCJkZWZhdWx0c2VsZWN0ZWRcIiwgXCJkZWZlclwiLCBcImRpc2FibGVkXCIsIFwiZHJhZ2dhYmxlXCIsIFxuICAgICAgICAgICAgICAgIFwiZW5hYmxlZFwiLCBcImZvcm1ub3ZhbGlkYXRlXCIsIFwiaGlkZGVuXCIsIFwiaW5kZXRlcm1pbmF0ZVwiLCBcImluZXJ0XCIsIFwiaXNtYXBcIiwgXCJpdGVtc2NvcGVcIiwgXCJsb29wXCIsIFwibXVsdGlwbGVcIiwgXG4gICAgICAgICAgICAgICAgXCJtdXRlZFwiLCBcIm5vaHJlZlwiLCBcIm5vcmVzaXplXCIsIFwibm9zaGFkZVwiLCBcIm5vdmFsaWRhdGVcIiwgXCJub3dyYXBcIiwgXCJvcGVuXCIsIFwicGF1c2VvbmV4aXRcIiwgXCJyZWFkb25seVwiLCBcbiAgICAgICAgICAgICAgICBcInJlcXVpcmVkXCIsIFwicmV2ZXJzZWRcIiwgXCJzY29wZWRcIiwgXCJzZWFtbGVzc1wiLCBcInNlbGVjdGVkXCIsIFwic29ydGFibGVcIiwgXCJzcGVsbGNoZWNrXCIsIFwidHJhbnNsYXRlXCIsIFxuICAgICAgICAgICAgICAgIFwidHJ1ZXNwZWVkXCIsIFwidHlwZW11c3RtYXRjaFwiLCBcInZpc2libGVcIl07XG4gICAgXG52YXIgYm9vbGVhbkF0dHJzRGljdCA9IHt9O1xuZm9yKHZhciBpPTAsIGxlbiA9IGJvb2xlYW5BdHRycy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICBib29sZWFuQXR0cnNEaWN0W2Jvb2xlYW5BdHRyc1tpXV0gPSB0cnVlO1xufVxuICAgIFxuZnVuY3Rpb24gdXBkYXRlQXR0cnMob2xkVm5vZGUsIHZub2RlKSB7XG4gIHZhciBrZXksIGN1ciwgb2xkLCBlbG0gPSB2bm9kZS5lbG0sXG4gICAgICBvbGRBdHRycyA9IG9sZFZub2RlLmRhdGEuYXR0cnMgfHwge30sIGF0dHJzID0gdm5vZGUuZGF0YS5hdHRycyB8fCB7fTtcbiAgXG4gIC8vIHVwZGF0ZSBtb2RpZmllZCBhdHRyaWJ1dGVzLCBhZGQgbmV3IGF0dHJpYnV0ZXNcbiAgZm9yIChrZXkgaW4gYXR0cnMpIHtcbiAgICBjdXIgPSBhdHRyc1trZXldO1xuICAgIG9sZCA9IG9sZEF0dHJzW2tleV07XG4gICAgaWYgKG9sZCAhPT0gY3VyKSB7XG4gICAgICAvLyBUT0RPOiBhZGQgc3VwcG9ydCB0byBuYW1lc3BhY2VkIGF0dHJpYnV0ZXMgKHNldEF0dHJpYnV0ZU5TKVxuICAgICAgaWYoIWN1ciAmJiBib29sZWFuQXR0cnNEaWN0W2tleV0pXG4gICAgICAgIGVsbS5yZW1vdmVBdHRyaWJ1dGUoa2V5KTtcbiAgICAgIGVsc2VcbiAgICAgICAgZWxtLnNldEF0dHJpYnV0ZShrZXksIGN1cik7XG4gICAgfVxuICB9XG4gIC8vcmVtb3ZlIHJlbW92ZWQgYXR0cmlidXRlc1xuICAvLyB1c2UgYGluYCBvcGVyYXRvciBzaW5jZSB0aGUgcHJldmlvdXMgYGZvcmAgaXRlcmF0aW9uIHVzZXMgaXQgKC5pLmUuIGFkZCBldmVuIGF0dHJpYnV0ZXMgd2l0aCB1bmRlZmluZWQgdmFsdWUpXG4gIC8vIHRoZSBvdGhlciBvcHRpb24gaXMgdG8gcmVtb3ZlIGFsbCBhdHRyaWJ1dGVzIHdpdGggdmFsdWUgPT0gdW5kZWZpbmVkXG4gIGZvciAoa2V5IGluIG9sZEF0dHJzKSB7XG4gICAgaWYgKCEoa2V5IGluIGF0dHJzKSkge1xuICAgICAgZWxtLnJlbW92ZUF0dHJpYnV0ZShrZXkpO1xuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtjcmVhdGU6IHVwZGF0ZUF0dHJzLCB1cGRhdGU6IHVwZGF0ZUF0dHJzfTtcbiIsImZ1bmN0aW9uIHVwZGF0ZUNsYXNzKG9sZFZub2RlLCB2bm9kZSkge1xuICB2YXIgY3VyLCBuYW1lLCBlbG0gPSB2bm9kZS5lbG0sXG4gICAgICBvbGRDbGFzcyA9IG9sZFZub2RlLmRhdGEuY2xhc3MgfHwge30sXG4gICAgICBrbGFzcyA9IHZub2RlLmRhdGEuY2xhc3MgfHwge307XG4gIGZvciAobmFtZSBpbiBvbGRDbGFzcykge1xuICAgIGlmICgha2xhc3NbbmFtZV0pIHtcbiAgICAgIGVsbS5jbGFzc0xpc3QucmVtb3ZlKG5hbWUpO1xuICAgIH1cbiAgfVxuICBmb3IgKG5hbWUgaW4ga2xhc3MpIHtcbiAgICBjdXIgPSBrbGFzc1tuYW1lXTtcbiAgICBpZiAoY3VyICE9PSBvbGRDbGFzc1tuYW1lXSkge1xuICAgICAgZWxtLmNsYXNzTGlzdFtjdXIgPyAnYWRkJyA6ICdyZW1vdmUnXShuYW1lKTtcbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7Y3JlYXRlOiB1cGRhdGVDbGFzcywgdXBkYXRlOiB1cGRhdGVDbGFzc307XG4iLCJ2YXIgaXMgPSByZXF1aXJlKCcuLi9pcycpO1xuXG5mdW5jdGlvbiBhcnJJbnZva2VyKGFycikge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgLy8gU3BlY2lhbCBjYXNlIHdoZW4gbGVuZ3RoIGlzIHR3bywgZm9yIHBlcmZvcm1hbmNlXG4gICAgYXJyLmxlbmd0aCA9PT0gMiA/IGFyclswXShhcnJbMV0pIDogYXJyWzBdLmFwcGx5KHVuZGVmaW5lZCwgYXJyLnNsaWNlKDEpKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZm5JbnZva2VyKG8pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGV2KSB7IG8uZm4oZXYpOyB9O1xufVxuXG5mdW5jdGlvbiB1cGRhdGVFdmVudExpc3RlbmVycyhvbGRWbm9kZSwgdm5vZGUpIHtcbiAgdmFyIG5hbWUsIGN1ciwgb2xkLCBlbG0gPSB2bm9kZS5lbG0sXG4gICAgICBvbGRPbiA9IG9sZFZub2RlLmRhdGEub24gfHwge30sIG9uID0gdm5vZGUuZGF0YS5vbjtcbiAgaWYgKCFvbikgcmV0dXJuO1xuICBmb3IgKG5hbWUgaW4gb24pIHtcbiAgICBjdXIgPSBvbltuYW1lXTtcbiAgICBvbGQgPSBvbGRPbltuYW1lXTtcbiAgICBpZiAob2xkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChpcy5hcnJheShjdXIpKSB7XG4gICAgICAgIGVsbS5hZGRFdmVudExpc3RlbmVyKG5hbWUsIGFyckludm9rZXIoY3VyKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjdXIgPSB7Zm46IGN1cn07XG4gICAgICAgIG9uW25hbWVdID0gY3VyO1xuICAgICAgICBlbG0uYWRkRXZlbnRMaXN0ZW5lcihuYW1lLCBmbkludm9rZXIoY3VyKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpcy5hcnJheShvbGQpKSB7XG4gICAgICAvLyBEZWxpYmVyYXRlbHkgbW9kaWZ5IG9sZCBhcnJheSBzaW5jZSBpdCdzIGNhcHR1cmVkIGluIGNsb3N1cmUgY3JlYXRlZCB3aXRoIGBhcnJJbnZva2VyYFxuICAgICAgb2xkLmxlbmd0aCA9IGN1ci5sZW5ndGg7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9sZC5sZW5ndGg7ICsraSkgb2xkW2ldID0gY3VyW2ldO1xuICAgICAgb25bbmFtZV0gID0gb2xkO1xuICAgIH0gZWxzZSB7XG4gICAgICBvbGQuZm4gPSBjdXI7XG4gICAgICBvbltuYW1lXSA9IG9sZDtcbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7Y3JlYXRlOiB1cGRhdGVFdmVudExpc3RlbmVycywgdXBkYXRlOiB1cGRhdGVFdmVudExpc3RlbmVyc307XG4iLCJ2YXIgcmFmID0gKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpIHx8IHNldFRpbWVvdXQ7XG52YXIgbmV4dEZyYW1lID0gZnVuY3Rpb24oZm4pIHsgcmFmKGZ1bmN0aW9uKCkgeyByYWYoZm4pOyB9KTsgfTtcblxuZnVuY3Rpb24gc2V0TmV4dEZyYW1lKG9iaiwgcHJvcCwgdmFsKSB7XG4gIG5leHRGcmFtZShmdW5jdGlvbigpIHsgb2JqW3Byb3BdID0gdmFsOyB9KTtcbn1cblxuZnVuY3Rpb24gZ2V0VGV4dE5vZGVSZWN0KHRleHROb2RlKSB7XG4gIHZhciByZWN0O1xuICBpZiAoZG9jdW1lbnQuY3JlYXRlUmFuZ2UpIHtcbiAgICB2YXIgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICAgIHJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyh0ZXh0Tm9kZSk7XG4gICAgaWYgKHJhbmdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCkge1xuICAgICAgICByZWN0ID0gcmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZWN0O1xufVxuXG5mdW5jdGlvbiBjYWxjVHJhbnNmb3JtT3JpZ2luKGlzVGV4dE5vZGUsIHRleHRSZWN0LCBib3VuZGluZ1JlY3QpIHtcbiAgaWYgKGlzVGV4dE5vZGUpIHtcbiAgICBpZiAodGV4dFJlY3QpIHtcbiAgICAgIC8vY2FsY3VsYXRlIHBpeGVscyB0byBjZW50ZXIgb2YgdGV4dCBmcm9tIGxlZnQgZWRnZSBvZiBib3VuZGluZyBib3hcbiAgICAgIHZhciByZWxhdGl2ZUNlbnRlclggPSB0ZXh0UmVjdC5sZWZ0ICsgdGV4dFJlY3Qud2lkdGgvMiAtIGJvdW5kaW5nUmVjdC5sZWZ0O1xuICAgICAgdmFyIHJlbGF0aXZlQ2VudGVyWSA9IHRleHRSZWN0LnRvcCArIHRleHRSZWN0LmhlaWdodC8yIC0gYm91bmRpbmdSZWN0LnRvcDtcbiAgICAgIHJldHVybiByZWxhdGl2ZUNlbnRlclggKyAncHggJyArIHJlbGF0aXZlQ2VudGVyWSArICdweCc7XG4gICAgfVxuICB9XG4gIHJldHVybiAnMCAwJzsgLy90b3AgbGVmdFxufVxuXG5mdW5jdGlvbiBnZXRUZXh0RHgob2xkVGV4dFJlY3QsIG5ld1RleHRSZWN0KSB7XG4gIGlmIChvbGRUZXh0UmVjdCAmJiBuZXdUZXh0UmVjdCkge1xuICAgIHJldHVybiAoKG9sZFRleHRSZWN0LmxlZnQgKyBvbGRUZXh0UmVjdC53aWR0aC8yKSAtIChuZXdUZXh0UmVjdC5sZWZ0ICsgbmV3VGV4dFJlY3Qud2lkdGgvMikpO1xuICB9XG4gIHJldHVybiAwO1xufVxuZnVuY3Rpb24gZ2V0VGV4dER5KG9sZFRleHRSZWN0LCBuZXdUZXh0UmVjdCkge1xuICBpZiAob2xkVGV4dFJlY3QgJiYgbmV3VGV4dFJlY3QpIHtcbiAgICByZXR1cm4gKChvbGRUZXh0UmVjdC50b3AgKyBvbGRUZXh0UmVjdC5oZWlnaHQvMikgLSAobmV3VGV4dFJlY3QudG9wICsgbmV3VGV4dFJlY3QuaGVpZ2h0LzIpKTtcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuZnVuY3Rpb24gaXNUZXh0RWxlbWVudChlbG0pIHtcbiAgcmV0dXJuIGVsbS5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMSAmJiBlbG0uY2hpbGROb2Rlc1swXS5ub2RlVHlwZSA9PT0gMztcbn1cblxudmFyIHJlbW92ZWQsIGNyZWF0ZWQ7XG5cbmZ1bmN0aW9uIHByZShvbGRWbm9kZSwgdm5vZGUpIHtcbiAgcmVtb3ZlZCA9IHt9O1xuICBjcmVhdGVkID0gW107XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZShvbGRWbm9kZSwgdm5vZGUpIHtcbiAgdmFyIGhlcm8gPSB2bm9kZS5kYXRhLmhlcm87XG4gIGlmIChoZXJvICYmIGhlcm8uaWQpIHtcbiAgICBjcmVhdGVkLnB1c2goaGVyby5pZCk7XG4gICAgY3JlYXRlZC5wdXNoKHZub2RlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBkZXN0cm95KHZub2RlKSB7XG4gIHZhciBoZXJvID0gdm5vZGUuZGF0YS5oZXJvO1xuICBpZiAoaGVybyAmJiBoZXJvLmlkKSB7XG4gICAgdmFyIGVsbSA9IHZub2RlLmVsbTtcbiAgICB2bm9kZS5pc1RleHROb2RlID0gaXNUZXh0RWxlbWVudChlbG0pOyAvL2lzIHRoaXMgYSB0ZXh0IG5vZGU/XG4gICAgdm5vZGUuYm91bmRpbmdSZWN0ID0gZWxtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOyAvL3NhdmUgdGhlIGJvdW5kaW5nIHJlY3RhbmdsZSB0byBhIG5ldyBwcm9wZXJ0eSBvbiB0aGUgdm5vZGVcbiAgICB2bm9kZS50ZXh0UmVjdCA9IHZub2RlLmlzVGV4dE5vZGUgPyBnZXRUZXh0Tm9kZVJlY3QoZWxtLmNoaWxkTm9kZXNbMF0pIDogbnVsbDsgLy9zYXZlIGJvdW5kaW5nIHJlY3Qgb2YgaW5uZXIgdGV4dCBub2RlXG4gICAgdmFyIGNvbXB1dGVkU3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbG0sIG51bGwpOyAvL2dldCBjdXJyZW50IHN0eWxlcyAoaW5jbHVkZXMgaW5oZXJpdGVkIHByb3BlcnRpZXMpXG4gICAgdm5vZGUuc2F2ZWRTdHlsZSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoY29tcHV0ZWRTdHlsZSkpOyAvL3NhdmUgYSBjb3B5IG9mIGNvbXB1dGVkIHN0eWxlIHZhbHVlc1xuICAgIHJlbW92ZWRbaGVyby5pZF0gPSB2bm9kZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwb3N0KCkge1xuICB2YXIgaSwgaWQsIG5ld0VsbSwgb2xkVm5vZGUsIG9sZEVsbSwgaFJhdGlvLCB3UmF0aW8sXG4gICAgICBvbGRSZWN0LCBuZXdSZWN0LCBkeCwgZHksIG9yaWdUcmFuc2Zvcm0sIG9yaWdUcmFuc2l0aW9uLFxuICAgICAgbmV3U3R5bGUsIG9sZFN0eWxlLCBuZXdDb21wdXRlZFN0eWxlLCBpc1RleHROb2RlLFxuICAgICAgbmV3VGV4dFJlY3QsIG9sZFRleHRSZWN0O1xuICBmb3IgKGkgPSAwOyBpIDwgY3JlYXRlZC5sZW5ndGg7IGkgKz0gMikge1xuICAgIGlkID0gY3JlYXRlZFtpXTtcbiAgICBuZXdFbG0gPSBjcmVhdGVkW2krMV0uZWxtO1xuICAgIG9sZFZub2RlID0gcmVtb3ZlZFtpZF07XG4gICAgaWYgKG9sZFZub2RlKSB7XG4gICAgICBpc1RleHROb2RlID0gb2xkVm5vZGUuaXNUZXh0Tm9kZSAmJiBpc1RleHRFbGVtZW50KG5ld0VsbSk7IC8vQXJlIG9sZCAmIG5ldyBib3RoIHRleHQ/XG4gICAgICBuZXdTdHlsZSA9IG5ld0VsbS5zdHlsZTtcbiAgICAgIG5ld0NvbXB1dGVkU3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShuZXdFbG0sIG51bGwpOyAvL2dldCBmdWxsIGNvbXB1dGVkIHN0eWxlIGZvciBuZXcgZWxlbWVudFxuICAgICAgb2xkRWxtID0gb2xkVm5vZGUuZWxtO1xuICAgICAgb2xkU3R5bGUgPSBvbGRFbG0uc3R5bGU7XG4gICAgICAvL092ZXJhbGwgZWxlbWVudCBib3VuZGluZyBib3hlc1xuICAgICAgbmV3UmVjdCA9IG5ld0VsbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIG9sZFJlY3QgPSBvbGRWbm9kZS5ib3VuZGluZ1JlY3Q7IC8vcHJldmlvdXNseSBzYXZlZCBib3VuZGluZyByZWN0XG4gICAgICAvL1RleHQgbm9kZSBib3VuZGluZyBib3hlcyAmIGRpc3RhbmNlc1xuICAgICAgaWYgKGlzVGV4dE5vZGUpIHtcbiAgICAgICAgbmV3VGV4dFJlY3QgPSBnZXRUZXh0Tm9kZVJlY3QobmV3RWxtLmNoaWxkTm9kZXNbMF0pO1xuICAgICAgICBvbGRUZXh0UmVjdCA9IG9sZFZub2RlLnRleHRSZWN0O1xuICAgICAgICBkeCA9IGdldFRleHREeChvbGRUZXh0UmVjdCwgbmV3VGV4dFJlY3QpO1xuICAgICAgICBkeSA9IGdldFRleHREeShvbGRUZXh0UmVjdCwgbmV3VGV4dFJlY3QpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy9DYWxjdWxhdGUgZGlzdGFuY2VzIGJldHdlZW4gb2xkICYgbmV3IHBvc2l0aW9uc1xuICAgICAgICBkeCA9IG9sZFJlY3QubGVmdCAtIG5ld1JlY3QubGVmdDtcbiAgICAgICAgZHkgPSBvbGRSZWN0LnRvcCAtIG5ld1JlY3QudG9wO1xuICAgICAgfVxuICAgICAgaFJhdGlvID0gbmV3UmVjdC5oZWlnaHQgLyAoTWF0aC5tYXgob2xkUmVjdC5oZWlnaHQsIDEpKTtcbiAgICAgIHdSYXRpbyA9IGlzVGV4dE5vZGUgPyBoUmF0aW8gOiBuZXdSZWN0LndpZHRoIC8gKE1hdGgubWF4KG9sZFJlY3Qud2lkdGgsIDEpKTsgLy90ZXh0IHNjYWxlcyBiYXNlZCBvbiBoUmF0aW9cbiAgICAgIC8vIEFuaW1hdGUgbmV3IGVsZW1lbnRcbiAgICAgIG9yaWdUcmFuc2Zvcm0gPSBuZXdTdHlsZS50cmFuc2Zvcm07XG4gICAgICBvcmlnVHJhbnNpdGlvbiA9IG5ld1N0eWxlLnRyYW5zaXRpb247XG4gICAgICBpZiAobmV3Q29tcHV0ZWRTdHlsZS5kaXNwbGF5ID09PSAnaW5saW5lJykgLy9pbmxpbmUgZWxlbWVudHMgY2Fubm90IGJlIHRyYW5zZm9ybWVkXG4gICAgICAgIG5ld1N0eWxlLmRpc3BsYXkgPSAnaW5saW5lLWJsb2NrJzsgICAgICAgIC8vdGhpcyBkb2VzIG5vdCBhcHBlYXIgdG8gaGF2ZSBhbnkgbmVnYXRpdmUgc2lkZSBlZmZlY3RzXG4gICAgICBuZXdTdHlsZS50cmFuc2l0aW9uID0gb3JpZ1RyYW5zaXRpb24gKyAndHJhbnNmb3JtIDBzJztcbiAgICAgIG5ld1N0eWxlLnRyYW5zZm9ybU9yaWdpbiA9IGNhbGNUcmFuc2Zvcm1PcmlnaW4oaXNUZXh0Tm9kZSwgbmV3VGV4dFJlY3QsIG5ld1JlY3QpO1xuICAgICAgbmV3U3R5bGUub3BhY2l0eSA9ICcwJztcbiAgICAgIG5ld1N0eWxlLnRyYW5zZm9ybSA9IG9yaWdUcmFuc2Zvcm0gKyAndHJhbnNsYXRlKCcrZHgrJ3B4LCAnK2R5KydweCkgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NjYWxlKCcrMS93UmF0aW8rJywgJysxL2hSYXRpbysnKSc7XG4gICAgICBzZXROZXh0RnJhbWUobmV3U3R5bGUsICd0cmFuc2l0aW9uJywgb3JpZ1RyYW5zaXRpb24pO1xuICAgICAgc2V0TmV4dEZyYW1lKG5ld1N0eWxlLCAndHJhbnNmb3JtJywgb3JpZ1RyYW5zZm9ybSk7XG4gICAgICBzZXROZXh0RnJhbWUobmV3U3R5bGUsICdvcGFjaXR5JywgJzEnKTtcbiAgICAgIC8vIEFuaW1hdGUgb2xkIGVsZW1lbnRcbiAgICAgIGZvciAodmFyIGtleSBpbiBvbGRWbm9kZS5zYXZlZFN0eWxlKSB7IC8vcmUtYXBwbHkgc2F2ZWQgaW5oZXJpdGVkIHByb3BlcnRpZXNcbiAgICAgICAgaWYgKHBhcnNlSW50KGtleSkgIT0ga2V5KSB7XG4gICAgICAgICAgdmFyIG1zID0ga2V5LnN1YnN0cmluZygwLDIpID09PSAnbXMnO1xuICAgICAgICAgIHZhciBtb3ogPSBrZXkuc3Vic3RyaW5nKDAsMykgPT09ICdtb3onO1xuICAgICAgICAgIHZhciB3ZWJraXQgPSBrZXkuc3Vic3RyaW5nKDAsNikgPT09ICd3ZWJraXQnO1xuICAgICAgXHQgIGlmICghbXMgJiYgIW1veiAmJiAhd2Via2l0KSAvL2lnbm9yZSBwcmVmaXhlZCBzdHlsZSBwcm9wZXJ0aWVzXG4gICAgICAgIFx0ICBvbGRTdHlsZVtrZXldID0gb2xkVm5vZGUuc2F2ZWRTdHlsZVtrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBvbGRTdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG4gICAgICBvbGRTdHlsZS50b3AgPSBvbGRSZWN0LnRvcCArICdweCc7IC8vc3RhcnQgYXQgZXhpc3RpbmcgcG9zaXRpb25cbiAgICAgIG9sZFN0eWxlLmxlZnQgPSBvbGRSZWN0LmxlZnQgKyAncHgnO1xuICAgICAgb2xkU3R5bGUud2lkdGggPSBvbGRSZWN0LndpZHRoICsgJ3B4JzsgLy9OZWVkZWQgZm9yIGVsZW1lbnRzIHdobyB3ZXJlIHNpemVkIHJlbGF0aXZlIHRvIHRoZWlyIHBhcmVudHNcbiAgICAgIG9sZFN0eWxlLmhlaWdodCA9IG9sZFJlY3QuaGVpZ2h0ICsgJ3B4JzsgLy9OZWVkZWQgZm9yIGVsZW1lbnRzIHdobyB3ZXJlIHNpemVkIHJlbGF0aXZlIHRvIHRoZWlyIHBhcmVudHNcbiAgICAgIG9sZFN0eWxlLm1hcmdpbiA9IDA7IC8vTWFyZ2luIG9uIGhlcm8gZWxlbWVudCBsZWFkcyB0byBpbmNvcnJlY3QgcG9zaXRpb25pbmdcbiAgICAgIG9sZFN0eWxlLnRyYW5zZm9ybU9yaWdpbiA9IGNhbGNUcmFuc2Zvcm1PcmlnaW4oaXNUZXh0Tm9kZSwgb2xkVGV4dFJlY3QsIG9sZFJlY3QpO1xuICAgICAgb2xkU3R5bGUudHJhbnNmb3JtID0gJyc7XG4gICAgICBvbGRTdHlsZS5vcGFjaXR5ID0gJzEnO1xuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChvbGRFbG0pO1xuICAgICAgc2V0TmV4dEZyYW1lKG9sZFN0eWxlLCAndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgnKyAtZHggKydweCwgJysgLWR5ICsncHgpIHNjYWxlKCcrd1JhdGlvKycsICcraFJhdGlvKycpJyk7IC8vc2NhbGUgbXVzdCBiZSBvbiBmYXIgcmlnaHQgZm9yIHRyYW5zbGF0ZSB0byBiZSBjb3JyZWN0XG4gICAgICBzZXROZXh0RnJhbWUob2xkU3R5bGUsICdvcGFjaXR5JywgJzAnKTtcbiAgICAgIG9sZEVsbS5hZGRFdmVudExpc3RlbmVyKCd0cmFuc2l0aW9uZW5kJywgZnVuY3Rpb24oZXYpIHtcbiAgICAgICAgaWYgKGV2LnByb3BlcnR5TmFtZSA9PT0gJ3RyYW5zZm9ybScpXG4gICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChldi50YXJnZXQpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIHJlbW92ZWQgPSBjcmVhdGVkID0gdW5kZWZpbmVkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtwcmU6IHByZSwgY3JlYXRlOiBjcmVhdGUsIGRlc3Ryb3k6IGRlc3Ryb3ksIHBvc3Q6IHBvc3R9O1xuIiwiZnVuY3Rpb24gdXBkYXRlUHJvcHMob2xkVm5vZGUsIHZub2RlKSB7XG4gIHZhciBrZXksIGN1ciwgb2xkLCBlbG0gPSB2bm9kZS5lbG0sXG4gICAgICBvbGRQcm9wcyA9IG9sZFZub2RlLmRhdGEucHJvcHMgfHwge30sIHByb3BzID0gdm5vZGUuZGF0YS5wcm9wcyB8fCB7fTtcbiAgZm9yIChrZXkgaW4gb2xkUHJvcHMpIHtcbiAgICBpZiAoIXByb3BzW2tleV0pIHtcbiAgICAgIGRlbGV0ZSBlbG1ba2V5XTtcbiAgICB9XG4gIH1cbiAgZm9yIChrZXkgaW4gcHJvcHMpIHtcbiAgICBjdXIgPSBwcm9wc1trZXldO1xuICAgIG9sZCA9IG9sZFByb3BzW2tleV07XG4gICAgaWYgKG9sZCAhPT0gY3VyICYmIChrZXkgIT09ICd2YWx1ZScgfHwgZWxtW2tleV0gIT09IGN1cikpIHtcbiAgICAgIGVsbVtrZXldID0gY3VyO1xuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtjcmVhdGU6IHVwZGF0ZVByb3BzLCB1cGRhdGU6IHVwZGF0ZVByb3BzfTtcbiIsInZhciByYWYgPSAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSkgfHwgc2V0VGltZW91dDtcbnZhciBuZXh0RnJhbWUgPSBmdW5jdGlvbihmbikgeyByYWYoZnVuY3Rpb24oKSB7IHJhZihmbik7IH0pOyB9O1xuXG5mdW5jdGlvbiBzZXROZXh0RnJhbWUob2JqLCBwcm9wLCB2YWwpIHtcbiAgbmV4dEZyYW1lKGZ1bmN0aW9uKCkgeyBvYmpbcHJvcF0gPSB2YWw7IH0pO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVTdHlsZShvbGRWbm9kZSwgdm5vZGUpIHtcbiAgdmFyIGN1ciwgbmFtZSwgZWxtID0gdm5vZGUuZWxtLFxuICAgICAgb2xkU3R5bGUgPSBvbGRWbm9kZS5kYXRhLnN0eWxlIHx8IHt9LFxuICAgICAgc3R5bGUgPSB2bm9kZS5kYXRhLnN0eWxlIHx8IHt9LFxuICAgICAgb2xkSGFzRGVsID0gJ2RlbGF5ZWQnIGluIG9sZFN0eWxlO1xuICBmb3IgKG5hbWUgaW4gb2xkU3R5bGUpIHtcbiAgICBpZiAoIXN0eWxlW25hbWVdKSB7XG4gICAgICBlbG0uc3R5bGVbbmFtZV0gPSAnJztcbiAgICB9XG4gIH1cbiAgZm9yIChuYW1lIGluIHN0eWxlKSB7XG4gICAgY3VyID0gc3R5bGVbbmFtZV07XG4gICAgaWYgKG5hbWUgPT09ICdkZWxheWVkJykge1xuICAgICAgZm9yIChuYW1lIGluIHN0eWxlLmRlbGF5ZWQpIHtcbiAgICAgICAgY3VyID0gc3R5bGUuZGVsYXllZFtuYW1lXTtcbiAgICAgICAgaWYgKCFvbGRIYXNEZWwgfHwgY3VyICE9PSBvbGRTdHlsZS5kZWxheWVkW25hbWVdKSB7XG4gICAgICAgICAgc2V0TmV4dEZyYW1lKGVsbS5zdHlsZSwgbmFtZSwgY3VyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobmFtZSAhPT0gJ3JlbW92ZScgJiYgY3VyICE9PSBvbGRTdHlsZVtuYW1lXSkge1xuICAgICAgZWxtLnN0eWxlW25hbWVdID0gY3VyO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBhcHBseURlc3Ryb3lTdHlsZSh2bm9kZSkge1xuICB2YXIgc3R5bGUsIG5hbWUsIGVsbSA9IHZub2RlLmVsbSwgcyA9IHZub2RlLmRhdGEuc3R5bGU7XG4gIGlmICghcyB8fCAhKHN0eWxlID0gcy5kZXN0cm95KSkgcmV0dXJuO1xuICBmb3IgKG5hbWUgaW4gc3R5bGUpIHtcbiAgICBlbG0uc3R5bGVbbmFtZV0gPSBzdHlsZVtuYW1lXTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhcHBseVJlbW92ZVN0eWxlKHZub2RlLCBybSkge1xuICB2YXIgcyA9IHZub2RlLmRhdGEuc3R5bGU7XG4gIGlmICghcyB8fCAhcy5yZW1vdmUpIHtcbiAgICBybSgpO1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgbmFtZSwgZWxtID0gdm5vZGUuZWxtLCBpZHgsIGkgPSAwLCBtYXhEdXIgPSAwLFxuICAgICAgY29tcFN0eWxlLCBzdHlsZSA9IHMucmVtb3ZlLCBhbW91bnQgPSAwLCBhcHBsaWVkID0gW107XG4gIGZvciAobmFtZSBpbiBzdHlsZSkge1xuICAgIGFwcGxpZWQucHVzaChuYW1lKTtcbiAgICBlbG0uc3R5bGVbbmFtZV0gPSBzdHlsZVtuYW1lXTtcbiAgfVxuICBjb21wU3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKGVsbSk7XG4gIHZhciBwcm9wcyA9IGNvbXBTdHlsZVsndHJhbnNpdGlvbi1wcm9wZXJ0eSddLnNwbGl0KCcsICcpO1xuICBmb3IgKDsgaSA8IHByb3BzLmxlbmd0aDsgKytpKSB7XG4gICAgaWYoYXBwbGllZC5pbmRleE9mKHByb3BzW2ldKSAhPT0gLTEpIGFtb3VudCsrO1xuICB9XG4gIGVsbS5hZGRFdmVudExpc3RlbmVyKCd0cmFuc2l0aW9uZW5kJywgZnVuY3Rpb24oZXYpIHtcbiAgICBpZiAoZXYudGFyZ2V0ID09PSBlbG0pIC0tYW1vdW50O1xuICAgIGlmIChhbW91bnQgPT09IDApIHJtKCk7XG4gIH0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtjcmVhdGU6IHVwZGF0ZVN0eWxlLCB1cGRhdGU6IHVwZGF0ZVN0eWxlLCBkZXN0cm95OiBhcHBseURlc3Ryb3lTdHlsZSwgcmVtb3ZlOiBhcHBseVJlbW92ZVN0eWxlfTtcbiIsIi8vIGpzaGludCBuZXdjYXA6IGZhbHNlXG4vKiBnbG9iYWwgcmVxdWlyZSwgbW9kdWxlLCBkb2N1bWVudCwgTm9kZSAqL1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgVk5vZGUgPSByZXF1aXJlKCcuL3Zub2RlJyk7XG52YXIgaXMgPSByZXF1aXJlKCcuL2lzJyk7XG52YXIgZG9tQXBpID0gcmVxdWlyZSgnLi9odG1sZG9tYXBpLmpzJyk7XG5cbmZ1bmN0aW9uIGlzVW5kZWYocykgeyByZXR1cm4gcyA9PT0gdW5kZWZpbmVkOyB9XG5mdW5jdGlvbiBpc0RlZihzKSB7IHJldHVybiBzICE9PSB1bmRlZmluZWQ7IH1cblxudmFyIGVtcHR5Tm9kZSA9IFZOb2RlKCcnLCB7fSwgW10sIHVuZGVmaW5lZCwgdW5kZWZpbmVkKTtcblxuZnVuY3Rpb24gc2FtZVZub2RlKHZub2RlMSwgdm5vZGUyKSB7XG4gIHJldHVybiB2bm9kZTEua2V5ID09PSB2bm9kZTIua2V5ICYmIHZub2RlMS5zZWwgPT09IHZub2RlMi5zZWw7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUtleVRvT2xkSWR4KGNoaWxkcmVuLCBiZWdpbklkeCwgZW5kSWR4KSB7XG4gIHZhciBpLCBtYXAgPSB7fSwga2V5O1xuICBmb3IgKGkgPSBiZWdpbklkeDsgaSA8PSBlbmRJZHg7ICsraSkge1xuICAgIGtleSA9IGNoaWxkcmVuW2ldLmtleTtcbiAgICBpZiAoaXNEZWYoa2V5KSkgbWFwW2tleV0gPSBpO1xuICB9XG4gIHJldHVybiBtYXA7XG59XG5cbnZhciBob29rcyA9IFsnY3JlYXRlJywgJ3VwZGF0ZScsICdyZW1vdmUnLCAnZGVzdHJveScsICdwcmUnLCAncG9zdCddO1xuXG5mdW5jdGlvbiBpbml0KG1vZHVsZXMsIGFwaSkge1xuICB2YXIgaSwgaiwgY2JzID0ge307XG5cbiAgaWYgKGlzVW5kZWYoYXBpKSkgYXBpID0gZG9tQXBpO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBob29rcy5sZW5ndGg7ICsraSkge1xuICAgIGNic1tob29rc1tpXV0gPSBbXTtcbiAgICBmb3IgKGogPSAwOyBqIDwgbW9kdWxlcy5sZW5ndGg7ICsraikge1xuICAgICAgaWYgKG1vZHVsZXNbal1baG9va3NbaV1dICE9PSB1bmRlZmluZWQpIGNic1tob29rc1tpXV0ucHVzaChtb2R1bGVzW2pdW2hvb2tzW2ldXSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZW1wdHlOb2RlQXQoZWxtKSB7XG4gICAgcmV0dXJuIFZOb2RlKGFwaS50YWdOYW1lKGVsbSkudG9Mb3dlckNhc2UoKSwge30sIFtdLCB1bmRlZmluZWQsIGVsbSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVSbUNiKGNoaWxkRWxtLCBsaXN0ZW5lcnMpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoLS1saXN0ZW5lcnMgPT09IDApIHtcbiAgICAgICAgdmFyIHBhcmVudCA9IGFwaS5wYXJlbnROb2RlKGNoaWxkRWxtKTtcbiAgICAgICAgYXBpLnJlbW92ZUNoaWxkKHBhcmVudCwgY2hpbGRFbG0pO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVFbG0odm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSkge1xuICAgIHZhciBpLCB0aHVuaywgZGF0YSA9IHZub2RlLmRhdGE7XG4gICAgaWYgKGlzRGVmKGRhdGEpKSB7XG4gICAgICBpZiAoaXNEZWYoaSA9IGRhdGEuaG9vaykgJiYgaXNEZWYoaSA9IGkuaW5pdCkpIGkodm5vZGUpO1xuICAgICAgaWYgKGlzRGVmKGkgPSBkYXRhLnZub2RlKSkge1xuICAgICAgICAgIHRodW5rID0gdm5vZGU7XG4gICAgICAgICAgdm5vZGUgPSBpO1xuICAgICAgfVxuICAgIH1cbiAgICB2YXIgZWxtLCBjaGlsZHJlbiA9IHZub2RlLmNoaWxkcmVuLCBzZWwgPSB2bm9kZS5zZWw7XG4gICAgaWYgKGlzRGVmKHNlbCkpIHtcbiAgICAgIC8vIFBhcnNlIHNlbGVjdG9yXG4gICAgICB2YXIgaGFzaElkeCA9IHNlbC5pbmRleE9mKCcjJyk7XG4gICAgICB2YXIgZG90SWR4ID0gc2VsLmluZGV4T2YoJy4nLCBoYXNoSWR4KTtcbiAgICAgIHZhciBoYXNoID0gaGFzaElkeCA+IDAgPyBoYXNoSWR4IDogc2VsLmxlbmd0aDtcbiAgICAgIHZhciBkb3QgPSBkb3RJZHggPiAwID8gZG90SWR4IDogc2VsLmxlbmd0aDtcbiAgICAgIHZhciB0YWcgPSBoYXNoSWR4ICE9PSAtMSB8fCBkb3RJZHggIT09IC0xID8gc2VsLnNsaWNlKDAsIE1hdGgubWluKGhhc2gsIGRvdCkpIDogc2VsO1xuICAgICAgZWxtID0gdm5vZGUuZWxtID0gaXNEZWYoZGF0YSkgJiYgaXNEZWYoaSA9IGRhdGEubnMpID8gYXBpLmNyZWF0ZUVsZW1lbnROUyhpLCB0YWcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBhcGkuY3JlYXRlRWxlbWVudCh0YWcpO1xuICAgICAgaWYgKGhhc2ggPCBkb3QpIGVsbS5pZCA9IHNlbC5zbGljZShoYXNoICsgMSwgZG90KTtcbiAgICAgIGlmIChkb3RJZHggPiAwKSBlbG0uY2xhc3NOYW1lID0gc2VsLnNsaWNlKGRvdCsxKS5yZXBsYWNlKC9cXC4vZywgJyAnKTtcbiAgICAgIGlmIChpcy5hcnJheShjaGlsZHJlbikpIHtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgYXBpLmFwcGVuZENoaWxkKGVsbSwgY3JlYXRlRWxtKGNoaWxkcmVuW2ldLCBpbnNlcnRlZFZub2RlUXVldWUpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpcy5wcmltaXRpdmUodm5vZGUudGV4dCkpIHtcbiAgICAgICAgYXBpLmFwcGVuZENoaWxkKGVsbSwgYXBpLmNyZWF0ZVRleHROb2RlKHZub2RlLnRleHQpKTtcbiAgICAgIH1cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBjYnMuY3JlYXRlLmxlbmd0aDsgKytpKSBjYnMuY3JlYXRlW2ldKGVtcHR5Tm9kZSwgdm5vZGUpO1xuICAgICAgaSA9IHZub2RlLmRhdGEuaG9vazsgLy8gUmV1c2UgdmFyaWFibGVcbiAgICAgIGlmIChpc0RlZihpKSkge1xuICAgICAgICBpZiAoaS5jcmVhdGUpIGkuY3JlYXRlKGVtcHR5Tm9kZSwgdm5vZGUpO1xuICAgICAgICBpZiAoaS5pbnNlcnQpIGluc2VydGVkVm5vZGVRdWV1ZS5wdXNoKHZub2RlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZWxtID0gdm5vZGUuZWxtID0gYXBpLmNyZWF0ZVRleHROb2RlKHZub2RlLnRleHQpO1xuICAgIH1cbiAgICBpZiAoaXNEZWYodGh1bmspKSB0aHVuay5lbG0gPSB2bm9kZS5lbG07XG4gICAgcmV0dXJuIHZub2RlLmVsbTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFkZFZub2RlcyhwYXJlbnRFbG0sIGJlZm9yZSwgdm5vZGVzLCBzdGFydElkeCwgZW5kSWR4LCBpbnNlcnRlZFZub2RlUXVldWUpIHtcbiAgICBmb3IgKDsgc3RhcnRJZHggPD0gZW5kSWR4OyArK3N0YXJ0SWR4KSB7XG4gICAgICBhcGkuaW5zZXJ0QmVmb3JlKHBhcmVudEVsbSwgY3JlYXRlRWxtKHZub2Rlc1tzdGFydElkeF0sIGluc2VydGVkVm5vZGVRdWV1ZSksIGJlZm9yZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaW52b2tlRGVzdHJveUhvb2sodm5vZGUpIHtcbiAgICB2YXIgaSwgaiwgZGF0YSA9IHZub2RlLmRhdGE7XG4gICAgaWYgKGlzRGVmKGRhdGEpKSB7XG4gICAgICBpZiAoaXNEZWYoaSA9IGRhdGEuaG9vaykgJiYgaXNEZWYoaSA9IGkuZGVzdHJveSkpIGkodm5vZGUpO1xuICAgICAgZm9yIChpID0gMDsgaSA8IGNicy5kZXN0cm95Lmxlbmd0aDsgKytpKSBjYnMuZGVzdHJveVtpXSh2bm9kZSk7XG4gICAgICBpZiAoaXNEZWYoaSA9IHZub2RlLmNoaWxkcmVuKSkge1xuICAgICAgICBmb3IgKGogPSAwOyBqIDwgdm5vZGUuY2hpbGRyZW4ubGVuZ3RoOyArK2opIHtcbiAgICAgICAgICBpbnZva2VEZXN0cm95SG9vayh2bm9kZS5jaGlsZHJlbltqXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChpc0RlZihpID0gZGF0YS52bm9kZSkpIGludm9rZURlc3Ryb3lIb29rKGkpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbW92ZVZub2RlcyhwYXJlbnRFbG0sIHZub2Rlcywgc3RhcnRJZHgsIGVuZElkeCkge1xuICAgIGZvciAoOyBzdGFydElkeCA8PSBlbmRJZHg7ICsrc3RhcnRJZHgpIHtcbiAgICAgIHZhciBpLCBsaXN0ZW5lcnMsIHJtLCBjaCA9IHZub2Rlc1tzdGFydElkeF07XG4gICAgICBpZiAoaXNEZWYoY2gpKSB7XG4gICAgICAgIGlmIChpc0RlZihjaC5zZWwpKSB7XG4gICAgICAgICAgaW52b2tlRGVzdHJveUhvb2soY2gpO1xuICAgICAgICAgIGxpc3RlbmVycyA9IGNicy5yZW1vdmUubGVuZ3RoICsgMTtcbiAgICAgICAgICBybSA9IGNyZWF0ZVJtQ2IoY2guZWxtLCBsaXN0ZW5lcnMpO1xuICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjYnMucmVtb3ZlLmxlbmd0aDsgKytpKSBjYnMucmVtb3ZlW2ldKGNoLCBybSk7XG4gICAgICAgICAgaWYgKGlzRGVmKGkgPSBjaC5kYXRhKSAmJiBpc0RlZihpID0gaS5ob29rKSAmJiBpc0RlZihpID0gaS5yZW1vdmUpKSB7XG4gICAgICAgICAgICBpKGNoLCBybSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJtKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgeyAvLyBUZXh0IG5vZGVcbiAgICAgICAgICBhcGkucmVtb3ZlQ2hpbGQocGFyZW50RWxtLCBjaC5lbG0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlQ2hpbGRyZW4ocGFyZW50RWxtLCBvbGRDaCwgbmV3Q2gsIGluc2VydGVkVm5vZGVRdWV1ZSkge1xuICAgIHZhciBvbGRTdGFydElkeCA9IDAsIG5ld1N0YXJ0SWR4ID0gMDtcbiAgICB2YXIgb2xkRW5kSWR4ID0gb2xkQ2gubGVuZ3RoIC0gMTtcbiAgICB2YXIgb2xkU3RhcnRWbm9kZSA9IG9sZENoWzBdO1xuICAgIHZhciBvbGRFbmRWbm9kZSA9IG9sZENoW29sZEVuZElkeF07XG4gICAgdmFyIG5ld0VuZElkeCA9IG5ld0NoLmxlbmd0aCAtIDE7XG4gICAgdmFyIG5ld1N0YXJ0Vm5vZGUgPSBuZXdDaFswXTtcbiAgICB2YXIgbmV3RW5kVm5vZGUgPSBuZXdDaFtuZXdFbmRJZHhdO1xuICAgIHZhciBvbGRLZXlUb0lkeCwgaWR4SW5PbGQsIGVsbVRvTW92ZSwgYmVmb3JlO1xuXG4gICAgd2hpbGUgKG9sZFN0YXJ0SWR4IDw9IG9sZEVuZElkeCAmJiBuZXdTdGFydElkeCA8PSBuZXdFbmRJZHgpIHtcbiAgICAgIGlmIChpc1VuZGVmKG9sZFN0YXJ0Vm5vZGUpKSB7XG4gICAgICAgIG9sZFN0YXJ0Vm5vZGUgPSBvbGRDaFsrK29sZFN0YXJ0SWR4XTsgLy8gVm5vZGUgaGFzIGJlZW4gbW92ZWQgbGVmdFxuICAgICAgfSBlbHNlIGlmIChpc1VuZGVmKG9sZEVuZFZub2RlKSkge1xuICAgICAgICBvbGRFbmRWbm9kZSA9IG9sZENoWy0tb2xkRW5kSWR4XTtcbiAgICAgIH0gZWxzZSBpZiAoc2FtZVZub2RlKG9sZFN0YXJ0Vm5vZGUsIG5ld1N0YXJ0Vm5vZGUpKSB7XG4gICAgICAgIHBhdGNoVm5vZGUob2xkU3RhcnRWbm9kZSwgbmV3U3RhcnRWbm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcbiAgICAgICAgb2xkU3RhcnRWbm9kZSA9IG9sZENoWysrb2xkU3RhcnRJZHhdO1xuICAgICAgICBuZXdTdGFydFZub2RlID0gbmV3Q2hbKytuZXdTdGFydElkeF07XG4gICAgICB9IGVsc2UgaWYgKHNhbWVWbm9kZShvbGRFbmRWbm9kZSwgbmV3RW5kVm5vZGUpKSB7XG4gICAgICAgIHBhdGNoVm5vZGUob2xkRW5kVm5vZGUsIG5ld0VuZFZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgICBvbGRFbmRWbm9kZSA9IG9sZENoWy0tb2xkRW5kSWR4XTtcbiAgICAgICAgbmV3RW5kVm5vZGUgPSBuZXdDaFstLW5ld0VuZElkeF07XG4gICAgICB9IGVsc2UgaWYgKHNhbWVWbm9kZShvbGRTdGFydFZub2RlLCBuZXdFbmRWbm9kZSkpIHsgLy8gVm5vZGUgbW92ZWQgcmlnaHRcbiAgICAgICAgcGF0Y2hWbm9kZShvbGRTdGFydFZub2RlLCBuZXdFbmRWbm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcbiAgICAgICAgYXBpLmluc2VydEJlZm9yZShwYXJlbnRFbG0sIG9sZFN0YXJ0Vm5vZGUuZWxtLCBhcGkubmV4dFNpYmxpbmcob2xkRW5kVm5vZGUuZWxtKSk7XG4gICAgICAgIG9sZFN0YXJ0Vm5vZGUgPSBvbGRDaFsrK29sZFN0YXJ0SWR4XTtcbiAgICAgICAgbmV3RW5kVm5vZGUgPSBuZXdDaFstLW5ld0VuZElkeF07XG4gICAgICB9IGVsc2UgaWYgKHNhbWVWbm9kZShvbGRFbmRWbm9kZSwgbmV3U3RhcnRWbm9kZSkpIHsgLy8gVm5vZGUgbW92ZWQgbGVmdFxuICAgICAgICBwYXRjaFZub2RlKG9sZEVuZFZub2RlLCBuZXdTdGFydFZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgICBhcGkuaW5zZXJ0QmVmb3JlKHBhcmVudEVsbSwgb2xkRW5kVm5vZGUuZWxtLCBvbGRTdGFydFZub2RlLmVsbSk7XG4gICAgICAgIG9sZEVuZFZub2RlID0gb2xkQ2hbLS1vbGRFbmRJZHhdO1xuICAgICAgICBuZXdTdGFydFZub2RlID0gbmV3Q2hbKytuZXdTdGFydElkeF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoaXNVbmRlZihvbGRLZXlUb0lkeCkpIG9sZEtleVRvSWR4ID0gY3JlYXRlS2V5VG9PbGRJZHgob2xkQ2gsIG9sZFN0YXJ0SWR4LCBvbGRFbmRJZHgpO1xuICAgICAgICBpZHhJbk9sZCA9IG9sZEtleVRvSWR4W25ld1N0YXJ0Vm5vZGUua2V5XTtcbiAgICAgICAgaWYgKGlzVW5kZWYoaWR4SW5PbGQpKSB7IC8vIE5ldyBlbGVtZW50XG4gICAgICAgICAgYXBpLmluc2VydEJlZm9yZShwYXJlbnRFbG0sIGNyZWF0ZUVsbShuZXdTdGFydFZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpLCBvbGRTdGFydFZub2RlLmVsbSk7XG4gICAgICAgICAgbmV3U3RhcnRWbm9kZSA9IG5ld0NoWysrbmV3U3RhcnRJZHhdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVsbVRvTW92ZSA9IG9sZENoW2lkeEluT2xkXTtcbiAgICAgICAgICBwYXRjaFZub2RlKGVsbVRvTW92ZSwgbmV3U3RhcnRWbm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcbiAgICAgICAgICBvbGRDaFtpZHhJbk9sZF0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgYXBpLmluc2VydEJlZm9yZShwYXJlbnRFbG0sIGVsbVRvTW92ZS5lbG0sIG9sZFN0YXJ0Vm5vZGUuZWxtKTtcbiAgICAgICAgICBuZXdTdGFydFZub2RlID0gbmV3Q2hbKytuZXdTdGFydElkeF07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG9sZFN0YXJ0SWR4ID4gb2xkRW5kSWR4KSB7XG4gICAgICBiZWZvcmUgPSBpc1VuZGVmKG5ld0NoW25ld0VuZElkeCsxXSkgPyBudWxsIDogbmV3Q2hbbmV3RW5kSWR4KzFdLmVsbTtcbiAgICAgIGFkZFZub2RlcyhwYXJlbnRFbG0sIGJlZm9yZSwgbmV3Q2gsIG5ld1N0YXJ0SWR4LCBuZXdFbmRJZHgsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgfSBlbHNlIGlmIChuZXdTdGFydElkeCA+IG5ld0VuZElkeCkge1xuICAgICAgcmVtb3ZlVm5vZGVzKHBhcmVudEVsbSwgb2xkQ2gsIG9sZFN0YXJ0SWR4LCBvbGRFbmRJZHgpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHBhdGNoVm5vZGUob2xkVm5vZGUsIHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpIHtcbiAgICB2YXIgaSwgaG9vaztcbiAgICBpZiAoaXNEZWYoaSA9IHZub2RlLmRhdGEpICYmIGlzRGVmKGhvb2sgPSBpLmhvb2spICYmIGlzRGVmKGkgPSBob29rLnByZXBhdGNoKSkge1xuICAgICAgaShvbGRWbm9kZSwgdm5vZGUpO1xuICAgIH1cbiAgICBpZiAoaXNEZWYoaSA9IG9sZFZub2RlLmRhdGEpICYmIGlzRGVmKGkgPSBpLnZub2RlKSkgb2xkVm5vZGUgPSBpO1xuICAgIGlmIChpc0RlZihpID0gdm5vZGUuZGF0YSkgJiYgaXNEZWYoaSA9IGkudm5vZGUpKSB7XG4gICAgICBwYXRjaFZub2RlKG9sZFZub2RlLCBpLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgdm5vZGUuZWxtID0gaS5lbG07XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBlbG0gPSB2bm9kZS5lbG0gPSBvbGRWbm9kZS5lbG0sIG9sZENoID0gb2xkVm5vZGUuY2hpbGRyZW4sIGNoID0gdm5vZGUuY2hpbGRyZW47XG4gICAgaWYgKG9sZFZub2RlID09PSB2bm9kZSkgcmV0dXJuO1xuICAgIGlmICghc2FtZVZub2RlKG9sZFZub2RlLCB2bm9kZSkpIHtcbiAgICAgIHZhciBwYXJlbnRFbG0gPSBhcGkucGFyZW50Tm9kZShvbGRWbm9kZS5lbG0pO1xuICAgICAgZWxtID0gY3JlYXRlRWxtKHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgYXBpLmluc2VydEJlZm9yZShwYXJlbnRFbG0sIGVsbSwgb2xkVm5vZGUuZWxtKTtcbiAgICAgIHJlbW92ZVZub2RlcyhwYXJlbnRFbG0sIFtvbGRWbm9kZV0sIDAsIDApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoaXNEZWYodm5vZGUuZGF0YSkpIHtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBjYnMudXBkYXRlLmxlbmd0aDsgKytpKSBjYnMudXBkYXRlW2ldKG9sZFZub2RlLCB2bm9kZSk7XG4gICAgICBpID0gdm5vZGUuZGF0YS5ob29rO1xuICAgICAgaWYgKGlzRGVmKGkpICYmIGlzRGVmKGkgPSBpLnVwZGF0ZSkpIGkob2xkVm5vZGUsIHZub2RlKTtcbiAgICB9XG4gICAgaWYgKGlzVW5kZWYodm5vZGUudGV4dCkpIHtcbiAgICAgIGlmIChpc0RlZihvbGRDaCkgJiYgaXNEZWYoY2gpKSB7XG4gICAgICAgIGlmIChvbGRDaCAhPT0gY2gpIHVwZGF0ZUNoaWxkcmVuKGVsbSwgb2xkQ2gsIGNoLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgfSBlbHNlIGlmIChpc0RlZihjaCkpIHtcbiAgICAgICAgaWYgKGlzRGVmKG9sZFZub2RlLnRleHQpKSBhcGkuc2V0VGV4dENvbnRlbnQoZWxtLCAnJyk7XG4gICAgICAgIGFkZFZub2RlcyhlbG0sIG51bGwsIGNoLCAwLCBjaC5sZW5ndGggLSAxLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgfSBlbHNlIGlmIChpc0RlZihvbGRDaCkpIHtcbiAgICAgICAgcmVtb3ZlVm5vZGVzKGVsbSwgb2xkQ2gsIDAsIG9sZENoLmxlbmd0aCAtIDEpO1xuICAgICAgfSBlbHNlIGlmIChpc0RlZihvbGRWbm9kZS50ZXh0KSkge1xuICAgICAgICBhcGkuc2V0VGV4dENvbnRlbnQoZWxtLCAnJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChvbGRWbm9kZS50ZXh0ICE9PSB2bm9kZS50ZXh0KSB7XG4gICAgICBhcGkuc2V0VGV4dENvbnRlbnQoZWxtLCB2bm9kZS50ZXh0KTtcbiAgICB9XG4gICAgaWYgKGlzRGVmKGhvb2spICYmIGlzRGVmKGkgPSBob29rLnBvc3RwYXRjaCkpIHtcbiAgICAgIGkob2xkVm5vZGUsIHZub2RlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24ob2xkVm5vZGUsIHZub2RlKSB7XG4gICAgdmFyIGksIGVsbSwgcGFyZW50O1xuICAgIHZhciBpbnNlcnRlZFZub2RlUXVldWUgPSBbXTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgY2JzLnByZS5sZW5ndGg7ICsraSkgY2JzLnByZVtpXSgpO1xuXG4gICAgaWYgKGlzVW5kZWYob2xkVm5vZGUuc2VsKSkge1xuICAgICAgb2xkVm5vZGUgPSBlbXB0eU5vZGVBdChvbGRWbm9kZSk7XG4gICAgfVxuXG4gICAgaWYgKHNhbWVWbm9kZShvbGRWbm9kZSwgdm5vZGUpKSB7XG4gICAgICBwYXRjaFZub2RlKG9sZFZub2RlLCB2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWxtID0gb2xkVm5vZGUuZWxtO1xuICAgICAgcGFyZW50ID0gYXBpLnBhcmVudE5vZGUoZWxtKTtcblxuICAgICAgY3JlYXRlRWxtKHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuXG4gICAgICBpZiAocGFyZW50ICE9PSBudWxsKSB7XG4gICAgICAgIGFwaS5pbnNlcnRCZWZvcmUocGFyZW50LCB2bm9kZS5lbG0sIGFwaS5uZXh0U2libGluZyhlbG0pKTtcbiAgICAgICAgcmVtb3ZlVm5vZGVzKHBhcmVudCwgW29sZFZub2RlXSwgMCwgMCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChpID0gMDsgaSA8IGluc2VydGVkVm5vZGVRdWV1ZS5sZW5ndGg7ICsraSkge1xuICAgICAgaW5zZXJ0ZWRWbm9kZVF1ZXVlW2ldLmRhdGEuaG9vay5pbnNlcnQoaW5zZXJ0ZWRWbm9kZVF1ZXVlW2ldKTtcbiAgICB9XG4gICAgZm9yIChpID0gMDsgaSA8IGNicy5wb3N0Lmxlbmd0aDsgKytpKSBjYnMucG9zdFtpXSgpO1xuICAgIHJldHVybiB2bm9kZTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7aW5pdDogaW5pdH07XG4iLCJ2YXIgaCA9IHJlcXVpcmUoJy4vaCcpO1xuXG5mdW5jdGlvbiBpbml0KHRodW5rKSB7XG4gIHZhciBpLCBjdXIgPSB0aHVuay5kYXRhO1xuICBjdXIudm5vZGUgPSBjdXIuZm4uYXBwbHkodW5kZWZpbmVkLCBjdXIuYXJncyk7XG59XG5cbmZ1bmN0aW9uIHByZXBhdGNoKG9sZFRodW5rLCB0aHVuaykge1xuICB2YXIgaSwgb2xkID0gb2xkVGh1bmsuZGF0YSwgY3VyID0gdGh1bmsuZGF0YTtcbiAgdmFyIG9sZEFyZ3MgPSBvbGQuYXJncywgYXJncyA9IGN1ci5hcmdzO1xuICBjdXIudm5vZGUgPSBvbGQudm5vZGU7XG4gIGlmIChvbGQuZm4gIT09IGN1ci5mbiB8fCBvbGRBcmdzLmxlbmd0aCAhPT0gYXJncy5sZW5ndGgpIHtcbiAgICBjdXIudm5vZGUgPSBjdXIuZm4uYXBwbHkodW5kZWZpbmVkLCBhcmdzKTtcbiAgICByZXR1cm47XG4gIH1cbiAgZm9yIChpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyArK2kpIHtcbiAgICBpZiAob2xkQXJnc1tpXSAhPT0gYXJnc1tpXSkge1xuICAgICAgY3VyLnZub2RlID0gY3VyLmZuLmFwcGx5KHVuZGVmaW5lZCwgYXJncyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24obmFtZSwgZm4gLyogYXJncyAqLykge1xuICB2YXIgaSwgYXJncyA9IFtdO1xuICBmb3IgKGkgPSAyOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgKytpKSB7XG4gICAgYXJnc1tpIC0gMl0gPSBhcmd1bWVudHNbaV07XG4gIH1cbiAgcmV0dXJuIGgoJ3RodW5rJyArIG5hbWUsIHtcbiAgICBob29rOiB7aW5pdDogaW5pdCwgcHJlcGF0Y2g6IHByZXBhdGNofSxcbiAgICBmbjogZm4sIGFyZ3M6IGFyZ3MsXG4gIH0pO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oc2VsLCBkYXRhLCBjaGlsZHJlbiwgdGV4dCwgZWxtKSB7XG4gIHZhciBrZXkgPSBkYXRhID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBkYXRhLmtleTtcbiAgcmV0dXJuIHtzZWw6IHNlbCwgZGF0YTogZGF0YSwgY2hpbGRyZW46IGNoaWxkcmVuLFxuICAgICAgICAgIHRleHQ6IHRleHQsIGVsbTogZWxtLCBrZXk6IGtleX07XG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgY2xpY2tFdmVudCA9ICd1bmRlZmluZWQnICE9PSB0eXBlb2YgZG9jdW1lbnQgJiYgZG9jdW1lbnQub250b3VjaHN0YXJ0ID9cbiAgICAndG91Y2hzdGFydCcgOiAnY2xpY2snO1xuZnVuY3Rpb24gd2hpY2goZXYpIHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB2YXIgZSA9IGV2IHx8IHdpbmRvdy5ldmVudDtcbiAgICByZXR1cm4gZS53aGljaCA9PT0gbnVsbCA/IGUuYnV0dG9uIDogZS53aGljaDtcbn1cbmZ1bmN0aW9uIHNhbWVPcmlnaW4oaHJlZikge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBocmVmICYmIGhyZWYuaW5kZXhPZih3aW5kb3cubG9jYXRpb24ub3JpZ2luKSA9PT0gMDtcbn1cbmZ1bmN0aW9uIG1ha2VDbGlja0xpc3RlbmVyKHB1c2gpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gY2xpY2tMaXN0ZW5lcihldmVudCkge1xuICAgICAgICBpZiAod2hpY2goZXZlbnQpICE9PSAxKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50Lm1ldGFLZXkgfHwgZXZlbnQuY3RybEtleSB8fCBldmVudC5zaGlmdEtleSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGVsZW1lbnQgPSBldmVudC50YXJnZXQ7XG4gICAgICAgIHdoaWxlIChlbGVtZW50ICYmIGVsZW1lbnQubm9kZU5hbWUgIT09ICdBJykge1xuICAgICAgICAgICAgZWxlbWVudCA9IGVsZW1lbnQucGFyZW50Tm9kZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWVsZW1lbnQgfHwgZWxlbWVudC5ub2RlTmFtZSAhPT0gJ0EnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVsZW1lbnQuaGFzQXR0cmlidXRlKCdkb3dubG9hZCcpIHx8XG4gICAgICAgICAgICBlbGVtZW50LmdldEF0dHJpYnV0ZSgncmVsJykgPT09ICdleHRlcm5hbCcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZWxlbWVudC50YXJnZXQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbGluayA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdocmVmJyk7XG4gICAgICAgIGlmIChsaW5rICYmIGxpbmsuaW5kZXhPZignbWFpbHRvOicpID4gLTEgfHwgbGluayA9PT0gJyMnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFzYW1lT3JpZ2luKGVsZW1lbnQuaHJlZikpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB2YXIgcGF0aG5hbWUgPSBlbGVtZW50LnBhdGhuYW1lLCBzZWFyY2ggPSBlbGVtZW50LnNlYXJjaCwgX2EgPSBlbGVtZW50Lmhhc2gsIGhhc2ggPSBfYSA9PT0gdm9pZCAwID8gJycgOiBfYTtcbiAgICAgICAgcHVzaChwYXRobmFtZSArIHNlYXJjaCArIGhhc2gpO1xuICAgIH07XG59XG5mdW5jdGlvbiBjYXB0dXJlQ2xpY2tzKHB1c2gpIHtcbiAgICB2YXIgbGlzdGVuZXIgPSBtYWtlQ2xpY2tMaXN0ZW5lcihwdXNoKTtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihjbGlja0V2ZW50LCBsaXN0ZW5lciwgZmFsc2UpO1xuICAgIH1cbn1cbmV4cG9ydHMuY2FwdHVyZUNsaWNrcyA9IGNhcHR1cmVDbGlja3M7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jYXB0dXJlQ2xpY2tzLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIG1ha2VIaXN0b3J5RHJpdmVyXzEgPSByZXF1aXJlKCcuL21ha2VIaXN0b3J5RHJpdmVyJyk7XG5leHBvcnRzLm1ha2VIaXN0b3J5RHJpdmVyID0gbWFrZUhpc3RvcnlEcml2ZXJfMS5tYWtlSGlzdG9yeURyaXZlcjtcbnZhciBzZXJ2ZXJIaXN0b3J5XzEgPSByZXF1aXJlKCcuL3NlcnZlckhpc3RvcnknKTtcbmV4cG9ydHMuY3JlYXRlU2VydmVySGlzdG9yeSA9IHNlcnZlckhpc3RvcnlfMS5jcmVhdGVTZXJ2ZXJIaXN0b3J5O1xudmFyIHV0aWxfMSA9IHJlcXVpcmUoJy4vdXRpbCcpO1xuZXhwb3J0cy5zdXBwb3J0c0hpc3RvcnkgPSB1dGlsXzEuc3VwcG9ydHNIaXN0b3J5O1xuZXhwb3J0cy5jcmVhdGVMb2NhdGlvbiA9IHV0aWxfMS5jcmVhdGVMb2NhdGlvbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIGNhcHR1cmVDbGlja3NfMSA9IHJlcXVpcmUoJy4vY2FwdHVyZUNsaWNrcycpO1xuZnVuY3Rpb24gbWFrZVVwZGF0ZUhpc3RvcnkoaGlzdG9yeSkge1xuICAgIHJldHVybiBmdW5jdGlvbiB1cGRhdGVIaXN0b3J5KGxvY2F0aW9uKSB7XG4gICAgICAgIGlmICgnc3RyaW5nJyA9PT0gdHlwZW9mIGxvY2F0aW9uKSB7XG4gICAgICAgICAgICBoaXN0b3J5LnB1c2goaGlzdG9yeS5jcmVhdGVMb2NhdGlvbihsb2NhdGlvbikpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCdvYmplY3QnID09PSB0eXBlb2YgbG9jYXRpb24pIHtcbiAgICAgICAgICAgIC8vIHN1cG9ydCB0aGluZ3MgbGlrZSBoaXN0b3J5LnJlcGxhY2UoKVxuICAgICAgICAgICAgdmFyIF9hID0gbG9jYXRpb24udHlwZSwgdHlwZSA9IF9hID09PSB2b2lkIDAgPyAncHVzaCcgOiBfYTtcbiAgICAgICAgICAgIGlmICh0eXBlID09PSAnZ28nKSB7XG4gICAgICAgICAgICAgICAgaGlzdG9yeVt0eXBlXShsb2NhdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBoaXN0b3J5W3R5cGVdKGxvY2F0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSGlzdG9yeSBEcml2ZXIgaW5wdXQgbXVzdCBiZSBhIHN0cmluZyBvciBhbiAnICtcbiAgICAgICAgICAgICAgICAnb2JqZWN0IGJ1dCByZWNlaXZlZCAke3R5cGVvZiB1cmx9Jyk7XG4gICAgICAgIH1cbiAgICB9O1xufVxuZnVuY3Rpb24gZGVmYXVsdE9uRXJyb3JGbihlcnIpIHtcbiAgICBpZiAoY29uc29sZSAmJiBjb25zb2xlLmVycm9yICE9PSB2b2lkIDApIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIG1ha2VIaXN0b3J5RHJpdmVyKGhpc3RvcnksIG9wdGlvbnMpIHtcbiAgICBpZiAoIWhpc3RvcnkgfHwgdHlwZW9mIGhpc3RvcnkgIT09ICdvYmplY3QnXG4gICAgICAgIHx8IHR5cGVvZiBoaXN0b3J5LmNyZWF0ZUxvY2F0aW9uICE9PSAnZnVuY3Rpb24nXG4gICAgICAgIHx8IHR5cGVvZiBoaXN0b3J5LmNyZWF0ZUhyZWYgIT09ICdmdW5jdGlvbidcbiAgICAgICAgfHwgdHlwZW9mIGhpc3RvcnkubGlzdGVuICE9PSAnZnVuY3Rpb24nXG4gICAgICAgIHx8IHR5cGVvZiBoaXN0b3J5LnB1c2ggIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignbWFrZUhpc3RvcnlEcml2ZXIgcmVxdWlyZXMgYW4gdmFsaWQgaGlzdG9yeSBvYmplY3QgJyArXG4gICAgICAgICAgICAnY29udGFpbmluZyBjcmVhdGVMb2NhdGlvbigpLCBjcmVhdGVIcmVmKCksIHB1c2goKSwgYW5kIGxpc3RlbigpIG1ldGhvZHMnKTtcbiAgICB9XG4gICAgdmFyIGNhcHR1cmUgPSBvcHRpb25zICYmIG9wdGlvbnMuY2FwdHVyZSB8fCBmYWxzZTtcbiAgICB2YXIgb25FcnJvciA9IG9wdGlvbnMgJiYgb3B0aW9ucy5vbkVycm9yIHx8IGRlZmF1bHRPbkVycm9yRm47XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGhpc3RvcnlEcml2ZXIoc2luayQsIHJ1blNBKSB7XG4gICAgICAgIHZhciBfYSA9IHJ1blNBLm1ha2VTdWJqZWN0KCksIG9ic2VydmVyID0gX2Eub2JzZXJ2ZXIsIHN0cmVhbSA9IF9hLnN0cmVhbTtcbiAgICAgICAgdmFyIGhpc3RvcnkkID0gcnVuU0EucmVtZW1iZXIoc3RyZWFtXG4gICAgICAgICAgICAuc3RhcnRXaXRoKGhpc3RvcnkuZ2V0Q3VycmVudExvY2F0aW9uKCkpXG4gICAgICAgICAgICAuZmlsdGVyKEJvb2xlYW4pKTtcbiAgICAgICAgdmFyIHVubGlzdGVuID0gaGlzdG9yeS5saXN0ZW4oZnVuY3Rpb24gKGxvY2F0aW9uKSB7XG4gICAgICAgICAgICBvYnNlcnZlci5uZXh0KGxvY2F0aW9uKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICh0eXBlb2YgaGlzdG9yeS5hZGRDb21wbGV0ZUNhbGxiYWNrID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICAmJiB0eXBlb2YgaGlzdG9yeS5jb21wbGV0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgaGlzdG9yeS5hZGRDb21wbGV0ZUNhbGxiYWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcnVuU0Euc3RyZWFtU3Vic2NyaWJlKHNpbmskLCB7XG4gICAgICAgICAgICBuZXh0OiBtYWtlVXBkYXRlSGlzdG9yeShoaXN0b3J5KSxcbiAgICAgICAgICAgIGVycm9yOiBvbkVycm9yLFxuICAgICAgICAgICAgY29tcGxldGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB1bmxpc3RlbigpO1xuICAgICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoY2FwdHVyZSkge1xuICAgICAgICAgICAgY2FwdHVyZUNsaWNrc18xLmNhcHR1cmVDbGlja3MoZnVuY3Rpb24gKHBhdGhuYW1lKSB7XG4gICAgICAgICAgICAgICAgdmFyIGxvY2F0aW9uID0gaGlzdG9yeS5jcmVhdGVMb2NhdGlvbihwYXRobmFtZSk7XG4gICAgICAgICAgICAgICAgaGlzdG9yeS5wdXNoKGxvY2F0aW9uKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGhpc3RvcnkkLmNyZWF0ZUhyZWYgPSBmdW5jdGlvbiAoaHJlZikgeyByZXR1cm4gaGlzdG9yeS5jcmVhdGVIcmVmKGhyZWYpOyB9O1xuICAgICAgICBoaXN0b3J5JC5jcmVhdGVMb2NhdGlvbiA9IGZ1bmN0aW9uIChsb2NhdGlvbikgeyByZXR1cm4gaGlzdG9yeS5jcmVhdGVMb2NhdGlvbihsb2NhdGlvbik7IH07XG4gICAgICAgIHJldHVybiBoaXN0b3J5JDtcbiAgICB9O1xufVxuZXhwb3J0cy5tYWtlSGlzdG9yeURyaXZlciA9IG1ha2VIaXN0b3J5RHJpdmVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWFrZUhpc3RvcnlEcml2ZXIuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgdXRpbF8xID0gcmVxdWlyZSgnLi91dGlsJyk7XG52YXIgU2VydmVySGlzdG9yeSA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gU2VydmVySGlzdG9yeShjdXJyZW50TG9jYXRpb24pIHtcbiAgICAgICAgdGhpcy5jdXJyZW50TG9jYXRpb24gPSBjdXJyZW50TG9jYXRpb247XG4gICAgICAgIHRoaXMubGlzdGVuZXJzID0gW107XG4gICAgfVxuICAgIFNlcnZlckhpc3RvcnkucHJvdG90eXBlLmxpc3RlbiA9IGZ1bmN0aW9uIChsaXN0ZW5lcikge1xuICAgICAgICB0aGlzLmxpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIG5vb3AoKSB7IHJldHVybiB2b2lkIDA7IH07XG4gICAgfTtcbiAgICBTZXJ2ZXJIaXN0b3J5LnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gKGxvY2F0aW9uKSB7XG4gICAgICAgIHZhciBsZW5ndGggPSB0aGlzLmxpc3RlbmVycy5sZW5ndGg7XG4gICAgICAgIGlmIChsZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTXVzdCBiZSBnaXZlbiBhdCBsZWFzdCBvbmUgbGlzdGVuZXIgYmVmb3JlIHB1c2hpbmcnKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICB0aGlzLmxpc3RlbmVyc1tpXSh1dGlsXzEuY3JlYXRlTG9jYXRpb24obG9jYXRpb24pKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU2VydmVySGlzdG9yeS5wcm90b3R5cGUucmVwbGFjZSA9IGZ1bmN0aW9uIChsb2NhdGlvbikge1xuICAgICAgICB0aGlzLnB1c2gobG9jYXRpb24pO1xuICAgIH07XG4gICAgU2VydmVySGlzdG9yeS5wcm90b3R5cGUuY3JlYXRlSHJlZiA9IGZ1bmN0aW9uIChwYXRoKSB7XG4gICAgICAgIHJldHVybiBwYXRoO1xuICAgIH07XG4gICAgU2VydmVySGlzdG9yeS5wcm90b3R5cGUuY3JlYXRlTG9jYXRpb24gPSBmdW5jdGlvbiAobG9jYXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHV0aWxfMS5jcmVhdGVMb2NhdGlvbihsb2NhdGlvbik7XG4gICAgfTtcbiAgICBTZXJ2ZXJIaXN0b3J5LnByb3RvdHlwZS5nZXRDdXJyZW50TG9jYXRpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRMb2NhdGlvbjtcbiAgICB9O1xuICAgIFNlcnZlckhpc3RvcnkucHJvdG90eXBlLmFkZENvbXBsZXRlQ2FsbGJhY2sgPSBmdW5jdGlvbiAoY29tcGxldGUpIHtcbiAgICAgICAgdGhpcy5fY29tcGxldGVDYWxsYmFjayA9IGNvbXBsZXRlO1xuICAgIH07XG4gICAgU2VydmVySGlzdG9yeS5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuX2NvbXBsZXRlQ2FsbGJhY2soKTtcbiAgICB9O1xuICAgIHJldHVybiBTZXJ2ZXJIaXN0b3J5O1xufSgpKTtcbmZ1bmN0aW9uIGNyZWF0ZVNlcnZlckhpc3RvcnkobG9jKSB7XG4gICAgcmV0dXJuIG5ldyBTZXJ2ZXJIaXN0b3J5KGxvYyA/IHV0aWxfMS5jcmVhdGVMb2NhdGlvbihsb2MpIDogbnVsbCk7XG59XG5leHBvcnRzLmNyZWF0ZVNlcnZlckhpc3RvcnkgPSBjcmVhdGVTZXJ2ZXJIaXN0b3J5O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2VydmVySGlzdG9yeS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbmZ1bmN0aW9uIHN1cHBvcnRzSGlzdG9yeSgpIHtcbiAgICBpZiAodHlwZW9mIG5hdmlnYXRvciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB2YXIgdWEgPSBuYXZpZ2F0b3IudXNlckFnZW50O1xuICAgIGlmICgodWEuaW5kZXhPZignQW5kcm9pZCAyLicpICE9PSAtMSB8fFxuICAgICAgICB1YS5pbmRleE9mKCdBbmRyb2lkIDQuMCcpICE9PSAtMSkgJiZcbiAgICAgICAgdWEuaW5kZXhPZignTW9iaWxlIFNhZmFyaScpICE9PSAtMSAmJlxuICAgICAgICB1YS5pbmRleE9mKCdDaHJvbWUnKSA9PT0gLTEgJiZcbiAgICAgICAgdWEuaW5kZXhPZignV2luZG93cyBQaG9uZScpID09PSAtMSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gd2luZG93Lmhpc3RvcnkgJiYgJ3B1c2hTdGF0ZScgaW4gd2luZG93Lmhpc3Rvcnk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuZXhwb3J0cy5zdXBwb3J0c0hpc3RvcnkgPSBzdXBwb3J0c0hpc3Rvcnk7XG52YXIgbG9jYXRpb25EZWZhdWx0cyA9IHtcbiAgICBwYXRobmFtZTogJy8nLFxuICAgIGFjdGlvbjogJ1BPUCcsXG4gICAgaGFzaDogJycsXG4gICAgc2VhcmNoOiAnJyxcbiAgICBzdGF0ZTogdW5kZWZpbmVkLFxuICAgIGtleTogbnVsbCxcbiAgICBxdWVyeTogbnVsbCxcbn07XG5mdW5jdGlvbiBjcmVhdGVMb2NhdGlvbihsb2NhdGlvbikge1xuICAgIGlmICh0eXBlb2YgbG9jYXRpb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBsb2NhdGlvbkRlZmF1bHRzLCB7IHBhdGhuYW1lOiBsb2NhdGlvbiB9KTtcbiAgICB9XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGxvY2F0aW9uRGVmYXVsdHMsIGxvY2F0aW9uKTtcbn1cbmV4cG9ydHMuY3JlYXRlTG9jYXRpb24gPSBjcmVhdGVMb2NhdGlvbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWwuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgY291bnRlciA9IDA7XG5mdW5jdGlvbiBuZXdTY29wZSgpIHtcbiAgICByZXR1cm4gXCJjeWNsZVwiICsgKytjb3VudGVyO1xufVxuZnVuY3Rpb24gY2hlY2tJc29sYXRlQXJncyhkYXRhZmxvd0NvbXBvbmVudCwgc2NvcGUpIHtcbiAgICBpZiAodHlwZW9mIGRhdGFmbG93Q29tcG9uZW50ICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRmlyc3QgYXJndW1lbnQgZ2l2ZW4gdG8gaXNvbGF0ZSgpIG11c3QgYmUgYSBcIiArXG4gICAgICAgICAgICBcIidkYXRhZmxvd0NvbXBvbmVudCcgZnVuY3Rpb25cIik7XG4gICAgfVxuICAgIGlmIChzY29wZSA9PT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTZWNvbmQgYXJndW1lbnQgZ2l2ZW4gdG8gaXNvbGF0ZSgpIG11c3Qgbm90IGJlIG51bGxcIik7XG4gICAgfVxufVxuZnVuY3Rpb24gaXNvbGF0ZUFsbFNvdXJjZXMoc291cmNlcywgc2NvcGUpIHtcbiAgICB2YXIgc2NvcGVkU291cmNlcyA9IHt9O1xuICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2VzKSB7XG4gICAgICAgIGlmIChzb3VyY2VzLmhhc093blByb3BlcnR5KGtleSkgJiYgc291cmNlc1trZXldXG4gICAgICAgICAgICAmJiB0eXBlb2Ygc291cmNlc1trZXldLmlzb2xhdGVTb3VyY2UgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgc2NvcGVkU291cmNlc1trZXldID0gc291cmNlc1trZXldLmlzb2xhdGVTb3VyY2Uoc291cmNlc1trZXldLCBzY29wZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc291cmNlcy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICBzY29wZWRTb3VyY2VzW2tleV0gPSBzb3VyY2VzW2tleV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHNjb3BlZFNvdXJjZXM7XG59XG5mdW5jdGlvbiBpc29sYXRlQWxsU2lua3Moc291cmNlcywgc2lua3MsIHNjb3BlKSB7XG4gICAgdmFyIHNjb3BlZFNpbmtzID0ge307XG4gICAgZm9yICh2YXIga2V5IGluIHNpbmtzKSB7XG4gICAgICAgIGlmIChzaW5rcy5oYXNPd25Qcm9wZXJ0eShrZXkpXG4gICAgICAgICAgICAmJiBzb3VyY2VzW2tleV1cbiAgICAgICAgICAgICYmIHR5cGVvZiBzb3VyY2VzW2tleV0uaXNvbGF0ZVNpbmsgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgc2NvcGVkU2lua3Nba2V5XSA9IHNvdXJjZXNba2V5XS5pc29sYXRlU2luayhzaW5rc1trZXldLCBzY29wZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc2lua3MuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgICAgc2NvcGVkU2lua3Nba2V5XSA9IHNpbmtzW2tleV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHNjb3BlZFNpbmtzO1xufVxuLyoqXG4gKiBUYWtlcyBhIGBkYXRhZmxvd0NvbXBvbmVudGAgZnVuY3Rpb24gYW5kIGFuIG9wdGlvbmFsIGBzY29wZWAgc3RyaW5nLCBhbmRcbiAqIHJldHVybnMgYSBzY29wZWQgdmVyc2lvbiBvZiB0aGUgYGRhdGFmbG93Q29tcG9uZW50YCBmdW5jdGlvbi5cbiAqXG4gKiBXaGVuIHRoZSBzY29wZWQgZGF0YWZsb3cgY29tcG9uZW50IGlzIGludm9rZWQsIGVhY2ggc291cmNlIHByb3ZpZGVkIHRvIHRoZVxuICogc2NvcGVkIGRhdGFmbG93Q29tcG9uZW50IGlzIGlzb2xhdGVkIHRvIHRoZSBzY29wZSB1c2luZ1xuICogYHNvdXJjZS5pc29sYXRlU291cmNlKHNvdXJjZSwgc2NvcGUpYCwgaWYgcG9zc2libGUuIExpa2V3aXNlLCB0aGUgc2lua3NcbiAqIHJldHVybmVkIGZyb20gdGhlIHNjb3BlZCBkYXRhZmxvdyBjb21wb25lbnQgYXJlIGlzb2xhdGUgdG8gdGhlIHNjb3BlIHVzaW5nXG4gKiBgc291cmNlLmlzb2xhdGVTaW5rKHNpbmssIHNjb3BlKWAuXG4gKlxuICogSWYgdGhlIGBzY29wZWAgaXMgbm90IHByb3ZpZGVkLCBhIG5ldyBzY29wZSB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgY3JlYXRlZC5cbiAqIFRoaXMgbWVhbnMgdGhhdCB3aGlsZSAqKmBpc29sYXRlKGRhdGFmbG93Q29tcG9uZW50LCBzY29wZSlgIGlzIHB1cmUqKlxuICogKHJlZmVyZW50aWFsbHkgdHJhbnNwYXJlbnQpLCAqKmBpc29sYXRlKGRhdGFmbG93Q29tcG9uZW50KWAgaXMgaW1wdXJlKipcbiAqIChub3QgcmVmZXJlbnRpYWxseSB0cmFuc3BhcmVudCkuIFR3byBjYWxscyB0byBgaXNvbGF0ZShGb28sIGJhcilgIHdpbGxcbiAqIGdlbmVyYXRlIHR3byBpbmRpc3RpbmN0IGRhdGFmbG93IGNvbXBvbmVudHMuIEJ1dCwgdHdvIGNhbGxzIHRvIGBpc29sYXRlKEZvbylgXG4gKiB3aWxsIGdlbmVyYXRlIHR3byBkaXN0aW5jdCBkYXRhZmxvdyBjb21wb25lbnRzLlxuICpcbiAqIE5vdGUgdGhhdCBib3RoIGBpc29sYXRlU291cmNlKClgIGFuZCBgaXNvbGF0ZVNpbmsoKWAgYXJlIHN0YXRpYyBtZW1iZXJzIG9mXG4gKiBgc291cmNlYC4gVGhlIHJlYXNvbiBmb3IgdGhpcyBpcyB0aGF0IGRyaXZlcnMgcHJvZHVjZSBgc291cmNlYCB3aGlsZSB0aGVcbiAqIGFwcGxpY2F0aW9uIHByb2R1Y2VzIGBzaW5rYCwgYW5kIGl0J3MgdGhlIGRyaXZlcidzIHJlc3BvbnNpYmlsaXR5IHRvXG4gKiBpbXBsZW1lbnQgYGlzb2xhdGVTb3VyY2UoKWAgYW5kIGBpc29sYXRlU2luaygpYC5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBkYXRhZmxvd0NvbXBvbmVudCBhIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYHNvdXJjZXNgIGFzIGlucHV0XG4gKiBhbmQgb3V0cHV0cyBhIGNvbGxlY3Rpb24gb2YgYHNpbmtzYC5cbiAqIEBwYXJhbSB7U3RyaW5nfSBzY29wZSBhbiBvcHRpb25hbCBzdHJpbmcgdGhhdCBpcyB1c2VkIHRvIGlzb2xhdGUgZWFjaFxuICogYHNvdXJjZXNgIGFuZCBgc2lua3NgIHdoZW4gdGhlIHJldHVybmVkIHNjb3BlZCBkYXRhZmxvdyBjb21wb25lbnQgaXMgaW52b2tlZC5cbiAqIEByZXR1cm4ge0Z1bmN0aW9ufSB0aGUgc2NvcGVkIGRhdGFmbG93IGNvbXBvbmVudCBmdW5jdGlvbiB0aGF0LCBhcyB0aGVcbiAqIG9yaWdpbmFsIGBkYXRhZmxvd0NvbXBvbmVudGAgZnVuY3Rpb24sIHRha2VzIGBzb3VyY2VzYCBhbmQgcmV0dXJucyBgc2lua3NgLlxuICogQGZ1bmN0aW9uIGlzb2xhdGVcbiAqL1xuZnVuY3Rpb24gaXNvbGF0ZShjb21wb25lbnQsIHNjb3BlKSB7XG4gICAgaWYgKHNjb3BlID09PSB2b2lkIDApIHsgc2NvcGUgPSBuZXdTY29wZSgpOyB9XG4gICAgY2hlY2tJc29sYXRlQXJncyhjb21wb25lbnQsIHNjb3BlKTtcbiAgICB2YXIgY29udmVydGVkU2NvcGUgPSB0eXBlb2Ygc2NvcGUgPT09ICdzdHJpbmcnID8gc2NvcGUgOiBzY29wZS50b1N0cmluZygpO1xuICAgIHJldHVybiBmdW5jdGlvbiBzY29wZWRDb21wb25lbnQoc291cmNlcykge1xuICAgICAgICB2YXIgcmVzdCA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDE7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgcmVzdFtfaSAtIDFdID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgc2NvcGVkU291cmNlcyA9IGlzb2xhdGVBbGxTb3VyY2VzKHNvdXJjZXMsIGNvbnZlcnRlZFNjb3BlKTtcbiAgICAgICAgdmFyIHNpbmtzID0gY29tcG9uZW50LmFwcGx5KHZvaWQgMCwgW3Njb3BlZFNvdXJjZXNdLmNvbmNhdChyZXN0KSk7XG4gICAgICAgIHZhciBzY29wZWRTaW5rcyA9IGlzb2xhdGVBbGxTaW5rcyhzb3VyY2VzLCBzaW5rcywgY29udmVydGVkU2NvcGUpO1xuICAgICAgICByZXR1cm4gc2NvcGVkU2lua3M7XG4gICAgfTtcbn1cbmlzb2xhdGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBjb3VudGVyID0gMDsgfTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZGVmYXVsdCA9IGlzb2xhdGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfeHN0cmVhbUFkYXB0ZXIgPSByZXF1aXJlKCdAY3ljbGUveHN0cmVhbS1hZGFwdGVyJyk7XG5cbnZhciBfeHN0cmVhbUFkYXB0ZXIyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfeHN0cmVhbUFkYXB0ZXIpO1xuXG52YXIgX3dyaXRlVG9TdG9yZSA9IHJlcXVpcmUoJy4vd3JpdGVUb1N0b3JlJyk7XG5cbnZhciBfd3JpdGVUb1N0b3JlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3dyaXRlVG9TdG9yZSk7XG5cbnZhciBfcmVzcG9uc2VDb2xsZWN0aW9uID0gcmVxdWlyZSgnLi9yZXNwb25zZUNvbGxlY3Rpb24nKTtcblxudmFyIF9yZXNwb25zZUNvbGxlY3Rpb24yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVzcG9uc2VDb2xsZWN0aW9uKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuLyoqXG4gKiBTdG9yYWdlIERyaXZlci5cbiAqXG4gKiBUaGlzIGlzIGEgbG9jYWxTdG9yYWdlIGFuZCBzZXNzaW9uU3RvcmFnZSBEcml2ZXIgZm9yIEN5Y2xlLmpzIGFwcHMuIFRoZVxuICogZHJpdmVyIGlzIGFsc28gYSBmdW5jdGlvbiwgYW5kIGl0IHRha2VzIGEgc3RyZWFtIG9mIHJlcXVlc3RzIGFzIGlucHV0LCBhbmRcbiAqIHJldHVybnMgYSAqKmByZXNwb25zZUNvbGxlY3Rpb25gKiogd2l0aCBmdW5jdGlvbnMgdGhhdCBhbGxvdyByZWFkaW5nIGZyb20gdGhlXG4gKiBzdG9yYWdlIG9iamVjdHMuIFRoZSBmdW5jdGlvbnMgb24gdGhlICoqYHJlc3BvbnNlQ29sbGVjdGlvbmAqKiByZXR1cm4gc3RyZWFtc1xuICogb2YgdGhlIHN0b3JhZ2UgZGF0YSB0aGF0IHdhcyByZXF1ZXN0ZWQuXG4gKlxuICogKipSZXF1ZXN0cyoqLiBUaGUgc3RyZWFtIG9mIHJlcXVlc3RzIHNob3VsZCBlbWl0IG9iamVjdHMuIFRoZXNlIHNob3VsZCBiZVxuICogaW5zdHJ1Y3Rpb25zIHRvIHdyaXRlIHRvIHRoZSBkZXNpcmVkIFN0b3JhZ2Ugb2JqZWN0LiBIZXJlIGFyZSB0aGUgYHJlcXVlc3RgXG4gKiBvYmplY3QgcHJvcGVydGllczpcbiAqXG4gKiAtIGB0YXJnZXRgICooU3RyaW5nKSo6IHR5cGUgb2Ygc3RvcmFnZSwgY2FuIGJlIGBsb2NhbGAgb3IgYHNlc3Npb25gLCBkZWZhdWx0c1xuICogdG8gYGxvY2FsYC5cbiAqIC0gYGFjdGlvbmAgKihTdHJpbmcpKjogdHlwZSBvZiBhY3Rpb24sIGNhbiBiZSBgc2V0SXRlbWAsIGByZW1vdmVJdGVtYCBvclxuICogYGNsZWFyYCwgZGVmYXVsdHMgdG8gYHNldEl0ZW1gLlxuICogLSBga2V5YCAqKFN0cmluZykqOiBzdG9yYWdlIGtleS5cbiAqIC0gYHZhbHVlYCAqKFN0cmluZykqOiBzdG9yYWdlIHZhbHVlLlxuICpcbiAqICoqcmVzcG9uc2VDb2xsZWN0aW9uKiouIFRoZSAqKmByZXNwb25zZUNvbGxlY3Rpb25gKiogaXMgYW4gT2JqZWN0IHRoYXRcbiAqIGV4cG9zZXMgZnVuY3Rpb25zIHRvIHJlYWQgZnJvbSBsb2NhbC0gYW5kIHNlc3Npb25TdG9yYWdlLlxuICpcbiAqIGBgYGpzXG4gKiAvLyBSZXR1cm5zIGtleSBvZiBudGggbG9jYWxTdG9yYWdlIHZhbHVlLlxuICogcmVzcG9uc2VDb2xsZWN0aW9uLmxvY2FsLmdldEtleShuKVxuICogLy8gUmV0dXJucyBsb2NhbFN0b3JhZ2UgdmFsdWUgb2YgYGtleWAuXG4gKiByZXNwb25zZUNvbGxlY3Rpb24ubG9jYWwuZ2V0SXRlbShrZXkpXG4gKiAvLyBSZXR1cm5zIGtleSBvZiBudGggc2Vzc2lvblN0b3JhZ2UgdmFsdWUuXG4gKiByZXNwb25zZUNvbGxlY3Rpb24uc2Vzc2lvbi5nZXRLZXkobilcbiAqIC8vIFJldHVybnMgc2Vzc2lvblN0b3JhZ2UgdmFsdWUgb2YgYGtleWAuXG4gKiByZXNwb25zZUNvbGxlY3Rpb24uc2Vzc2lvbi5nZXRJdGVtKGtleSlcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSByZXF1ZXN0JCAtIGEgc3RyZWFtIG9mIHdyaXRlIHJlcXVlc3Qgb2JqZWN0cy5cbiAqIEByZXR1cm4ge09iamVjdH0gdGhlIHJlc3BvbnNlIGNvbGxlY3Rpb24gY29udGFpbmluZyBmdW5jdGlvbnNcbiAqIGZvciByZWFkaW5nIGZyb20gc3RvcmFnZS5cbiAqIEBmdW5jdGlvbiBzdG9yYWdlRHJpdmVyXG4gKi9cbmZ1bmN0aW9uIHN0b3JhZ2VEcml2ZXIocmVxdWVzdCQsIHJ1blN0cmVhbUFkYXB0ZXIpIHtcbiAgLy8gRXhlY3V0ZSB3cml0aW5nIGFjdGlvbnMuXG4gIHJlcXVlc3QkLmFkZExpc3RlbmVyKHtcbiAgICBuZXh0OiBmdW5jdGlvbiBuZXh0KHJlcXVlc3QpIHtcbiAgICAgIHJldHVybiAoMCwgX3dyaXRlVG9TdG9yZTIuZGVmYXVsdCkocmVxdWVzdCk7XG4gICAgfSxcbiAgICBlcnJvcjogZnVuY3Rpb24gZXJyb3IoKSB7fSxcbiAgICBjb21wbGV0ZTogZnVuY3Rpb24gY29tcGxldGUoKSB7fVxuICB9KTtcblxuICAvLyBSZXR1cm4gcmVhZGluZyBmdW5jdGlvbnMuXG4gIHJldHVybiAoMCwgX3Jlc3BvbnNlQ29sbGVjdGlvbjIuZGVmYXVsdCkocmVxdWVzdCQsIHJ1blN0cmVhbUFkYXB0ZXIpO1xufVxuXG5zdG9yYWdlRHJpdmVyLnN0cmVhbUFkYXB0ZXIgPSBfeHN0cmVhbUFkYXB0ZXIyLmRlZmF1bHQ7XG5cbmV4cG9ydHMuZGVmYXVsdCA9IHN0b3JhZ2VEcml2ZXI7IiwiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG5leHBvcnRzLmRlZmF1bHQgPSBmdW5jdGlvbiAocmVxdWVzdCQsIHJ1blN0cmVhbUFkYXB0ZXIpIHtcbiAgcmV0dXJuIHtcbiAgICAvLyBGb3IgbG9jYWxTdG9yYWdlLlxuICAgIGdldCBsb2NhbCgpIHtcbiAgICAgIHJldHVybiAoMCwgX3V0aWwyLmRlZmF1bHQpKHJlcXVlc3QkLCBydW5TdHJlYW1BZGFwdGVyKTtcbiAgICB9LFxuICAgIC8vIEZvciBzZXNzaW9uU3RvcmFnZS5cbiAgICBnZXQgc2Vzc2lvbigpIHtcbiAgICAgIHJldHVybiAoMCwgX3V0aWwyLmRlZmF1bHQpKHJlcXVlc3QkLCBydW5TdHJlYW1BZGFwdGVyLCAnc2Vzc2lvbicpO1xuICAgIH1cbiAgfTtcbn07XG5cbnZhciBfdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xuXG52YXIgX3V0aWwyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfdXRpbCk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9IiwiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gZ2V0UmVzcG9uc2VPYmo7XG5cbnZhciBfZHJvcFJlcGVhdHMgPSByZXF1aXJlKCd4c3RyZWFtL2V4dHJhL2Ryb3BSZXBlYXRzJyk7XG5cbnZhciBfZHJvcFJlcGVhdHMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZHJvcFJlcGVhdHMpO1xuXG52YXIgX3hzdHJlYW1BZGFwdGVyID0gcmVxdWlyZSgnQGN5Y2xlL3hzdHJlYW0tYWRhcHRlcicpO1xuXG52YXIgX3hzdHJlYW1BZGFwdGVyMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3hzdHJlYW1BZGFwdGVyKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZnVuY3Rpb24gZ2V0U3RvcmFnZSQocmVxdWVzdCQsIHR5cGUpIHtcbiAgaWYgKHR5cGUgPT09ICdsb2NhbCcpIHtcbiAgICByZXR1cm4gcmVxdWVzdCQuZmlsdGVyKGZ1bmN0aW9uIChyZXEpIHtcbiAgICAgIHJldHVybiAhcmVxLnRhcmdldCB8fCByZXEudGFyZ2V0ID09PSAnbG9jYWwnO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiByZXF1ZXN0JC5maWx0ZXIoZnVuY3Rpb24gKHJlcSkge1xuICAgICAgcmV0dXJuIHJlcS50YXJnZXQgPT09ICdzZXNzaW9uJztcbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzdG9yYWdlS2V5KG4sIHJlcXVlc3QkKSB7XG4gIHZhciB0eXBlID0gYXJndW1lbnRzLmxlbmd0aCA8PSAyIHx8IGFyZ3VtZW50c1syXSA9PT0gdW5kZWZpbmVkID8gJ2xvY2FsJyA6IGFyZ3VtZW50c1syXTtcblxuICB2YXIgc3RvcmFnZSQgPSBnZXRTdG9yYWdlJChyZXF1ZXN0JCwgdHlwZSk7XG4gIHZhciBrZXkgPSB0eXBlID09PSAnbG9jYWwnID8gbG9jYWxTdG9yYWdlLmtleShuKSA6IHNlc3Npb25TdG9yYWdlLmtleShuKTtcblxuICByZXR1cm4gc3RvcmFnZSQuZmlsdGVyKGZ1bmN0aW9uIChyZXEpIHtcbiAgICByZXR1cm4gcmVxLmtleSA9PT0ga2V5O1xuICB9KS5tYXAoZnVuY3Rpb24gKHJlcSkge1xuICAgIHJldHVybiByZXEua2V5O1xuICB9KS5zdGFydFdpdGgoa2V5KS5jb21wb3NlKCgwLCBfZHJvcFJlcGVhdHMyLmRlZmF1bHQpKCkpO1xufVxuXG5mdW5jdGlvbiBzdG9yYWdlR2V0SXRlbShrZXksIHJlcXVlc3QkKSB7XG4gIHZhciB0eXBlID0gYXJndW1lbnRzLmxlbmd0aCA8PSAyIHx8IGFyZ3VtZW50c1syXSA9PT0gdW5kZWZpbmVkID8gJ2xvY2FsJyA6IGFyZ3VtZW50c1syXTtcblxuICB2YXIgc3RvcmFnZSQgPSBnZXRTdG9yYWdlJChyZXF1ZXN0JCwgdHlwZSk7XG4gIHZhciBzdG9yYWdlT2JqID0gdHlwZSA9PT0gJ2xvY2FsJyA/IGxvY2FsU3RvcmFnZSA6IHNlc3Npb25TdG9yYWdlO1xuXG4gIHJldHVybiBzdG9yYWdlJC5maWx0ZXIoZnVuY3Rpb24gKHJlcSkge1xuICAgIHJldHVybiByZXEua2V5ID09PSBrZXk7XG4gIH0pLm1hcChmdW5jdGlvbiAocmVxKSB7XG4gICAgcmV0dXJuIHJlcS52YWx1ZTtcbiAgfSkuc3RhcnRXaXRoKHN0b3JhZ2VPYmouZ2V0SXRlbShrZXkpKTtcbn1cblxuZnVuY3Rpb24gZ2V0UmVzcG9uc2VPYmoocmVxdWVzdCQsIHJ1blNBKSB7XG4gIHZhciB0eXBlID0gYXJndW1lbnRzLmxlbmd0aCA8PSAyIHx8IGFyZ3VtZW50c1syXSA9PT0gdW5kZWZpbmVkID8gJ2xvY2FsJyA6IGFyZ3VtZW50c1syXTtcblxuICByZXR1cm4ge1xuICAgIC8vIEZ1bmN0aW9uIHJldHVybmluZyBzdHJlYW0gb2YgdGhlIG50aCBrZXkuXG5cbiAgICBrZXk6IGZ1bmN0aW9uIGtleShuKSB7XG4gICAgICByZXR1cm4gcnVuU0EuYWRhcHQoc3RvcmFnZUtleShuLCByZXF1ZXN0JCwgdHlwZSksIF94c3RyZWFtQWRhcHRlcjIuZGVmYXVsdC5zdHJlYW1TdWJzY3JpYmUpO1xuICAgIH0sXG5cbiAgICAvLyBGdW5jdGlvbiByZXR1cm5pbmcgc3RyZWFtIG9mIGl0ZW0gdmFsdWVzLlxuICAgIGdldEl0ZW06IGZ1bmN0aW9uIGdldEl0ZW0oa2V5KSB7XG4gICAgICByZXR1cm4gcnVuU0EuYWRhcHQoc3RvcmFnZUdldEl0ZW0oa2V5LCByZXF1ZXN0JCwgdHlwZSksIF94c3RyZWFtQWRhcHRlcjIuZGVmYXVsdC5zdHJlYW1TdWJzY3JpYmUpO1xuICAgIH1cbiAgfTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbi8qKlxuICogQGZ1bmN0aW9uIHdyaXRlVG9TdG9yZVxuICogQGRlc2NyaXB0aW9uXG4gKiBBIHVuaXZlcnNhbCB3cml0ZSBmdW5jdGlvbiBmb3IgbG9jYWxTdG9yYWdlIGFuZCBzZXNzaW9uU3RvcmFnZS5cbiAqIEBwYXJhbSB7b2JqZWN0fSByZXF1ZXN0IC0gdGhlIHN0b3JhZ2UgcmVxdWVzdCBvYmplY3RcbiAqIEBwYXJhbSB7c3RyaW5nfSByZXF1ZXN0LnRhcmdldCAtIGEgc3RyaW5nIGRldGVybWluZXMgd2hpY2ggc3RvcmFnZSB0byB1c2VcbiAqIEBwYXJhbSB7c3RyaW5nfSByZXF1ZXN0LmFjdGlvbiAtIGEgc3RyaW5nIGRldGVybWluZXMgdGhlIHdyaXRlIGFjdGlvblxuICogQHBhcmFtIHtzdHJpbmd9IHJlcXVlc3Qua2V5IC0gdGhlIGtleSBvZiBhIHN0b3JhZ2UgaXRlbVxuICogQHBhcmFtIHtzdHJpbmd9IHJlcXVlc3QudmFsdWUgLSB0aGUgdmFsdWUgb2YgYSBzdG9yYWdlIGl0ZW1cbiAqL1xuZnVuY3Rpb24gd3JpdGVUb1N0b3JlKF9yZWYpIHtcbiAgdmFyIF9yZWYkdGFyZ2V0ID0gX3JlZi50YXJnZXQ7XG4gIHZhciB0YXJnZXQgPSBfcmVmJHRhcmdldCA9PT0gdW5kZWZpbmVkID8gXCJsb2NhbFwiIDogX3JlZiR0YXJnZXQ7XG4gIHZhciBfcmVmJGFjdGlvbiA9IF9yZWYuYWN0aW9uO1xuICB2YXIgYWN0aW9uID0gX3JlZiRhY3Rpb24gPT09IHVuZGVmaW5lZCA/IFwic2V0SXRlbVwiIDogX3JlZiRhY3Rpb247XG4gIHZhciBrZXkgPSBfcmVmLmtleTtcbiAgdmFyIHZhbHVlID0gX3JlZi52YWx1ZTtcblxuICAvLyBEZXRlcm1pbmUgdGhlIHN0b3JhZ2UgdGFyZ2V0LlxuICB2YXIgc3RvcmFnZSA9IHRhcmdldCA9PT0gXCJsb2NhbFwiID8gbG9jYWxTdG9yYWdlIDogc2Vzc2lvblN0b3JhZ2U7XG5cbiAgLy8gRXhlY3V0ZSB0aGUgc3RvcmFnZSBhY3Rpb24gYW5kIHBhc3MgYXJndW1lbnRzIGlmIHRoZXkgd2VyZSBkZWZpbmVkLlxuICBzdG9yYWdlW2FjdGlvbl0oa2V5LCB2YWx1ZSk7XG59XG5cbmV4cG9ydHMuZGVmYXVsdCA9IHdyaXRlVG9TdG9yZTsiLCJcInVzZSBzdHJpY3RcIjtcbnZhciB4c3RyZWFtXzEgPSByZXF1aXJlKCd4c3RyZWFtJyk7XG5mdW5jdGlvbiBsb2dUb0NvbnNvbGVFcnJvcihlcnIpIHtcbiAgICB2YXIgdGFyZ2V0ID0gZXJyLnN0YWNrIHx8IGVycjtcbiAgICBpZiAoY29uc29sZSAmJiBjb25zb2xlLmVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IodGFyZ2V0KTtcbiAgICB9XG4gICAgZWxzZSBpZiAoY29uc29sZSAmJiBjb25zb2xlLmxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyh0YXJnZXQpO1xuICAgIH1cbn1cbnZhciBYU3RyZWFtQWRhcHRlciA9IHtcbiAgICBhZGFwdDogZnVuY3Rpb24gKG9yaWdpblN0cmVhbSwgb3JpZ2luU3RyZWFtU3Vic2NyaWJlKSB7XG4gICAgICAgIGlmIChYU3RyZWFtQWRhcHRlci5pc1ZhbGlkU3RyZWFtKG9yaWdpblN0cmVhbSkpIHtcbiAgICAgICAgICAgIHJldHVybiBvcmlnaW5TdHJlYW07XG4gICAgICAgIH1cbiAgICAgICAgO1xuICAgICAgICB2YXIgZGlzcG9zZSA9IG51bGw7XG4gICAgICAgIHJldHVybiB4c3RyZWFtXzEuZGVmYXVsdC5jcmVhdGUoe1xuICAgICAgICAgICAgc3RhcnQ6IGZ1bmN0aW9uIChvdXQpIHtcbiAgICAgICAgICAgICAgICB2YXIgb2JzZXJ2ZXIgPSB7XG4gICAgICAgICAgICAgICAgICAgIG5leHQ6IGZ1bmN0aW9uICh2YWx1ZSkgeyByZXR1cm4gb3V0LnNoYW1lZnVsbHlTZW5kTmV4dCh2YWx1ZSk7IH0sXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoZXJyKSB7IHJldHVybiBvdXQuc2hhbWVmdWxseVNlbmRFcnJvcihlcnIpOyB9LFxuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZTogZnVuY3Rpb24gKCkgeyByZXR1cm4gb3V0LnNoYW1lZnVsbHlTZW5kQ29tcGxldGUoKTsgfSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGRpc3Bvc2UgPSBvcmlnaW5TdHJlYW1TdWJzY3JpYmUob3JpZ2luU3RyZWFtLCBvYnNlcnZlcik7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc3RvcDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZGlzcG9zZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICBkaXNwb3NlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGRpc3Bvc2U6IGZ1bmN0aW9uIChzaW5rcywgc2lua1Byb3hpZXMsIHNvdXJjZXMpIHtcbiAgICAgICAgT2JqZWN0LmtleXMoc291cmNlcykuZm9yRWFjaChmdW5jdGlvbiAoaykge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBzb3VyY2VzW2tdLmRpc3Bvc2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBzb3VyY2VzW2tdLmRpc3Bvc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdC5rZXlzKHNpbmtzKS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gICAgICAgICAgICBzaW5rc1trXS5yZW1vdmVMaXN0ZW5lcihzaW5rUHJveGllc1trXS5zdHJlYW0pO1xuICAgICAgICB9KTtcbiAgICB9LFxuICAgIG1ha2VIb2xkU3ViamVjdDogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgc3RyZWFtID0geHN0cmVhbV8xLmRlZmF1bHQuY3JlYXRlV2l0aE1lbW9yeSgpO1xuICAgICAgICB2YXIgb2JzZXJ2ZXIgPSB7XG4gICAgICAgICAgICBuZXh0OiBmdW5jdGlvbiAoeCkgeyBzdHJlYW0uc2hhbWVmdWxseVNlbmROZXh0KHgpOyB9LFxuICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBsb2dUb0NvbnNvbGVFcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIHN0cmVhbS5zaGFtZWZ1bGx5U2VuZEVycm9yKGVycik7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29tcGxldGU6IGZ1bmN0aW9uICgpIHsgc3RyZWFtLnNoYW1lZnVsbHlTZW5kQ29tcGxldGUoKTsgfVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4geyBvYnNlcnZlcjogb2JzZXJ2ZXIsIHN0cmVhbTogc3RyZWFtIH07XG4gICAgfSxcbiAgICBpc1ZhbGlkU3RyZWFtOiBmdW5jdGlvbiAoc3RyZWFtKSB7XG4gICAgICAgIHJldHVybiAodHlwZW9mIHN0cmVhbS5hZGRMaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgICAgICAgdHlwZW9mIHN0cmVhbS5zaGFtZWZ1bGx5U2VuZE5leHQgPT09ICdmdW5jdGlvbicpO1xuICAgIH0sXG4gICAgc3RyZWFtU3Vic2NyaWJlOiBmdW5jdGlvbiAoc3RyZWFtLCBvYnNlcnZlcikge1xuICAgICAgICBzdHJlYW0uYWRkTGlzdGVuZXIob2JzZXJ2ZXIpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gc3RyZWFtLnJlbW92ZUxpc3RlbmVyKG9ic2VydmVyKTsgfTtcbiAgICB9XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gWFN0cmVhbUFkYXB0ZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTtcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG59O1xudmFyIGVtcHR5ID0ge307XG5mdW5jdGlvbiBub29wKCkgeyB9XG5mdW5jdGlvbiBjb3B5KGEpIHtcbiAgICB2YXIgbCA9IGEubGVuZ3RoO1xuICAgIHZhciBiID0gQXJyYXkobCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgYltpXSA9IGFbaV07XG4gICAgfVxuICAgIHJldHVybiBiO1xufVxuZXhwb3J0cy5lbXB0eUxpc3RlbmVyID0ge1xuICAgIF9uOiBub29wLFxuICAgIF9lOiBub29wLFxuICAgIF9jOiBub29wLFxufTtcbi8vIG11dGF0ZXMgdGhlIGlucHV0XG5mdW5jdGlvbiBpbnRlcm5hbGl6ZVByb2R1Y2VyKHByb2R1Y2VyKSB7XG4gICAgcHJvZHVjZXIuX3N0YXJ0ID1cbiAgICAgICAgZnVuY3Rpb24gX3N0YXJ0KGlsKSB7XG4gICAgICAgICAgICBpbC5uZXh0ID0gaWwuX247XG4gICAgICAgICAgICBpbC5lcnJvciA9IGlsLl9lO1xuICAgICAgICAgICAgaWwuY29tcGxldGUgPSBpbC5fYztcbiAgICAgICAgICAgIHRoaXMuc3RhcnQoaWwpO1xuICAgICAgICB9O1xuICAgIHByb2R1Y2VyLl9zdG9wID0gcHJvZHVjZXIuc3RvcDtcbn1cbmZ1bmN0aW9uIGludm9rZShmLCBhcmdzKSB7XG4gICAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDA6IHJldHVybiBmKCk7XG4gICAgICAgIGNhc2UgMTogcmV0dXJuIGYoYXJnc1swXSk7XG4gICAgICAgIGNhc2UgMjogcmV0dXJuIGYoYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgICAgIGNhc2UgMzogcmV0dXJuIGYoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gICAgICAgIGNhc2UgNDogcmV0dXJuIGYoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSk7XG4gICAgICAgIGNhc2UgNTogcmV0dXJuIGYoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSwgYXJnc1s0XSk7XG4gICAgICAgIGRlZmF1bHQ6IHJldHVybiBmLmFwcGx5KHZvaWQgMCwgYXJncyk7XG4gICAgfVxufVxuZnVuY3Rpb24gY29tcG9zZTIoZjEsIGYyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGNvbXBvc2VkRm4oYXJnKSB7XG4gICAgICAgIHJldHVybiBmMShmMihhcmcpKTtcbiAgICB9O1xufVxuZnVuY3Rpb24gYW5kKGYxLCBmMikge1xuICAgIHJldHVybiBmdW5jdGlvbiBhbmRGbih0KSB7XG4gICAgICAgIHJldHVybiBmMSh0KSAmJiBmMih0KTtcbiAgICB9O1xufVxudmFyIENvbWJpbmVMaXN0ZW5lciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gQ29tYmluZUxpc3RlbmVyKGksIHApIHtcbiAgICAgICAgdGhpcy5pID0gaTtcbiAgICAgICAgdGhpcy5wID0gcDtcbiAgICAgICAgcC5pbHMucHVzaCh0aGlzKTtcbiAgICB9XG4gICAgQ29tYmluZUxpc3RlbmVyLnByb3RvdHlwZS5fbiA9IGZ1bmN0aW9uICh0KSB7XG4gICAgICAgIHZhciBwID0gdGhpcy5wLCBvdXQgPSBwLm91dDtcbiAgICAgICAgaWYgKCFvdXQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmIChwLnVwKHQsIHRoaXMuaSkpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgb3V0Ll9uKGludm9rZShwLnByb2plY3QsIHAudmFscykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBvdXQuX2UoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIENvbWJpbmVMaXN0ZW5lci5wcm90b3R5cGUuX2UgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHZhciBvdXQgPSB0aGlzLnAub3V0O1xuICAgICAgICBpZiAoIW91dClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgb3V0Ll9lKGVycik7XG4gICAgfTtcbiAgICBDb21iaW5lTGlzdGVuZXIucHJvdG90eXBlLl9jID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcCA9IHRoaXMucDtcbiAgICAgICAgaWYgKCFwLm91dClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKC0tcC5hYyA9PT0gMCkge1xuICAgICAgICAgICAgcC5vdXQuX2MoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIENvbWJpbmVMaXN0ZW5lcjtcbn0oKSk7XG5leHBvcnRzLkNvbWJpbmVMaXN0ZW5lciA9IENvbWJpbmVMaXN0ZW5lcjtcbnZhciBDb21iaW5lUHJvZHVjZXIgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIENvbWJpbmVQcm9kdWNlcihwcm9qZWN0LCBzdHJlYW1zKSB7XG4gICAgICAgIHRoaXMucHJvamVjdCA9IHByb2plY3Q7XG4gICAgICAgIHRoaXMuc3RyZWFtcyA9IHN0cmVhbXM7XG4gICAgICAgIHRoaXMudHlwZSA9ICdjb21iaW5lJztcbiAgICAgICAgdGhpcy5vdXQgPSBleHBvcnRzLmVtcHR5TGlzdGVuZXI7XG4gICAgICAgIHRoaXMuaWxzID0gW107XG4gICAgICAgIHZhciBuID0gdGhpcy5hYyA9IHRoaXMubGVmdCA9IHN0cmVhbXMubGVuZ3RoO1xuICAgICAgICB2YXIgdmFscyA9IHRoaXMudmFscyA9IG5ldyBBcnJheShuKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIHZhbHNbaV0gPSBlbXB0eTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBDb21iaW5lUHJvZHVjZXIucHJvdG90eXBlLnVwID0gZnVuY3Rpb24gKHQsIGkpIHtcbiAgICAgICAgdmFyIHYgPSB0aGlzLnZhbHNbaV07XG4gICAgICAgIHZhciBsZWZ0ID0gIXRoaXMubGVmdCA/IDAgOiB2ID09PSBlbXB0eSA/IC0tdGhpcy5sZWZ0IDogdGhpcy5sZWZ0O1xuICAgICAgICB0aGlzLnZhbHNbaV0gPSB0O1xuICAgICAgICByZXR1cm4gbGVmdCA9PT0gMDtcbiAgICB9O1xuICAgIENvbWJpbmVQcm9kdWNlci5wcm90b3R5cGUuX3N0YXJ0ID0gZnVuY3Rpb24gKG91dCkge1xuICAgICAgICB0aGlzLm91dCA9IG91dDtcbiAgICAgICAgdmFyIHMgPSB0aGlzLnN0cmVhbXM7XG4gICAgICAgIHZhciBuID0gcy5sZW5ndGg7XG4gICAgICAgIGlmIChuID09PSAwKVxuICAgICAgICAgICAgdGhpcy56ZXJvKG91dCk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgICAgICBzW2ldLl9hZGQobmV3IENvbWJpbmVMaXN0ZW5lcihpLCB0aGlzKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIENvbWJpbmVQcm9kdWNlci5wcm90b3R5cGUuX3N0b3AgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBzID0gdGhpcy5zdHJlYW1zO1xuICAgICAgICB2YXIgbiA9IHRoaXMuYWMgPSB0aGlzLmxlZnQgPSBzLmxlbmd0aDtcbiAgICAgICAgdmFyIHZhbHMgPSB0aGlzLnZhbHMgPSBuZXcgQXJyYXkobik7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBzW2ldLl9yZW1vdmUodGhpcy5pbHNbaV0pO1xuICAgICAgICAgICAgdmFsc1tpXSA9IGVtcHR5O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub3V0ID0gbnVsbDtcbiAgICAgICAgdGhpcy5pbHMgPSBbXTtcbiAgICB9O1xuICAgIENvbWJpbmVQcm9kdWNlci5wcm90b3R5cGUuemVybyA9IGZ1bmN0aW9uIChvdXQpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIG91dC5fbih0aGlzLnByb2plY3QoKSk7XG4gICAgICAgICAgICBvdXQuX2MoKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgb3V0Ll9lKGUpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gQ29tYmluZVByb2R1Y2VyO1xufSgpKTtcbmV4cG9ydHMuQ29tYmluZVByb2R1Y2VyID0gQ29tYmluZVByb2R1Y2VyO1xudmFyIEZyb21BcnJheVByb2R1Y2VyID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBGcm9tQXJyYXlQcm9kdWNlcihhKSB7XG4gICAgICAgIHRoaXMuYSA9IGE7XG4gICAgICAgIHRoaXMudHlwZSA9ICdmcm9tQXJyYXknO1xuICAgIH1cbiAgICBGcm9tQXJyYXlQcm9kdWNlci5wcm90b3R5cGUuX3N0YXJ0ID0gZnVuY3Rpb24gKG91dCkge1xuICAgICAgICB2YXIgYSA9IHRoaXMuYTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBhLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgb3V0Ll9uKGFbaV0pO1xuICAgICAgICB9XG4gICAgICAgIG91dC5fYygpO1xuICAgIH07XG4gICAgRnJvbUFycmF5UHJvZHVjZXIucHJvdG90eXBlLl9zdG9wID0gZnVuY3Rpb24gKCkge1xuICAgIH07XG4gICAgcmV0dXJuIEZyb21BcnJheVByb2R1Y2VyO1xufSgpKTtcbmV4cG9ydHMuRnJvbUFycmF5UHJvZHVjZXIgPSBGcm9tQXJyYXlQcm9kdWNlcjtcbnZhciBGcm9tUHJvbWlzZVByb2R1Y2VyID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBGcm9tUHJvbWlzZVByb2R1Y2VyKHApIHtcbiAgICAgICAgdGhpcy5wID0gcDtcbiAgICAgICAgdGhpcy50eXBlID0gJ2Zyb21Qcm9taXNlJztcbiAgICAgICAgdGhpcy5vbiA9IGZhbHNlO1xuICAgIH1cbiAgICBGcm9tUHJvbWlzZVByb2R1Y2VyLnByb3RvdHlwZS5fc3RhcnQgPSBmdW5jdGlvbiAob3V0KSB7XG4gICAgICAgIHZhciBwcm9kID0gdGhpcztcbiAgICAgICAgdGhpcy5vbiA9IHRydWU7XG4gICAgICAgIHRoaXMucC50aGVuKGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICBpZiAocHJvZC5vbikge1xuICAgICAgICAgICAgICAgIG91dC5fbih2KTtcbiAgICAgICAgICAgICAgICBvdXQuX2MoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgIG91dC5fZShlKTtcbiAgICAgICAgfSkudGhlbihudWxsLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgdGhyb3cgZXJyOyB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBGcm9tUHJvbWlzZVByb2R1Y2VyLnByb3RvdHlwZS5fc3RvcCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5vbiA9IGZhbHNlO1xuICAgIH07XG4gICAgcmV0dXJuIEZyb21Qcm9taXNlUHJvZHVjZXI7XG59KCkpO1xuZXhwb3J0cy5Gcm9tUHJvbWlzZVByb2R1Y2VyID0gRnJvbVByb21pc2VQcm9kdWNlcjtcbnZhciBNZXJnZVByb2R1Y2VyID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBNZXJnZVByb2R1Y2VyKHN0cmVhbXMpIHtcbiAgICAgICAgdGhpcy5zdHJlYW1zID0gc3RyZWFtcztcbiAgICAgICAgdGhpcy50eXBlID0gJ21lcmdlJztcbiAgICAgICAgdGhpcy5vdXQgPSBleHBvcnRzLmVtcHR5TGlzdGVuZXI7XG4gICAgICAgIHRoaXMuYWMgPSBzdHJlYW1zLmxlbmd0aDtcbiAgICB9XG4gICAgTWVyZ2VQcm9kdWNlci5wcm90b3R5cGUuX3N0YXJ0ID0gZnVuY3Rpb24gKG91dCkge1xuICAgICAgICB0aGlzLm91dCA9IG91dDtcbiAgICAgICAgdmFyIHMgPSB0aGlzLnN0cmVhbXM7XG4gICAgICAgIHZhciBMID0gcy5sZW5ndGg7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgTDsgaSsrKSB7XG4gICAgICAgICAgICBzW2ldLl9hZGQodGhpcyk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE1lcmdlUHJvZHVjZXIucHJvdG90eXBlLl9zdG9wID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcyA9IHRoaXMuc3RyZWFtcztcbiAgICAgICAgdmFyIEwgPSBzLmxlbmd0aDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBMOyBpKyspIHtcbiAgICAgICAgICAgIHNbaV0uX3JlbW92ZSh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm91dCA9IG51bGw7XG4gICAgICAgIHRoaXMuYWMgPSBMO1xuICAgIH07XG4gICAgTWVyZ2VQcm9kdWNlci5wcm90b3R5cGUuX24gPSBmdW5jdGlvbiAodCkge1xuICAgICAgICB2YXIgdSA9IHRoaXMub3V0O1xuICAgICAgICBpZiAoIXUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHUuX24odCk7XG4gICAgfTtcbiAgICBNZXJnZVByb2R1Y2VyLnByb3RvdHlwZS5fZSA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdmFyIHUgPSB0aGlzLm91dDtcbiAgICAgICAgaWYgKCF1KVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB1Ll9lKGVycik7XG4gICAgfTtcbiAgICBNZXJnZVByb2R1Y2VyLnByb3RvdHlwZS5fYyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKC0tdGhpcy5hYyA9PT0gMCkge1xuICAgICAgICAgICAgdmFyIHUgPSB0aGlzLm91dDtcbiAgICAgICAgICAgIGlmICghdSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB1Ll9jKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBNZXJnZVByb2R1Y2VyO1xufSgpKTtcbmV4cG9ydHMuTWVyZ2VQcm9kdWNlciA9IE1lcmdlUHJvZHVjZXI7XG52YXIgUGVyaW9kaWNQcm9kdWNlciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gUGVyaW9kaWNQcm9kdWNlcihwZXJpb2QpIHtcbiAgICAgICAgdGhpcy5wZXJpb2QgPSBwZXJpb2Q7XG4gICAgICAgIHRoaXMudHlwZSA9ICdwZXJpb2RpYyc7XG4gICAgICAgIHRoaXMuaW50ZXJ2YWxJRCA9IC0xO1xuICAgICAgICB0aGlzLmkgPSAwO1xuICAgIH1cbiAgICBQZXJpb2RpY1Byb2R1Y2VyLnByb3RvdHlwZS5fc3RhcnQgPSBmdW5jdGlvbiAoc3RyZWFtKSB7XG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgICAgZnVuY3Rpb24gaW50ZXJ2YWxIYW5kbGVyKCkgeyBzdHJlYW0uX24oc2VsZi5pKyspOyB9XG4gICAgICAgIHRoaXMuaW50ZXJ2YWxJRCA9IHNldEludGVydmFsKGludGVydmFsSGFuZGxlciwgdGhpcy5wZXJpb2QpO1xuICAgIH07XG4gICAgUGVyaW9kaWNQcm9kdWNlci5wcm90b3R5cGUuX3N0b3AgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmludGVydmFsSUQgIT09IC0xKVxuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmludGVydmFsSUQpO1xuICAgICAgICB0aGlzLmludGVydmFsSUQgPSAtMTtcbiAgICAgICAgdGhpcy5pID0gMDtcbiAgICB9O1xuICAgIHJldHVybiBQZXJpb2RpY1Byb2R1Y2VyO1xufSgpKTtcbmV4cG9ydHMuUGVyaW9kaWNQcm9kdWNlciA9IFBlcmlvZGljUHJvZHVjZXI7XG52YXIgRGVidWdPcGVyYXRvciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gRGVidWdPcGVyYXRvcihhcmcsIGlucykge1xuICAgICAgICB0aGlzLmlucyA9IGlucztcbiAgICAgICAgdGhpcy50eXBlID0gJ2RlYnVnJztcbiAgICAgICAgdGhpcy5vdXQgPSBudWxsO1xuICAgICAgICB0aGlzLnMgPSBudWxsOyAvLyBzcHlcbiAgICAgICAgdGhpcy5sID0gbnVsbDsgLy8gbGFiZWxcbiAgICAgICAgaWYgKHR5cGVvZiBhcmcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0aGlzLmwgPSBhcmc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnMgPSBhcmc7XG4gICAgICAgIH1cbiAgICB9XG4gICAgRGVidWdPcGVyYXRvci5wcm90b3R5cGUuX3N0YXJ0ID0gZnVuY3Rpb24gKG91dCkge1xuICAgICAgICB0aGlzLm91dCA9IG91dDtcbiAgICAgICAgdGhpcy5pbnMuX2FkZCh0aGlzKTtcbiAgICB9O1xuICAgIERlYnVnT3BlcmF0b3IucHJvdG90eXBlLl9zdG9wID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmlucy5fcmVtb3ZlKHRoaXMpO1xuICAgICAgICB0aGlzLm91dCA9IG51bGw7XG4gICAgfTtcbiAgICBEZWJ1Z09wZXJhdG9yLnByb3RvdHlwZS5fbiA9IGZ1bmN0aW9uICh0KSB7XG4gICAgICAgIHZhciB1ID0gdGhpcy5vdXQ7XG4gICAgICAgIGlmICghdSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIHMgPSB0aGlzLnMsIGwgPSB0aGlzLmw7XG4gICAgICAgIGlmIChzKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHModCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHUuX2UoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2cobCArICc6JywgdCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyh0KTtcbiAgICAgICAgfVxuICAgICAgICB1Ll9uKHQpO1xuICAgIH07XG4gICAgRGVidWdPcGVyYXRvci5wcm90b3R5cGUuX2UgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHZhciB1ID0gdGhpcy5vdXQ7XG4gICAgICAgIGlmICghdSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdS5fZShlcnIpO1xuICAgIH07XG4gICAgRGVidWdPcGVyYXRvci5wcm90b3R5cGUuX2MgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB1ID0gdGhpcy5vdXQ7XG4gICAgICAgIGlmICghdSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdS5fYygpO1xuICAgIH07XG4gICAgcmV0dXJuIERlYnVnT3BlcmF0b3I7XG59KCkpO1xuZXhwb3J0cy5EZWJ1Z09wZXJhdG9yID0gRGVidWdPcGVyYXRvcjtcbnZhciBEcm9wT3BlcmF0b3IgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIERyb3BPcGVyYXRvcihtYXgsIGlucykge1xuICAgICAgICB0aGlzLm1heCA9IG1heDtcbiAgICAgICAgdGhpcy5pbnMgPSBpbnM7XG4gICAgICAgIHRoaXMudHlwZSA9ICdkcm9wJztcbiAgICAgICAgdGhpcy5vdXQgPSBudWxsO1xuICAgICAgICB0aGlzLmRyb3BwZWQgPSAwO1xuICAgIH1cbiAgICBEcm9wT3BlcmF0b3IucHJvdG90eXBlLl9zdGFydCA9IGZ1bmN0aW9uIChvdXQpIHtcbiAgICAgICAgdGhpcy5vdXQgPSBvdXQ7XG4gICAgICAgIHRoaXMuaW5zLl9hZGQodGhpcyk7XG4gICAgfTtcbiAgICBEcm9wT3BlcmF0b3IucHJvdG90eXBlLl9zdG9wID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmlucy5fcmVtb3ZlKHRoaXMpO1xuICAgICAgICB0aGlzLm91dCA9IG51bGw7XG4gICAgICAgIHRoaXMuZHJvcHBlZCA9IDA7XG4gICAgfTtcbiAgICBEcm9wT3BlcmF0b3IucHJvdG90eXBlLl9uID0gZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgdmFyIHUgPSB0aGlzLm91dDtcbiAgICAgICAgaWYgKCF1KVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAodGhpcy5kcm9wcGVkKysgPj0gdGhpcy5tYXgpXG4gICAgICAgICAgICB1Ll9uKHQpO1xuICAgIH07XG4gICAgRHJvcE9wZXJhdG9yLnByb3RvdHlwZS5fZSA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdmFyIHUgPSB0aGlzLm91dDtcbiAgICAgICAgaWYgKCF1KVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB1Ll9lKGVycik7XG4gICAgfTtcbiAgICBEcm9wT3BlcmF0b3IucHJvdG90eXBlLl9jID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgdSA9IHRoaXMub3V0O1xuICAgICAgICBpZiAoIXUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHUuX2MoKTtcbiAgICB9O1xuICAgIHJldHVybiBEcm9wT3BlcmF0b3I7XG59KCkpO1xuZXhwb3J0cy5Ecm9wT3BlcmF0b3IgPSBEcm9wT3BlcmF0b3I7XG52YXIgT3RoZXJJTCA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gT3RoZXJJTChvdXQsIG9wKSB7XG4gICAgICAgIHRoaXMub3V0ID0gb3V0O1xuICAgICAgICB0aGlzLm9wID0gb3A7XG4gICAgfVxuICAgIE90aGVySUwucHJvdG90eXBlLl9uID0gZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgdGhpcy5vcC5lbmQoKTtcbiAgICB9O1xuICAgIE90aGVySUwucHJvdG90eXBlLl9lID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICB0aGlzLm91dC5fZShlcnIpO1xuICAgIH07XG4gICAgT3RoZXJJTC5wcm90b3R5cGUuX2MgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMub3AuZW5kKCk7XG4gICAgfTtcbiAgICByZXR1cm4gT3RoZXJJTDtcbn0oKSk7XG52YXIgRW5kV2hlbk9wZXJhdG9yID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBFbmRXaGVuT3BlcmF0b3IobywgLy8gbyA9IG90aGVyXG4gICAgICAgIGlucykge1xuICAgICAgICB0aGlzLm8gPSBvO1xuICAgICAgICB0aGlzLmlucyA9IGlucztcbiAgICAgICAgdGhpcy50eXBlID0gJ2VuZFdoZW4nO1xuICAgICAgICB0aGlzLm91dCA9IG51bGw7XG4gICAgICAgIHRoaXMub2lsID0gZXhwb3J0cy5lbXB0eUxpc3RlbmVyOyAvLyBvaWwgPSBvdGhlciBJbnRlcm5hbExpc3RlbmVyXG4gICAgfVxuICAgIEVuZFdoZW5PcGVyYXRvci5wcm90b3R5cGUuX3N0YXJ0ID0gZnVuY3Rpb24gKG91dCkge1xuICAgICAgICB0aGlzLm91dCA9IG91dDtcbiAgICAgICAgdGhpcy5vLl9hZGQodGhpcy5vaWwgPSBuZXcgT3RoZXJJTChvdXQsIHRoaXMpKTtcbiAgICAgICAgdGhpcy5pbnMuX2FkZCh0aGlzKTtcbiAgICB9O1xuICAgIEVuZFdoZW5PcGVyYXRvci5wcm90b3R5cGUuX3N0b3AgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuaW5zLl9yZW1vdmUodGhpcyk7XG4gICAgICAgIHRoaXMuby5fcmVtb3ZlKHRoaXMub2lsKTtcbiAgICAgICAgdGhpcy5vdXQgPSBudWxsO1xuICAgICAgICB0aGlzLm9pbCA9IG51bGw7XG4gICAgfTtcbiAgICBFbmRXaGVuT3BlcmF0b3IucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHUgPSB0aGlzLm91dDtcbiAgICAgICAgaWYgKCF1KVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB1Ll9jKCk7XG4gICAgfTtcbiAgICBFbmRXaGVuT3BlcmF0b3IucHJvdG90eXBlLl9uID0gZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgdmFyIHUgPSB0aGlzLm91dDtcbiAgICAgICAgaWYgKCF1KVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB1Ll9uKHQpO1xuICAgIH07XG4gICAgRW5kV2hlbk9wZXJhdG9yLnByb3RvdHlwZS5fZSA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdmFyIHUgPSB0aGlzLm91dDtcbiAgICAgICAgaWYgKCF1KVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB1Ll9lKGVycik7XG4gICAgfTtcbiAgICBFbmRXaGVuT3BlcmF0b3IucHJvdG90eXBlLl9jID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmVuZCgpO1xuICAgIH07XG4gICAgcmV0dXJuIEVuZFdoZW5PcGVyYXRvcjtcbn0oKSk7XG5leHBvcnRzLkVuZFdoZW5PcGVyYXRvciA9IEVuZFdoZW5PcGVyYXRvcjtcbnZhciBGaWx0ZXJPcGVyYXRvciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gRmlsdGVyT3BlcmF0b3IocGFzc2VzLCBpbnMpIHtcbiAgICAgICAgdGhpcy5wYXNzZXMgPSBwYXNzZXM7XG4gICAgICAgIHRoaXMuaW5zID0gaW5zO1xuICAgICAgICB0aGlzLnR5cGUgPSAnZmlsdGVyJztcbiAgICAgICAgdGhpcy5vdXQgPSBudWxsO1xuICAgIH1cbiAgICBGaWx0ZXJPcGVyYXRvci5wcm90b3R5cGUuX3N0YXJ0ID0gZnVuY3Rpb24gKG91dCkge1xuICAgICAgICB0aGlzLm91dCA9IG91dDtcbiAgICAgICAgdGhpcy5pbnMuX2FkZCh0aGlzKTtcbiAgICB9O1xuICAgIEZpbHRlck9wZXJhdG9yLnByb3RvdHlwZS5fc3RvcCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5pbnMuX3JlbW92ZSh0aGlzKTtcbiAgICAgICAgdGhpcy5vdXQgPSBudWxsO1xuICAgIH07XG4gICAgRmlsdGVyT3BlcmF0b3IucHJvdG90eXBlLl9uID0gZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgdmFyIHUgPSB0aGlzLm91dDtcbiAgICAgICAgaWYgKCF1KVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHRoaXMucGFzc2VzKHQpKVxuICAgICAgICAgICAgICAgIHUuX24odCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHUuX2UoZSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEZpbHRlck9wZXJhdG9yLnByb3RvdHlwZS5fZSA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdmFyIHUgPSB0aGlzLm91dDtcbiAgICAgICAgaWYgKCF1KVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB1Ll9lKGVycik7XG4gICAgfTtcbiAgICBGaWx0ZXJPcGVyYXRvci5wcm90b3R5cGUuX2MgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB1ID0gdGhpcy5vdXQ7XG4gICAgICAgIGlmICghdSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdS5fYygpO1xuICAgIH07XG4gICAgcmV0dXJuIEZpbHRlck9wZXJhdG9yO1xufSgpKTtcbmV4cG9ydHMuRmlsdGVyT3BlcmF0b3IgPSBGaWx0ZXJPcGVyYXRvcjtcbnZhciBGbGF0dGVuTGlzdGVuZXIgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEZsYXR0ZW5MaXN0ZW5lcihvdXQsIG9wKSB7XG4gICAgICAgIHRoaXMub3V0ID0gb3V0O1xuICAgICAgICB0aGlzLm9wID0gb3A7XG4gICAgfVxuICAgIEZsYXR0ZW5MaXN0ZW5lci5wcm90b3R5cGUuX24gPSBmdW5jdGlvbiAodCkge1xuICAgICAgICB0aGlzLm91dC5fbih0KTtcbiAgICB9O1xuICAgIEZsYXR0ZW5MaXN0ZW5lci5wcm90b3R5cGUuX2UgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHRoaXMub3V0Ll9lKGVycik7XG4gICAgfTtcbiAgICBGbGF0dGVuTGlzdGVuZXIucHJvdG90eXBlLl9jID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLm9wLmlubmVyID0gbnVsbDtcbiAgICAgICAgdGhpcy5vcC5sZXNzKCk7XG4gICAgfTtcbiAgICByZXR1cm4gRmxhdHRlbkxpc3RlbmVyO1xufSgpKTtcbnZhciBGbGF0dGVuT3BlcmF0b3IgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEZsYXR0ZW5PcGVyYXRvcihpbnMpIHtcbiAgICAgICAgdGhpcy5pbnMgPSBpbnM7XG4gICAgICAgIHRoaXMudHlwZSA9ICdmbGF0dGVuJztcbiAgICAgICAgdGhpcy5pbm5lciA9IG51bGw7IC8vIEN1cnJlbnQgaW5uZXIgU3RyZWFtXG4gICAgICAgIHRoaXMuaWwgPSBudWxsOyAvLyBDdXJyZW50IGlubmVyIEludGVybmFsTGlzdGVuZXJcbiAgICAgICAgdGhpcy5vcGVuID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5vdXQgPSBudWxsO1xuICAgIH1cbiAgICBGbGF0dGVuT3BlcmF0b3IucHJvdG90eXBlLl9zdGFydCA9IGZ1bmN0aW9uIChvdXQpIHtcbiAgICAgICAgdGhpcy5vdXQgPSBvdXQ7XG4gICAgICAgIHRoaXMuaW5zLl9hZGQodGhpcyk7XG4gICAgfTtcbiAgICBGbGF0dGVuT3BlcmF0b3IucHJvdG90eXBlLl9zdG9wID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmlucy5fcmVtb3ZlKHRoaXMpO1xuICAgICAgICB0aGlzLmlubmVyID0gbnVsbDtcbiAgICAgICAgdGhpcy5pbCA9IG51bGw7XG4gICAgICAgIHRoaXMub3BlbiA9IHRydWU7XG4gICAgICAgIHRoaXMub3V0ID0gbnVsbDtcbiAgICB9O1xuICAgIEZsYXR0ZW5PcGVyYXRvci5wcm90b3R5cGUubGVzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHUgPSB0aGlzLm91dDtcbiAgICAgICAgaWYgKCF1KVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAoIXRoaXMub3BlbiAmJiAhdGhpcy5pbm5lcilcbiAgICAgICAgICAgIHUuX2MoKTtcbiAgICB9O1xuICAgIEZsYXR0ZW5PcGVyYXRvci5wcm90b3R5cGUuX24gPSBmdW5jdGlvbiAocykge1xuICAgICAgICB2YXIgdSA9IHRoaXMub3V0O1xuICAgICAgICBpZiAoIXUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHZhciBfYSA9IHRoaXMsIGlubmVyID0gX2EuaW5uZXIsIGlsID0gX2EuaWw7XG4gICAgICAgIGlmIChpbm5lciAmJiBpbClcbiAgICAgICAgICAgIGlubmVyLl9yZW1vdmUoaWwpO1xuICAgICAgICAodGhpcy5pbm5lciA9IHMpLl9hZGQodGhpcy5pbCA9IG5ldyBGbGF0dGVuTGlzdGVuZXIodSwgdGhpcykpO1xuICAgIH07XG4gICAgRmxhdHRlbk9wZXJhdG9yLnByb3RvdHlwZS5fZSA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdmFyIHUgPSB0aGlzLm91dDtcbiAgICAgICAgaWYgKCF1KVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB1Ll9lKGVycik7XG4gICAgfTtcbiAgICBGbGF0dGVuT3BlcmF0b3IucHJvdG90eXBlLl9jID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLm9wZW4gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5sZXNzKCk7XG4gICAgfTtcbiAgICByZXR1cm4gRmxhdHRlbk9wZXJhdG9yO1xufSgpKTtcbmV4cG9ydHMuRmxhdHRlbk9wZXJhdG9yID0gRmxhdHRlbk9wZXJhdG9yO1xudmFyIEZvbGRPcGVyYXRvciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gRm9sZE9wZXJhdG9yKGYsIHNlZWQsIGlucykge1xuICAgICAgICB0aGlzLmYgPSBmO1xuICAgICAgICB0aGlzLnNlZWQgPSBzZWVkO1xuICAgICAgICB0aGlzLmlucyA9IGlucztcbiAgICAgICAgdGhpcy50eXBlID0gJ2ZvbGQnO1xuICAgICAgICB0aGlzLm91dCA9IG51bGw7XG4gICAgICAgIHRoaXMuYWNjID0gc2VlZDtcbiAgICB9XG4gICAgRm9sZE9wZXJhdG9yLnByb3RvdHlwZS5fc3RhcnQgPSBmdW5jdGlvbiAob3V0KSB7XG4gICAgICAgIHRoaXMub3V0ID0gb3V0O1xuICAgICAgICBvdXQuX24odGhpcy5hY2MpO1xuICAgICAgICB0aGlzLmlucy5fYWRkKHRoaXMpO1xuICAgIH07XG4gICAgRm9sZE9wZXJhdG9yLnByb3RvdHlwZS5fc3RvcCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5pbnMuX3JlbW92ZSh0aGlzKTtcbiAgICAgICAgdGhpcy5vdXQgPSBudWxsO1xuICAgICAgICB0aGlzLmFjYyA9IHRoaXMuc2VlZDtcbiAgICB9O1xuICAgIEZvbGRPcGVyYXRvci5wcm90b3R5cGUuX24gPSBmdW5jdGlvbiAodCkge1xuICAgICAgICB2YXIgdSA9IHRoaXMub3V0O1xuICAgICAgICBpZiAoIXUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB1Ll9uKHRoaXMuYWNjID0gdGhpcy5mKHRoaXMuYWNjLCB0KSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHUuX2UoZSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEZvbGRPcGVyYXRvci5wcm90b3R5cGUuX2UgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHZhciB1ID0gdGhpcy5vdXQ7XG4gICAgICAgIGlmICghdSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdS5fZShlcnIpO1xuICAgIH07XG4gICAgRm9sZE9wZXJhdG9yLnByb3RvdHlwZS5fYyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHUgPSB0aGlzLm91dDtcbiAgICAgICAgaWYgKCF1KVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB1Ll9jKCk7XG4gICAgfTtcbiAgICByZXR1cm4gRm9sZE9wZXJhdG9yO1xufSgpKTtcbmV4cG9ydHMuRm9sZE9wZXJhdG9yID0gRm9sZE9wZXJhdG9yO1xudmFyIExhc3RPcGVyYXRvciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gTGFzdE9wZXJhdG9yKGlucykge1xuICAgICAgICB0aGlzLmlucyA9IGlucztcbiAgICAgICAgdGhpcy50eXBlID0gJ2xhc3QnO1xuICAgICAgICB0aGlzLm91dCA9IG51bGw7XG4gICAgICAgIHRoaXMuaGFzID0gZmFsc2U7XG4gICAgICAgIHRoaXMudmFsID0gZW1wdHk7XG4gICAgfVxuICAgIExhc3RPcGVyYXRvci5wcm90b3R5cGUuX3N0YXJ0ID0gZnVuY3Rpb24gKG91dCkge1xuICAgICAgICB0aGlzLm91dCA9IG91dDtcbiAgICAgICAgdGhpcy5pbnMuX2FkZCh0aGlzKTtcbiAgICB9O1xuICAgIExhc3RPcGVyYXRvci5wcm90b3R5cGUuX3N0b3AgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuaW5zLl9yZW1vdmUodGhpcyk7XG4gICAgICAgIHRoaXMub3V0ID0gbnVsbDtcbiAgICAgICAgdGhpcy5oYXMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy52YWwgPSBlbXB0eTtcbiAgICB9O1xuICAgIExhc3RPcGVyYXRvci5wcm90b3R5cGUuX24gPSBmdW5jdGlvbiAodCkge1xuICAgICAgICB0aGlzLmhhcyA9IHRydWU7XG4gICAgICAgIHRoaXMudmFsID0gdDtcbiAgICB9O1xuICAgIExhc3RPcGVyYXRvci5wcm90b3R5cGUuX2UgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHZhciB1ID0gdGhpcy5vdXQ7XG4gICAgICAgIGlmICghdSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdS5fZShlcnIpO1xuICAgIH07XG4gICAgTGFzdE9wZXJhdG9yLnByb3RvdHlwZS5fYyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHUgPSB0aGlzLm91dDtcbiAgICAgICAgaWYgKCF1KVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAodGhpcy5oYXMpIHtcbiAgICAgICAgICAgIHUuX24odGhpcy52YWwpO1xuICAgICAgICAgICAgdS5fYygpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdS5fZSgnVE9ETyBzaG93IHByb3BlciBlcnJvcicpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gTGFzdE9wZXJhdG9yO1xufSgpKTtcbmV4cG9ydHMuTGFzdE9wZXJhdG9yID0gTGFzdE9wZXJhdG9yO1xudmFyIE1hcEZsYXR0ZW5Jbm5lciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gTWFwRmxhdHRlbklubmVyKG91dCwgb3ApIHtcbiAgICAgICAgdGhpcy5vdXQgPSBvdXQ7XG4gICAgICAgIHRoaXMub3AgPSBvcDtcbiAgICB9XG4gICAgTWFwRmxhdHRlbklubmVyLnByb3RvdHlwZS5fbiA9IGZ1bmN0aW9uIChyKSB7XG4gICAgICAgIHRoaXMub3V0Ll9uKHIpO1xuICAgIH07XG4gICAgTWFwRmxhdHRlbklubmVyLnByb3RvdHlwZS5fZSA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdGhpcy5vdXQuX2UoZXJyKTtcbiAgICB9O1xuICAgIE1hcEZsYXR0ZW5Jbm5lci5wcm90b3R5cGUuX2MgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMub3AuaW5uZXIgPSBudWxsO1xuICAgICAgICB0aGlzLm9wLmxlc3MoKTtcbiAgICB9O1xuICAgIHJldHVybiBNYXBGbGF0dGVuSW5uZXI7XG59KCkpO1xudmFyIE1hcEZsYXR0ZW5PcGVyYXRvciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gTWFwRmxhdHRlbk9wZXJhdG9yKG1hcE9wKSB7XG4gICAgICAgIHRoaXMubWFwT3AgPSBtYXBPcDtcbiAgICAgICAgdGhpcy5pbm5lciA9IG51bGw7IC8vIEN1cnJlbnQgaW5uZXIgU3RyZWFtXG4gICAgICAgIHRoaXMuaWwgPSBudWxsOyAvLyBDdXJyZW50IGlubmVyIEludGVybmFsTGlzdGVuZXJcbiAgICAgICAgdGhpcy5vcGVuID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5vdXQgPSBudWxsO1xuICAgICAgICB0aGlzLnR5cGUgPSBtYXBPcC50eXBlICsgXCIrZmxhdHRlblwiO1xuICAgICAgICB0aGlzLmlucyA9IG1hcE9wLmlucztcbiAgICB9XG4gICAgTWFwRmxhdHRlbk9wZXJhdG9yLnByb3RvdHlwZS5fc3RhcnQgPSBmdW5jdGlvbiAob3V0KSB7XG4gICAgICAgIHRoaXMub3V0ID0gb3V0O1xuICAgICAgICB0aGlzLm1hcE9wLmlucy5fYWRkKHRoaXMpO1xuICAgIH07XG4gICAgTWFwRmxhdHRlbk9wZXJhdG9yLnByb3RvdHlwZS5fc3RvcCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5tYXBPcC5pbnMuX3JlbW92ZSh0aGlzKTtcbiAgICAgICAgdGhpcy5pbm5lciA9IG51bGw7XG4gICAgICAgIHRoaXMuaWwgPSBudWxsO1xuICAgICAgICB0aGlzLm9wZW4gPSB0cnVlO1xuICAgICAgICB0aGlzLm91dCA9IG51bGw7XG4gICAgfTtcbiAgICBNYXBGbGF0dGVuT3BlcmF0b3IucHJvdG90eXBlLmxlc3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy5vcGVuICYmICF0aGlzLmlubmVyKSB7XG4gICAgICAgICAgICB2YXIgdSA9IHRoaXMub3V0O1xuICAgICAgICAgICAgaWYgKCF1KVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHUuX2MoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgTWFwRmxhdHRlbk9wZXJhdG9yLnByb3RvdHlwZS5fbiA9IGZ1bmN0aW9uICh2KSB7XG4gICAgICAgIHZhciB1ID0gdGhpcy5vdXQ7XG4gICAgICAgIGlmICghdSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIF9hID0gdGhpcywgaW5uZXIgPSBfYS5pbm5lciwgaWwgPSBfYS5pbDtcbiAgICAgICAgaWYgKGlubmVyICYmIGlsKVxuICAgICAgICAgICAgaW5uZXIuX3JlbW92ZShpbCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAodGhpcy5pbm5lciA9IHRoaXMubWFwT3AucHJvamVjdCh2KSkuX2FkZCh0aGlzLmlsID0gbmV3IE1hcEZsYXR0ZW5Jbm5lcih1LCB0aGlzKSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHUuX2UoZSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE1hcEZsYXR0ZW5PcGVyYXRvci5wcm90b3R5cGUuX2UgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHZhciB1ID0gdGhpcy5vdXQ7XG4gICAgICAgIGlmICghdSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdS5fZShlcnIpO1xuICAgIH07XG4gICAgTWFwRmxhdHRlbk9wZXJhdG9yLnByb3RvdHlwZS5fYyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5vcGVuID0gZmFsc2U7XG4gICAgICAgIHRoaXMubGVzcygpO1xuICAgIH07XG4gICAgcmV0dXJuIE1hcEZsYXR0ZW5PcGVyYXRvcjtcbn0oKSk7XG5leHBvcnRzLk1hcEZsYXR0ZW5PcGVyYXRvciA9IE1hcEZsYXR0ZW5PcGVyYXRvcjtcbnZhciBNYXBPcGVyYXRvciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gTWFwT3BlcmF0b3IocHJvamVjdCwgaW5zKSB7XG4gICAgICAgIHRoaXMucHJvamVjdCA9IHByb2plY3Q7XG4gICAgICAgIHRoaXMuaW5zID0gaW5zO1xuICAgICAgICB0aGlzLnR5cGUgPSAnbWFwJztcbiAgICAgICAgdGhpcy5vdXQgPSBudWxsO1xuICAgIH1cbiAgICBNYXBPcGVyYXRvci5wcm90b3R5cGUuX3N0YXJ0ID0gZnVuY3Rpb24gKG91dCkge1xuICAgICAgICB0aGlzLm91dCA9IG91dDtcbiAgICAgICAgdGhpcy5pbnMuX2FkZCh0aGlzKTtcbiAgICB9O1xuICAgIE1hcE9wZXJhdG9yLnByb3RvdHlwZS5fc3RvcCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5pbnMuX3JlbW92ZSh0aGlzKTtcbiAgICAgICAgdGhpcy5vdXQgPSBudWxsO1xuICAgIH07XG4gICAgTWFwT3BlcmF0b3IucHJvdG90eXBlLl9uID0gZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgdmFyIHUgPSB0aGlzLm91dDtcbiAgICAgICAgaWYgKCF1KVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdS5fbih0aGlzLnByb2plY3QodCkpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICB1Ll9lKGUpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBNYXBPcGVyYXRvci5wcm90b3R5cGUuX2UgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHZhciB1ID0gdGhpcy5vdXQ7XG4gICAgICAgIGlmICghdSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdS5fZShlcnIpO1xuICAgIH07XG4gICAgTWFwT3BlcmF0b3IucHJvdG90eXBlLl9jID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgdSA9IHRoaXMub3V0O1xuICAgICAgICBpZiAoIXUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHUuX2MoKTtcbiAgICB9O1xuICAgIHJldHVybiBNYXBPcGVyYXRvcjtcbn0oKSk7XG5leHBvcnRzLk1hcE9wZXJhdG9yID0gTWFwT3BlcmF0b3I7XG52YXIgRmlsdGVyTWFwT3BlcmF0b3IgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhGaWx0ZXJNYXBPcGVyYXRvciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBGaWx0ZXJNYXBPcGVyYXRvcihwYXNzZXMsIHByb2plY3QsIGlucykge1xuICAgICAgICBfc3VwZXIuY2FsbCh0aGlzLCBwcm9qZWN0LCBpbnMpO1xuICAgICAgICB0aGlzLnBhc3NlcyA9IHBhc3NlcztcbiAgICAgICAgdGhpcy50eXBlID0gJ2ZpbHRlcittYXAnO1xuICAgIH1cbiAgICBGaWx0ZXJNYXBPcGVyYXRvci5wcm90b3R5cGUuX24gPSBmdW5jdGlvbiAodikge1xuICAgICAgICBpZiAodGhpcy5wYXNzZXModikpIHtcbiAgICAgICAgICAgIF9zdXBlci5wcm90b3R5cGUuX24uY2FsbCh0aGlzLCB2KTtcbiAgICAgICAgfVxuICAgICAgICA7XG4gICAgfTtcbiAgICByZXR1cm4gRmlsdGVyTWFwT3BlcmF0b3I7XG59KE1hcE9wZXJhdG9yKSk7XG5leHBvcnRzLkZpbHRlck1hcE9wZXJhdG9yID0gRmlsdGVyTWFwT3BlcmF0b3I7XG52YXIgUmVwbGFjZUVycm9yT3BlcmF0b3IgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFJlcGxhY2VFcnJvck9wZXJhdG9yKGZuLCBpbnMpIHtcbiAgICAgICAgdGhpcy5mbiA9IGZuO1xuICAgICAgICB0aGlzLmlucyA9IGlucztcbiAgICAgICAgdGhpcy50eXBlID0gJ3JlcGxhY2VFcnJvcic7XG4gICAgICAgIHRoaXMub3V0ID0gZW1wdHk7XG4gICAgfVxuICAgIFJlcGxhY2VFcnJvck9wZXJhdG9yLnByb3RvdHlwZS5fc3RhcnQgPSBmdW5jdGlvbiAob3V0KSB7XG4gICAgICAgIHRoaXMub3V0ID0gb3V0O1xuICAgICAgICB0aGlzLmlucy5fYWRkKHRoaXMpO1xuICAgIH07XG4gICAgUmVwbGFjZUVycm9yT3BlcmF0b3IucHJvdG90eXBlLl9zdG9wID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmlucy5fcmVtb3ZlKHRoaXMpO1xuICAgICAgICB0aGlzLm91dCA9IG51bGw7XG4gICAgfTtcbiAgICBSZXBsYWNlRXJyb3JPcGVyYXRvci5wcm90b3R5cGUuX24gPSBmdW5jdGlvbiAodCkge1xuICAgICAgICB2YXIgdSA9IHRoaXMub3V0O1xuICAgICAgICBpZiAoIXUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHUuX24odCk7XG4gICAgfTtcbiAgICBSZXBsYWNlRXJyb3JPcGVyYXRvci5wcm90b3R5cGUuX2UgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHZhciB1ID0gdGhpcy5vdXQ7XG4gICAgICAgIGlmICghdSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuaW5zLl9yZW1vdmUodGhpcyk7XG4gICAgICAgICAgICAodGhpcy5pbnMgPSB0aGlzLmZuKGVycikpLl9hZGQodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHUuX2UoZSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFJlcGxhY2VFcnJvck9wZXJhdG9yLnByb3RvdHlwZS5fYyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHUgPSB0aGlzLm91dDtcbiAgICAgICAgaWYgKCF1KVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB1Ll9jKCk7XG4gICAgfTtcbiAgICByZXR1cm4gUmVwbGFjZUVycm9yT3BlcmF0b3I7XG59KCkpO1xuZXhwb3J0cy5SZXBsYWNlRXJyb3JPcGVyYXRvciA9IFJlcGxhY2VFcnJvck9wZXJhdG9yO1xudmFyIFN0YXJ0V2l0aE9wZXJhdG9yID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBTdGFydFdpdGhPcGVyYXRvcihpbnMsIHZhbHVlKSB7XG4gICAgICAgIHRoaXMuaW5zID0gaW5zO1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMudHlwZSA9ICdzdGFydFdpdGgnO1xuICAgICAgICB0aGlzLm91dCA9IGV4cG9ydHMuZW1wdHlMaXN0ZW5lcjtcbiAgICB9XG4gICAgU3RhcnRXaXRoT3BlcmF0b3IucHJvdG90eXBlLl9zdGFydCA9IGZ1bmN0aW9uIChvdXQpIHtcbiAgICAgICAgdGhpcy5vdXQgPSBvdXQ7XG4gICAgICAgIHRoaXMub3V0Ll9uKHRoaXMudmFsdWUpO1xuICAgICAgICB0aGlzLmlucy5fYWRkKG91dCk7XG4gICAgfTtcbiAgICBTdGFydFdpdGhPcGVyYXRvci5wcm90b3R5cGUuX3N0b3AgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuaW5zLl9yZW1vdmUodGhpcy5vdXQpO1xuICAgICAgICB0aGlzLm91dCA9IG51bGw7XG4gICAgfTtcbiAgICByZXR1cm4gU3RhcnRXaXRoT3BlcmF0b3I7XG59KCkpO1xuZXhwb3J0cy5TdGFydFdpdGhPcGVyYXRvciA9IFN0YXJ0V2l0aE9wZXJhdG9yO1xudmFyIFRha2VPcGVyYXRvciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gVGFrZU9wZXJhdG9yKG1heCwgaW5zKSB7XG4gICAgICAgIHRoaXMubWF4ID0gbWF4O1xuICAgICAgICB0aGlzLmlucyA9IGlucztcbiAgICAgICAgdGhpcy50eXBlID0gJ3Rha2UnO1xuICAgICAgICB0aGlzLm91dCA9IG51bGw7XG4gICAgICAgIHRoaXMudGFrZW4gPSAwO1xuICAgIH1cbiAgICBUYWtlT3BlcmF0b3IucHJvdG90eXBlLl9zdGFydCA9IGZ1bmN0aW9uIChvdXQpIHtcbiAgICAgICAgdGhpcy5vdXQgPSBvdXQ7XG4gICAgICAgIHRoaXMuaW5zLl9hZGQodGhpcyk7XG4gICAgfTtcbiAgICBUYWtlT3BlcmF0b3IucHJvdG90eXBlLl9zdG9wID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmlucy5fcmVtb3ZlKHRoaXMpO1xuICAgICAgICB0aGlzLm91dCA9IG51bGw7XG4gICAgICAgIHRoaXMudGFrZW4gPSAwO1xuICAgIH07XG4gICAgVGFrZU9wZXJhdG9yLnByb3RvdHlwZS5fbiA9IGZ1bmN0aW9uICh0KSB7XG4gICAgICAgIHZhciB1ID0gdGhpcy5vdXQ7XG4gICAgICAgIGlmICghdSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKHRoaXMudGFrZW4rKyA8IHRoaXMubWF4IC0gMSkge1xuICAgICAgICAgICAgdS5fbih0KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHUuX24odCk7XG4gICAgICAgICAgICB1Ll9jKCk7XG4gICAgICAgICAgICB0aGlzLl9zdG9wKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFRha2VPcGVyYXRvci5wcm90b3R5cGUuX2UgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHZhciB1ID0gdGhpcy5vdXQ7XG4gICAgICAgIGlmICghdSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdS5fZShlcnIpO1xuICAgIH07XG4gICAgVGFrZU9wZXJhdG9yLnByb3RvdHlwZS5fYyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHUgPSB0aGlzLm91dDtcbiAgICAgICAgaWYgKCF1KVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB1Ll9jKCk7XG4gICAgfTtcbiAgICByZXR1cm4gVGFrZU9wZXJhdG9yO1xufSgpKTtcbmV4cG9ydHMuVGFrZU9wZXJhdG9yID0gVGFrZU9wZXJhdG9yO1xudmFyIFN0cmVhbSA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gU3RyZWFtKHByb2R1Y2VyKSB7XG4gICAgICAgIHRoaXMuX3N0b3BJRCA9IGVtcHR5O1xuICAgICAgICB0aGlzLl9wcm9kID0gcHJvZHVjZXI7XG4gICAgICAgIHRoaXMuX2lscyA9IFtdO1xuICAgIH1cbiAgICBTdHJlYW0ucHJvdG90eXBlLl9uID0gZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgdmFyIGEgPSB0aGlzLl9pbHM7XG4gICAgICAgIHZhciBMID0gYS5sZW5ndGg7XG4gICAgICAgIGlmIChMID09IDEpXG4gICAgICAgICAgICBhWzBdLl9uKHQpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhciBiID0gY29weShhKTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgTDsgaSsrKVxuICAgICAgICAgICAgICAgIGJbaV0uX24odCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN0cmVhbS5wcm90b3R5cGUuX2UgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHZhciBhID0gdGhpcy5faWxzO1xuICAgICAgICB2YXIgTCA9IGEubGVuZ3RoO1xuICAgICAgICBpZiAoTCA9PSAxKVxuICAgICAgICAgICAgYVswXS5fZShlcnIpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhciBiID0gY29weShhKTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgTDsgaSsrKVxuICAgICAgICAgICAgICAgIGJbaV0uX2UoZXJyKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl94KCk7XG4gICAgfTtcbiAgICBTdHJlYW0ucHJvdG90eXBlLl9jID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYSA9IHRoaXMuX2lscztcbiAgICAgICAgdmFyIEwgPSBhLmxlbmd0aDtcbiAgICAgICAgaWYgKEwgPT0gMSlcbiAgICAgICAgICAgIGFbMF0uX2MoKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgYiA9IGNvcHkoYSk7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IEw7IGkrKylcbiAgICAgICAgICAgICAgICBiW2ldLl9jKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5feCgpO1xuICAgIH07XG4gICAgU3RyZWFtLnByb3RvdHlwZS5feCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuX2lscy5sZW5ndGggPT09IDApXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmICh0aGlzLl9wcm9kKVxuICAgICAgICAgICAgdGhpcy5fcHJvZC5fc3RvcCgpO1xuICAgICAgICB0aGlzLl9pbHMgPSBbXTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEFkZHMgYSBMaXN0ZW5lciB0byB0aGUgU3RyZWFtLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtMaXN0ZW5lcjxUPn0gbGlzdGVuZXJcbiAgICAgKi9cbiAgICBTdHJlYW0ucHJvdG90eXBlLmFkZExpc3RlbmVyID0gZnVuY3Rpb24gKGxpc3RlbmVyKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbGlzdGVuZXIubmV4dCAhPT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgICAgfHwgdHlwZW9mIGxpc3RlbmVyLmVycm9yICE9PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICB8fCB0eXBlb2YgbGlzdGVuZXIuY29tcGxldGUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc3RyZWFtLmFkZExpc3RlbmVyKCkgcmVxdWlyZXMgYWxsIHRocmVlIG5leHQsIGVycm9yLCAnICtcbiAgICAgICAgICAgICAgICAnYW5kIGNvbXBsZXRlIGZ1bmN0aW9ucy4nKTtcbiAgICAgICAgfVxuICAgICAgICBsaXN0ZW5lci5fbiA9IGxpc3RlbmVyLm5leHQ7XG4gICAgICAgIGxpc3RlbmVyLl9lID0gbGlzdGVuZXIuZXJyb3I7XG4gICAgICAgIGxpc3RlbmVyLl9jID0gbGlzdGVuZXIuY29tcGxldGU7XG4gICAgICAgIHRoaXMuX2FkZChsaXN0ZW5lcik7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGEgTGlzdGVuZXIgZnJvbSB0aGUgU3RyZWFtLCBhc3N1bWluZyB0aGUgTGlzdGVuZXIgd2FzIGFkZGVkIHRvIGl0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHtMaXN0ZW5lcjxUPn0gbGlzdGVuZXJcbiAgICAgKi9cbiAgICBTdHJlYW0ucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24gKGxpc3RlbmVyKSB7XG4gICAgICAgIHRoaXMuX3JlbW92ZShsaXN0ZW5lcik7XG4gICAgfTtcbiAgICBTdHJlYW0ucHJvdG90eXBlLl9hZGQgPSBmdW5jdGlvbiAoaWwpIHtcbiAgICAgICAgdmFyIGEgPSB0aGlzLl9pbHM7XG4gICAgICAgIGEucHVzaChpbCk7XG4gICAgICAgIGlmIChhLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3N0b3BJRCAhPT0gZW1wdHkpIHtcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fc3RvcElEKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdG9wSUQgPSBlbXB0eTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBwID0gdGhpcy5fcHJvZDtcbiAgICAgICAgICAgIGlmIChwKVxuICAgICAgICAgICAgICAgIHAuX3N0YXJ0KHRoaXMpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdHJlYW0ucHJvdG90eXBlLl9yZW1vdmUgPSBmdW5jdGlvbiAoaWwpIHtcbiAgICAgICAgdmFyIGEgPSB0aGlzLl9pbHM7XG4gICAgICAgIHZhciBpID0gYS5pbmRleE9mKGlsKTtcbiAgICAgICAgaWYgKGkgPiAtMSkge1xuICAgICAgICAgICAgYS5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICB2YXIgcF8xID0gdGhpcy5fcHJvZDtcbiAgICAgICAgICAgIGlmIChwXzEgJiYgYS5sZW5ndGggPD0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0b3BJRCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyByZXR1cm4gcF8xLl9zdG9wKCk7IH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBTdHJlYW0ucHJvdG90eXBlLmN0b3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzIGluc3RhbmNlb2YgTWVtb3J5U3RyZWFtID8gTWVtb3J5U3RyZWFtIDogU3RyZWFtO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBTdHJlYW0gZ2l2ZW4gYSBQcm9kdWNlci5cbiAgICAgKlxuICAgICAqIEBmYWN0b3J5IHRydWVcbiAgICAgKiBAcGFyYW0ge1Byb2R1Y2VyfSBwcm9kdWNlciBBbiBvcHRpb25hbCBQcm9kdWNlciB0aGF0IGRpY3RhdGVzIGhvdyB0b1xuICAgICAqIHN0YXJ0LCBnZW5lcmF0ZSBldmVudHMsIGFuZCBzdG9wIHRoZSBTdHJlYW0uXG4gICAgICogQHJldHVybiB7U3RyZWFtfVxuICAgICAqL1xuICAgIFN0cmVhbS5jcmVhdGUgPSBmdW5jdGlvbiAocHJvZHVjZXIpIHtcbiAgICAgICAgaWYgKHByb2R1Y2VyKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHByb2R1Y2VyLnN0YXJ0ICE9PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICAgICAgfHwgdHlwZW9mIHByb2R1Y2VyLnN0b3AgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2R1Y2VyIHJlcXVpcmVzIGJvdGggc3RhcnQgYW5kIHN0b3AgZnVuY3Rpb25zJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpbnRlcm5hbGl6ZVByb2R1Y2VyKHByb2R1Y2VyKTsgLy8gbXV0YXRlcyB0aGUgaW5wdXRcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFN0cmVhbShwcm9kdWNlcik7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IE1lbW9yeVN0cmVhbSBnaXZlbiBhIFByb2R1Y2VyLlxuICAgICAqXG4gICAgICogQGZhY3RvcnkgdHJ1ZVxuICAgICAqIEBwYXJhbSB7UHJvZHVjZXJ9IHByb2R1Y2VyIEFuIG9wdGlvbmFsIFByb2R1Y2VyIHRoYXQgZGljdGF0ZXMgaG93IHRvXG4gICAgICogc3RhcnQsIGdlbmVyYXRlIGV2ZW50cywgYW5kIHN0b3AgdGhlIFN0cmVhbS5cbiAgICAgKiBAcmV0dXJuIHtNZW1vcnlTdHJlYW19XG4gICAgICovXG4gICAgU3RyZWFtLmNyZWF0ZVdpdGhNZW1vcnkgPSBmdW5jdGlvbiAocHJvZHVjZXIpIHtcbiAgICAgICAgaWYgKHByb2R1Y2VyKSB7XG4gICAgICAgICAgICBpbnRlcm5hbGl6ZVByb2R1Y2VyKHByb2R1Y2VyKTsgLy8gbXV0YXRlcyB0aGUgaW5wdXRcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IE1lbW9yeVN0cmVhbShwcm9kdWNlcik7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IE1pbWljU3RyZWFtLCB3aGljaCBjYW4gYGltaXRhdGVgIGFub3RoZXIgU3RyZWFtLiBPbmx5IGFcbiAgICAgKiBNaW1pY1N0cmVhbSBoYXMgdGhlIGBpbWl0YXRlKClgIG1ldGhvZC5cbiAgICAgKlxuICAgICAqIEBmYWN0b3J5IHRydWVcbiAgICAgKiBAcmV0dXJuIHtNaW1pY1N0cmVhbX1cbiAgICAgKi9cbiAgICBTdHJlYW0uY3JlYXRlTWltaWMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBuZXcgTWltaWNTdHJlYW0oKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBTdHJlYW0gdGhhdCBkb2VzIG5vdGhpbmcgd2hlbiBzdGFydGVkLiBJdCBuZXZlciBlbWl0cyBhbnkgZXZlbnQuXG4gICAgICpcbiAgICAgKiBNYXJibGUgZGlhZ3JhbTpcbiAgICAgKlxuICAgICAqIGBgYHRleHRcbiAgICAgKiAgICAgICAgICBuZXZlclxuICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAZmFjdG9yeSB0cnVlXG4gICAgICogQHJldHVybiB7U3RyZWFtfVxuICAgICAqL1xuICAgIFN0cmVhbS5uZXZlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTdHJlYW0oeyBfc3RhcnQ6IG5vb3AsIF9zdG9wOiBub29wIH0pO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIFN0cmVhbSB0aGF0IGltbWVkaWF0ZWx5IGVtaXRzIHRoZSBcImNvbXBsZXRlXCIgbm90aWZpY2F0aW9uIHdoZW5cbiAgICAgKiBzdGFydGVkLCBhbmQgdGhhdCdzIGl0LlxuICAgICAqXG4gICAgICogTWFyYmxlIGRpYWdyYW06XG4gICAgICpcbiAgICAgKiBgYGB0ZXh0XG4gICAgICogZW1wdHlcbiAgICAgKiAtfFxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQGZhY3RvcnkgdHJ1ZVxuICAgICAqIEByZXR1cm4ge1N0cmVhbX1cbiAgICAgKi9cbiAgICBTdHJlYW0uZW1wdHkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBuZXcgU3RyZWFtKHtcbiAgICAgICAgICAgIF9zdGFydDogZnVuY3Rpb24gKGlsKSB7IGlsLl9jKCk7IH0sXG4gICAgICAgICAgICBfc3RvcDogbm9vcCxcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgU3RyZWFtIHRoYXQgaW1tZWRpYXRlbHkgZW1pdHMgYW4gXCJlcnJvclwiIG5vdGlmaWNhdGlvbiB3aXRoIHRoZVxuICAgICAqIHZhbHVlIHlvdSBwYXNzZWQgYXMgdGhlIGBlcnJvcmAgYXJndW1lbnQgd2hlbiB0aGUgc3RyZWFtIHN0YXJ0cywgYW5kIHRoYXQnc1xuICAgICAqIGl0LlxuICAgICAqXG4gICAgICogTWFyYmxlIGRpYWdyYW06XG4gICAgICpcbiAgICAgKiBgYGB0ZXh0XG4gICAgICogdGhyb3coWClcbiAgICAgKiAtWFxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQGZhY3RvcnkgdHJ1ZVxuICAgICAqIEBwYXJhbSBlcnJvciBUaGUgZXJyb3IgZXZlbnQgdG8gZW1pdCBvbiB0aGUgY3JlYXRlZCBzdHJlYW0uXG4gICAgICogQHJldHVybiB7U3RyZWFtfVxuICAgICAqL1xuICAgIFN0cmVhbS50aHJvdyA9IGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICByZXR1cm4gbmV3IFN0cmVhbSh7XG4gICAgICAgICAgICBfc3RhcnQ6IGZ1bmN0aW9uIChpbCkgeyBpbC5fZShlcnJvcik7IH0sXG4gICAgICAgICAgICBfc3RvcDogbm9vcCxcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgU3RyZWFtIHRoYXQgaW1tZWRpYXRlbHkgZW1pdHMgdGhlIGFyZ3VtZW50cyB0aGF0IHlvdSBnaXZlIHRvXG4gICAgICogKm9mKiwgdGhlbiBjb21wbGV0ZXMuXG4gICAgICpcbiAgICAgKiBNYXJibGUgZGlhZ3JhbTpcbiAgICAgKlxuICAgICAqIGBgYHRleHRcbiAgICAgKiBvZigxLDIsMylcbiAgICAgKiAxMjN8XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAZmFjdG9yeSB0cnVlXG4gICAgICogQHBhcmFtIGEgVGhlIGZpcnN0IHZhbHVlIHlvdSB3YW50IHRvIGVtaXQgYXMgYW4gZXZlbnQgb24gdGhlIHN0cmVhbS5cbiAgICAgKiBAcGFyYW0gYiBUaGUgc2Vjb25kIHZhbHVlIHlvdSB3YW50IHRvIGVtaXQgYXMgYW4gZXZlbnQgb24gdGhlIHN0cmVhbS4gT25lXG4gICAgICogb3IgbW9yZSBvZiB0aGVzZSB2YWx1ZXMgbWF5IGJlIGdpdmVuIGFzIGFyZ3VtZW50cy5cbiAgICAgKiBAcmV0dXJuIHtTdHJlYW19XG4gICAgICovXG4gICAgU3RyZWFtLm9mID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgaXRlbXMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGl0ZW1zW19pIC0gMF0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBTdHJlYW0uZnJvbUFycmF5KGl0ZW1zKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGFuIGFycmF5IHRvIGEgc3RyZWFtLiBUaGUgcmV0dXJuZWQgc3RyZWFtIHdpbGwgZW1pdCBzeW5jaHJvbm91c2x5XG4gICAgICogYWxsIHRoZSBpdGVtcyBpbiB0aGUgYXJyYXksIGFuZCB0aGVuIGNvbXBsZXRlLlxuICAgICAqXG4gICAgICogTWFyYmxlIGRpYWdyYW06XG4gICAgICpcbiAgICAgKiBgYGB0ZXh0XG4gICAgICogZnJvbUFycmF5KFsxLDIsM10pXG4gICAgICogMTIzfFxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQGZhY3RvcnkgdHJ1ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBiZSBjb252ZXJ0ZWQgYXMgYSBzdHJlYW0uXG4gICAgICogQHJldHVybiB7U3RyZWFtfVxuICAgICAqL1xuICAgIFN0cmVhbS5mcm9tQXJyYXkgPSBmdW5jdGlvbiAoYXJyYXkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTdHJlYW0obmV3IEZyb21BcnJheVByb2R1Y2VyKGFycmF5KSk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBhIHByb21pc2UgdG8gYSBzdHJlYW0uIFRoZSByZXR1cm5lZCBzdHJlYW0gd2lsbCBlbWl0IHRoZSByZXNvbHZlZFxuICAgICAqIHZhbHVlIG9mIHRoZSBwcm9taXNlLCBhbmQgdGhlbiBjb21wbGV0ZS4gSG93ZXZlciwgaWYgdGhlIHByb21pc2UgaXNcbiAgICAgKiByZWplY3RlZCwgdGhlIHN0cmVhbSB3aWxsIGVtaXQgdGhlIGNvcnJlc3BvbmRpbmcgZXJyb3IuXG4gICAgICpcbiAgICAgKiBNYXJibGUgZGlhZ3JhbTpcbiAgICAgKlxuICAgICAqIGBgYHRleHRcbiAgICAgKiBmcm9tUHJvbWlzZSggLS0tLTQyIClcbiAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLTQyfFxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQGZhY3RvcnkgdHJ1ZVxuICAgICAqIEBwYXJhbSB7UHJvbWlzZX0gcHJvbWlzZSBUaGUgcHJvbWlzZSB0byBiZSBjb252ZXJ0ZWQgYXMgYSBzdHJlYW0uXG4gICAgICogQHJldHVybiB7U3RyZWFtfVxuICAgICAqL1xuICAgIFN0cmVhbS5mcm9tUHJvbWlzZSA9IGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgICAgIHJldHVybiBuZXcgU3RyZWFtKG5ldyBGcm9tUHJvbWlzZVByb2R1Y2VyKHByb21pc2UpKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBzdHJlYW0gdGhhdCBwZXJpb2RpY2FsbHkgZW1pdHMgaW5jcmVtZW50YWwgbnVtYmVycywgZXZlcnlcbiAgICAgKiBgcGVyaW9kYCBtaWxsaXNlY29uZHMuXG4gICAgICpcbiAgICAgKiBNYXJibGUgZGlhZ3JhbTpcbiAgICAgKlxuICAgICAqIGBgYHRleHRcbiAgICAgKiAgICAgcGVyaW9kaWMoMTAwMClcbiAgICAgKiAtLS0wLS0tMS0tLTItLS0zLS0tNC0tLS4uLlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQGZhY3RvcnkgdHJ1ZVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBwZXJpb2QgVGhlIGludGVydmFsIGluIG1pbGxpc2Vjb25kcyB0byB1c2UgYXMgYSByYXRlIG9mXG4gICAgICogZW1pc3Npb24uXG4gICAgICogQHJldHVybiB7U3RyZWFtfVxuICAgICAqL1xuICAgIFN0cmVhbS5wZXJpb2RpYyA9IGZ1bmN0aW9uIChwZXJpb2QpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTdHJlYW0obmV3IFBlcmlvZGljUHJvZHVjZXIocGVyaW9kKSk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBCbGVuZHMgbXVsdGlwbGUgc3RyZWFtcyB0b2dldGhlciwgZW1pdHRpbmcgZXZlbnRzIGZyb20gYWxsIG9mIHRoZW1cbiAgICAgKiBjb25jdXJyZW50bHkuXG4gICAgICpcbiAgICAgKiAqbWVyZ2UqIHRha2VzIG11bHRpcGxlIHN0cmVhbXMgYXMgYXJndW1lbnRzLCBhbmQgY3JlYXRlcyBhIHN0cmVhbSB0aGF0XG4gICAgICogYmVoYXZlcyBsaWtlIGVhY2ggb2YgdGhlIGFyZ3VtZW50IHN0cmVhbXMsIGluIHBhcmFsbGVsLlxuICAgICAqXG4gICAgICogTWFyYmxlIGRpYWdyYW06XG4gICAgICpcbiAgICAgKiBgYGB0ZXh0XG4gICAgICogLS0xLS0tLTItLS0tLTMtLS0tLS0tLTQtLS1cbiAgICAgKiAtLS0tYS0tLS0tYi0tLS1jLS0tZC0tLS0tLVxuICAgICAqICAgICAgICAgICAgbWVyZ2VcbiAgICAgKiAtLTEtYS0tMi0tYi0tMy1jLS0tZC0tNC0tLVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQGZhY3RvcnkgdHJ1ZVxuICAgICAqIEBwYXJhbSB7U3RyZWFtfSBzdHJlYW0xIEEgc3RyZWFtIHRvIG1lcmdlIHRvZ2V0aGVyIHdpdGggb3RoZXIgc3RyZWFtcy5cbiAgICAgKiBAcGFyYW0ge1N0cmVhbX0gc3RyZWFtMiBBIHN0cmVhbSB0byBtZXJnZSB0b2dldGhlciB3aXRoIG90aGVyIHN0cmVhbXMuIFR3b1xuICAgICAqIG9yIG1vcmUgc3RyZWFtcyBtYXkgYmUgZ2l2ZW4gYXMgYXJndW1lbnRzLlxuICAgICAqIEByZXR1cm4ge1N0cmVhbX1cbiAgICAgKi9cbiAgICBTdHJlYW0ubWVyZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBzdHJlYW1zID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBzdHJlYW1zW19pIC0gMF0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgU3RyZWFtKG5ldyBNZXJnZVByb2R1Y2VyKHN0cmVhbXMpKTtcbiAgICB9O1xuICAgIFN0cmVhbS5wcm90b3R5cGUuX21hcCA9IGZ1bmN0aW9uIChwcm9qZWN0KSB7XG4gICAgICAgIHZhciBwID0gdGhpcy5fcHJvZDtcbiAgICAgICAgdmFyIGN0b3IgPSB0aGlzLmN0b3IoKTtcbiAgICAgICAgaWYgKHAgaW5zdGFuY2VvZiBGaWx0ZXJPcGVyYXRvcikge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBjdG9yKG5ldyBGaWx0ZXJNYXBPcGVyYXRvcihwLnBhc3NlcywgcHJvamVjdCwgcC5pbnMpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocCBpbnN0YW5jZW9mIEZpbHRlck1hcE9wZXJhdG9yKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IGN0b3IobmV3IEZpbHRlck1hcE9wZXJhdG9yKHAucGFzc2VzLCBjb21wb3NlMihwcm9qZWN0LCBwLnByb2plY3QpLCBwLmlucykpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwIGluc3RhbmNlb2YgTWFwT3BlcmF0b3IpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgY3RvcihuZXcgTWFwT3BlcmF0b3IoY29tcG9zZTIocHJvamVjdCwgcC5wcm9qZWN0KSwgcC5pbnMpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IGN0b3IobmV3IE1hcE9wZXJhdG9yKHByb2plY3QsIHRoaXMpKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFRyYW5zZm9ybXMgZWFjaCBldmVudCBmcm9tIHRoZSBpbnB1dCBTdHJlYW0gdGhyb3VnaCBhIGBwcm9qZWN0YCBmdW5jdGlvbixcbiAgICAgKiB0byBnZXQgYSBTdHJlYW0gdGhhdCBlbWl0cyB0aG9zZSB0cmFuc2Zvcm1lZCBldmVudHMuXG4gICAgICpcbiAgICAgKiBNYXJibGUgZGlhZ3JhbTpcbiAgICAgKlxuICAgICAqIGBgYHRleHRcbiAgICAgKiAtLTEtLS0zLS01LS0tLS03LS0tLS0tXG4gICAgICogICAgbWFwKGkgPT4gaSAqIDEwKVxuICAgICAqIC0tMTAtLTMwLTUwLS0tLTcwLS0tLS1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHByb2plY3QgQSBmdW5jdGlvbiBvZiB0eXBlIGAodDogVCkgPT4gVWAgdGhhdCB0YWtlcyBldmVudFxuICAgICAqIGB0YCBvZiB0eXBlIGBUYCBmcm9tIHRoZSBpbnB1dCBTdHJlYW0gYW5kIHByb2R1Y2VzIGFuIGV2ZW50IG9mIHR5cGUgYFVgLCB0b1xuICAgICAqIGJlIGVtaXR0ZWQgb24gdGhlIG91dHB1dCBTdHJlYW0uXG4gICAgICogQHJldHVybiB7U3RyZWFtfVxuICAgICAqL1xuICAgIFN0cmVhbS5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gKHByb2plY3QpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21hcChwcm9qZWN0KTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEl0J3MgbGlrZSBgbWFwYCwgYnV0IHRyYW5zZm9ybXMgZWFjaCBpbnB1dCBldmVudCB0byBhbHdheXMgdGhlIHNhbWVcbiAgICAgKiBjb25zdGFudCB2YWx1ZSBvbiB0aGUgb3V0cHV0IFN0cmVhbS5cbiAgICAgKlxuICAgICAqIE1hcmJsZSBkaWFncmFtOlxuICAgICAqXG4gICAgICogYGBgdGV4dFxuICAgICAqIC0tMS0tLTMtLTUtLS0tLTctLS0tLVxuICAgICAqICAgICAgIG1hcFRvKDEwKVxuICAgICAqIC0tMTAtLTEwLTEwLS0tLTEwLS0tLVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQHBhcmFtIHByb2plY3RlZFZhbHVlIEEgdmFsdWUgdG8gZW1pdCBvbiB0aGUgb3V0cHV0IFN0cmVhbSB3aGVuZXZlciB0aGVcbiAgICAgKiBpbnB1dCBTdHJlYW0gZW1pdHMgYW55IHZhbHVlLlxuICAgICAqIEByZXR1cm4ge1N0cmVhbX1cbiAgICAgKi9cbiAgICBTdHJlYW0ucHJvdG90eXBlLm1hcFRvID0gZnVuY3Rpb24gKHByb2plY3RlZFZhbHVlKSB7XG4gICAgICAgIHZhciBzID0gdGhpcy5tYXAoZnVuY3Rpb24gKCkgeyByZXR1cm4gcHJvamVjdGVkVmFsdWU7IH0pO1xuICAgICAgICB2YXIgb3AgPSBzLl9wcm9kO1xuICAgICAgICBvcC50eXBlID0gb3AudHlwZS5yZXBsYWNlKCdtYXAnLCAnbWFwVG8nKTtcbiAgICAgICAgcmV0dXJuIHM7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBPbmx5IGFsbG93cyBldmVudHMgdGhhdCBwYXNzIHRoZSB0ZXN0IGdpdmVuIGJ5IHRoZSBgcGFzc2VzYCBhcmd1bWVudC5cbiAgICAgKlxuICAgICAqIEVhY2ggZXZlbnQgZnJvbSB0aGUgaW5wdXQgc3RyZWFtIGlzIGdpdmVuIHRvIHRoZSBgcGFzc2VzYCBmdW5jdGlvbi4gSWYgdGhlXG4gICAgICogZnVuY3Rpb24gcmV0dXJucyBgdHJ1ZWAsIHRoZSBldmVudCBpcyBmb3J3YXJkZWQgdG8gdGhlIG91dHB1dCBzdHJlYW0sXG4gICAgICogb3RoZXJ3aXNlIGl0IGlzIGlnbm9yZWQgYW5kIG5vdCBmb3J3YXJkZWQuXG4gICAgICpcbiAgICAgKiBNYXJibGUgZGlhZ3JhbTpcbiAgICAgKlxuICAgICAqIGBgYHRleHRcbiAgICAgKiAtLTEtLS0yLS0zLS0tLS00LS0tLS01LS0tNi0tNy04LS1cbiAgICAgKiAgICAgZmlsdGVyKGkgPT4gaSAlIDIgPT09IDApXG4gICAgICogLS0tLS0tMi0tLS0tLS0tNC0tLS0tLS0tLTYtLS0tOC0tXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBwYXNzZXMgQSBmdW5jdGlvbiBvZiB0eXBlIGAodDogVCkgKz4gYm9vbGVhbmAgdGhhdCB0YWtlc1xuICAgICAqIGFuIGV2ZW50IGZyb20gdGhlIGlucHV0IHN0cmVhbSBhbmQgY2hlY2tzIGlmIGl0IHBhc3NlcywgYnkgcmV0dXJuaW5nIGFcbiAgICAgKiBib29sZWFuLlxuICAgICAqIEByZXR1cm4ge1N0cmVhbX1cbiAgICAgKi9cbiAgICBTdHJlYW0ucHJvdG90eXBlLmZpbHRlciA9IGZ1bmN0aW9uIChwYXNzZXMpIHtcbiAgICAgICAgdmFyIHAgPSB0aGlzLl9wcm9kO1xuICAgICAgICBpZiAocCBpbnN0YW5jZW9mIEZpbHRlck9wZXJhdG9yKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFN0cmVhbShuZXcgRmlsdGVyT3BlcmF0b3IoYW5kKHBhc3NlcywgcC5wYXNzZXMpLCBwLmlucykpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgU3RyZWFtKG5ldyBGaWx0ZXJPcGVyYXRvcihwYXNzZXMsIHRoaXMpKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIExldHMgdGhlIGZpcnN0IGBhbW91bnRgIG1hbnkgZXZlbnRzIGZyb20gdGhlIGlucHV0IHN0cmVhbSBwYXNzIHRvIHRoZVxuICAgICAqIG91dHB1dCBzdHJlYW0sIHRoZW4gbWFrZXMgdGhlIG91dHB1dCBzdHJlYW0gY29tcGxldGUuXG4gICAgICpcbiAgICAgKiBNYXJibGUgZGlhZ3JhbTpcbiAgICAgKlxuICAgICAqIGBgYHRleHRcbiAgICAgKiAtLWEtLS1iLS1jLS0tLWQtLS1lLS1cbiAgICAgKiAgICB0YWtlKDMpXG4gICAgICogLS1hLS0tYi0tY3xcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBhbW91bnQgSG93IG1hbnkgZXZlbnRzIHRvIGFsbG93IGZyb20gdGhlIGlucHV0IHN0cmVhbVxuICAgICAqIGJlZm9yZSBjb21wbGV0aW5nIHRoZSBvdXRwdXQgc3RyZWFtLlxuICAgICAqIEByZXR1cm4ge1N0cmVhbX1cbiAgICAgKi9cbiAgICBTdHJlYW0ucHJvdG90eXBlLnRha2UgPSBmdW5jdGlvbiAoYW1vdW50KSB7XG4gICAgICAgIHJldHVybiBuZXcgKHRoaXMuY3RvcigpKShuZXcgVGFrZU9wZXJhdG9yKGFtb3VudCwgdGhpcykpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogSWdub3JlcyB0aGUgZmlyc3QgYGFtb3VudGAgbWFueSBldmVudHMgZnJvbSB0aGUgaW5wdXQgc3RyZWFtLCBhbmQgdGhlblxuICAgICAqIGFmdGVyIHRoYXQgc3RhcnRzIGZvcndhcmRpbmcgZXZlbnRzIGZyb20gdGhlIGlucHV0IHN0cmVhbSB0byB0aGUgb3V0cHV0XG4gICAgICogc3RyZWFtLlxuICAgICAqXG4gICAgICogTWFyYmxlIGRpYWdyYW06XG4gICAgICpcbiAgICAgKiBgYGB0ZXh0XG4gICAgICogLS1hLS0tYi0tYy0tLS1kLS0tZS0tXG4gICAgICogICAgICAgZHJvcCgzKVxuICAgICAqIC0tLS0tLS0tLS0tLS0tZC0tLWUtLVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGFtb3VudCBIb3cgbWFueSBldmVudHMgdG8gaWdub3JlIGZyb20gdGhlIGlucHV0IHN0cmVhbVxuICAgICAqIGJlZm9yZSBmb3J3YXJkaW5nIGFsbCBldmVudHMgZnJvbSB0aGUgaW5wdXQgc3RyZWFtIHRvIHRoZSBvdXRwdXQgc3RyZWFtLlxuICAgICAqIEByZXR1cm4ge1N0cmVhbX1cbiAgICAgKi9cbiAgICBTdHJlYW0ucHJvdG90eXBlLmRyb3AgPSBmdW5jdGlvbiAoYW1vdW50KSB7XG4gICAgICAgIHJldHVybiBuZXcgU3RyZWFtKG5ldyBEcm9wT3BlcmF0b3IoYW1vdW50LCB0aGlzKSk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBXaGVuIHRoZSBpbnB1dCBzdHJlYW0gY29tcGxldGVzLCB0aGUgb3V0cHV0IHN0cmVhbSB3aWxsIGVtaXQgdGhlIGxhc3QgZXZlbnRcbiAgICAgKiBlbWl0dGVkIGJ5IHRoZSBpbnB1dCBzdHJlYW0sIGFuZCB0aGVuIHdpbGwgYWxzbyBjb21wbGV0ZS5cbiAgICAgKlxuICAgICAqIE1hcmJsZSBkaWFncmFtOlxuICAgICAqXG4gICAgICogYGBgdGV4dFxuICAgICAqIC0tYS0tLWItLWMtLWQtLS0tfFxuICAgICAqICAgICAgIGxhc3QoKVxuICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tZHxcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge1N0cmVhbX1cbiAgICAgKi9cbiAgICBTdHJlYW0ucHJvdG90eXBlLmxhc3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBuZXcgU3RyZWFtKG5ldyBMYXN0T3BlcmF0b3IodGhpcykpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogUHJlcGVuZHMgdGhlIGdpdmVuIGBpbml0aWFsYCB2YWx1ZSB0byB0aGUgc2VxdWVuY2Ugb2YgZXZlbnRzIGVtaXR0ZWQgYnkgdGhlXG4gICAgICogaW5wdXQgc3RyZWFtLiBUaGUgcmV0dXJuZWQgc3RyZWFtIGlzIGEgTWVtb3J5U3RyZWFtLCB3aGljaCBtZWFucyBpdCBpc1xuICAgICAqIGFscmVhZHkgYHJlbWVtYmVyKClgJ2QuXG4gICAgICpcbiAgICAgKiBNYXJibGUgZGlhZ3JhbTpcbiAgICAgKlxuICAgICAqIGBgYHRleHRcbiAgICAgKiAtLS0xLS0tMi0tLS0tMy0tLVxuICAgICAqICAgc3RhcnRXaXRoKDApXG4gICAgICogMC0tMS0tLTItLS0tLTMtLS1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBwYXJhbSBpbml0aWFsIFRoZSB2YWx1ZSBvciBldmVudCB0byBwcmVwZW5kLlxuICAgICAqIEByZXR1cm4ge01lbW9yeVN0cmVhbX1cbiAgICAgKi9cbiAgICBTdHJlYW0ucHJvdG90eXBlLnN0YXJ0V2l0aCA9IGZ1bmN0aW9uIChpbml0aWFsKSB7XG4gICAgICAgIHJldHVybiBuZXcgTWVtb3J5U3RyZWFtKG5ldyBTdGFydFdpdGhPcGVyYXRvcih0aGlzLCBpbml0aWFsKSk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBVc2VzIGFub3RoZXIgc3RyZWFtIHRvIGRldGVybWluZSB3aGVuIHRvIGNvbXBsZXRlIHRoZSBjdXJyZW50IHN0cmVhbS5cbiAgICAgKlxuICAgICAqIFdoZW4gdGhlIGdpdmVuIGBvdGhlcmAgc3RyZWFtIGVtaXRzIGFuIGV2ZW50IG9yIGNvbXBsZXRlcywgdGhlIG91dHB1dFxuICAgICAqIHN0cmVhbSB3aWxsIGNvbXBsZXRlLiBCZWZvcmUgdGhhdCBoYXBwZW5zLCB0aGUgb3V0cHV0IHN0cmVhbSB3aWxsIGJlaGF2ZXNcbiAgICAgKiBsaWtlIHRoZSBpbnB1dCBzdHJlYW0uXG4gICAgICpcbiAgICAgKiBNYXJibGUgZGlhZ3JhbTpcbiAgICAgKlxuICAgICAqIGBgYHRleHRcbiAgICAgKiAtLS0xLS0tMi0tLS0tMy0tNC0tLS01LS0tLTYtLS1cbiAgICAgKiAgIGVuZFdoZW4oIC0tLS0tLS0tYS0tYi0tfCApXG4gICAgICogLS0tMS0tLTItLS0tLTMtLTQtLXxcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvdGhlciBTb21lIG90aGVyIHN0cmVhbSB0aGF0IGlzIHVzZWQgdG8ga25vdyB3aGVuIHNob3VsZCB0aGUgb3V0cHV0XG4gICAgICogc3RyZWFtIG9mIHRoaXMgb3BlcmF0b3IgY29tcGxldGUuXG4gICAgICogQHJldHVybiB7U3RyZWFtfVxuICAgICAqL1xuICAgIFN0cmVhbS5wcm90b3R5cGUuZW5kV2hlbiA9IGZ1bmN0aW9uIChvdGhlcikge1xuICAgICAgICByZXR1cm4gbmV3ICh0aGlzLmN0b3IoKSkobmV3IEVuZFdoZW5PcGVyYXRvcihvdGhlciwgdGhpcykpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogXCJGb2xkc1wiIHRoZSBzdHJlYW0gb250byBpdHNlbGYuXG4gICAgICpcbiAgICAgKiBDb21iaW5lcyBldmVudHMgZnJvbSB0aGUgcGFzdCB0aHJvdWdob3V0XG4gICAgICogdGhlIGVudGlyZSBleGVjdXRpb24gb2YgdGhlIGlucHV0IHN0cmVhbSwgYWxsb3dpbmcgeW91IHRvIGFjY3VtdWxhdGUgdGhlbVxuICAgICAqIHRvZ2V0aGVyLiBJdCdzIGVzc2VudGlhbGx5IGxpa2UgYEFycmF5LnByb3RvdHlwZS5yZWR1Y2VgLiBUaGUgcmV0dXJuZWRcbiAgICAgKiBzdHJlYW0gaXMgYSBNZW1vcnlTdHJlYW0sIHdoaWNoIG1lYW5zIGl0IGlzIGFscmVhZHkgYHJlbWVtYmVyKClgJ2QuXG4gICAgICpcbiAgICAgKiBUaGUgb3V0cHV0IHN0cmVhbSBzdGFydHMgYnkgZW1pdHRpbmcgdGhlIGBzZWVkYCB3aGljaCB5b3UgZ2l2ZSBhcyBhcmd1bWVudC5cbiAgICAgKiBUaGVuLCB3aGVuIGFuIGV2ZW50IGhhcHBlbnMgb24gdGhlIGlucHV0IHN0cmVhbSwgaXQgaXMgY29tYmluZWQgd2l0aCB0aGF0XG4gICAgICogc2VlZCB2YWx1ZSB0aHJvdWdoIHRoZSBgYWNjdW11bGF0ZWAgZnVuY3Rpb24sIGFuZCB0aGUgb3V0cHV0IHZhbHVlIGlzXG4gICAgICogZW1pdHRlZCBvbiB0aGUgb3V0cHV0IHN0cmVhbS4gYGZvbGRgIHJlbWVtYmVycyB0aGF0IG91dHB1dCB2YWx1ZSBhcyBgYWNjYFxuICAgICAqIChcImFjY3VtdWxhdG9yXCIpLCBhbmQgdGhlbiB3aGVuIGEgbmV3IGlucHV0IGV2ZW50IGB0YCBoYXBwZW5zLCBgYWNjYCB3aWxsIGJlXG4gICAgICogY29tYmluZWQgd2l0aCB0aGF0IHRvIHByb2R1Y2UgdGhlIG5ldyBgYWNjYCBhbmQgc28gZm9ydGguXG4gICAgICpcbiAgICAgKiBNYXJibGUgZGlhZ3JhbTpcbiAgICAgKlxuICAgICAqIGBgYHRleHRcbiAgICAgKiAtLS0tLS0xLS0tLS0xLS0yLS0tLTEtLS0tMS0tLS0tLVxuICAgICAqICAgZm9sZCgoYWNjLCB4KSA9PiBhY2MgKyB4LCAzKVxuICAgICAqIDMtLS0tLTQtLS0tLTUtLTctLS0tOC0tLS05LS0tLS0tXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBhY2N1bXVsYXRlIEEgZnVuY3Rpb24gb2YgdHlwZSBgKGFjYzogUiwgdDogVCkgPT4gUmAgdGhhdFxuICAgICAqIHRha2VzIHRoZSBwcmV2aW91cyBhY2N1bXVsYXRlZCB2YWx1ZSBgYWNjYCBhbmQgdGhlIGluY29taW5nIGV2ZW50IGZyb20gdGhlXG4gICAgICogaW5wdXQgc3RyZWFtIGFuZCBwcm9kdWNlcyB0aGUgbmV3IGFjY3VtdWxhdGVkIHZhbHVlLlxuICAgICAqIEBwYXJhbSBzZWVkIFRoZSBpbml0aWFsIGFjY3VtdWxhdGVkIHZhbHVlLCBvZiB0eXBlIGBSYC5cbiAgICAgKiBAcmV0dXJuIHtNZW1vcnlTdHJlYW19XG4gICAgICovXG4gICAgU3RyZWFtLnByb3RvdHlwZS5mb2xkID0gZnVuY3Rpb24gKGFjY3VtdWxhdGUsIHNlZWQpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBNZW1vcnlTdHJlYW0obmV3IEZvbGRPcGVyYXRvcihhY2N1bXVsYXRlLCBzZWVkLCB0aGlzKSk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBSZXBsYWNlcyBhbiBlcnJvciB3aXRoIGFub3RoZXIgc3RyZWFtLlxuICAgICAqXG4gICAgICogV2hlbiAoYW5kIGlmKSBhbiBlcnJvciBoYXBwZW5zIG9uIHRoZSBpbnB1dCBzdHJlYW0sIGluc3RlYWQgb2YgZm9yd2FyZGluZ1xuICAgICAqIHRoYXQgZXJyb3IgdG8gdGhlIG91dHB1dCBzdHJlYW0sICpyZXBsYWNlRXJyb3IqIHdpbGwgY2FsbCB0aGUgYHJlcGxhY2VgXG4gICAgICogZnVuY3Rpb24gd2hpY2ggcmV0dXJucyB0aGUgc3RyZWFtIHRoYXQgdGhlIG91dHB1dCBzdHJlYW0gd2lsbCByZXBsaWNhdGUuXG4gICAgICogQW5kLCBpbiBjYXNlIHRoYXQgbmV3IHN0cmVhbSBhbHNvIGVtaXRzIGFuIGVycm9yLCBgcmVwbGFjZWAgd2lsbCBiZSBjYWxsZWRcbiAgICAgKiBhZ2FpbiB0byBnZXQgYW5vdGhlciBzdHJlYW0gdG8gc3RhcnQgcmVwbGljYXRpbmcuXG4gICAgICpcbiAgICAgKiBNYXJibGUgZGlhZ3JhbTpcbiAgICAgKlxuICAgICAqIGBgYHRleHRcbiAgICAgKiAtLTEtLS0yLS0tLS0zLS00LS0tLS1YXG4gICAgICogICByZXBsYWNlRXJyb3IoICgpID0+IC0tMTAtLXwgKVxuICAgICAqIC0tMS0tLTItLS0tLTMtLTQtLS0tLS0tLTEwLS18XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSByZXBsYWNlIEEgZnVuY3Rpb24gb2YgdHlwZSBgKGVycikgPT4gU3RyZWFtYCB0aGF0IHRha2VzXG4gICAgICogdGhlIGVycm9yIHRoYXQgb2NjdXJyZWQgb24gdGhlIGlucHV0IHN0cmVhbSBvciBvbiB0aGUgcHJldmlvdXMgcmVwbGFjZW1lbnRcbiAgICAgKiBzdHJlYW0gYW5kIHJldHVybnMgYSBuZXcgc3RyZWFtLiBUaGUgb3V0cHV0IHN0cmVhbSB3aWxsIGJlaGF2ZSBsaWtlIHRoZVxuICAgICAqIHN0cmVhbSB0aGF0IHRoaXMgZnVuY3Rpb24gcmV0dXJucy5cbiAgICAgKiBAcmV0dXJuIHtTdHJlYW19XG4gICAgICovXG4gICAgU3RyZWFtLnByb3RvdHlwZS5yZXBsYWNlRXJyb3IgPSBmdW5jdGlvbiAocmVwbGFjZSkge1xuICAgICAgICByZXR1cm4gbmV3ICh0aGlzLmN0b3IoKSkobmV3IFJlcGxhY2VFcnJvck9wZXJhdG9yKHJlcGxhY2UsIHRoaXMpKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEZsYXR0ZW5zIGEgXCJzdHJlYW0gb2Ygc3RyZWFtc1wiLCBoYW5kbGluZyBvbmx5IG9uZSBuZXN0ZWQgc3RyZWFtIGF0IGEgdGltZVxuICAgICAqIChubyBjb25jdXJyZW5jeSkuXG4gICAgICpcbiAgICAgKiBJZiB0aGUgaW5wdXQgc3RyZWFtIGlzIGEgc3RyZWFtIHRoYXQgZW1pdHMgc3RyZWFtcywgdGhlbiB0aGlzIG9wZXJhdG9yIHdpbGxcbiAgICAgKiByZXR1cm4gYW4gb3V0cHV0IHN0cmVhbSB3aGljaCBpcyBhIGZsYXQgc3RyZWFtOiBlbWl0cyByZWd1bGFyIGV2ZW50cy4gVGhlXG4gICAgICogZmxhdHRlbmluZyBoYXBwZW5zIHdpdGhvdXQgY29uY3VycmVuY3kuIEl0IHdvcmtzIGxpa2UgdGhpczogd2hlbiB0aGUgaW5wdXRcbiAgICAgKiBzdHJlYW0gZW1pdHMgYSBuZXN0ZWQgc3RyZWFtLCAqZmxhdHRlbiogd2lsbCBzdGFydCBpbWl0YXRpbmcgdGhhdCBuZXN0ZWRcbiAgICAgKiBvbmUuIEhvd2V2ZXIsIGFzIHNvb24gYXMgdGhlIG5leHQgbmVzdGVkIHN0cmVhbSBpcyBlbWl0dGVkIG9uIHRoZSBpbnB1dFxuICAgICAqIHN0cmVhbSwgKmZsYXR0ZW4qIHdpbGwgZm9yZ2V0IHRoZSBwcmV2aW91cyBuZXN0ZWQgb25lIGl0IHdhcyBpbWl0YXRpbmcsIGFuZFxuICAgICAqIHdpbGwgc3RhcnQgaW1pdGF0aW5nIHRoZSBuZXcgbmVzdGVkIG9uZS5cbiAgICAgKlxuICAgICAqIE1hcmJsZSBkaWFncmFtOlxuICAgICAqXG4gICAgICogYGBgdGV4dFxuICAgICAqIC0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLVxuICAgICAqICAgXFwgICAgICAgIFxcXG4gICAgICogICAgXFwgICAgICAgLS0tLTEtLS0tMi0tLTMtLVxuICAgICAqICAgIC0tYS0tYi0tLS1jLS0tLWQtLS0tLS0tLVxuICAgICAqICAgICAgICAgICBmbGF0dGVuXG4gICAgICogLS0tLS1hLS1iLS0tLS0tMS0tLS0yLS0tMy0tXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtTdHJlYW19XG4gICAgICovXG4gICAgU3RyZWFtLnByb3RvdHlwZS5mbGF0dGVuID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcCA9IHRoaXMuX3Byb2Q7XG4gICAgICAgIHJldHVybiBuZXcgU3RyZWFtKHAgaW5zdGFuY2VvZiBNYXBPcGVyYXRvciAmJiAhKHAgaW5zdGFuY2VvZiBGaWx0ZXJNYXBPcGVyYXRvcikgP1xuICAgICAgICAgICAgbmV3IE1hcEZsYXR0ZW5PcGVyYXRvcihwKSA6XG4gICAgICAgICAgICBuZXcgRmxhdHRlbk9wZXJhdG9yKHRoaXMpKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFBhc3NlcyB0aGUgaW5wdXQgc3RyZWFtIHRvIGEgY3VzdG9tIG9wZXJhdG9yLCB0byBwcm9kdWNlIGFuIG91dHB1dCBzdHJlYW0uXG4gICAgICpcbiAgICAgKiAqY29tcG9zZSogaXMgYSBoYW5keSB3YXkgb2YgdXNpbmcgYW4gZXhpc3RpbmcgZnVuY3Rpb24gaW4gYSBjaGFpbmVkIHN0eWxlLlxuICAgICAqIEluc3RlYWQgb2Ygd3JpdGluZyBgb3V0U3RyZWFtID0gZihpblN0cmVhbSlgIHlvdSBjYW4gd3JpdGVcbiAgICAgKiBgb3V0U3RyZWFtID0gaW5TdHJlYW0uY29tcG9zZShmKWAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBvcGVyYXRvciBBIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYSBzdHJlYW0gYXMgaW5wdXQgYW5kXG4gICAgICogcmV0dXJucyBhIHN0cmVhbSBhcyB3ZWxsLlxuICAgICAqIEByZXR1cm4ge1N0cmVhbX1cbiAgICAgKi9cbiAgICBTdHJlYW0ucHJvdG90eXBlLmNvbXBvc2UgPSBmdW5jdGlvbiAob3BlcmF0b3IpIHtcbiAgICAgICAgcmV0dXJuIG9wZXJhdG9yKHRoaXMpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhbiBvdXRwdXQgc3RyZWFtIHRoYXQgYmVoYXZlcyBsaWtlIHRoZSBpbnB1dCBzdHJlYW0sIGJ1dCBhbHNvXG4gICAgICogcmVtZW1iZXJzIHRoZSBtb3N0IHJlY2VudCBldmVudCB0aGF0IGhhcHBlbnMgb24gdGhlIGlucHV0IHN0cmVhbSwgc28gdGhhdCBhXG4gICAgICogbmV3bHkgYWRkZWQgbGlzdGVuZXIgd2lsbCBpbW1lZGlhdGVseSByZWNlaXZlIHRoYXQgbWVtb3Jpc2VkIGV2ZW50LlxuICAgICAqXG4gICAgICogQHJldHVybiB7TWVtb3J5U3RyZWFtfVxuICAgICAqL1xuICAgIFN0cmVhbS5wcm90b3R5cGUucmVtZW1iZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHJldHVybiBuZXcgTWVtb3J5U3RyZWFtKHtcbiAgICAgICAgICAgIF9zdGFydDogZnVuY3Rpb24gKGlsKSB7XG4gICAgICAgICAgICAgICAgdmFyIHAgPSBfdGhpcy5fcHJvZDtcbiAgICAgICAgICAgICAgICBpZiAocClcbiAgICAgICAgICAgICAgICAgICAgcC5fc3RhcnQoaWwpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF9zdG9wOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIHAgPSBfdGhpcy5fcHJvZDtcbiAgICAgICAgICAgICAgICBpZiAocClcbiAgICAgICAgICAgICAgICAgICAgcC5fc3RvcCgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIG91dHB1dCBzdHJlYW0gdGhhdCBpZGVudGljYWxseSBiZWhhdmVzIGxpa2UgdGhlIGlucHV0IHN0cmVhbSxcbiAgICAgKiBidXQgYWxzbyBydW5zIGEgYHNweWAgZnVuY3Rpb24gZm8gZWFjaCBldmVudCwgdG8gaGVscCB5b3UgZGVidWcgeW91ciBhcHAuXG4gICAgICpcbiAgICAgKiAqZGVidWcqIHRha2VzIGEgYHNweWAgZnVuY3Rpb24gYXMgYXJndW1lbnQsIGFuZCBydW5zIHRoYXQgZm9yIGVhY2ggZXZlbnRcbiAgICAgKiBoYXBwZW5pbmcgb24gdGhlIGlucHV0IHN0cmVhbS4gSWYgeW91IGRvbid0IHByb3ZpZGUgdGhlIGBzcHlgIGFyZ3VtZW50LFxuICAgICAqIHRoZW4gKmRlYnVnKiB3aWxsIGp1c3QgYGNvbnNvbGUubG9nYCBlYWNoIGV2ZW50LiBUaGlzIGhlbHBzIHlvdSB0b1xuICAgICAqIHVuZGVyc3RhbmQgdGhlIGZsb3cgb2YgZXZlbnRzIHRocm91Z2ggc29tZSBvcGVyYXRvciBjaGFpbi5cbiAgICAgKlxuICAgICAqIFBsZWFzZSBub3RlIHRoYXQgaWYgdGhlIG91dHB1dCBzdHJlYW0gaGFzIG5vIGxpc3RlbmVycywgdGhlbiBpdCB3aWxsIG5vdFxuICAgICAqIHN0YXJ0LCB3aGljaCBtZWFucyBgc3B5YCB3aWxsIG5ldmVyIHJ1biBiZWNhdXNlIG5vIGFjdHVhbCBldmVudCBoYXBwZW5zIGluXG4gICAgICogdGhhdCBjYXNlLlxuICAgICAqXG4gICAgICogTWFyYmxlIGRpYWdyYW06XG4gICAgICpcbiAgICAgKiBgYGB0ZXh0XG4gICAgICogLS0xLS0tLTItLS0tLTMtLS0tLTQtLVxuICAgICAqICAgICAgICAgZGVidWdcbiAgICAgKiAtLTEtLS0tMi0tLS0tMy0tLS0tNC0tXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBsYWJlbE9yU3B5IEEgc3RyaW5nIHRvIHVzZSBhcyB0aGUgbGFiZWwgd2hlbiBwcmludGluZ1xuICAgICAqIGRlYnVnIGluZm9ybWF0aW9uIG9uIHRoZSBjb25zb2xlLCBvciBhICdzcHknIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYW4gZXZlbnRcbiAgICAgKiBhcyBhcmd1bWVudCwgYW5kIGRvZXMgbm90IG5lZWQgdG8gcmV0dXJuIGFueXRoaW5nLlxuICAgICAqIEByZXR1cm4ge1N0cmVhbX1cbiAgICAgKi9cbiAgICBTdHJlYW0ucHJvdG90eXBlLmRlYnVnID0gZnVuY3Rpb24gKGxhYmVsT3JTcHkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyAodGhpcy5jdG9yKCkpKG5ldyBEZWJ1Z09wZXJhdG9yKGxhYmVsT3JTcHksIHRoaXMpKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEZvcmNlcyB0aGUgU3RyZWFtIHRvIGVtaXQgdGhlIGdpdmVuIHZhbHVlIHRvIGl0cyBsaXN0ZW5lcnMuXG4gICAgICpcbiAgICAgKiBBcyB0aGUgbmFtZSBpbmRpY2F0ZXMsIGlmIHlvdSB1c2UgdGhpcywgeW91IGFyZSBtb3N0IGxpa2VseSBkb2luZyBzb21ldGhpbmdcbiAgICAgKiBUaGUgV3JvbmcgV2F5LiBQbGVhc2UgdHJ5IHRvIHVuZGVyc3RhbmQgdGhlIHJlYWN0aXZlIHdheSBiZWZvcmUgdXNpbmcgdGhpc1xuICAgICAqIG1ldGhvZC4gVXNlIGl0IG9ubHkgd2hlbiB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdmFsdWUgVGhlIFwibmV4dFwiIHZhbHVlIHlvdSB3YW50IHRvIGJyb2FkY2FzdCB0byBhbGwgbGlzdGVuZXJzIG9mXG4gICAgICogdGhpcyBTdHJlYW0uXG4gICAgICovXG4gICAgU3RyZWFtLnByb3RvdHlwZS5zaGFtZWZ1bGx5U2VuZE5leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdGhpcy5fbih2YWx1ZSk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBGb3JjZXMgdGhlIFN0cmVhbSB0byBlbWl0IHRoZSBnaXZlbiBlcnJvciB0byBpdHMgbGlzdGVuZXJzLlxuICAgICAqXG4gICAgICogQXMgdGhlIG5hbWUgaW5kaWNhdGVzLCBpZiB5b3UgdXNlIHRoaXMsIHlvdSBhcmUgbW9zdCBsaWtlbHkgZG9pbmcgc29tZXRoaW5nXG4gICAgICogVGhlIFdyb25nIFdheS4gUGxlYXNlIHRyeSB0byB1bmRlcnN0YW5kIHRoZSByZWFjdGl2ZSB3YXkgYmVmb3JlIHVzaW5nIHRoaXNcbiAgICAgKiBtZXRob2QuIFVzZSBpdCBvbmx5IHdoZW4geW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLlxuICAgICAqXG4gICAgICogQHBhcmFtIHthbnl9IGVycm9yIFRoZSBlcnJvciB5b3Ugd2FudCB0byBicm9hZGNhc3QgdG8gYWxsIHRoZSBsaXN0ZW5lcnMgb2ZcbiAgICAgKiB0aGlzIFN0cmVhbS5cbiAgICAgKi9cbiAgICBTdHJlYW0ucHJvdG90eXBlLnNoYW1lZnVsbHlTZW5kRXJyb3IgPSBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgdGhpcy5fZShlcnJvcik7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBGb3JjZXMgdGhlIFN0cmVhbSB0byBlbWl0IHRoZSBcImNvbXBsZXRlZFwiIGV2ZW50IHRvIGl0cyBsaXN0ZW5lcnMuXG4gICAgICpcbiAgICAgKiBBcyB0aGUgbmFtZSBpbmRpY2F0ZXMsIGlmIHlvdSB1c2UgdGhpcywgeW91IGFyZSBtb3N0IGxpa2VseSBkb2luZyBzb21ldGhpbmdcbiAgICAgKiBUaGUgV3JvbmcgV2F5LiBQbGVhc2UgdHJ5IHRvIHVuZGVyc3RhbmQgdGhlIHJlYWN0aXZlIHdheSBiZWZvcmUgdXNpbmcgdGhpc1xuICAgICAqIG1ldGhvZC4gVXNlIGl0IG9ubHkgd2hlbiB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuXG4gICAgICovXG4gICAgU3RyZWFtLnByb3RvdHlwZS5zaGFtZWZ1bGx5U2VuZENvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLl9jKCk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBDb21iaW5lcyBtdWx0aXBsZSBzdHJlYW1zIHRvZ2V0aGVyIHRvIHJldHVybiBhIHN0cmVhbSB3aG9zZSBldmVudHMgYXJlXG4gICAgICogY2FsY3VsYXRlZCBmcm9tIHRoZSBsYXRlc3QgZXZlbnRzIG9mIGVhY2ggb2YgdGhlIGlucHV0IHN0cmVhbXMuXG4gICAgICpcbiAgICAgKiAqY29tYmluZSogcmVtZW1iZXJzIHRoZSBtb3N0IHJlY2VudCBldmVudCBmcm9tIGVhY2ggb2YgdGhlIGlucHV0IHN0cmVhbXMuXG4gICAgICogV2hlbiBhbnkgb2YgdGhlIGlucHV0IHN0cmVhbXMgZW1pdHMgYW4gZXZlbnQsIHRoYXQgZXZlbnQgdG9nZXRoZXIgd2l0aCBhbGxcbiAgICAgKiB0aGUgb3RoZXIgc2F2ZWQgZXZlbnRzIGFyZSBjb21iaW5lZCBpbiB0aGUgYHByb2plY3RgIGZ1bmN0aW9uIHdoaWNoIHNob3VsZFxuICAgICAqIHJldHVybiBhIHZhbHVlLiBUaGF0IHZhbHVlIHdpbGwgYmUgZW1pdHRlZCBvbiB0aGUgb3V0cHV0IHN0cmVhbS4gSXQnc1xuICAgICAqIGVzc2VudGlhbGx5IGEgd2F5IG9mIG1peGluZyB0aGUgZXZlbnRzIGZyb20gbXVsdGlwbGUgc3RyZWFtcyBhY2NvcmRpbmcgdG8gYVxuICAgICAqIGZvcm11bGEuXG4gICAgICpcbiAgICAgKiBNYXJibGUgZGlhZ3JhbTpcbiAgICAgKlxuICAgICAqIGBgYHRleHRcbiAgICAgKiAtLTEtLS0tMi0tLS0tMy0tLS0tLS0tNC0tLVxuICAgICAqIC0tLS1hLS0tLS1iLS0tLS1jLS1kLS0tLS0tXG4gICAgICogICBjb21iaW5lKCh4LHkpID0+IHgreSlcbiAgICAgKiAtLS0tMWEtMmEtMmItM2ItM2MtM2QtNGQtLVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQGZhY3RvcnkgdHJ1ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHByb2plY3QgQSBmdW5jdGlvbiBvZiB0eXBlIGAoeDogVDEsIHk6IFQyKSA9PiBSYCBvclxuICAgICAqIHNpbWlsYXIgdGhhdCB0YWtlcyB0aGUgbW9zdCByZWNlbnQgZXZlbnRzIGB4YCBhbmQgYHlgIGZyb20gdGhlIGlucHV0XG4gICAgICogc3RyZWFtcyBhbmQgcmV0dXJucyBhIHZhbHVlLiBUaGUgb3V0cHV0IHN0cmVhbSB3aWxsIGVtaXQgdGhhdCB2YWx1ZS4gVGhlXG4gICAgICogbnVtYmVyIG9mIGFyZ3VtZW50cyBmb3IgdGhpcyBmdW5jdGlvbiBzaG91bGQgbWF0Y2ggdGhlIG51bWJlciBvZiBpbnB1dFxuICAgICAqIHN0cmVhbXMuXG4gICAgICogQHBhcmFtIHtTdHJlYW19IHN0cmVhbTEgQSBzdHJlYW0gdG8gY29tYmluZSB0b2dldGhlciB3aXRoIG90aGVyIHN0cmVhbXMuXG4gICAgICogQHBhcmFtIHtTdHJlYW19IHN0cmVhbTIgQSBzdHJlYW0gdG8gY29tYmluZSB0b2dldGhlciB3aXRoIG90aGVyIHN0cmVhbXMuXG4gICAgICogVHdvIG9yIG1vcmUgc3RyZWFtcyBtYXkgYmUgZ2l2ZW4gYXMgYXJndW1lbnRzLlxuICAgICAqIEByZXR1cm4ge1N0cmVhbX1cbiAgICAgKi9cbiAgICBTdHJlYW0uY29tYmluZSA9IGZ1bmN0aW9uIGNvbWJpbmUocHJvamVjdCkge1xuICAgICAgICB2YXIgc3RyZWFtcyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDE7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgc3RyZWFtc1tfaSAtIDFdID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFN0cmVhbShuZXcgQ29tYmluZVByb2R1Y2VyKHByb2plY3QsIHN0cmVhbXMpKTtcbiAgICB9O1xuICAgIHJldHVybiBTdHJlYW07XG59KCkpO1xuZXhwb3J0cy5TdHJlYW0gPSBTdHJlYW07XG52YXIgTWltaWNTdHJlYW0gPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhNaW1pY1N0cmVhbSwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBNaW1pY1N0cmVhbSgpIHtcbiAgICAgICAgX3N1cGVyLmNhbGwodGhpcyk7XG4gICAgfVxuICAgIE1pbWljU3RyZWFtLnByb3RvdHlwZS5fYWRkID0gZnVuY3Rpb24gKGlsKSB7XG4gICAgICAgIHZhciB0ID0gdGhpcy5fdGFyZ2V0O1xuICAgICAgICBpZiAoIXQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHQuX2FkZChpbCk7XG4gICAgfTtcbiAgICBNaW1pY1N0cmVhbS5wcm90b3R5cGUuX3JlbW92ZSA9IGZ1bmN0aW9uIChpbCkge1xuICAgICAgICB2YXIgdCA9IHRoaXMuX3RhcmdldDtcbiAgICAgICAgaWYgKCF0KVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0Ll9yZW1vdmUoaWwpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgZXhpc3RzIG9ubHkgb24gYSBNaW1pY1N0cmVhbSwgd2hpY2ggaXMgY3JlYXRlZCB0aHJvdWdoXG4gICAgICogYHhzLmNyZWF0ZU1pbWljKClgLiAqaW1pdGF0ZSogY2hhbmdlcyB0aGlzIGN1cnJlbnQgTWltaWNTdHJlYW0gdG8gYmVoYXZlXG4gICAgICogbGlrZSB0aGUgYG90aGVyYCBnaXZlbiBzdHJlYW0uXG4gICAgICpcbiAgICAgKiBUaGUgYGltaXRhdGVgIG1ldGhvZCBhbmQgdGhlIGBNaW1pY1N0cmVhbWAgdHlwZSBleGlzdCB0byBhbGxvdyBvbmUgdGhpbmc6XG4gICAgICogKipjaXJjdWxhciBkZXBlbmRlbmN5IG9mIHN0cmVhbXMqKi4gRm9yIGluc3RhbmNlLCBsZXQncyBpbWFnaW5lIHRoYXQgZm9yXG4gICAgICogc29tZSByZWFzb24geW91IG5lZWQgdG8gY3JlYXRlIGEgY2lyY3VsYXIgZGVwZW5kZW5jeSB3aGVyZSBzdHJlYW0gYGZpcnN0JGBcbiAgICAgKiBkZXBlbmRzIG9uIHN0cmVhbSBgc2Vjb25kJGAgd2hpY2ggaW4gdHVybiBkZXBlbmRzIG9uIGBmaXJzdCRgOlxuICAgICAqXG4gICAgICogPCEtLSBza2lwLWV4YW1wbGUgLS0+XG4gICAgICogYGBganNcbiAgICAgKiBpbXBvcnQgZGVsYXkgZnJvbSAneHN0cmVhbS9leHRyYS9kZWxheSdcbiAgICAgKlxuICAgICAqIHZhciBmaXJzdCQgPSBzZWNvbmQkLm1hcCh4ID0+IHggKiAxMCkudGFrZSgzKTtcbiAgICAgKiB2YXIgc2Vjb25kJCA9IGZpcnN0JC5tYXAoeCA9PiB4ICsgMSkuc3RhcnRXaXRoKDEpLmNvbXBvc2UoZGVsYXkoMTAwKSk7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBIb3dldmVyLCB0aGF0IGlzIGludmFsaWQgSmF2YVNjcmlwdCwgYmVjYXVzZSBgc2Vjb25kJGAgaXMgdW5kZWZpbmVkXG4gICAgICogb24gdGhlIGZpcnN0IGxpbmUuIFRoaXMgaXMgaG93IGEgTWltaWNTdHJlYW0gYW5kIGltaXRhdGUgY2FuIGhlbHAgc29sdmUgaXQ6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIGltcG9ydCBkZWxheSBmcm9tICd4c3RyZWFtL2V4dHJhL2RlbGF5J1xuICAgICAqXG4gICAgICogdmFyIHNlY29uZE1pbWljJCA9IHhzLmNyZWF0ZU1pbWljKCk7XG4gICAgICogdmFyIGZpcnN0JCA9IHNlY29uZE1pbWljJC5tYXAoeCA9PiB4ICogMTApLnRha2UoMyk7XG4gICAgICogdmFyIHNlY29uZCQgPSBmaXJzdCQubWFwKHggPT4geCArIDEpLnN0YXJ0V2l0aCgxKS5jb21wb3NlKGRlbGF5KDEwMCkpO1xuICAgICAqIHNlY29uZE1pbWljJC5pbWl0YXRlKHNlY29uZCQpO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogV2UgY3JlYXRlIGBzZWNvbmRNaW1pYyRgIGJlZm9yZSB0aGUgb3RoZXJzLCBzbyBpdCBjYW4gYmUgdXNlZCBpbiB0aGVcbiAgICAgKiBkZWNsYXJhdGlvbiBvZiBgZmlyc3QkYC4gVGhlbiwgYWZ0ZXIgYm90aCBgZmlyc3QkYCBhbmQgYHNlY29uZCRgIGFyZVxuICAgICAqIGRlZmluZWQsIHdlIGhvb2sgYHNlY29uZE1pbWljJGAgd2l0aCBgc2Vjb25kJGAgd2l0aCBgaW1pdGF0ZSgpYCB0byB0ZWxsXG4gICAgICogdGhhdCB0aGV5IGFyZSBcInRoZSBzYW1lXCIuIGBpbWl0YXRlYCB3aWxsIG5vdCB0cmlnZ2VyIHRoZSBzdGFydCBvZiBhbnlcbiAgICAgKiBzdHJlYW0sIGl0IHNpbXBseSBmb3J3YXJkcyBsaXN0ZW5lcnMgb2YgYHNlY29uZE1pbWljJGAgdG8gYHNlY29uZCRgLlxuICAgICAqXG4gICAgICogVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlIHdoZXJlIGBpbWl0YXRlKClgIGlzIGltcG9ydGFudCBpbiBDeWNsZS5qc1xuICAgICAqIGFwcGxpY2F0aW9ucy4gQSBwYXJlbnQgY29tcG9uZW50IGNvbnRhaW5zIHNvbWUgY2hpbGQgY29tcG9uZW50cy4gQSBjaGlsZFxuICAgICAqIGhhcyBhbiBhY3Rpb24gc3RyZWFtIHdoaWNoIGlzIGdpdmVuIHRvIHRoZSBwYXJlbnQgdG8gZGVmaW5lIGl0cyBzdGF0ZTpcbiAgICAgKlxuICAgICAqIDwhLS0gc2tpcC1leGFtcGxlIC0tPlxuICAgICAqIGBgYGpzXG4gICAgICogY29uc3QgY2hpbGRBY3Rpb25NaW1pYyQgPSB4cy5jcmVhdGVNaW1pYygpO1xuICAgICAqIGNvbnN0IHBhcmVudCA9IFBhcmVudCh7Li4uc291cmNlcywgY2hpbGRBY3Rpb24kOiBjaGlsZEFjdGlvbk1pbWljJH0pO1xuICAgICAqIGNvbnN0IGNoaWxkQWN0aW9uJCA9IHBhcmVudC5zdGF0ZSQubWFwKHMgPT4gcy5jaGlsZC5hY3Rpb24kKS5mbGF0dGVuKCk7XG4gICAgICogY2hpbGRBY3Rpb25NaW1pYyQuaW1pdGF0ZShjaGlsZEFjdGlvbiQpO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVGhlICppbWl0YXRlKiBtZXRob2QgcmV0dXJucyBub3RoaW5nLiBJbnN0ZWFkLCBpdCBjaGFuZ2VzIHRoZSBiZWhhdmlvciBvZlxuICAgICAqIHRoZSBjdXJyZW50IHN0cmVhbSwgbWFraW5nIGl0IHJlLWVtaXQgd2hhdGV2ZXIgZXZlbnRzIGFyZSBlbWl0dGVkIGJ5IHRoZVxuICAgICAqIGdpdmVuIGBvdGhlcmAgc3RyZWFtLlxuICAgICAqXG4gICAgICogTm90ZSwgdGhvdWdoLCB0aGF0ICoqYGltaXRhdGUoKWAgZG9lcyBub3Qgc3VwcG9ydCBNZW1vcnlTdHJlYW1zKiouIElmIHdlXG4gICAgICogd291bGQgYXR0ZW1wdCB0byBpbWl0YXRlIGEgTWVtb3J5U3RyZWFtIGluIGEgY2lyY3VsYXIgZGVwZW5kZW5jeSwgd2Ugd291bGRcbiAgICAgKiBlaXRoZXIgZ2V0IGEgcmFjZSBjb25kaXRpb24gKHdoZXJlIHRoZSBzeW1wdG9tIHdvdWxkIGJlIFwibm90aGluZyBoYXBwZW5zXCIpXG4gICAgICogb3IgYW4gaW5maW5pdGUgY3ljbGljIGVtaXNzaW9uIG9mIHZhbHVlcy4gSXQncyB1c2VmdWwgdG8gdGhpbmsgYWJvdXRcbiAgICAgKiBNZW1vcnlTdHJlYW1zIGFzIGNlbGxzIGluIGEgc3ByZWFkc2hlZXQuIEl0IGRvZXNuJ3QgbWFrZSBhbnkgc2Vuc2UgdG9cbiAgICAgKiBkZWZpbmUgYSBzcHJlYWRzaGVldCBjZWxsIGBBMWAgd2l0aCBhIGZvcm11bGEgdGhhdCBkZXBlbmRzIG9uIGBCMWAgYW5kXG4gICAgICogY2VsbCBgQjFgIGRlZmluZWQgd2l0aCBhIGZvcm11bGEgdGhhdCBkZXBlbmRzIG9uIGBBMWAuXG4gICAgICpcbiAgICAgKiBJZiB5b3UgZmluZCB5b3Vyc2VsZiB3YW50aW5nIHRvIHVzZSBgaW1pdGF0ZSgpYCB3aXRoIGFcbiAgICAgKiBNZW1vcnlTdHJlYW0sIHlvdSBzaG91bGQgcmV3b3JrIHlvdXIgY29kZSBhcm91bmQgYGltaXRhdGUoKWAgdG8gdXNlIGFcbiAgICAgKiBTdHJlYW0gaW5zdGVhZC4gTG9vayBmb3IgdGhlIHN0cmVhbSBpbiB0aGUgY2lyY3VsYXIgZGVwZW5kZW5jeSB0aGF0XG4gICAgICogcmVwcmVzZW50cyBhbiBldmVudCBzdHJlYW0sIGFuZCB0aGF0IHdvdWxkIGJlIGEgY2FuZGlkYXRlIGZvciBjcmVhdGluZyBhXG4gICAgICogTWltaWNTdHJlYW0gd2hpY2ggdGhlbiBpbWl0YXRlcyB0aGUgcmVhbCBldmVudCBzdHJlYW0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1N0cmVhbX0gb3RoZXIgVGhlIHN0cmVhbSB0byBpbWl0YXRlIG9uIHRoZSBjdXJyZW50IG9uZS4gTXVzdCBub3QgYmVcbiAgICAgKiBhIE1lbW9yeVN0cmVhbS5cbiAgICAgKi9cbiAgICBNaW1pY1N0cmVhbS5wcm90b3R5cGUuaW1pdGF0ZSA9IGZ1bmN0aW9uIChvdGhlcikge1xuICAgICAgICBpZiAob3RoZXIgaW5zdGFuY2VvZiBNZW1vcnlTdHJlYW0pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQSBNZW1vcnlTdHJlYW0gd2FzIGdpdmVuIHRvIGltaXRhdGUoKSwgYnV0IGl0IG9ubHkgJyArXG4gICAgICAgICAgICAgICAgJ3N1cHBvcnRzIGEgU3RyZWFtLiBSZWFkIG1vcmUgYWJvdXQgdGhpcyByZXN0cmljdGlvbiBoZXJlOiAnICtcbiAgICAgICAgICAgICAgICAnaHR0cHM6Ly9naXRodWIuY29tL3N0YWx0ei94c3RyZWFtI2ZhcScpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3RhcmdldCA9IG90aGVyO1xuICAgIH07XG4gICAgcmV0dXJuIE1pbWljU3RyZWFtO1xufShTdHJlYW0pKTtcbmV4cG9ydHMuTWltaWNTdHJlYW0gPSBNaW1pY1N0cmVhbTtcbnZhciBNZW1vcnlTdHJlYW0gPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhNZW1vcnlTdHJlYW0sIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gTWVtb3J5U3RyZWFtKHByb2R1Y2VyKSB7XG4gICAgICAgIF9zdXBlci5jYWxsKHRoaXMsIHByb2R1Y2VyKTtcbiAgICAgICAgdGhpcy5faGFzID0gZmFsc2U7XG4gICAgfVxuICAgIE1lbW9yeVN0cmVhbS5wcm90b3R5cGUuX24gPSBmdW5jdGlvbiAoeCkge1xuICAgICAgICB0aGlzLl92ID0geDtcbiAgICAgICAgdGhpcy5faGFzID0gdHJ1ZTtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5fbi5jYWxsKHRoaXMsIHgpO1xuICAgIH07XG4gICAgTWVtb3J5U3RyZWFtLnByb3RvdHlwZS5fYWRkID0gZnVuY3Rpb24gKGlsKSB7XG4gICAgICAgIGlmICh0aGlzLl9oYXMpIHtcbiAgICAgICAgICAgIGlsLl9uKHRoaXMuX3YpO1xuICAgICAgICB9XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUuX2FkZC5jYWxsKHRoaXMsIGlsKTtcbiAgICB9O1xuICAgIE1lbW9yeVN0cmVhbS5wcm90b3R5cGUuX3ggPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuX2hhcyA9IGZhbHNlO1xuICAgICAgICBfc3VwZXIucHJvdG90eXBlLl94LmNhbGwodGhpcyk7XG4gICAgfTtcbiAgICBNZW1vcnlTdHJlYW0ucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uIChwcm9qZWN0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tYXAocHJvamVjdCk7XG4gICAgfTtcbiAgICBNZW1vcnlTdHJlYW0ucHJvdG90eXBlLm1hcFRvID0gZnVuY3Rpb24gKHByb2plY3RlZFZhbHVlKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLm1hcFRvLmNhbGwodGhpcywgcHJvamVjdGVkVmFsdWUpO1xuICAgIH07XG4gICAgTWVtb3J5U3RyZWFtLnByb3RvdHlwZS50YWtlID0gZnVuY3Rpb24gKGFtb3VudCkge1xuICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS50YWtlLmNhbGwodGhpcywgYW1vdW50KTtcbiAgICB9O1xuICAgIE1lbW9yeVN0cmVhbS5wcm90b3R5cGUuZW5kV2hlbiA9IGZ1bmN0aW9uIChvdGhlcikge1xuICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5lbmRXaGVuLmNhbGwodGhpcywgb3RoZXIpO1xuICAgIH07XG4gICAgTWVtb3J5U3RyZWFtLnByb3RvdHlwZS5yZXBsYWNlRXJyb3IgPSBmdW5jdGlvbiAocmVwbGFjZSkge1xuICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5yZXBsYWNlRXJyb3IuY2FsbCh0aGlzLCByZXBsYWNlKTtcbiAgICB9O1xuICAgIE1lbW9yeVN0cmVhbS5wcm90b3R5cGUuZGVidWcgPSBmdW5jdGlvbiAobGFiZWxPclNweSkge1xuICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5kZWJ1Zy5jYWxsKHRoaXMsIGxhYmVsT3JTcHkpO1xuICAgIH07XG4gICAgcmV0dXJuIE1lbW9yeVN0cmVhbTtcbn0oU3RyZWFtKSk7XG5leHBvcnRzLk1lbW9yeVN0cmVhbSA9IE1lbW9yeVN0cmVhbTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZGVmYXVsdCA9IFN0cmVhbTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvcmUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgY29yZV8xID0gcmVxdWlyZSgnLi4vY29yZScpO1xudmFyIGVtcHR5ID0ge307XG52YXIgRHJvcFJlcGVhdHNPcGVyYXRvciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gRHJvcFJlcGVhdHNPcGVyYXRvcihmbiwgaW5zKSB7XG4gICAgICAgIHRoaXMuZm4gPSBmbjtcbiAgICAgICAgdGhpcy5pbnMgPSBpbnM7XG4gICAgICAgIHRoaXMudHlwZSA9ICdkcm9wUmVwZWF0cyc7XG4gICAgICAgIHRoaXMub3V0ID0gbnVsbDtcbiAgICAgICAgdGhpcy52ID0gZW1wdHk7XG4gICAgfVxuICAgIERyb3BSZXBlYXRzT3BlcmF0b3IucHJvdG90eXBlLl9zdGFydCA9IGZ1bmN0aW9uIChvdXQpIHtcbiAgICAgICAgdGhpcy5vdXQgPSBvdXQ7XG4gICAgICAgIHRoaXMuaW5zLl9hZGQodGhpcyk7XG4gICAgfTtcbiAgICBEcm9wUmVwZWF0c09wZXJhdG9yLnByb3RvdHlwZS5fc3RvcCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5pbnMuX3JlbW92ZSh0aGlzKTtcbiAgICAgICAgdGhpcy5vdXQgPSBudWxsO1xuICAgICAgICB0aGlzLnYgPSBlbXB0eTtcbiAgICB9O1xuICAgIERyb3BSZXBlYXRzT3BlcmF0b3IucHJvdG90eXBlLmlzRXEgPSBmdW5jdGlvbiAoeCwgeSkge1xuICAgICAgICByZXR1cm4gdGhpcy5mbiA/IHRoaXMuZm4oeCwgeSkgOiB4ID09PSB5O1xuICAgIH07XG4gICAgRHJvcFJlcGVhdHNPcGVyYXRvci5wcm90b3R5cGUuX24gPSBmdW5jdGlvbiAodCkge1xuICAgICAgICB2YXIgdSA9IHRoaXMub3V0O1xuICAgICAgICBpZiAoIXUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHZhciB2ID0gdGhpcy52O1xuICAgICAgICBpZiAodiA9PT0gZW1wdHkgfHwgIXRoaXMuaXNFcSh0LCB2KSkge1xuICAgICAgICAgICAgdS5fbih0KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnYgPSB0O1xuICAgIH07XG4gICAgRHJvcFJlcGVhdHNPcGVyYXRvci5wcm90b3R5cGUuX2UgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHZhciB1ID0gdGhpcy5vdXQ7XG4gICAgICAgIGlmICghdSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdS5fZShlcnIpO1xuICAgIH07XG4gICAgRHJvcFJlcGVhdHNPcGVyYXRvci5wcm90b3R5cGUuX2MgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB1ID0gdGhpcy5vdXQ7XG4gICAgICAgIGlmICghdSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdS5fYygpO1xuICAgIH07XG4gICAgcmV0dXJuIERyb3BSZXBlYXRzT3BlcmF0b3I7XG59KCkpO1xuZXhwb3J0cy5Ecm9wUmVwZWF0c09wZXJhdG9yID0gRHJvcFJlcGVhdHNPcGVyYXRvcjtcbmZ1bmN0aW9uIGRyb3BSZXBlYXRzKGlzRXF1YWwpIHtcbiAgICBpZiAoaXNFcXVhbCA9PT0gdm9pZCAwKSB7IGlzRXF1YWwgPSBudWxsOyB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGRyb3BSZXBlYXRzT3BlcmF0b3IoaW5zKSB7XG4gICAgICAgIHJldHVybiBuZXcgY29yZV8xLlN0cmVhbShuZXcgRHJvcFJlcGVhdHNPcGVyYXRvcihpc0VxdWFsLCBpbnMpKTtcbiAgICB9O1xufVxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gZHJvcFJlcGVhdHM7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kcm9wUmVwZWF0cy5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBjb3JlXzEgPSByZXF1aXJlKCcuL2NvcmUnKTtcbmV4cG9ydHMuU3RyZWFtID0gY29yZV8xLlN0cmVhbTtcbmV4cG9ydHMuTWVtb3J5U3RyZWFtID0gY29yZV8xLk1lbW9yeVN0cmVhbTtcbmV4cG9ydHMuTWltaWNTdHJlYW0gPSBjb3JlXzEuTWltaWNTdHJlYW07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRlZmF1bHQgPSBjb3JlXzEuU3RyZWFtO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgYmFzZV8xID0gcmVxdWlyZSgnQGN5Y2xlL2Jhc2UnKTtcbnZhciB4c3RyZWFtX2FkYXB0ZXJfMSA9IHJlcXVpcmUoJ0BjeWNsZS94c3RyZWFtLWFkYXB0ZXInKTtcbi8qKlxuICogQSBmdW5jdGlvbiB0aGF0IHByZXBhcmVzIHRoZSBDeWNsZSBhcHBsaWNhdGlvbiB0byBiZSBleGVjdXRlZC4gVGFrZXMgYSBgbWFpbmBcbiAqIGZ1bmN0aW9uIGFuZCBwcmVwYXJlcyB0byBjaXJjdWxhcmx5IGNvbm5lY3RzIGl0IHRvIHRoZSBnaXZlbiBjb2xsZWN0aW9uIG9mXG4gKiBkcml2ZXIgZnVuY3Rpb25zLiBBcyBhbiBvdXRwdXQsIGBDeWNsZSgpYCByZXR1cm5zIGFuIG9iamVjdCB3aXRoIHRocmVlXG4gKiBwcm9wZXJ0aWVzOiBgc291cmNlc2AsIGBzaW5rc2AgYW5kIGBydW5gLiBPbmx5IHdoZW4gYHJ1bigpYCBpcyBjYWxsZWQgd2lsbFxuICogdGhlIGFwcGxpY2F0aW9uIGFjdHVhbGx5IGV4ZWN1dGUuIFJlZmVyIHRvIHRoZSBkb2N1bWVudGF0aW9uIG9mIGBydW4oKWAgZm9yXG4gKiBtb3JlIGRldGFpbHMuXG4gKlxuICogKipFeGFtcGxlOioqXG4gKiBgYGBqc1xuICogY29uc3Qge3NvdXJjZXMsIHNpbmtzLCBydW59ID0gQ3ljbGUobWFpbiwgZHJpdmVycyk7XG4gKiAvLyAuLi5cbiAqIGNvbnN0IGRpc3Bvc2UgPSBydW4oKTsgLy8gRXhlY3V0ZXMgdGhlIGFwcGxpY2F0aW9uXG4gKiAvLyAuLi5cbiAqIGRpc3Bvc2UoKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IG1haW4gYSBmdW5jdGlvbiB0aGF0IHRha2VzIGBzb3VyY2VzYCBhcyBpbnB1dFxuICogYW5kIG91dHB1dHMgYSBjb2xsZWN0aW9uIG9mIGBzaW5rc2AgT2JzZXJ2YWJsZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gZHJpdmVycyBhbiBvYmplY3Qgd2hlcmUga2V5cyBhcmUgZHJpdmVyIG5hbWVzIGFuZCB2YWx1ZXNcbiAqIGFyZSBkcml2ZXIgZnVuY3Rpb25zLlxuICogQHJldHVybiB7T2JqZWN0fSBhbiBvYmplY3Qgd2l0aCB0aHJlZSBwcm9wZXJ0aWVzOiBgc291cmNlc2AsIGBzaW5rc2AgYW5kXG4gKiBgcnVuYC4gYHNvdXJjZXNgIGlzIHRoZSBjb2xsZWN0aW9uIG9mIGRyaXZlciBzb3VyY2VzLCBgc2lua3NgIGlzIHRoZVxuICogY29sbGVjdGlvbiBvZiBkcml2ZXIgc2lua3MsIHRoZXNlIGNhbiBiZSB1c2VkIGZvciBkZWJ1Z2dpbmcgb3IgdGVzdGluZy4gYHJ1bmBcbiAqIGlzIHRoZSBmdW5jdGlvbiB0aGF0IG9uY2UgY2FsbGVkIHdpbGwgZXhlY3V0ZSB0aGUgYXBwbGljYXRpb24uXG4gKiBAZnVuY3Rpb24gQ3ljbGVcbiAqL1xudmFyIEN5Y2xlID0gZnVuY3Rpb24gKG1haW4sIGRyaXZlcnMpIHtcbiAgICByZXR1cm4gYmFzZV8xLmRlZmF1bHQobWFpbiwgZHJpdmVycywgeyBzdHJlYW1BZGFwdGVyOiB4c3RyZWFtX2FkYXB0ZXJfMS5kZWZhdWx0IH0pO1xufTtcbi8qKlxuICogVGFrZXMgYSBgbWFpbmAgZnVuY3Rpb24gYW5kIGNpcmN1bGFybHkgY29ubmVjdHMgaXQgdG8gdGhlIGdpdmVuIGNvbGxlY3Rpb25cbiAqIG9mIGRyaXZlciBmdW5jdGlvbnMuXG4gKlxuICogKipFeGFtcGxlOioqXG4gKiBgYGBqc1xuICogY29uc3QgZGlzcG9zZSA9IEN5Y2xlLnJ1bihtYWluLCBkcml2ZXJzKTtcbiAqIC8vIC4uLlxuICogZGlzcG9zZSgpO1xuICogYGBgXG4gKlxuICogVGhlIGBtYWluYCBmdW5jdGlvbiBleHBlY3RzIGEgY29sbGVjdGlvbiBvZiBcInNvdXJjZVwiIE9ic2VydmFibGVzIChyZXR1cm5lZFxuICogZnJvbSBkcml2ZXJzKSBhcyBpbnB1dCwgYW5kIHNob3VsZCByZXR1cm4gYSBjb2xsZWN0aW9uIG9mIFwic2lua1wiIE9ic2VydmFibGVzXG4gKiAodG8gYmUgZ2l2ZW4gdG8gZHJpdmVycykuIEEgXCJjb2xsZWN0aW9uIG9mIE9ic2VydmFibGVzXCIgaXMgYSBKYXZhU2NyaXB0XG4gKiBvYmplY3Qgd2hlcmUga2V5cyBtYXRjaCB0aGUgZHJpdmVyIG5hbWVzIHJlZ2lzdGVyZWQgYnkgdGhlIGBkcml2ZXJzYCBvYmplY3QsXG4gKiBhbmQgdmFsdWVzIGFyZSB0aGUgT2JzZXJ2YWJsZXMuIFJlZmVyIHRvIHRoZSBkb2N1bWVudGF0aW9uIG9mIGVhY2ggZHJpdmVyIHRvXG4gKiBzZWUgbW9yZSBkZXRhaWxzIG9uIHdoYXQgdHlwZXMgb2Ygc291cmNlcyBpdCBvdXRwdXRzIGFuZCBzaW5rcyBpdCByZWNlaXZlcy5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBtYWluIGEgZnVuY3Rpb24gdGhhdCB0YWtlcyBgc291cmNlc2AgYXMgaW5wdXRcbiAqIGFuZCBvdXRwdXRzIGEgY29sbGVjdGlvbiBvZiBgc2lua3NgIE9ic2VydmFibGVzLlxuICogQHBhcmFtIHtPYmplY3R9IGRyaXZlcnMgYW4gb2JqZWN0IHdoZXJlIGtleXMgYXJlIGRyaXZlciBuYW1lcyBhbmQgdmFsdWVzXG4gKiBhcmUgZHJpdmVyIGZ1bmN0aW9ucy5cbiAqIEByZXR1cm4ge0Z1bmN0aW9ufSBhIGRpc3Bvc2UgZnVuY3Rpb24sIHVzZWQgdG8gdGVybWluYXRlIHRoZSBleGVjdXRpb24gb2YgdGhlXG4gKiBDeWNsZS5qcyBwcm9ncmFtLCBjbGVhbmluZyB1cCByZXNvdXJjZXMgdXNlZC5cbiAqIEBmdW5jdGlvbiBydW5cbiAqL1xuZnVuY3Rpb24gcnVuKG1haW4sIGRyaXZlcnMpIHtcbiAgICB2YXIgcnVuID0gYmFzZV8xLmRlZmF1bHQobWFpbiwgZHJpdmVycywgeyBzdHJlYW1BZGFwdGVyOiB4c3RyZWFtX2FkYXB0ZXJfMS5kZWZhdWx0IH0pLnJ1bjtcbiAgICByZXR1cm4gcnVuKCk7XG59XG5leHBvcnRzLnJ1biA9IHJ1bjtcbkN5Y2xlLnJ1biA9IHJ1bjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZGVmYXVsdCA9IEN5Y2xlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5mdW5jdGlvbiBsb2dUb0NvbnNvbGVFcnJvcihlcnIpIHtcbiAgICB2YXIgdGFyZ2V0ID0gZXJyLnN0YWNrIHx8IGVycjtcbiAgICBpZiAoY29uc29sZSAmJiBjb25zb2xlLmVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IodGFyZ2V0KTtcbiAgICB9XG4gICAgZWxzZSBpZiAoY29uc29sZSAmJiBjb25zb2xlLmxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyh0YXJnZXQpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIG1ha2VTaW5rUHJveGllcyhkcml2ZXJzLCBzdHJlYW1BZGFwdGVyKSB7XG4gICAgdmFyIHNpbmtQcm94aWVzID0ge307XG4gICAgZm9yICh2YXIgbmFtZV8xIGluIGRyaXZlcnMpIHtcbiAgICAgICAgaWYgKGRyaXZlcnMuaGFzT3duUHJvcGVydHkobmFtZV8xKSkge1xuICAgICAgICAgICAgdmFyIGhvbGRTdWJqZWN0ID0gc3RyZWFtQWRhcHRlci5tYWtlU3ViamVjdCgpO1xuICAgICAgICAgICAgdmFyIGRyaXZlclN0cmVhbUFkYXB0ZXIgPSBkcml2ZXJzW25hbWVfMV0uc3RyZWFtQWRhcHRlciB8fCBzdHJlYW1BZGFwdGVyO1xuICAgICAgICAgICAgdmFyIHN0cmVhbSA9IGRyaXZlclN0cmVhbUFkYXB0ZXIuYWRhcHQoaG9sZFN1YmplY3Quc3RyZWFtLCBzdHJlYW1BZGFwdGVyLnN0cmVhbVN1YnNjcmliZSk7XG4gICAgICAgICAgICBzaW5rUHJveGllc1tuYW1lXzFdID0ge1xuICAgICAgICAgICAgICAgIHN0cmVhbTogc3RyZWFtLFxuICAgICAgICAgICAgICAgIG9ic2VydmVyOiBob2xkU3ViamVjdC5vYnNlcnZlcixcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHNpbmtQcm94aWVzO1xufVxuZnVuY3Rpb24gY2FsbERyaXZlcnMoZHJpdmVycywgc2lua1Byb3hpZXMsIHN0cmVhbUFkYXB0ZXIpIHtcbiAgICB2YXIgc291cmNlcyA9IHt9O1xuICAgIGZvciAodmFyIG5hbWVfMiBpbiBkcml2ZXJzKSB7XG4gICAgICAgIGlmIChkcml2ZXJzLmhhc093blByb3BlcnR5KG5hbWVfMikpIHtcbiAgICAgICAgICAgIHZhciBkcml2ZXJPdXRwdXQgPSBkcml2ZXJzW25hbWVfMl0oc2lua1Byb3hpZXNbbmFtZV8yXS5zdHJlYW0sIHN0cmVhbUFkYXB0ZXIsIG5hbWVfMik7XG4gICAgICAgICAgICB2YXIgZHJpdmVyU3RyZWFtQWRhcHRlciA9IGRyaXZlcnNbbmFtZV8yXS5zdHJlYW1BZGFwdGVyO1xuICAgICAgICAgICAgaWYgKGRyaXZlclN0cmVhbUFkYXB0ZXIgJiYgZHJpdmVyU3RyZWFtQWRhcHRlci5pc1ZhbGlkU3RyZWFtKGRyaXZlck91dHB1dCkpIHtcbiAgICAgICAgICAgICAgICBzb3VyY2VzW25hbWVfMl0gPSBzdHJlYW1BZGFwdGVyLmFkYXB0KGRyaXZlck91dHB1dCwgZHJpdmVyU3RyZWFtQWRhcHRlci5zdHJlYW1TdWJzY3JpYmUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgc291cmNlc1tuYW1lXzJdID0gZHJpdmVyT3V0cHV0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzb3VyY2VzO1xufVxuZnVuY3Rpb24gcmVwbGljYXRlTWFueShzaW5rcywgc2lua1Byb3hpZXMsIHN0cmVhbUFkYXB0ZXIpIHtcbiAgICB2YXIgcmVzdWx0cyA9IE9iamVjdC5rZXlzKHNpbmtzKVxuICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uIChuYW1lKSB7IHJldHVybiAhIXNpbmtQcm94aWVzW25hbWVdOyB9KVxuICAgICAgICAubWFwKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIHJldHVybiBzdHJlYW1BZGFwdGVyLnN0cmVhbVN1YnNjcmliZShzaW5rc1tuYW1lXSwge1xuICAgICAgICAgICAgbmV4dDogZnVuY3Rpb24gKHgpIHsgc2lua1Byb3hpZXNbbmFtZV0ub2JzZXJ2ZXIubmV4dCh4KTsgfSxcbiAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgbG9nVG9Db25zb2xlRXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICBzaW5rUHJveGllc1tuYW1lXS5vYnNlcnZlci5lcnJvcihlcnIpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgIHNpbmtQcm94aWVzW25hbWVdLm9ic2VydmVyLmNvbXBsZXRlKHgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICB2YXIgZGlzcG9zZUZ1bmN0aW9ucyA9IHJlc3VsdHNcbiAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAoZGlzcG9zZSkgeyByZXR1cm4gdHlwZW9mIGRpc3Bvc2UgPT09ICdmdW5jdGlvbic7IH0pO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGRpc3Bvc2VGdW5jdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoZGlzcG9zZSkgeyByZXR1cm4gZGlzcG9zZSgpOyB9KTtcbiAgICB9O1xufVxuZnVuY3Rpb24gZGlzcG9zZVNvdXJjZXMoc291cmNlcykge1xuICAgIGZvciAodmFyIGsgaW4gc291cmNlcykge1xuICAgICAgICBpZiAoc291cmNlcy5oYXNPd25Qcm9wZXJ0eShrKSAmJiBzb3VyY2VzW2tdXG4gICAgICAgICAgICAmJiB0eXBlb2Ygc291cmNlc1trXS5kaXNwb3NlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBzb3VyY2VzW2tdLmRpc3Bvc2UoKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbnZhciBpc09iamVjdEVtcHR5ID0gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5sZW5ndGggPT09IDA7IH07XG5mdW5jdGlvbiBDeWNsZShtYWluLCBkcml2ZXJzLCBvcHRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiBtYWluICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRmlyc3QgYXJndW1lbnQgZ2l2ZW4gdG8gQ3ljbGUgbXVzdCBiZSB0aGUgJ21haW4nIFwiICtcbiAgICAgICAgICAgIFwiZnVuY3Rpb24uXCIpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGRyaXZlcnMgIT09IFwib2JqZWN0XCIgfHwgZHJpdmVycyA9PT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTZWNvbmQgYXJndW1lbnQgZ2l2ZW4gdG8gQ3ljbGUgbXVzdCBiZSBhbiBvYmplY3QgXCIgK1xuICAgICAgICAgICAgXCJ3aXRoIGRyaXZlciBmdW5jdGlvbnMgYXMgcHJvcGVydGllcy5cIik7XG4gICAgfVxuICAgIGlmIChpc09iamVjdEVtcHR5KGRyaXZlcnMpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlNlY29uZCBhcmd1bWVudCBnaXZlbiB0byBDeWNsZSBtdXN0IGJlIGFuIG9iamVjdCBcIiArXG4gICAgICAgICAgICBcIndpdGggYXQgbGVhc3Qgb25lIGRyaXZlciBmdW5jdGlvbiBkZWNsYXJlZCBhcyBhIHByb3BlcnR5LlwiKTtcbiAgICB9XG4gICAgdmFyIHN0cmVhbUFkYXB0ZXIgPSBvcHRpb25zLnN0cmVhbUFkYXB0ZXI7XG4gICAgaWYgKCFzdHJlYW1BZGFwdGVyIHx8IGlzT2JqZWN0RW1wdHkoc3RyZWFtQWRhcHRlcikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcmQgYXJndW1lbnQgZ2l2ZW4gdG8gQ3ljbGUgbXVzdCBiZSBhbiBvcHRpb25zIG9iamVjdCBcIiArXG4gICAgICAgICAgICBcIndpdGggdGhlIHN0cmVhbUFkYXB0ZXIga2V5IHN1cHBsaWVkIHdpdGggYSB2YWxpZCBzdHJlYW0gYWRhcHRlci5cIik7XG4gICAgfVxuICAgIHZhciBzaW5rUHJveGllcyA9IG1ha2VTaW5rUHJveGllcyhkcml2ZXJzLCBzdHJlYW1BZGFwdGVyKTtcbiAgICB2YXIgc291cmNlcyA9IGNhbGxEcml2ZXJzKGRyaXZlcnMsIHNpbmtQcm94aWVzLCBzdHJlYW1BZGFwdGVyKTtcbiAgICB2YXIgc2lua3MgPSBtYWluKHNvdXJjZXMpO1xuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICB3aW5kb3cuQ3ljbGVqcyA9IHsgc2lua3M6IHNpbmtzIH07XG4gICAgfVxuICAgIHZhciBydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBkaXNwb3NlUmVwbGljYXRpb24gPSByZXBsaWNhdGVNYW55KHNpbmtzLCBzaW5rUHJveGllcywgc3RyZWFtQWRhcHRlcik7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBkaXNwb3NlU291cmNlcyhzb3VyY2VzKTtcbiAgICAgICAgICAgIGRpc3Bvc2VSZXBsaWNhdGlvbigpO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgcmV0dXJuIHsgc2lua3M6IHNpbmtzLCBzb3VyY2VzOiBzb3VyY2VzLCBydW46IHJ1biB9O1xufVxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gQ3ljbGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG4vKipcbiAqIEluZGljYXRlcyB0aGF0IG5hdmlnYXRpb24gd2FzIGNhdXNlZCBieSBhIGNhbGwgdG8gaGlzdG9yeS5wdXNoLlxuICovXG52YXIgUFVTSCA9IGV4cG9ydHMuUFVTSCA9ICdQVVNIJztcblxuLyoqXG4gKiBJbmRpY2F0ZXMgdGhhdCBuYXZpZ2F0aW9uIHdhcyBjYXVzZWQgYnkgYSBjYWxsIHRvIGhpc3RvcnkucmVwbGFjZS5cbiAqL1xudmFyIFJFUExBQ0UgPSBleHBvcnRzLlJFUExBQ0UgPSAnUkVQTEFDRSc7XG5cbi8qKlxuICogSW5kaWNhdGVzIHRoYXQgbmF2aWdhdGlvbiB3YXMgY2F1c2VkIGJ5IHNvbWUgb3RoZXIgYWN0aW9uIHN1Y2hcbiAqIGFzIHVzaW5nIGEgYnJvd3NlcidzIGJhY2svZm9yd2FyZCBidXR0b25zIGFuZC9vciBtYW51YWxseSBtYW5pcHVsYXRpbmdcbiAqIHRoZSBVUkwgaW4gYSBicm93c2VyJ3MgbG9jYXRpb24gYmFyLiBUaGlzIGlzIHRoZSBkZWZhdWx0LlxuICpcbiAqIFNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvV2luZG93RXZlbnRIYW5kbGVycy9vbnBvcHN0YXRlXG4gKiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqL1xudmFyIFBPUCA9IGV4cG9ydHMuUE9QID0gJ1BPUCc7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgeyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IEFycmF5KGFyci5sZW5ndGgpOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH0gZWxzZSB7IHJldHVybiBBcnJheS5mcm9tKGFycik7IH0gfVxuXG52YXIgbG9vcEFzeW5jID0gZXhwb3J0cy5sb29wQXN5bmMgPSBmdW5jdGlvbiBsb29wQXN5bmModHVybnMsIHdvcmssIGNhbGxiYWNrKSB7XG4gIHZhciBjdXJyZW50VHVybiA9IDAsXG4gICAgICBpc0RvbmUgPSBmYWxzZTtcbiAgdmFyIGlzU3luYyA9IGZhbHNlLFxuICAgICAgaGFzTmV4dCA9IGZhbHNlLFxuICAgICAgZG9uZUFyZ3MgPSB2b2lkIDA7XG5cbiAgdmFyIGRvbmUgPSBmdW5jdGlvbiBkb25lKCkge1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIGlzRG9uZSA9IHRydWU7XG5cbiAgICBpZiAoaXNTeW5jKSB7XG4gICAgICAvLyBJdGVyYXRlIGluc3RlYWQgb2YgcmVjdXJzaW5nIGlmIHBvc3NpYmxlLlxuICAgICAgZG9uZUFyZ3MgPSBhcmdzO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNhbGxiYWNrLmFwcGx5KHVuZGVmaW5lZCwgYXJncyk7XG4gIH07XG5cbiAgdmFyIG5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuICAgIGlmIChpc0RvbmUpIHJldHVybjtcblxuICAgIGhhc05leHQgPSB0cnVlO1xuXG4gICAgaWYgKGlzU3luYykgcmV0dXJuOyAvLyBJdGVyYXRlIGluc3RlYWQgb2YgcmVjdXJzaW5nIGlmIHBvc3NpYmxlLlxuXG4gICAgaXNTeW5jID0gdHJ1ZTtcblxuICAgIHdoaWxlICghaXNEb25lICYmIGN1cnJlbnRUdXJuIDwgdHVybnMgJiYgaGFzTmV4dCkge1xuICAgICAgaGFzTmV4dCA9IGZhbHNlO1xuICAgICAgd29yayhjdXJyZW50VHVybisrLCBuZXh0LCBkb25lKTtcbiAgICB9XG5cbiAgICBpc1N5bmMgPSBmYWxzZTtcblxuICAgIGlmIChpc0RvbmUpIHtcbiAgICAgIC8vIFRoaXMgbWVhbnMgdGhlIGxvb3AgZmluaXNoZWQgc3luY2hyb25vdXNseS5cbiAgICAgIGNhbGxiYWNrLmFwcGx5KHVuZGVmaW5lZCwgX3RvQ29uc3VtYWJsZUFycmF5KGRvbmVBcmdzKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGN1cnJlbnRUdXJuID49IHR1cm5zICYmIGhhc05leHQpIHtcbiAgICAgIGlzRG9uZSA9IHRydWU7XG4gICAgICBjYWxsYmFjaygpO1xuICAgIH1cbiAgfTtcblxuICBuZXh0KCk7XG59OyIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZ28gPSBleHBvcnRzLnJlcGxhY2VMb2NhdGlvbiA9IGV4cG9ydHMucHVzaExvY2F0aW9uID0gZXhwb3J0cy5zdGFydExpc3RlbmVyID0gZXhwb3J0cy5nZXRVc2VyQ29uZmlybWF0aW9uID0gZXhwb3J0cy5nZXRDdXJyZW50TG9jYXRpb24gPSB1bmRlZmluZWQ7XG5cbnZhciBfTG9jYXRpb25VdGlscyA9IHJlcXVpcmUoJy4vTG9jYXRpb25VdGlscycpO1xuXG52YXIgX0RPTVV0aWxzID0gcmVxdWlyZSgnLi9ET01VdGlscycpO1xuXG52YXIgX0RPTVN0YXRlU3RvcmFnZSA9IHJlcXVpcmUoJy4vRE9NU3RhdGVTdG9yYWdlJyk7XG5cbnZhciBfUGF0aFV0aWxzID0gcmVxdWlyZSgnLi9QYXRoVXRpbHMnKTtcblxuLyogZXNsaW50LWRpc2FibGUgbm8tYWxlcnQgKi9cblxuXG52YXIgUG9wU3RhdGVFdmVudCA9ICdwb3BzdGF0ZSc7XG5cbnZhciBfY3JlYXRlTG9jYXRpb24gPSBmdW5jdGlvbiBfY3JlYXRlTG9jYXRpb24oaGlzdG9yeVN0YXRlKSB7XG4gIHZhciBrZXkgPSBoaXN0b3J5U3RhdGUgJiYgaGlzdG9yeVN0YXRlLmtleTtcblxuICByZXR1cm4gKDAsIF9Mb2NhdGlvblV0aWxzLmNyZWF0ZUxvY2F0aW9uKSh7XG4gICAgcGF0aG5hbWU6IHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSxcbiAgICBzZWFyY2g6IHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gsXG4gICAgaGFzaDogd2luZG93LmxvY2F0aW9uLmhhc2gsXG4gICAgc3RhdGU6IGtleSA/ICgwLCBfRE9NU3RhdGVTdG9yYWdlLnJlYWRTdGF0ZSkoa2V5KSA6IHVuZGVmaW5lZFxuICB9LCB1bmRlZmluZWQsIGtleSk7XG59O1xuXG52YXIgZ2V0Q3VycmVudExvY2F0aW9uID0gZXhwb3J0cy5nZXRDdXJyZW50TG9jYXRpb24gPSBmdW5jdGlvbiBnZXRDdXJyZW50TG9jYXRpb24oKSB7XG4gIHZhciBoaXN0b3J5U3RhdGUgPSB2b2lkIDA7XG4gIHRyeSB7XG4gICAgaGlzdG9yeVN0YXRlID0gd2luZG93Lmhpc3Rvcnkuc3RhdGUgfHwge307XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgLy8gSUUgMTEgc29tZXRpbWVzIHRocm93cyB3aGVuIGFjY2Vzc2luZyB3aW5kb3cuaGlzdG9yeS5zdGF0ZVxuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbWphY2tzb24vaGlzdG9yeS9wdWxsLzI4OVxuICAgIGhpc3RvcnlTdGF0ZSA9IHt9O1xuICB9XG5cbiAgcmV0dXJuIF9jcmVhdGVMb2NhdGlvbihoaXN0b3J5U3RhdGUpO1xufTtcblxudmFyIGdldFVzZXJDb25maXJtYXRpb24gPSBleHBvcnRzLmdldFVzZXJDb25maXJtYXRpb24gPSBmdW5jdGlvbiBnZXRVc2VyQ29uZmlybWF0aW9uKG1lc3NhZ2UsIGNhbGxiYWNrKSB7XG4gIHJldHVybiBjYWxsYmFjayh3aW5kb3cuY29uZmlybShtZXNzYWdlKSk7XG59O1xuXG52YXIgc3RhcnRMaXN0ZW5lciA9IGV4cG9ydHMuc3RhcnRMaXN0ZW5lciA9IGZ1bmN0aW9uIHN0YXJ0TGlzdGVuZXIobGlzdGVuZXIpIHtcbiAgdmFyIGhhbmRsZVBvcFN0YXRlID0gZnVuY3Rpb24gaGFuZGxlUG9wU3RhdGUoZXZlbnQpIHtcbiAgICBpZiAoZXZlbnQuc3RhdGUgIT09IHVuZGVmaW5lZCkgLy8gSWdub3JlIGV4dHJhbmVvdXMgcG9wc3RhdGUgZXZlbnRzIGluIFdlYktpdFxuICAgICAgbGlzdGVuZXIoX2NyZWF0ZUxvY2F0aW9uKGV2ZW50LnN0YXRlKSk7XG4gIH07XG5cbiAgKDAsIF9ET01VdGlscy5hZGRFdmVudExpc3RlbmVyKSh3aW5kb3csIFBvcFN0YXRlRXZlbnQsIGhhbmRsZVBvcFN0YXRlKTtcblxuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAoMCwgX0RPTVV0aWxzLnJlbW92ZUV2ZW50TGlzdGVuZXIpKHdpbmRvdywgUG9wU3RhdGVFdmVudCwgaGFuZGxlUG9wU3RhdGUpO1xuICB9O1xufTtcblxudmFyIHVwZGF0ZUxvY2F0aW9uID0gZnVuY3Rpb24gdXBkYXRlTG9jYXRpb24obG9jYXRpb24sIHVwZGF0ZVN0YXRlKSB7XG4gIHZhciBzdGF0ZSA9IGxvY2F0aW9uLnN0YXRlO1xuICB2YXIga2V5ID0gbG9jYXRpb24ua2V5O1xuXG5cbiAgaWYgKHN0YXRlICE9PSB1bmRlZmluZWQpICgwLCBfRE9NU3RhdGVTdG9yYWdlLnNhdmVTdGF0ZSkoa2V5LCBzdGF0ZSk7XG5cbiAgdXBkYXRlU3RhdGUoeyBrZXk6IGtleSB9LCAoMCwgX1BhdGhVdGlscy5jcmVhdGVQYXRoKShsb2NhdGlvbikpO1xufTtcblxudmFyIHB1c2hMb2NhdGlvbiA9IGV4cG9ydHMucHVzaExvY2F0aW9uID0gZnVuY3Rpb24gcHVzaExvY2F0aW9uKGxvY2F0aW9uKSB7XG4gIHJldHVybiB1cGRhdGVMb2NhdGlvbihsb2NhdGlvbiwgZnVuY3Rpb24gKHN0YXRlLCBwYXRoKSB7XG4gICAgcmV0dXJuIHdpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZShzdGF0ZSwgbnVsbCwgcGF0aCk7XG4gIH0pO1xufTtcblxudmFyIHJlcGxhY2VMb2NhdGlvbiA9IGV4cG9ydHMucmVwbGFjZUxvY2F0aW9uID0gZnVuY3Rpb24gcmVwbGFjZUxvY2F0aW9uKGxvY2F0aW9uKSB7XG4gIHJldHVybiB1cGRhdGVMb2NhdGlvbihsb2NhdGlvbiwgZnVuY3Rpb24gKHN0YXRlLCBwYXRoKSB7XG4gICAgcmV0dXJuIHdpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZShzdGF0ZSwgbnVsbCwgcGF0aCk7XG4gIH0pO1xufTtcblxudmFyIGdvID0gZXhwb3J0cy5nbyA9IGZ1bmN0aW9uIGdvKG4pIHtcbiAgaWYgKG4pIHdpbmRvdy5oaXN0b3J5LmdvKG4pO1xufTsiLCIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnJlYWRTdGF0ZSA9IGV4cG9ydHMuc2F2ZVN0YXRlID0gdW5kZWZpbmVkO1xuXG52YXIgX3dhcm5pbmcgPSByZXF1aXJlKCd3YXJuaW5nJyk7XG5cbnZhciBfd2FybmluZzIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF93YXJuaW5nKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxudmFyIFF1b3RhRXhjZWVkZWRFcnJvcnMgPSBbJ1F1b3RhRXhjZWVkZWRFcnJvcicsICdRVU9UQV9FWENFRURFRF9FUlInXTsgLyogZXNsaW50LWRpc2FibGUgbm8tZW1wdHkgKi9cblxuXG52YXIgU2VjdXJpdHlFcnJvciA9ICdTZWN1cml0eUVycm9yJztcbnZhciBLZXlQcmVmaXggPSAnQEBIaXN0b3J5Lyc7XG5cbnZhciBjcmVhdGVLZXkgPSBmdW5jdGlvbiBjcmVhdGVLZXkoa2V5KSB7XG4gIHJldHVybiBLZXlQcmVmaXggKyBrZXk7XG59O1xuXG52YXIgc2F2ZVN0YXRlID0gZXhwb3J0cy5zYXZlU3RhdGUgPSBmdW5jdGlvbiBzYXZlU3RhdGUoa2V5LCBzdGF0ZSkge1xuICBpZiAoIXdpbmRvdy5zZXNzaW9uU3RvcmFnZSkge1xuICAgIC8vIFNlc3Npb24gc3RvcmFnZSBpcyBub3QgYXZhaWxhYmxlIG9yIGhpZGRlbi5cbiAgICAvLyBzZXNzaW9uU3RvcmFnZSBpcyB1bmRlZmluZWQgaW4gSW50ZXJuZXQgRXhwbG9yZXIgd2hlbiBzZXJ2ZWQgdmlhIGZpbGUgcHJvdG9jb2wuXG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/ICgwLCBfd2FybmluZzIuZGVmYXVsdCkoZmFsc2UsICdbaGlzdG9yeV0gVW5hYmxlIHRvIHNhdmUgc3RhdGU7IHNlc3Npb25TdG9yYWdlIGlzIG5vdCBhdmFpbGFibGUnKSA6IHZvaWQgMDtcbiAgICByZXR1cm47XG4gIH1cblxuICB0cnkge1xuICAgIGlmIChzdGF0ZSA9PSBudWxsKSB7XG4gICAgICB3aW5kb3cuc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbShjcmVhdGVLZXkoa2V5KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5zZXRJdGVtKGNyZWF0ZUtleShrZXkpLCBKU09OLnN0cmluZ2lmeShzdGF0ZSkpO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoZXJyb3IubmFtZSA9PT0gU2VjdXJpdHlFcnJvcikge1xuICAgICAgLy8gQmxvY2tpbmcgY29va2llcyBpbiBDaHJvbWUvRmlyZWZveC9TYWZhcmkgdGhyb3dzIFNlY3VyaXR5RXJyb3Igb24gYW55XG4gICAgICAvLyBhdHRlbXB0IHRvIGFjY2VzcyB3aW5kb3cuc2Vzc2lvblN0b3JhZ2UuXG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gKDAsIF93YXJuaW5nMi5kZWZhdWx0KShmYWxzZSwgJ1toaXN0b3J5XSBVbmFibGUgdG8gc2F2ZSBzdGF0ZTsgc2Vzc2lvblN0b3JhZ2UgaXMgbm90IGF2YWlsYWJsZSBkdWUgdG8gc2VjdXJpdHkgc2V0dGluZ3MnKSA6IHZvaWQgMDtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChRdW90YUV4Y2VlZGVkRXJyb3JzLmluZGV4T2YoZXJyb3IubmFtZSkgPj0gMCAmJiB3aW5kb3cuc2Vzc2lvblN0b3JhZ2UubGVuZ3RoID09PSAwKSB7XG4gICAgICAvLyBTYWZhcmkgXCJwcml2YXRlIG1vZGVcIiB0aHJvd3MgUXVvdGFFeGNlZWRlZEVycm9yLlxuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/ICgwLCBfd2FybmluZzIuZGVmYXVsdCkoZmFsc2UsICdbaGlzdG9yeV0gVW5hYmxlIHRvIHNhdmUgc3RhdGU7IHNlc3Npb25TdG9yYWdlIGlzIG5vdCBhdmFpbGFibGUgaW4gU2FmYXJpIHByaXZhdGUgbW9kZScpIDogdm9pZCAwO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG5cbnZhciByZWFkU3RhdGUgPSBleHBvcnRzLnJlYWRTdGF0ZSA9IGZ1bmN0aW9uIHJlYWRTdGF0ZShrZXkpIHtcbiAgdmFyIGpzb24gPSB2b2lkIDA7XG4gIHRyeSB7XG4gICAganNvbiA9IHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKGNyZWF0ZUtleShrZXkpKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoZXJyb3IubmFtZSA9PT0gU2VjdXJpdHlFcnJvcikge1xuICAgICAgLy8gQmxvY2tpbmcgY29va2llcyBpbiBDaHJvbWUvRmlyZWZveC9TYWZhcmkgdGhyb3dzIFNlY3VyaXR5RXJyb3Igb24gYW55XG4gICAgICAvLyBhdHRlbXB0IHRvIGFjY2VzcyB3aW5kb3cuc2Vzc2lvblN0b3JhZ2UuXG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gKDAsIF93YXJuaW5nMi5kZWZhdWx0KShmYWxzZSwgJ1toaXN0b3J5XSBVbmFibGUgdG8gcmVhZCBzdGF0ZTsgc2Vzc2lvblN0b3JhZ2UgaXMgbm90IGF2YWlsYWJsZSBkdWUgdG8gc2VjdXJpdHkgc2V0dGluZ3MnKSA6IHZvaWQgMDtcblxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBpZiAoanNvbikge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5wYXJzZShqc29uKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gSWdub3JlIGludmFsaWQgSlNPTi5cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufTsiLCIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG52YXIgYWRkRXZlbnRMaXN0ZW5lciA9IGV4cG9ydHMuYWRkRXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uIGFkZEV2ZW50TGlzdGVuZXIobm9kZSwgZXZlbnQsIGxpc3RlbmVyKSB7XG4gIHJldHVybiBub2RlLmFkZEV2ZW50TGlzdGVuZXIgPyBub2RlLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIGxpc3RlbmVyLCBmYWxzZSkgOiBub2RlLmF0dGFjaEV2ZW50KCdvbicgKyBldmVudCwgbGlzdGVuZXIpO1xufTtcblxudmFyIHJlbW92ZUV2ZW50TGlzdGVuZXIgPSBleHBvcnRzLnJlbW92ZUV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbiByZW1vdmVFdmVudExpc3RlbmVyKG5vZGUsIGV2ZW50LCBsaXN0ZW5lcikge1xuICByZXR1cm4gbm9kZS5yZW1vdmVFdmVudExpc3RlbmVyID8gbm9kZS5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50LCBsaXN0ZW5lciwgZmFsc2UpIDogbm9kZS5kZXRhY2hFdmVudCgnb24nICsgZXZlbnQsIGxpc3RlbmVyKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBIVE1MNSBoaXN0b3J5IEFQSSBpcyBzdXBwb3J0ZWQuIFRha2VuIGZyb20gTW9kZXJuaXpyLlxuICpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9Nb2Rlcm5penIvTW9kZXJuaXpyL2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9Nb2Rlcm5penIvTW9kZXJuaXpyL2Jsb2IvbWFzdGVyL2ZlYXR1cmUtZGV0ZWN0cy9oaXN0b3J5LmpzXG4gKiBjaGFuZ2VkIHRvIGF2b2lkIGZhbHNlIG5lZ2F0aXZlcyBmb3IgV2luZG93cyBQaG9uZXM6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdGpzL3JlYWN0LXJvdXRlci9pc3N1ZXMvNTg2XG4gKi9cbnZhciBzdXBwb3J0c0hpc3RvcnkgPSBleHBvcnRzLnN1cHBvcnRzSGlzdG9yeSA9IGZ1bmN0aW9uIHN1cHBvcnRzSGlzdG9yeSgpIHtcbiAgdmFyIHVhID0gd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQ7XG5cbiAgaWYgKCh1YS5pbmRleE9mKCdBbmRyb2lkIDIuJykgIT09IC0xIHx8IHVhLmluZGV4T2YoJ0FuZHJvaWQgNC4wJykgIT09IC0xKSAmJiB1YS5pbmRleE9mKCdNb2JpbGUgU2FmYXJpJykgIT09IC0xICYmIHVhLmluZGV4T2YoJ0Nocm9tZScpID09PSAtMSAmJiB1YS5pbmRleE9mKCdXaW5kb3dzIFBob25lJykgPT09IC0xKSByZXR1cm4gZmFsc2U7XG5cbiAgcmV0dXJuIHdpbmRvdy5oaXN0b3J5ICYmICdwdXNoU3RhdGUnIGluIHdpbmRvdy5oaXN0b3J5O1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGZhbHNlIGlmIHVzaW5nIGdvKG4pIHdpdGggaGFzaCBoaXN0b3J5IGNhdXNlcyBhIGZ1bGwgcGFnZSByZWxvYWQuXG4gKi9cbnZhciBzdXBwb3J0c0dvV2l0aG91dFJlbG9hZFVzaW5nSGFzaCA9IGV4cG9ydHMuc3VwcG9ydHNHb1dpdGhvdXRSZWxvYWRVc2luZ0hhc2ggPSBmdW5jdGlvbiBzdXBwb3J0c0dvV2l0aG91dFJlbG9hZFVzaW5nSGFzaCgpIHtcbiAgcmV0dXJuIHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoJ0ZpcmVmb3gnKSA9PT0gLTE7XG59OyIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbnZhciBjYW5Vc2VET00gPSBleHBvcnRzLmNhblVzZURPTSA9ICEhKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5kb2N1bWVudCAmJiB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7IiwiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5yZXBsYWNlTG9jYXRpb24gPSBleHBvcnRzLnB1c2hMb2NhdGlvbiA9IGV4cG9ydHMuc3RhcnRMaXN0ZW5lciA9IGV4cG9ydHMuZ2V0Q3VycmVudExvY2F0aW9uID0gZXhwb3J0cy5nbyA9IGV4cG9ydHMuZ2V0VXNlckNvbmZpcm1hdGlvbiA9IHVuZGVmaW5lZDtcblxudmFyIF9Ccm93c2VyUHJvdG9jb2wgPSByZXF1aXJlKCcuL0Jyb3dzZXJQcm90b2NvbCcpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ2dldFVzZXJDb25maXJtYXRpb24nLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfQnJvd3NlclByb3RvY29sLmdldFVzZXJDb25maXJtYXRpb247XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdnbycsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9Ccm93c2VyUHJvdG9jb2wuZ287XG4gIH1cbn0pO1xuXG52YXIgX3dhcm5pbmcgPSByZXF1aXJlKCd3YXJuaW5nJyk7XG5cbnZhciBfd2FybmluZzIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF93YXJuaW5nKTtcblxudmFyIF9Mb2NhdGlvblV0aWxzID0gcmVxdWlyZSgnLi9Mb2NhdGlvblV0aWxzJyk7XG5cbnZhciBfRE9NVXRpbHMgPSByZXF1aXJlKCcuL0RPTVV0aWxzJyk7XG5cbnZhciBfRE9NU3RhdGVTdG9yYWdlID0gcmVxdWlyZSgnLi9ET01TdGF0ZVN0b3JhZ2UnKTtcblxudmFyIF9QYXRoVXRpbHMgPSByZXF1aXJlKCcuL1BhdGhVdGlscycpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG52YXIgSGFzaENoYW5nZUV2ZW50ID0gJ2hhc2hjaGFuZ2UnO1xuXG52YXIgZ2V0SGFzaFBhdGggPSBmdW5jdGlvbiBnZXRIYXNoUGF0aCgpIHtcbiAgLy8gV2UgY2FuJ3QgdXNlIHdpbmRvdy5sb2NhdGlvbi5oYXNoIGhlcmUgYmVjYXVzZSBpdCdzIG5vdFxuICAvLyBjb25zaXN0ZW50IGFjcm9zcyBicm93c2VycyAtIEZpcmVmb3ggd2lsbCBwcmUtZGVjb2RlIGl0IVxuICB2YXIgaHJlZiA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xuICB2YXIgaW5kZXggPSBocmVmLmluZGV4T2YoJyMnKTtcbiAgcmV0dXJuIGluZGV4ID09PSAtMSA/ICcnIDogaHJlZi5zdWJzdHJpbmcoaW5kZXggKyAxKTtcbn07XG5cbnZhciBwdXNoSGFzaFBhdGggPSBmdW5jdGlvbiBwdXNoSGFzaFBhdGgocGF0aCkge1xuICByZXR1cm4gd2luZG93LmxvY2F0aW9uLmhhc2ggPSBwYXRoO1xufTtcblxudmFyIHJlcGxhY2VIYXNoUGF0aCA9IGZ1bmN0aW9uIHJlcGxhY2VIYXNoUGF0aChwYXRoKSB7XG4gIHZhciBpID0gd2luZG93LmxvY2F0aW9uLmhyZWYuaW5kZXhPZignIycpO1xuXG4gIHdpbmRvdy5sb2NhdGlvbi5yZXBsYWNlKHdpbmRvdy5sb2NhdGlvbi5ocmVmLnNsaWNlKDAsIGkgPj0gMCA/IGkgOiAwKSArICcjJyArIHBhdGgpO1xufTtcblxudmFyIGVuc3VyZVNsYXNoID0gZnVuY3Rpb24gZW5zdXJlU2xhc2goKSB7XG4gIHZhciBwYXRoID0gZ2V0SGFzaFBhdGgoKTtcblxuICBpZiAoKDAsIF9QYXRoVXRpbHMuaXNBYnNvbHV0ZVBhdGgpKHBhdGgpKSByZXR1cm4gdHJ1ZTtcblxuICByZXBsYWNlSGFzaFBhdGgoJy8nICsgcGF0aCk7XG5cbiAgcmV0dXJuIGZhbHNlO1xufTtcblxudmFyIGdldEN1cnJlbnRMb2NhdGlvbiA9IGV4cG9ydHMuZ2V0Q3VycmVudExvY2F0aW9uID0gZnVuY3Rpb24gZ2V0Q3VycmVudExvY2F0aW9uKHF1ZXJ5S2V5KSB7XG4gIHZhciBwYXRoID0gZ2V0SGFzaFBhdGgoKTtcbiAgdmFyIGtleSA9ICgwLCBfUGF0aFV0aWxzLmdldFF1ZXJ5U3RyaW5nVmFsdWVGcm9tUGF0aCkocGF0aCwgcXVlcnlLZXkpO1xuXG4gIHZhciBzdGF0ZSA9IHZvaWQgMDtcbiAgaWYgKGtleSkge1xuICAgIHBhdGggPSAoMCwgX1BhdGhVdGlscy5zdHJpcFF1ZXJ5U3RyaW5nVmFsdWVGcm9tUGF0aCkocGF0aCwgcXVlcnlLZXkpO1xuICAgIHN0YXRlID0gKDAsIF9ET01TdGF0ZVN0b3JhZ2UucmVhZFN0YXRlKShrZXkpO1xuICB9XG5cbiAgdmFyIGluaXQgPSAoMCwgX1BhdGhVdGlscy5wYXJzZVBhdGgpKHBhdGgpO1xuICBpbml0LnN0YXRlID0gc3RhdGU7XG5cbiAgcmV0dXJuICgwLCBfTG9jYXRpb25VdGlscy5jcmVhdGVMb2NhdGlvbikoaW5pdCwgdW5kZWZpbmVkLCBrZXkpO1xufTtcblxudmFyIHByZXZMb2NhdGlvbiA9IHZvaWQgMDtcblxudmFyIHN0YXJ0TGlzdGVuZXIgPSBleHBvcnRzLnN0YXJ0TGlzdGVuZXIgPSBmdW5jdGlvbiBzdGFydExpc3RlbmVyKGxpc3RlbmVyLCBxdWVyeUtleSkge1xuICB2YXIgaGFuZGxlSGFzaENoYW5nZSA9IGZ1bmN0aW9uIGhhbmRsZUhhc2hDaGFuZ2UoKSB7XG4gICAgaWYgKCFlbnN1cmVTbGFzaCgpKSByZXR1cm47IC8vIEhhc2ggcGF0aCBtdXN0IGFsd2F5cyBiZWdpbiB3aXRoIGEgL1xuXG4gICAgdmFyIGN1cnJlbnRMb2NhdGlvbiA9IGdldEN1cnJlbnRMb2NhdGlvbihxdWVyeUtleSk7XG5cbiAgICBpZiAocHJldkxvY2F0aW9uICYmIGN1cnJlbnRMb2NhdGlvbi5rZXkgJiYgcHJldkxvY2F0aW9uLmtleSA9PT0gY3VycmVudExvY2F0aW9uLmtleSkgcmV0dXJuOyAvLyBJZ25vcmUgZXh0cmFuZW91cyBoYXNoY2hhbmdlIGV2ZW50c1xuXG4gICAgcHJldkxvY2F0aW9uID0gY3VycmVudExvY2F0aW9uO1xuXG4gICAgbGlzdGVuZXIoY3VycmVudExvY2F0aW9uKTtcbiAgfTtcblxuICBlbnN1cmVTbGFzaCgpO1xuICAoMCwgX0RPTVV0aWxzLmFkZEV2ZW50TGlzdGVuZXIpKHdpbmRvdywgSGFzaENoYW5nZUV2ZW50LCBoYW5kbGVIYXNoQ2hhbmdlKTtcblxuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAoMCwgX0RPTVV0aWxzLnJlbW92ZUV2ZW50TGlzdGVuZXIpKHdpbmRvdywgSGFzaENoYW5nZUV2ZW50LCBoYW5kbGVIYXNoQ2hhbmdlKTtcbiAgfTtcbn07XG5cbnZhciB1cGRhdGVMb2NhdGlvbiA9IGZ1bmN0aW9uIHVwZGF0ZUxvY2F0aW9uKGxvY2F0aW9uLCBxdWVyeUtleSwgdXBkYXRlSGFzaCkge1xuICB2YXIgc3RhdGUgPSBsb2NhdGlvbi5zdGF0ZTtcbiAgdmFyIGtleSA9IGxvY2F0aW9uLmtleTtcblxuICB2YXIgcGF0aCA9ICgwLCBfUGF0aFV0aWxzLmNyZWF0ZVBhdGgpKGxvY2F0aW9uKTtcblxuICBpZiAoc3RhdGUgIT09IHVuZGVmaW5lZCkge1xuICAgIHBhdGggPSAoMCwgX1BhdGhVdGlscy5hZGRRdWVyeVN0cmluZ1ZhbHVlVG9QYXRoKShwYXRoLCBxdWVyeUtleSwga2V5KTtcbiAgICAoMCwgX0RPTVN0YXRlU3RvcmFnZS5zYXZlU3RhdGUpKGtleSwgc3RhdGUpO1xuICB9XG5cbiAgcHJldkxvY2F0aW9uID0gbG9jYXRpb247XG5cbiAgdXBkYXRlSGFzaChwYXRoKTtcbn07XG5cbnZhciBwdXNoTG9jYXRpb24gPSBleHBvcnRzLnB1c2hMb2NhdGlvbiA9IGZ1bmN0aW9uIHB1c2hMb2NhdGlvbihsb2NhdGlvbiwgcXVlcnlLZXkpIHtcbiAgcmV0dXJuIHVwZGF0ZUxvY2F0aW9uKGxvY2F0aW9uLCBxdWVyeUtleSwgZnVuY3Rpb24gKHBhdGgpIHtcbiAgICBpZiAoZ2V0SGFzaFBhdGgoKSAhPT0gcGF0aCkge1xuICAgICAgcHVzaEhhc2hQYXRoKHBhdGgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gKDAsIF93YXJuaW5nMi5kZWZhdWx0KShmYWxzZSwgJ1lvdSBjYW5ub3QgUFVTSCB0aGUgc2FtZSBwYXRoIHVzaW5nIGhhc2ggaGlzdG9yeScpIDogdm9pZCAwO1xuICAgIH1cbiAgfSk7XG59O1xuXG52YXIgcmVwbGFjZUxvY2F0aW9uID0gZXhwb3J0cy5yZXBsYWNlTG9jYXRpb24gPSBmdW5jdGlvbiByZXBsYWNlTG9jYXRpb24obG9jYXRpb24sIHF1ZXJ5S2V5KSB7XG4gIHJldHVybiB1cGRhdGVMb2NhdGlvbihsb2NhdGlvbiwgcXVlcnlLZXksIGZ1bmN0aW9uIChwYXRoKSB7XG4gICAgaWYgKGdldEhhc2hQYXRoKCkgIT09IHBhdGgpIHJlcGxhY2VIYXNoUGF0aChwYXRoKTtcbiAgfSk7XG59OyIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubG9jYXRpb25zQXJlRXF1YWwgPSBleHBvcnRzLnN0YXRlc0FyZUVxdWFsID0gZXhwb3J0cy5jcmVhdGVMb2NhdGlvbiA9IGV4cG9ydHMuY3JlYXRlUXVlcnkgPSB1bmRlZmluZWQ7XG5cbnZhciBfdHlwZW9mID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIgPyBmdW5jdGlvbiAob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9IDogZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9O1xuXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xuXG52YXIgX2ludmFyaWFudCA9IHJlcXVpcmUoJ2ludmFyaWFudCcpO1xuXG52YXIgX2ludmFyaWFudDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pbnZhcmlhbnQpO1xuXG52YXIgX1BhdGhVdGlscyA9IHJlcXVpcmUoJy4vUGF0aFV0aWxzJyk7XG5cbnZhciBfQWN0aW9ucyA9IHJlcXVpcmUoJy4vQWN0aW9ucycpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG52YXIgY3JlYXRlUXVlcnkgPSBleHBvcnRzLmNyZWF0ZVF1ZXJ5ID0gZnVuY3Rpb24gY3JlYXRlUXVlcnkocHJvcHMpIHtcbiAgcmV0dXJuIF9leHRlbmRzKE9iamVjdC5jcmVhdGUobnVsbCksIHByb3BzKTtcbn07XG5cbnZhciBjcmVhdGVMb2NhdGlvbiA9IGV4cG9ydHMuY3JlYXRlTG9jYXRpb24gPSBmdW5jdGlvbiBjcmVhdGVMb2NhdGlvbigpIHtcbiAgdmFyIGlucHV0ID0gYXJndW1lbnRzLmxlbmd0aCA8PSAwIHx8IGFyZ3VtZW50c1swXSA9PT0gdW5kZWZpbmVkID8gJy8nIDogYXJndW1lbnRzWzBdO1xuICB2YXIgYWN0aW9uID0gYXJndW1lbnRzLmxlbmd0aCA8PSAxIHx8IGFyZ3VtZW50c1sxXSA9PT0gdW5kZWZpbmVkID8gX0FjdGlvbnMuUE9QIDogYXJndW1lbnRzWzFdO1xuICB2YXIga2V5ID0gYXJndW1lbnRzLmxlbmd0aCA8PSAyIHx8IGFyZ3VtZW50c1syXSA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGFyZ3VtZW50c1syXTtcblxuICB2YXIgb2JqZWN0ID0gdHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJyA/ICgwLCBfUGF0aFV0aWxzLnBhcnNlUGF0aCkoaW5wdXQpIDogaW5wdXQ7XG5cbiAgdmFyIHBhdGhuYW1lID0gb2JqZWN0LnBhdGhuYW1lIHx8ICcvJztcbiAgdmFyIHNlYXJjaCA9IG9iamVjdC5zZWFyY2ggfHwgJyc7XG4gIHZhciBoYXNoID0gb2JqZWN0Lmhhc2ggfHwgJyc7XG4gIHZhciBzdGF0ZSA9IG9iamVjdC5zdGF0ZTtcblxuICByZXR1cm4ge1xuICAgIHBhdGhuYW1lOiBwYXRobmFtZSxcbiAgICBzZWFyY2g6IHNlYXJjaCxcbiAgICBoYXNoOiBoYXNoLFxuICAgIHN0YXRlOiBzdGF0ZSxcbiAgICBhY3Rpb246IGFjdGlvbixcbiAgICBrZXk6IGtleVxuICB9O1xufTtcblxudmFyIGlzRGF0ZSA9IGZ1bmN0aW9uIGlzRGF0ZShvYmplY3QpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmplY3QpID09PSAnW29iamVjdCBEYXRlXSc7XG59O1xuXG52YXIgc3RhdGVzQXJlRXF1YWwgPSBleHBvcnRzLnN0YXRlc0FyZUVxdWFsID0gZnVuY3Rpb24gc3RhdGVzQXJlRXF1YWwoYSwgYikge1xuICBpZiAoYSA9PT0gYikgcmV0dXJuIHRydWU7XG5cbiAgdmFyIHR5cGVvZkEgPSB0eXBlb2YgYSA9PT0gJ3VuZGVmaW5lZCcgPyAndW5kZWZpbmVkJyA6IF90eXBlb2YoYSk7XG4gIHZhciB0eXBlb2ZCID0gdHlwZW9mIGIgPT09ICd1bmRlZmluZWQnID8gJ3VuZGVmaW5lZCcgOiBfdHlwZW9mKGIpO1xuXG4gIGlmICh0eXBlb2ZBICE9PSB0eXBlb2ZCKSByZXR1cm4gZmFsc2U7XG5cbiAgISh0eXBlb2ZBICE9PSAnZnVuY3Rpb24nKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyAoMCwgX2ludmFyaWFudDIuZGVmYXVsdCkoZmFsc2UsICdZb3UgbXVzdCBub3Qgc3RvcmUgZnVuY3Rpb25zIGluIGxvY2F0aW9uIHN0YXRlJykgOiAoMCwgX2ludmFyaWFudDIuZGVmYXVsdCkoZmFsc2UpIDogdm9pZCAwO1xuXG4gIC8vIE5vdCB0aGUgc2FtZSBvYmplY3QsIGJ1dCBzYW1lIHR5cGUuXG4gIGlmICh0eXBlb2ZBID09PSAnb2JqZWN0Jykge1xuICAgICEhKGlzRGF0ZShhKSAmJiBpc0RhdGUoYikpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/ICgwLCBfaW52YXJpYW50Mi5kZWZhdWx0KShmYWxzZSwgJ1lvdSBtdXN0IG5vdCBzdG9yZSBEYXRlIG9iamVjdHMgaW4gbG9jYXRpb24gc3RhdGUnKSA6ICgwLCBfaW52YXJpYW50Mi5kZWZhdWx0KShmYWxzZSkgOiB2b2lkIDA7XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoYSkpIHJldHVybiBPYmplY3Qua2V5cyhhKS5ldmVyeShmdW5jdGlvbiAoa2V5KSB7XG4gICAgICByZXR1cm4gc3RhdGVzQXJlRXF1YWwoYVtrZXldLCBiW2tleV0pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoYikgJiYgYS5sZW5ndGggPT09IGIubGVuZ3RoICYmIGEuZXZlcnkoZnVuY3Rpb24gKGl0ZW0sIGluZGV4KSB7XG4gICAgICByZXR1cm4gc3RhdGVzQXJlRXF1YWwoaXRlbSwgYltpbmRleF0pO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gQWxsIG90aGVyIHNlcmlhbGl6YWJsZSB0eXBlcyAoc3RyaW5nLCBudW1iZXIsIGJvb2xlYW4pXG4gIC8vIHNob3VsZCBiZSBzdHJpY3QgZXF1YWwuXG4gIHJldHVybiBmYWxzZTtcbn07XG5cbnZhciBsb2NhdGlvbnNBcmVFcXVhbCA9IGV4cG9ydHMubG9jYXRpb25zQXJlRXF1YWwgPSBmdW5jdGlvbiBsb2NhdGlvbnNBcmVFcXVhbChhLCBiKSB7XG4gIHJldHVybiBhLmtleSA9PT0gYi5rZXkgJiZcbiAgLy8gYS5hY3Rpb24gPT09IGIuYWN0aW9uICYmIC8vIERpZmZlcmVudCBhY3Rpb24gIT09IGxvY2F0aW9uIGNoYW5nZS5cbiAgYS5wYXRobmFtZSA9PT0gYi5wYXRobmFtZSAmJiBhLnNlYXJjaCA9PT0gYi5zZWFyY2ggJiYgYS5oYXNoID09PSBiLmhhc2ggJiYgc3RhdGVzQXJlRXF1YWwoYS5zdGF0ZSwgYi5zdGF0ZSk7XG59OyIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUGF0aCA9IGV4cG9ydHMucGFyc2VQYXRoID0gZXhwb3J0cy5nZXRRdWVyeVN0cmluZ1ZhbHVlRnJvbVBhdGggPSBleHBvcnRzLnN0cmlwUXVlcnlTdHJpbmdWYWx1ZUZyb21QYXRoID0gZXhwb3J0cy5hZGRRdWVyeVN0cmluZ1ZhbHVlVG9QYXRoID0gZXhwb3J0cy5pc0Fic29sdXRlUGF0aCA9IHVuZGVmaW5lZDtcblxudmFyIF93YXJuaW5nID0gcmVxdWlyZSgnd2FybmluZycpO1xuXG52YXIgX3dhcm5pbmcyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfd2FybmluZyk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbnZhciBpc0Fic29sdXRlUGF0aCA9IGV4cG9ydHMuaXNBYnNvbHV0ZVBhdGggPSBmdW5jdGlvbiBpc0Fic29sdXRlUGF0aChwYXRoKSB7XG4gIHJldHVybiB0eXBlb2YgcGF0aCA9PT0gJ3N0cmluZycgJiYgcGF0aC5jaGFyQXQoMCkgPT09ICcvJztcbn07XG5cbnZhciBhZGRRdWVyeVN0cmluZ1ZhbHVlVG9QYXRoID0gZXhwb3J0cy5hZGRRdWVyeVN0cmluZ1ZhbHVlVG9QYXRoID0gZnVuY3Rpb24gYWRkUXVlcnlTdHJpbmdWYWx1ZVRvUGF0aChwYXRoLCBrZXksIHZhbHVlKSB7XG4gIHZhciBfcGFyc2VQYXRoID0gcGFyc2VQYXRoKHBhdGgpO1xuXG4gIHZhciBwYXRobmFtZSA9IF9wYXJzZVBhdGgucGF0aG5hbWU7XG4gIHZhciBzZWFyY2ggPSBfcGFyc2VQYXRoLnNlYXJjaDtcbiAgdmFyIGhhc2ggPSBfcGFyc2VQYXRoLmhhc2g7XG5cblxuICByZXR1cm4gY3JlYXRlUGF0aCh7XG4gICAgcGF0aG5hbWU6IHBhdGhuYW1lLFxuICAgIHNlYXJjaDogc2VhcmNoICsgKHNlYXJjaC5pbmRleE9mKCc/JykgPT09IC0xID8gJz8nIDogJyYnKSArIGtleSArICc9JyArIHZhbHVlLFxuICAgIGhhc2g6IGhhc2hcbiAgfSk7XG59O1xuXG52YXIgc3RyaXBRdWVyeVN0cmluZ1ZhbHVlRnJvbVBhdGggPSBleHBvcnRzLnN0cmlwUXVlcnlTdHJpbmdWYWx1ZUZyb21QYXRoID0gZnVuY3Rpb24gc3RyaXBRdWVyeVN0cmluZ1ZhbHVlRnJvbVBhdGgocGF0aCwga2V5KSB7XG4gIHZhciBfcGFyc2VQYXRoMiA9IHBhcnNlUGF0aChwYXRoKTtcblxuICB2YXIgcGF0aG5hbWUgPSBfcGFyc2VQYXRoMi5wYXRobmFtZTtcbiAgdmFyIHNlYXJjaCA9IF9wYXJzZVBhdGgyLnNlYXJjaDtcbiAgdmFyIGhhc2ggPSBfcGFyc2VQYXRoMi5oYXNoO1xuXG5cbiAgcmV0dXJuIGNyZWF0ZVBhdGgoe1xuICAgIHBhdGhuYW1lOiBwYXRobmFtZSxcbiAgICBzZWFyY2g6IHNlYXJjaC5yZXBsYWNlKG5ldyBSZWdFeHAoJyhbPyZdKScgKyBrZXkgKyAnPVthLXpBLVowLTldKygmPyknKSwgZnVuY3Rpb24gKG1hdGNoLCBwcmVmaXgsIHN1ZmZpeCkge1xuICAgICAgcmV0dXJuIHByZWZpeCA9PT0gJz8nID8gcHJlZml4IDogc3VmZml4O1xuICAgIH0pLFxuICAgIGhhc2g6IGhhc2hcbiAgfSk7XG59O1xuXG52YXIgZ2V0UXVlcnlTdHJpbmdWYWx1ZUZyb21QYXRoID0gZXhwb3J0cy5nZXRRdWVyeVN0cmluZ1ZhbHVlRnJvbVBhdGggPSBmdW5jdGlvbiBnZXRRdWVyeVN0cmluZ1ZhbHVlRnJvbVBhdGgocGF0aCwga2V5KSB7XG4gIHZhciBfcGFyc2VQYXRoMyA9IHBhcnNlUGF0aChwYXRoKTtcblxuICB2YXIgc2VhcmNoID0gX3BhcnNlUGF0aDMuc2VhcmNoO1xuXG4gIHZhciBtYXRjaCA9IHNlYXJjaC5tYXRjaChuZXcgUmVnRXhwKCdbPyZdJyArIGtleSArICc9KFthLXpBLVowLTldKyknKSk7XG4gIHJldHVybiBtYXRjaCAmJiBtYXRjaFsxXTtcbn07XG5cbnZhciBleHRyYWN0UGF0aCA9IGZ1bmN0aW9uIGV4dHJhY3RQYXRoKHN0cmluZykge1xuICB2YXIgbWF0Y2ggPSBzdHJpbmcubWF0Y2goL14oaHR0cHM/Oik/XFwvXFwvW15cXC9dKi8pO1xuICByZXR1cm4gbWF0Y2ggPT0gbnVsbCA/IHN0cmluZyA6IHN0cmluZy5zdWJzdHJpbmcobWF0Y2hbMF0ubGVuZ3RoKTtcbn07XG5cbnZhciBwYXJzZVBhdGggPSBleHBvcnRzLnBhcnNlUGF0aCA9IGZ1bmN0aW9uIHBhcnNlUGF0aChwYXRoKSB7XG4gIHZhciBwYXRobmFtZSA9IGV4dHJhY3RQYXRoKHBhdGgpO1xuICB2YXIgc2VhcmNoID0gJyc7XG4gIHZhciBoYXNoID0gJyc7XG5cbiAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/ICgwLCBfd2FybmluZzIuZGVmYXVsdCkocGF0aCA9PT0gcGF0aG5hbWUsICdBIHBhdGggbXVzdCBiZSBwYXRobmFtZSArIHNlYXJjaCArIGhhc2ggb25seSwgbm90IGEgZnVsbCBVUkwgbGlrZSBcIiVzXCInLCBwYXRoKSA6IHZvaWQgMDtcblxuICB2YXIgaGFzaEluZGV4ID0gcGF0aG5hbWUuaW5kZXhPZignIycpO1xuICBpZiAoaGFzaEluZGV4ICE9PSAtMSkge1xuICAgIGhhc2ggPSBwYXRobmFtZS5zdWJzdHJpbmcoaGFzaEluZGV4KTtcbiAgICBwYXRobmFtZSA9IHBhdGhuYW1lLnN1YnN0cmluZygwLCBoYXNoSW5kZXgpO1xuICB9XG5cbiAgdmFyIHNlYXJjaEluZGV4ID0gcGF0aG5hbWUuaW5kZXhPZignPycpO1xuICBpZiAoc2VhcmNoSW5kZXggIT09IC0xKSB7XG4gICAgc2VhcmNoID0gcGF0aG5hbWUuc3Vic3RyaW5nKHNlYXJjaEluZGV4KTtcbiAgICBwYXRobmFtZSA9IHBhdGhuYW1lLnN1YnN0cmluZygwLCBzZWFyY2hJbmRleCk7XG4gIH1cblxuICBpZiAocGF0aG5hbWUgPT09ICcnKSBwYXRobmFtZSA9ICcvJztcblxuICByZXR1cm4ge1xuICAgIHBhdGhuYW1lOiBwYXRobmFtZSxcbiAgICBzZWFyY2g6IHNlYXJjaCxcbiAgICBoYXNoOiBoYXNoXG4gIH07XG59O1xuXG52YXIgY3JlYXRlUGF0aCA9IGV4cG9ydHMuY3JlYXRlUGF0aCA9IGZ1bmN0aW9uIGNyZWF0ZVBhdGgobG9jYXRpb24pIHtcbiAgaWYgKGxvY2F0aW9uID09IG51bGwgfHwgdHlwZW9mIGxvY2F0aW9uID09PSAnc3RyaW5nJykgcmV0dXJuIGxvY2F0aW9uO1xuXG4gIHZhciBiYXNlbmFtZSA9IGxvY2F0aW9uLmJhc2VuYW1lO1xuICB2YXIgcGF0aG5hbWUgPSBsb2NhdGlvbi5wYXRobmFtZTtcbiAgdmFyIHNlYXJjaCA9IGxvY2F0aW9uLnNlYXJjaDtcbiAgdmFyIGhhc2ggPSBsb2NhdGlvbi5oYXNoO1xuXG4gIHZhciBwYXRoID0gKGJhc2VuYW1lIHx8ICcnKSArIHBhdGhuYW1lO1xuXG4gIGlmIChzZWFyY2ggJiYgc2VhcmNoICE9PSAnPycpIHBhdGggKz0gc2VhcmNoO1xuXG4gIGlmIChoYXNoKSBwYXRoICs9IGhhc2g7XG5cbiAgcmV0dXJuIHBhdGg7XG59OyIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucmVwbGFjZUxvY2F0aW9uID0gZXhwb3J0cy5wdXNoTG9jYXRpb24gPSBleHBvcnRzLmdldEN1cnJlbnRMb2NhdGlvbiA9IGV4cG9ydHMuZ28gPSBleHBvcnRzLmdldFVzZXJDb25maXJtYXRpb24gPSB1bmRlZmluZWQ7XG5cbnZhciBfQnJvd3NlclByb3RvY29sID0gcmVxdWlyZSgnLi9Ccm93c2VyUHJvdG9jb2wnKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdnZXRVc2VyQ29uZmlybWF0aW9uJywge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX0Jyb3dzZXJQcm90b2NvbC5nZXRVc2VyQ29uZmlybWF0aW9uO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnZ28nLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfQnJvd3NlclByb3RvY29sLmdvO1xuICB9XG59KTtcblxudmFyIF9Mb2NhdGlvblV0aWxzID0gcmVxdWlyZSgnLi9Mb2NhdGlvblV0aWxzJyk7XG5cbnZhciBfUGF0aFV0aWxzID0gcmVxdWlyZSgnLi9QYXRoVXRpbHMnKTtcblxudmFyIGdldEN1cnJlbnRMb2NhdGlvbiA9IGV4cG9ydHMuZ2V0Q3VycmVudExvY2F0aW9uID0gZnVuY3Rpb24gZ2V0Q3VycmVudExvY2F0aW9uKCkge1xuICByZXR1cm4gKDAsIF9Mb2NhdGlvblV0aWxzLmNyZWF0ZUxvY2F0aW9uKSh3aW5kb3cubG9jYXRpb24pO1xufTtcblxudmFyIHB1c2hMb2NhdGlvbiA9IGV4cG9ydHMucHVzaExvY2F0aW9uID0gZnVuY3Rpb24gcHVzaExvY2F0aW9uKGxvY2F0aW9uKSB7XG4gIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gKDAsIF9QYXRoVXRpbHMuY3JlYXRlUGF0aCkobG9jYXRpb24pO1xuICByZXR1cm4gZmFsc2U7IC8vIERvbid0IHVwZGF0ZSBsb2NhdGlvblxufTtcblxudmFyIHJlcGxhY2VMb2NhdGlvbiA9IGV4cG9ydHMucmVwbGFjZUxvY2F0aW9uID0gZnVuY3Rpb24gcmVwbGFjZUxvY2F0aW9uKGxvY2F0aW9uKSB7XG4gIHdpbmRvdy5sb2NhdGlvbi5yZXBsYWNlKCgwLCBfUGF0aFV0aWxzLmNyZWF0ZVBhdGgpKGxvY2F0aW9uKSk7XG4gIHJldHVybiBmYWxzZTsgLy8gRG9uJ3QgdXBkYXRlIGxvY2F0aW9uXG59OyIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcblxudmFyIF9pbnZhcmlhbnQgPSByZXF1aXJlKCdpbnZhcmlhbnQnKTtcblxudmFyIF9pbnZhcmlhbnQyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaW52YXJpYW50KTtcblxudmFyIF9FeGVjdXRpb25FbnZpcm9ubWVudCA9IHJlcXVpcmUoJy4vRXhlY3V0aW9uRW52aXJvbm1lbnQnKTtcblxudmFyIF9Ccm93c2VyUHJvdG9jb2wgPSByZXF1aXJlKCcuL0Jyb3dzZXJQcm90b2NvbCcpO1xuXG52YXIgQnJvd3NlclByb3RvY29sID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQoX0Jyb3dzZXJQcm90b2NvbCk7XG5cbnZhciBfUmVmcmVzaFByb3RvY29sID0gcmVxdWlyZSgnLi9SZWZyZXNoUHJvdG9jb2wnKTtcblxudmFyIFJlZnJlc2hQcm90b2NvbCA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKF9SZWZyZXNoUHJvdG9jb2wpO1xuXG52YXIgX0RPTVV0aWxzID0gcmVxdWlyZSgnLi9ET01VdGlscycpO1xuXG52YXIgX2NyZWF0ZUhpc3RvcnkgPSByZXF1aXJlKCcuL2NyZWF0ZUhpc3RvcnknKTtcblxudmFyIF9jcmVhdGVIaXN0b3J5MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NyZWF0ZUhpc3RvcnkpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChvYmopIHsgaWYgKG9iaiAmJiBvYmouX19lc01vZHVsZSkgeyByZXR1cm4gb2JqOyB9IGVsc2UgeyB2YXIgbmV3T2JqID0ge307IGlmIChvYmogIT0gbnVsbCkgeyBmb3IgKHZhciBrZXkgaW4gb2JqKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSBuZXdPYmpba2V5XSA9IG9ialtrZXldOyB9IH0gbmV3T2JqLmRlZmF1bHQgPSBvYmo7IHJldHVybiBuZXdPYmo7IH0gfVxuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG4vKipcbiAqIENyZWF0ZXMgYW5kIHJldHVybnMgYSBoaXN0b3J5IG9iamVjdCB0aGF0IHVzZXMgSFRNTDUncyBoaXN0b3J5IEFQSVxuICogKHB1c2hTdGF0ZSwgcmVwbGFjZVN0YXRlLCBhbmQgdGhlIHBvcHN0YXRlIGV2ZW50KSB0byBtYW5hZ2UgaGlzdG9yeS5cbiAqIFRoaXMgaXMgdGhlIHJlY29tbWVuZGVkIG1ldGhvZCBvZiBtYW5hZ2luZyBoaXN0b3J5IGluIGJyb3dzZXJzIGJlY2F1c2VcbiAqIGl0IHByb3ZpZGVzIHRoZSBjbGVhbmVzdCBVUkxzLlxuICpcbiAqIE5vdGU6IEluIGJyb3dzZXJzIHRoYXQgZG8gbm90IHN1cHBvcnQgdGhlIEhUTUw1IGhpc3RvcnkgQVBJIGZ1bGxcbiAqIHBhZ2UgcmVsb2FkcyB3aWxsIGJlIHVzZWQgdG8gcHJlc2VydmUgY2xlYW4gVVJMcy4gWW91IGNhbiBmb3JjZSB0aGlzXG4gKiBiZWhhdmlvciB1c2luZyB7IGZvcmNlUmVmcmVzaDogdHJ1ZSB9IGluIG9wdGlvbnMuXG4gKi9cbnZhciBjcmVhdGVCcm93c2VySGlzdG9yeSA9IGZ1bmN0aW9uIGNyZWF0ZUJyb3dzZXJIaXN0b3J5KCkge1xuICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMCB8fCBhcmd1bWVudHNbMF0gPT09IHVuZGVmaW5lZCA/IHt9IDogYXJndW1lbnRzWzBdO1xuXG4gICFfRXhlY3V0aW9uRW52aXJvbm1lbnQuY2FuVXNlRE9NID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/ICgwLCBfaW52YXJpYW50Mi5kZWZhdWx0KShmYWxzZSwgJ0Jyb3dzZXIgaGlzdG9yeSBuZWVkcyBhIERPTScpIDogKDAsIF9pbnZhcmlhbnQyLmRlZmF1bHQpKGZhbHNlKSA6IHZvaWQgMDtcblxuICB2YXIgdXNlUmVmcmVzaCA9IG9wdGlvbnMuZm9yY2VSZWZyZXNoIHx8ICEoMCwgX0RPTVV0aWxzLnN1cHBvcnRzSGlzdG9yeSkoKTtcbiAgdmFyIFByb3RvY29sID0gdXNlUmVmcmVzaCA/IFJlZnJlc2hQcm90b2NvbCA6IEJyb3dzZXJQcm90b2NvbDtcblxuICB2YXIgZ2V0VXNlckNvbmZpcm1hdGlvbiA9IFByb3RvY29sLmdldFVzZXJDb25maXJtYXRpb247XG4gIHZhciBnZXRDdXJyZW50TG9jYXRpb24gPSBQcm90b2NvbC5nZXRDdXJyZW50TG9jYXRpb247XG4gIHZhciBwdXNoTG9jYXRpb24gPSBQcm90b2NvbC5wdXNoTG9jYXRpb247XG4gIHZhciByZXBsYWNlTG9jYXRpb24gPSBQcm90b2NvbC5yZXBsYWNlTG9jYXRpb247XG4gIHZhciBnbyA9IFByb3RvY29sLmdvO1xuXG5cbiAgdmFyIGhpc3RvcnkgPSAoMCwgX2NyZWF0ZUhpc3RvcnkyLmRlZmF1bHQpKF9leHRlbmRzKHtcbiAgICBnZXRVc2VyQ29uZmlybWF0aW9uOiBnZXRVc2VyQ29uZmlybWF0aW9uIH0sIG9wdGlvbnMsIHtcbiAgICBnZXRDdXJyZW50TG9jYXRpb246IGdldEN1cnJlbnRMb2NhdGlvbixcbiAgICBwdXNoTG9jYXRpb246IHB1c2hMb2NhdGlvbixcbiAgICByZXBsYWNlTG9jYXRpb246IHJlcGxhY2VMb2NhdGlvbixcbiAgICBnbzogZ29cbiAgfSkpO1xuXG4gIHZhciBsaXN0ZW5lckNvdW50ID0gMCxcbiAgICAgIHN0b3BMaXN0ZW5lciA9IHZvaWQgMDtcblxuICB2YXIgc3RhcnRMaXN0ZW5lciA9IGZ1bmN0aW9uIHN0YXJ0TGlzdGVuZXIobGlzdGVuZXIsIGJlZm9yZSkge1xuICAgIGlmICgrK2xpc3RlbmVyQ291bnQgPT09IDEpIHN0b3BMaXN0ZW5lciA9IEJyb3dzZXJQcm90b2NvbC5zdGFydExpc3RlbmVyKGhpc3RvcnkudHJhbnNpdGlvblRvKTtcblxuICAgIHZhciB1bmxpc3RlbiA9IGJlZm9yZSA/IGhpc3RvcnkubGlzdGVuQmVmb3JlKGxpc3RlbmVyKSA6IGhpc3RvcnkubGlzdGVuKGxpc3RlbmVyKTtcblxuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICB1bmxpc3RlbigpO1xuXG4gICAgICBpZiAoLS1saXN0ZW5lckNvdW50ID09PSAwKSBzdG9wTGlzdGVuZXIoKTtcbiAgICB9O1xuICB9O1xuXG4gIHZhciBsaXN0ZW5CZWZvcmUgPSBmdW5jdGlvbiBsaXN0ZW5CZWZvcmUobGlzdGVuZXIpIHtcbiAgICByZXR1cm4gc3RhcnRMaXN0ZW5lcihsaXN0ZW5lciwgdHJ1ZSk7XG4gIH07XG5cbiAgdmFyIGxpc3RlbiA9IGZ1bmN0aW9uIGxpc3RlbihsaXN0ZW5lcikge1xuICAgIHJldHVybiBzdGFydExpc3RlbmVyKGxpc3RlbmVyLCBmYWxzZSk7XG4gIH07XG5cbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBoaXN0b3J5LCB7XG4gICAgbGlzdGVuQmVmb3JlOiBsaXN0ZW5CZWZvcmUsXG4gICAgbGlzdGVuOiBsaXN0ZW5cbiAgfSk7XG59O1xuXG5leHBvcnRzLmRlZmF1bHQgPSBjcmVhdGVCcm93c2VySGlzdG9yeTsiLCIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XG5cbnZhciBfd2FybmluZyA9IHJlcXVpcmUoJ3dhcm5pbmcnKTtcblxudmFyIF93YXJuaW5nMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3dhcm5pbmcpO1xuXG52YXIgX2ludmFyaWFudCA9IHJlcXVpcmUoJ2ludmFyaWFudCcpO1xuXG52YXIgX2ludmFyaWFudDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pbnZhcmlhbnQpO1xuXG52YXIgX0V4ZWN1dGlvbkVudmlyb25tZW50ID0gcmVxdWlyZSgnLi9FeGVjdXRpb25FbnZpcm9ubWVudCcpO1xuXG52YXIgX0RPTVV0aWxzID0gcmVxdWlyZSgnLi9ET01VdGlscycpO1xuXG52YXIgX0hhc2hQcm90b2NvbCA9IHJlcXVpcmUoJy4vSGFzaFByb3RvY29sJyk7XG5cbnZhciBIYXNoUHJvdG9jb2wgPSBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChfSGFzaFByb3RvY29sKTtcblxudmFyIF9jcmVhdGVIaXN0b3J5ID0gcmVxdWlyZSgnLi9jcmVhdGVIaXN0b3J5Jyk7XG5cbnZhciBfY3JlYXRlSGlzdG9yeTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jcmVhdGVIaXN0b3J5KTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQob2JqKSB7IGlmIChvYmogJiYgb2JqLl9fZXNNb2R1bGUpIHsgcmV0dXJuIG9iajsgfSBlbHNlIHsgdmFyIG5ld09iaiA9IHt9OyBpZiAob2JqICE9IG51bGwpIHsgZm9yICh2YXIga2V5IGluIG9iaikgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkgbmV3T2JqW2tleV0gPSBvYmpba2V5XTsgfSB9IG5ld09iai5kZWZhdWx0ID0gb2JqOyByZXR1cm4gbmV3T2JqOyB9IH1cblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxudmFyIERlZmF1bHRRdWVyeUtleSA9ICdfayc7XG5cbnZhciBjcmVhdGVIYXNoSGlzdG9yeSA9IGZ1bmN0aW9uIGNyZWF0ZUhhc2hIaXN0b3J5KCkge1xuICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMCB8fCBhcmd1bWVudHNbMF0gPT09IHVuZGVmaW5lZCA/IHt9IDogYXJndW1lbnRzWzBdO1xuXG4gICFfRXhlY3V0aW9uRW52aXJvbm1lbnQuY2FuVXNlRE9NID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/ICgwLCBfaW52YXJpYW50Mi5kZWZhdWx0KShmYWxzZSwgJ0hhc2ggaGlzdG9yeSBuZWVkcyBhIERPTScpIDogKDAsIF9pbnZhcmlhbnQyLmRlZmF1bHQpKGZhbHNlKSA6IHZvaWQgMDtcblxuICB2YXIgcXVlcnlLZXkgPSBvcHRpb25zLnF1ZXJ5S2V5O1xuXG5cbiAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/ICgwLCBfd2FybmluZzIuZGVmYXVsdCkocXVlcnlLZXkgIT09IGZhbHNlLCAnVXNpbmcgeyBxdWVyeUtleTogZmFsc2UgfSBubyBsb25nZXIgd29ya3MuIEluc3RlYWQsIGp1c3QgZG9uXFwndCAnICsgJ3VzZSBsb2NhdGlvbiBzdGF0ZSBpZiB5b3UgZG9uXFwndCB3YW50IGEga2V5IGluIHlvdXIgVVJMIHF1ZXJ5IHN0cmluZycpIDogdm9pZCAwO1xuXG4gIGlmICh0eXBlb2YgcXVlcnlLZXkgIT09ICdzdHJpbmcnKSBxdWVyeUtleSA9IERlZmF1bHRRdWVyeUtleTtcblxuICB2YXIgZ2V0VXNlckNvbmZpcm1hdGlvbiA9IEhhc2hQcm90b2NvbC5nZXRVc2VyQ29uZmlybWF0aW9uO1xuXG5cbiAgdmFyIGdldEN1cnJlbnRMb2NhdGlvbiA9IGZ1bmN0aW9uIGdldEN1cnJlbnRMb2NhdGlvbigpIHtcbiAgICByZXR1cm4gSGFzaFByb3RvY29sLmdldEN1cnJlbnRMb2NhdGlvbihxdWVyeUtleSk7XG4gIH07XG5cbiAgdmFyIHB1c2hMb2NhdGlvbiA9IGZ1bmN0aW9uIHB1c2hMb2NhdGlvbihsb2NhdGlvbikge1xuICAgIHJldHVybiBIYXNoUHJvdG9jb2wucHVzaExvY2F0aW9uKGxvY2F0aW9uLCBxdWVyeUtleSk7XG4gIH07XG5cbiAgdmFyIHJlcGxhY2VMb2NhdGlvbiA9IGZ1bmN0aW9uIHJlcGxhY2VMb2NhdGlvbihsb2NhdGlvbikge1xuICAgIHJldHVybiBIYXNoUHJvdG9jb2wucmVwbGFjZUxvY2F0aW9uKGxvY2F0aW9uLCBxdWVyeUtleSk7XG4gIH07XG5cbiAgdmFyIGhpc3RvcnkgPSAoMCwgX2NyZWF0ZUhpc3RvcnkyLmRlZmF1bHQpKF9leHRlbmRzKHtcbiAgICBnZXRVc2VyQ29uZmlybWF0aW9uOiBnZXRVc2VyQ29uZmlybWF0aW9uIH0sIG9wdGlvbnMsIHtcbiAgICBnZXRDdXJyZW50TG9jYXRpb246IGdldEN1cnJlbnRMb2NhdGlvbixcbiAgICBwdXNoTG9jYXRpb246IHB1c2hMb2NhdGlvbixcbiAgICByZXBsYWNlTG9jYXRpb246IHJlcGxhY2VMb2NhdGlvbixcbiAgICBnbzogSGFzaFByb3RvY29sLmdvXG4gIH0pKTtcblxuICB2YXIgbGlzdGVuZXJDb3VudCA9IDAsXG4gICAgICBzdG9wTGlzdGVuZXIgPSB2b2lkIDA7XG5cbiAgdmFyIHN0YXJ0TGlzdGVuZXIgPSBmdW5jdGlvbiBzdGFydExpc3RlbmVyKGxpc3RlbmVyLCBiZWZvcmUpIHtcbiAgICBpZiAoKytsaXN0ZW5lckNvdW50ID09PSAxKSBzdG9wTGlzdGVuZXIgPSBIYXNoUHJvdG9jb2wuc3RhcnRMaXN0ZW5lcihoaXN0b3J5LnRyYW5zaXRpb25UbywgcXVlcnlLZXkpO1xuXG4gICAgdmFyIHVubGlzdGVuID0gYmVmb3JlID8gaGlzdG9yeS5saXN0ZW5CZWZvcmUobGlzdGVuZXIpIDogaGlzdG9yeS5saXN0ZW4obGlzdGVuZXIpO1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHVubGlzdGVuKCk7XG5cbiAgICAgIGlmICgtLWxpc3RlbmVyQ291bnQgPT09IDApIHN0b3BMaXN0ZW5lcigpO1xuICAgIH07XG4gIH07XG5cbiAgdmFyIGxpc3RlbkJlZm9yZSA9IGZ1bmN0aW9uIGxpc3RlbkJlZm9yZShsaXN0ZW5lcikge1xuICAgIHJldHVybiBzdGFydExpc3RlbmVyKGxpc3RlbmVyLCB0cnVlKTtcbiAgfTtcblxuICB2YXIgbGlzdGVuID0gZnVuY3Rpb24gbGlzdGVuKGxpc3RlbmVyKSB7XG4gICAgcmV0dXJuIHN0YXJ0TGlzdGVuZXIobGlzdGVuZXIsIGZhbHNlKTtcbiAgfTtcblxuICB2YXIgZ29Jc1N1cHBvcnRlZFdpdGhvdXRSZWxvYWQgPSAoMCwgX0RPTVV0aWxzLnN1cHBvcnRzR29XaXRob3V0UmVsb2FkVXNpbmdIYXNoKSgpO1xuXG4gIHZhciBnbyA9IGZ1bmN0aW9uIGdvKG4pIHtcbiAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gKDAsIF93YXJuaW5nMi5kZWZhdWx0KShnb0lzU3VwcG9ydGVkV2l0aG91dFJlbG9hZCwgJ0hhc2ggaGlzdG9yeSBnbyhuKSBjYXVzZXMgYSBmdWxsIHBhZ2UgcmVsb2FkIGluIHRoaXMgYnJvd3NlcicpIDogdm9pZCAwO1xuXG4gICAgaGlzdG9yeS5nbyhuKTtcbiAgfTtcblxuICB2YXIgY3JlYXRlSHJlZiA9IGZ1bmN0aW9uIGNyZWF0ZUhyZWYocGF0aCkge1xuICAgIHJldHVybiAnIycgKyBoaXN0b3J5LmNyZWF0ZUhyZWYocGF0aCk7XG4gIH07XG5cbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBoaXN0b3J5LCB7XG4gICAgbGlzdGVuQmVmb3JlOiBsaXN0ZW5CZWZvcmUsXG4gICAgbGlzdGVuOiBsaXN0ZW4sXG4gICAgZ286IGdvLFxuICAgIGNyZWF0ZUhyZWY6IGNyZWF0ZUhyZWZcbiAgfSk7XG59O1xuXG5leHBvcnRzLmRlZmF1bHQgPSBjcmVhdGVIYXNoSGlzdG9yeTsiLCIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfQXN5bmNVdGlscyA9IHJlcXVpcmUoJy4vQXN5bmNVdGlscycpO1xuXG52YXIgX1BhdGhVdGlscyA9IHJlcXVpcmUoJy4vUGF0aFV0aWxzJyk7XG5cbnZhciBfcnVuVHJhbnNpdGlvbkhvb2sgPSByZXF1aXJlKCcuL3J1blRyYW5zaXRpb25Ib29rJyk7XG5cbnZhciBfcnVuVHJhbnNpdGlvbkhvb2syID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcnVuVHJhbnNpdGlvbkhvb2spO1xuXG52YXIgX0FjdGlvbnMgPSByZXF1aXJlKCcuL0FjdGlvbnMnKTtcblxudmFyIF9Mb2NhdGlvblV0aWxzID0gcmVxdWlyZSgnLi9Mb2NhdGlvblV0aWxzJyk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgeyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IEFycmF5KGFyci5sZW5ndGgpOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH0gZWxzZSB7IHJldHVybiBBcnJheS5mcm9tKGFycik7IH0gfVxuXG52YXIgY3JlYXRlSGlzdG9yeSA9IGZ1bmN0aW9uIGNyZWF0ZUhpc3RvcnkoKSB7XG4gIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA8PSAwIHx8IGFyZ3VtZW50c1swXSA9PT0gdW5kZWZpbmVkID8ge30gOiBhcmd1bWVudHNbMF07XG4gIHZhciBnZXRDdXJyZW50TG9jYXRpb24gPSBvcHRpb25zLmdldEN1cnJlbnRMb2NhdGlvbjtcbiAgdmFyIGdldFVzZXJDb25maXJtYXRpb24gPSBvcHRpb25zLmdldFVzZXJDb25maXJtYXRpb247XG4gIHZhciBwdXNoTG9jYXRpb24gPSBvcHRpb25zLnB1c2hMb2NhdGlvbjtcbiAgdmFyIHJlcGxhY2VMb2NhdGlvbiA9IG9wdGlvbnMucmVwbGFjZUxvY2F0aW9uO1xuICB2YXIgZ28gPSBvcHRpb25zLmdvO1xuICB2YXIga2V5TGVuZ3RoID0gb3B0aW9ucy5rZXlMZW5ndGg7XG5cblxuICB2YXIgY3VycmVudExvY2F0aW9uID0gdm9pZCAwO1xuICB2YXIgcGVuZGluZ0xvY2F0aW9uID0gdm9pZCAwO1xuICB2YXIgYmVmb3JlTGlzdGVuZXJzID0gW107XG4gIHZhciBsaXN0ZW5lcnMgPSBbXTtcbiAgdmFyIGFsbEtleXMgPSBbXTtcblxuICB2YXIgZ2V0Q3VycmVudEluZGV4ID0gZnVuY3Rpb24gZ2V0Q3VycmVudEluZGV4KCkge1xuICAgIGlmIChwZW5kaW5nTG9jYXRpb24gJiYgcGVuZGluZ0xvY2F0aW9uLmFjdGlvbiA9PT0gX0FjdGlvbnMuUE9QKSByZXR1cm4gYWxsS2V5cy5pbmRleE9mKHBlbmRpbmdMb2NhdGlvbi5rZXkpO1xuXG4gICAgaWYgKGN1cnJlbnRMb2NhdGlvbikgcmV0dXJuIGFsbEtleXMuaW5kZXhPZihjdXJyZW50TG9jYXRpb24ua2V5KTtcblxuICAgIHJldHVybiAtMTtcbiAgfTtcblxuICB2YXIgdXBkYXRlTG9jYXRpb24gPSBmdW5jdGlvbiB1cGRhdGVMb2NhdGlvbihuZXh0TG9jYXRpb24pIHtcbiAgICBjdXJyZW50TG9jYXRpb24gPSBuZXh0TG9jYXRpb247XG5cbiAgICB2YXIgY3VycmVudEluZGV4ID0gZ2V0Q3VycmVudEluZGV4KCk7XG5cbiAgICBpZiAoY3VycmVudExvY2F0aW9uLmFjdGlvbiA9PT0gX0FjdGlvbnMuUFVTSCkge1xuICAgICAgYWxsS2V5cyA9IFtdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkoYWxsS2V5cy5zbGljZSgwLCBjdXJyZW50SW5kZXggKyAxKSksIFtjdXJyZW50TG9jYXRpb24ua2V5XSk7XG4gICAgfSBlbHNlIGlmIChjdXJyZW50TG9jYXRpb24uYWN0aW9uID09PSBfQWN0aW9ucy5SRVBMQUNFKSB7XG4gICAgICBhbGxLZXlzW2N1cnJlbnRJbmRleF0gPSBjdXJyZW50TG9jYXRpb24ua2V5O1xuICAgIH1cblxuICAgIGxpc3RlbmVycy5mb3JFYWNoKGZ1bmN0aW9uIChsaXN0ZW5lcikge1xuICAgICAgcmV0dXJuIGxpc3RlbmVyKGN1cnJlbnRMb2NhdGlvbik7XG4gICAgfSk7XG4gIH07XG5cbiAgdmFyIGxpc3RlbkJlZm9yZSA9IGZ1bmN0aW9uIGxpc3RlbkJlZm9yZShsaXN0ZW5lcikge1xuICAgIGJlZm9yZUxpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcblxuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gYmVmb3JlTGlzdGVuZXJzID0gYmVmb3JlTGlzdGVuZXJzLmZpbHRlcihmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICByZXR1cm4gaXRlbSAhPT0gbGlzdGVuZXI7XG4gICAgICB9KTtcbiAgICB9O1xuICB9O1xuXG4gIHZhciBsaXN0ZW4gPSBmdW5jdGlvbiBsaXN0ZW4obGlzdGVuZXIpIHtcbiAgICBsaXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGxpc3RlbmVycyA9IGxpc3RlbmVycy5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0gIT09IGxpc3RlbmVyO1xuICAgICAgfSk7XG4gICAgfTtcbiAgfTtcblxuICB2YXIgY29uZmlybVRyYW5zaXRpb25UbyA9IGZ1bmN0aW9uIGNvbmZpcm1UcmFuc2l0aW9uVG8obG9jYXRpb24sIGNhbGxiYWNrKSB7XG4gICAgKDAsIF9Bc3luY1V0aWxzLmxvb3BBc3luYykoYmVmb3JlTGlzdGVuZXJzLmxlbmd0aCwgZnVuY3Rpb24gKGluZGV4LCBuZXh0LCBkb25lKSB7XG4gICAgICAoMCwgX3J1blRyYW5zaXRpb25Ib29rMi5kZWZhdWx0KShiZWZvcmVMaXN0ZW5lcnNbaW5kZXhdLCBsb2NhdGlvbiwgZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICByZXR1cm4gcmVzdWx0ICE9IG51bGwgPyBkb25lKHJlc3VsdCkgOiBuZXh0KCk7XG4gICAgICB9KTtcbiAgICB9LCBmdW5jdGlvbiAobWVzc2FnZSkge1xuICAgICAgaWYgKGdldFVzZXJDb25maXJtYXRpb24gJiYgdHlwZW9mIG1lc3NhZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGdldFVzZXJDb25maXJtYXRpb24obWVzc2FnZSwgZnVuY3Rpb24gKG9rKSB7XG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG9rICE9PSBmYWxzZSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FsbGJhY2sobWVzc2FnZSAhPT0gZmFsc2UpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIHZhciB0cmFuc2l0aW9uVG8gPSBmdW5jdGlvbiB0cmFuc2l0aW9uVG8obmV4dExvY2F0aW9uKSB7XG4gICAgaWYgKGN1cnJlbnRMb2NhdGlvbiAmJiAoMCwgX0xvY2F0aW9uVXRpbHMubG9jYXRpb25zQXJlRXF1YWwpKGN1cnJlbnRMb2NhdGlvbiwgbmV4dExvY2F0aW9uKSB8fCBwZW5kaW5nTG9jYXRpb24gJiYgKDAsIF9Mb2NhdGlvblV0aWxzLmxvY2F0aW9uc0FyZUVxdWFsKShwZW5kaW5nTG9jYXRpb24sIG5leHRMb2NhdGlvbikpIHJldHVybjsgLy8gTm90aGluZyB0byBkb1xuXG4gICAgcGVuZGluZ0xvY2F0aW9uID0gbmV4dExvY2F0aW9uO1xuXG4gICAgY29uZmlybVRyYW5zaXRpb25UbyhuZXh0TG9jYXRpb24sIGZ1bmN0aW9uIChvaykge1xuICAgICAgaWYgKHBlbmRpbmdMb2NhdGlvbiAhPT0gbmV4dExvY2F0aW9uKSByZXR1cm47IC8vIFRyYW5zaXRpb24gd2FzIGludGVycnVwdGVkIGR1cmluZyBjb25maXJtYXRpb25cblxuICAgICAgcGVuZGluZ0xvY2F0aW9uID0gbnVsbDtcblxuICAgICAgaWYgKG9rKSB7XG4gICAgICAgIC8vIFRyZWF0IFBVU0ggdG8gc2FtZSBwYXRoIGxpa2UgUkVQTEFDRSB0byBiZSBjb25zaXN0ZW50IHdpdGggYnJvd3NlcnNcbiAgICAgICAgaWYgKG5leHRMb2NhdGlvbi5hY3Rpb24gPT09IF9BY3Rpb25zLlBVU0gpIHtcbiAgICAgICAgICB2YXIgcHJldlBhdGggPSAoMCwgX1BhdGhVdGlscy5jcmVhdGVQYXRoKShjdXJyZW50TG9jYXRpb24pO1xuICAgICAgICAgIHZhciBuZXh0UGF0aCA9ICgwLCBfUGF0aFV0aWxzLmNyZWF0ZVBhdGgpKG5leHRMb2NhdGlvbik7XG5cbiAgICAgICAgICBpZiAobmV4dFBhdGggPT09IHByZXZQYXRoICYmICgwLCBfTG9jYXRpb25VdGlscy5zdGF0ZXNBcmVFcXVhbCkoY3VycmVudExvY2F0aW9uLnN0YXRlLCBuZXh0TG9jYXRpb24uc3RhdGUpKSBuZXh0TG9jYXRpb24uYWN0aW9uID0gX0FjdGlvbnMuUkVQTEFDRTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuZXh0TG9jYXRpb24uYWN0aW9uID09PSBfQWN0aW9ucy5QT1ApIHtcbiAgICAgICAgICB1cGRhdGVMb2NhdGlvbihuZXh0TG9jYXRpb24pO1xuICAgICAgICB9IGVsc2UgaWYgKG5leHRMb2NhdGlvbi5hY3Rpb24gPT09IF9BY3Rpb25zLlBVU0gpIHtcbiAgICAgICAgICBpZiAocHVzaExvY2F0aW9uKG5leHRMb2NhdGlvbikgIT09IGZhbHNlKSB1cGRhdGVMb2NhdGlvbihuZXh0TG9jYXRpb24pO1xuICAgICAgICB9IGVsc2UgaWYgKG5leHRMb2NhdGlvbi5hY3Rpb24gPT09IF9BY3Rpb25zLlJFUExBQ0UpIHtcbiAgICAgICAgICBpZiAocmVwbGFjZUxvY2F0aW9uKG5leHRMb2NhdGlvbikgIT09IGZhbHNlKSB1cGRhdGVMb2NhdGlvbihuZXh0TG9jYXRpb24pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGN1cnJlbnRMb2NhdGlvbiAmJiBuZXh0TG9jYXRpb24uYWN0aW9uID09PSBfQWN0aW9ucy5QT1ApIHtcbiAgICAgICAgdmFyIHByZXZJbmRleCA9IGFsbEtleXMuaW5kZXhPZihjdXJyZW50TG9jYXRpb24ua2V5KTtcbiAgICAgICAgdmFyIG5leHRJbmRleCA9IGFsbEtleXMuaW5kZXhPZihuZXh0TG9jYXRpb24ua2V5KTtcblxuICAgICAgICBpZiAocHJldkluZGV4ICE9PSAtMSAmJiBuZXh0SW5kZXggIT09IC0xKSBnbyhwcmV2SW5kZXggLSBuZXh0SW5kZXgpOyAvLyBSZXN0b3JlIHRoZSBVUkxcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICB2YXIgcHVzaCA9IGZ1bmN0aW9uIHB1c2goaW5wdXQpIHtcbiAgICByZXR1cm4gdHJhbnNpdGlvblRvKGNyZWF0ZUxvY2F0aW9uKGlucHV0LCBfQWN0aW9ucy5QVVNIKSk7XG4gIH07XG5cbiAgdmFyIHJlcGxhY2UgPSBmdW5jdGlvbiByZXBsYWNlKGlucHV0KSB7XG4gICAgcmV0dXJuIHRyYW5zaXRpb25UbyhjcmVhdGVMb2NhdGlvbihpbnB1dCwgX0FjdGlvbnMuUkVQTEFDRSkpO1xuICB9O1xuXG4gIHZhciBnb0JhY2sgPSBmdW5jdGlvbiBnb0JhY2soKSB7XG4gICAgcmV0dXJuIGdvKC0xKTtcbiAgfTtcblxuICB2YXIgZ29Gb3J3YXJkID0gZnVuY3Rpb24gZ29Gb3J3YXJkKCkge1xuICAgIHJldHVybiBnbygxKTtcbiAgfTtcblxuICB2YXIgY3JlYXRlS2V5ID0gZnVuY3Rpb24gY3JlYXRlS2V5KCkge1xuICAgIHJldHVybiBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHIoMiwga2V5TGVuZ3RoIHx8IDYpO1xuICB9O1xuXG4gIHZhciBjcmVhdGVIcmVmID0gZnVuY3Rpb24gY3JlYXRlSHJlZihsb2NhdGlvbikge1xuICAgIHJldHVybiAoMCwgX1BhdGhVdGlscy5jcmVhdGVQYXRoKShsb2NhdGlvbik7XG4gIH07XG5cbiAgdmFyIGNyZWF0ZUxvY2F0aW9uID0gZnVuY3Rpb24gY3JlYXRlTG9jYXRpb24obG9jYXRpb24sIGFjdGlvbikge1xuICAgIHZhciBrZXkgPSBhcmd1bWVudHMubGVuZ3RoIDw9IDIgfHwgYXJndW1lbnRzWzJdID09PSB1bmRlZmluZWQgPyBjcmVhdGVLZXkoKSA6IGFyZ3VtZW50c1syXTtcbiAgICByZXR1cm4gKDAsIF9Mb2NhdGlvblV0aWxzLmNyZWF0ZUxvY2F0aW9uKShsb2NhdGlvbiwgYWN0aW9uLCBrZXkpO1xuICB9O1xuXG4gIHJldHVybiB7XG4gICAgZ2V0Q3VycmVudExvY2F0aW9uOiBnZXRDdXJyZW50TG9jYXRpb24sXG4gICAgbGlzdGVuQmVmb3JlOiBsaXN0ZW5CZWZvcmUsXG4gICAgbGlzdGVuOiBsaXN0ZW4sXG4gICAgdHJhbnNpdGlvblRvOiB0cmFuc2l0aW9uVG8sXG4gICAgcHVzaDogcHVzaCxcbiAgICByZXBsYWNlOiByZXBsYWNlLFxuICAgIGdvOiBnbyxcbiAgICBnb0JhY2s6IGdvQmFjayxcbiAgICBnb0ZvcndhcmQ6IGdvRm9yd2FyZCxcbiAgICBjcmVhdGVLZXk6IGNyZWF0ZUtleSxcbiAgICBjcmVhdGVQYXRoOiBfUGF0aFV0aWxzLmNyZWF0ZVBhdGgsXG4gICAgY3JlYXRlSHJlZjogY3JlYXRlSHJlZixcbiAgICBjcmVhdGVMb2NhdGlvbjogY3JlYXRlTG9jYXRpb25cbiAgfTtcbn07XG5cbmV4cG9ydHMuZGVmYXVsdCA9IGNyZWF0ZUhpc3Rvcnk7IiwiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xuXG52YXIgX3dhcm5pbmcgPSByZXF1aXJlKCd3YXJuaW5nJyk7XG5cbnZhciBfd2FybmluZzIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF93YXJuaW5nKTtcblxudmFyIF9pbnZhcmlhbnQgPSByZXF1aXJlKCdpbnZhcmlhbnQnKTtcblxudmFyIF9pbnZhcmlhbnQyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaW52YXJpYW50KTtcblxudmFyIF9Mb2NhdGlvblV0aWxzID0gcmVxdWlyZSgnLi9Mb2NhdGlvblV0aWxzJyk7XG5cbnZhciBfUGF0aFV0aWxzID0gcmVxdWlyZSgnLi9QYXRoVXRpbHMnKTtcblxudmFyIF9jcmVhdGVIaXN0b3J5ID0gcmVxdWlyZSgnLi9jcmVhdGVIaXN0b3J5Jyk7XG5cbnZhciBfY3JlYXRlSGlzdG9yeTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jcmVhdGVIaXN0b3J5KTtcblxudmFyIF9BY3Rpb25zID0gcmVxdWlyZSgnLi9BY3Rpb25zJyk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbnZhciBjcmVhdGVTdGF0ZVN0b3JhZ2UgPSBmdW5jdGlvbiBjcmVhdGVTdGF0ZVN0b3JhZ2UoZW50cmllcykge1xuICByZXR1cm4gZW50cmllcy5maWx0ZXIoZnVuY3Rpb24gKGVudHJ5KSB7XG4gICAgcmV0dXJuIGVudHJ5LnN0YXRlO1xuICB9KS5yZWR1Y2UoZnVuY3Rpb24gKG1lbW8sIGVudHJ5KSB7XG4gICAgbWVtb1tlbnRyeS5rZXldID0gZW50cnkuc3RhdGU7XG4gICAgcmV0dXJuIG1lbW87XG4gIH0sIHt9KTtcbn07XG5cbnZhciBjcmVhdGVNZW1vcnlIaXN0b3J5ID0gZnVuY3Rpb24gY3JlYXRlTWVtb3J5SGlzdG9yeSgpIHtcbiAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoIDw9IDAgfHwgYXJndW1lbnRzWzBdID09PSB1bmRlZmluZWQgPyB7fSA6IGFyZ3VtZW50c1swXTtcblxuICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25zKSkge1xuICAgIG9wdGlvbnMgPSB7IGVudHJpZXM6IG9wdGlvbnMgfTtcbiAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ3N0cmluZycpIHtcbiAgICBvcHRpb25zID0geyBlbnRyaWVzOiBbb3B0aW9uc10gfTtcbiAgfVxuXG4gIHZhciBnZXRDdXJyZW50TG9jYXRpb24gPSBmdW5jdGlvbiBnZXRDdXJyZW50TG9jYXRpb24oKSB7XG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tjdXJyZW50XTtcbiAgICB2YXIgcGF0aCA9ICgwLCBfUGF0aFV0aWxzLmNyZWF0ZVBhdGgpKGVudHJ5KTtcblxuICAgIHZhciBrZXkgPSB2b2lkIDAsXG4gICAgICAgIHN0YXRlID0gdm9pZCAwO1xuICAgIGlmIChlbnRyeS5rZXkpIHtcbiAgICAgIGtleSA9IGVudHJ5LmtleTtcbiAgICAgIHN0YXRlID0gcmVhZFN0YXRlKGtleSk7XG4gICAgfVxuXG4gICAgdmFyIGluaXQgPSAoMCwgX1BhdGhVdGlscy5wYXJzZVBhdGgpKHBhdGgpO1xuXG4gICAgcmV0dXJuICgwLCBfTG9jYXRpb25VdGlscy5jcmVhdGVMb2NhdGlvbikoX2V4dGVuZHMoe30sIGluaXQsIHsgc3RhdGU6IHN0YXRlIH0pLCB1bmRlZmluZWQsIGtleSk7XG4gIH07XG5cbiAgdmFyIGNhbkdvID0gZnVuY3Rpb24gY2FuR28obikge1xuICAgIHZhciBpbmRleCA9IGN1cnJlbnQgKyBuO1xuICAgIHJldHVybiBpbmRleCA+PSAwICYmIGluZGV4IDwgZW50cmllcy5sZW5ndGg7XG4gIH07XG5cbiAgdmFyIGdvID0gZnVuY3Rpb24gZ28obikge1xuICAgIGlmICghbikgcmV0dXJuO1xuXG4gICAgaWYgKCFjYW5HbyhuKSkge1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/ICgwLCBfd2FybmluZzIuZGVmYXVsdCkoZmFsc2UsICdDYW5ub3QgZ28oJXMpIHRoZXJlIGlzIG5vdCBlbm91Z2ggaGlzdG9yeScsIG4pIDogdm9pZCAwO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY3VycmVudCArPSBuO1xuICAgIHZhciBjdXJyZW50TG9jYXRpb24gPSBnZXRDdXJyZW50TG9jYXRpb24oKTtcblxuICAgIC8vIENoYW5nZSBhY3Rpb24gdG8gUE9QXG4gICAgaGlzdG9yeS50cmFuc2l0aW9uVG8oX2V4dGVuZHMoe30sIGN1cnJlbnRMb2NhdGlvbiwgeyBhY3Rpb246IF9BY3Rpb25zLlBPUCB9KSk7XG4gIH07XG5cbiAgdmFyIHB1c2hMb2NhdGlvbiA9IGZ1bmN0aW9uIHB1c2hMb2NhdGlvbihsb2NhdGlvbikge1xuICAgIGN1cnJlbnQgKz0gMTtcblxuICAgIGlmIChjdXJyZW50IDwgZW50cmllcy5sZW5ndGgpIGVudHJpZXMuc3BsaWNlKGN1cnJlbnQpO1xuXG4gICAgZW50cmllcy5wdXNoKGxvY2F0aW9uKTtcblxuICAgIHNhdmVTdGF0ZShsb2NhdGlvbi5rZXksIGxvY2F0aW9uLnN0YXRlKTtcbiAgfTtcblxuICB2YXIgcmVwbGFjZUxvY2F0aW9uID0gZnVuY3Rpb24gcmVwbGFjZUxvY2F0aW9uKGxvY2F0aW9uKSB7XG4gICAgZW50cmllc1tjdXJyZW50XSA9IGxvY2F0aW9uO1xuICAgIHNhdmVTdGF0ZShsb2NhdGlvbi5rZXksIGxvY2F0aW9uLnN0YXRlKTtcbiAgfTtcblxuICB2YXIgaGlzdG9yeSA9ICgwLCBfY3JlYXRlSGlzdG9yeTIuZGVmYXVsdCkoX2V4dGVuZHMoe30sIG9wdGlvbnMsIHtcbiAgICBnZXRDdXJyZW50TG9jYXRpb246IGdldEN1cnJlbnRMb2NhdGlvbixcbiAgICBwdXNoTG9jYXRpb246IHB1c2hMb2NhdGlvbixcbiAgICByZXBsYWNlTG9jYXRpb246IHJlcGxhY2VMb2NhdGlvbixcbiAgICBnbzogZ29cbiAgfSkpO1xuXG4gIHZhciBfb3B0aW9ucyA9IG9wdGlvbnM7XG4gIHZhciBlbnRyaWVzID0gX29wdGlvbnMuZW50cmllcztcbiAgdmFyIGN1cnJlbnQgPSBfb3B0aW9ucy5jdXJyZW50O1xuXG5cbiAgaWYgKHR5cGVvZiBlbnRyaWVzID09PSAnc3RyaW5nJykge1xuICAgIGVudHJpZXMgPSBbZW50cmllc107XG4gIH0gZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkoZW50cmllcykpIHtcbiAgICBlbnRyaWVzID0gWycvJ107XG4gIH1cblxuICBlbnRyaWVzID0gZW50cmllcy5tYXAoZnVuY3Rpb24gKGVudHJ5KSB7XG4gICAgcmV0dXJuICgwLCBfTG9jYXRpb25VdGlscy5jcmVhdGVMb2NhdGlvbikoZW50cnkpO1xuICB9KTtcblxuICBpZiAoY3VycmVudCA9PSBudWxsKSB7XG4gICAgY3VycmVudCA9IGVudHJpZXMubGVuZ3RoIC0gMTtcbiAgfSBlbHNlIHtcbiAgICAhKGN1cnJlbnQgPj0gMCAmJiBjdXJyZW50IDwgZW50cmllcy5sZW5ndGgpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/ICgwLCBfaW52YXJpYW50Mi5kZWZhdWx0KShmYWxzZSwgJ0N1cnJlbnQgaW5kZXggbXVzdCBiZSA+PSAwIGFuZCA8ICVzLCB3YXMgJXMnLCBlbnRyaWVzLmxlbmd0aCwgY3VycmVudCkgOiAoMCwgX2ludmFyaWFudDIuZGVmYXVsdCkoZmFsc2UpIDogdm9pZCAwO1xuICB9XG5cbiAgdmFyIHN0b3JhZ2UgPSBjcmVhdGVTdGF0ZVN0b3JhZ2UoZW50cmllcyk7XG5cbiAgdmFyIHNhdmVTdGF0ZSA9IGZ1bmN0aW9uIHNhdmVTdGF0ZShrZXksIHN0YXRlKSB7XG4gICAgcmV0dXJuIHN0b3JhZ2Vba2V5XSA9IHN0YXRlO1xuICB9O1xuXG4gIHZhciByZWFkU3RhdGUgPSBmdW5jdGlvbiByZWFkU3RhdGUoa2V5KSB7XG4gICAgcmV0dXJuIHN0b3JhZ2Vba2V5XTtcbiAgfTtcblxuICByZXR1cm4gaGlzdG9yeTtcbn07XG5cbmV4cG9ydHMuZGVmYXVsdCA9IGNyZWF0ZU1lbW9yeUhpc3Rvcnk7IiwiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5sb2NhdGlvbnNBcmVFcXVhbCA9IGV4cG9ydHMuQWN0aW9ucyA9IGV4cG9ydHMudXNlUXVlcmllcyA9IGV4cG9ydHMudXNlQmVmb3JlVW5sb2FkID0gZXhwb3J0cy51c2VCYXNlbmFtZSA9IGV4cG9ydHMuY3JlYXRlTWVtb3J5SGlzdG9yeSA9IGV4cG9ydHMuY3JlYXRlSGFzaEhpc3RvcnkgPSBleHBvcnRzLmNyZWF0ZUhpc3RvcnkgPSB1bmRlZmluZWQ7XG5cbnZhciBfTG9jYXRpb25VdGlscyA9IHJlcXVpcmUoJy4vTG9jYXRpb25VdGlscycpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ2xvY2F0aW9uc0FyZUVxdWFsJywge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX0xvY2F0aW9uVXRpbHMubG9jYXRpb25zQXJlRXF1YWw7XG4gIH1cbn0pO1xuXG52YXIgX2NyZWF0ZUJyb3dzZXJIaXN0b3J5ID0gcmVxdWlyZSgnLi9jcmVhdGVCcm93c2VySGlzdG9yeScpO1xuXG52YXIgX2NyZWF0ZUJyb3dzZXJIaXN0b3J5MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NyZWF0ZUJyb3dzZXJIaXN0b3J5KTtcblxudmFyIF9jcmVhdGVIYXNoSGlzdG9yeTIgPSByZXF1aXJlKCcuL2NyZWF0ZUhhc2hIaXN0b3J5Jyk7XG5cbnZhciBfY3JlYXRlSGFzaEhpc3RvcnkzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY3JlYXRlSGFzaEhpc3RvcnkyKTtcblxudmFyIF9jcmVhdGVNZW1vcnlIaXN0b3J5MiA9IHJlcXVpcmUoJy4vY3JlYXRlTWVtb3J5SGlzdG9yeScpO1xuXG52YXIgX2NyZWF0ZU1lbW9yeUhpc3RvcnkzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY3JlYXRlTWVtb3J5SGlzdG9yeTIpO1xuXG52YXIgX3VzZUJhc2VuYW1lMiA9IHJlcXVpcmUoJy4vdXNlQmFzZW5hbWUnKTtcblxudmFyIF91c2VCYXNlbmFtZTMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF91c2VCYXNlbmFtZTIpO1xuXG52YXIgX3VzZUJlZm9yZVVubG9hZDIgPSByZXF1aXJlKCcuL3VzZUJlZm9yZVVubG9hZCcpO1xuXG52YXIgX3VzZUJlZm9yZVVubG9hZDMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF91c2VCZWZvcmVVbmxvYWQyKTtcblxudmFyIF91c2VRdWVyaWVzMiA9IHJlcXVpcmUoJy4vdXNlUXVlcmllcycpO1xuXG52YXIgX3VzZVF1ZXJpZXMzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfdXNlUXVlcmllczIpO1xuXG52YXIgX0FjdGlvbnMyID0gcmVxdWlyZSgnLi9BY3Rpb25zJyk7XG5cbnZhciBfQWN0aW9uczMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9BY3Rpb25zMik7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmV4cG9ydHMuY3JlYXRlSGlzdG9yeSA9IF9jcmVhdGVCcm93c2VySGlzdG9yeTIuZGVmYXVsdDtcbmV4cG9ydHMuY3JlYXRlSGFzaEhpc3RvcnkgPSBfY3JlYXRlSGFzaEhpc3RvcnkzLmRlZmF1bHQ7XG5leHBvcnRzLmNyZWF0ZU1lbW9yeUhpc3RvcnkgPSBfY3JlYXRlTWVtb3J5SGlzdG9yeTMuZGVmYXVsdDtcbmV4cG9ydHMudXNlQmFzZW5hbWUgPSBfdXNlQmFzZW5hbWUzLmRlZmF1bHQ7XG5leHBvcnRzLnVzZUJlZm9yZVVubG9hZCA9IF91c2VCZWZvcmVVbmxvYWQzLmRlZmF1bHQ7XG5leHBvcnRzLnVzZVF1ZXJpZXMgPSBfdXNlUXVlcmllczMuZGVmYXVsdDtcbmV4cG9ydHMuQWN0aW9ucyA9IF9BY3Rpb25zMy5kZWZhdWx0OyIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF93YXJuaW5nID0gcmVxdWlyZSgnd2FybmluZycpO1xuXG52YXIgX3dhcm5pbmcyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfd2FybmluZyk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbnZhciBydW5UcmFuc2l0aW9uSG9vayA9IGZ1bmN0aW9uIHJ1blRyYW5zaXRpb25Ib29rKGhvb2ssIGxvY2F0aW9uLCBjYWxsYmFjaykge1xuICB2YXIgcmVzdWx0ID0gaG9vayhsb2NhdGlvbiwgY2FsbGJhY2spO1xuXG4gIGlmIChob29rLmxlbmd0aCA8IDIpIHtcbiAgICAvLyBBc3N1bWUgdGhlIGhvb2sgcnVucyBzeW5jaHJvbm91c2x5IGFuZCBhdXRvbWF0aWNhbGx5XG4gICAgLy8gY2FsbCB0aGUgY2FsbGJhY2sgd2l0aCB0aGUgcmV0dXJuIHZhbHVlLlxuICAgIGNhbGxiYWNrKHJlc3VsdCk7XG4gIH0gZWxzZSB7XG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/ICgwLCBfd2FybmluZzIuZGVmYXVsdCkocmVzdWx0ID09PSB1bmRlZmluZWQsICdZb3Ugc2hvdWxkIG5vdCBcInJldHVyblwiIGluIGEgdHJhbnNpdGlvbiBob29rIHdpdGggYSBjYWxsYmFjayBhcmd1bWVudDsgJyArICdjYWxsIHRoZSBjYWxsYmFjayBpbnN0ZWFkJykgOiB2b2lkIDA7XG4gIH1cbn07XG5cbmV4cG9ydHMuZGVmYXVsdCA9IHJ1blRyYW5zaXRpb25Ib29rOyIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcblxudmFyIF9ydW5UcmFuc2l0aW9uSG9vayA9IHJlcXVpcmUoJy4vcnVuVHJhbnNpdGlvbkhvb2snKTtcblxudmFyIF9ydW5UcmFuc2l0aW9uSG9vazIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9ydW5UcmFuc2l0aW9uSG9vayk7XG5cbnZhciBfUGF0aFV0aWxzID0gcmVxdWlyZSgnLi9QYXRoVXRpbHMnKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxudmFyIHVzZUJhc2VuYW1lID0gZnVuY3Rpb24gdXNlQmFzZW5hbWUoY3JlYXRlSGlzdG9yeSkge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA8PSAwIHx8IGFyZ3VtZW50c1swXSA9PT0gdW5kZWZpbmVkID8ge30gOiBhcmd1bWVudHNbMF07XG5cbiAgICB2YXIgaGlzdG9yeSA9IGNyZWF0ZUhpc3Rvcnkob3B0aW9ucyk7XG4gICAgdmFyIGJhc2VuYW1lID0gb3B0aW9ucy5iYXNlbmFtZTtcblxuXG4gICAgdmFyIGFkZEJhc2VuYW1lID0gZnVuY3Rpb24gYWRkQmFzZW5hbWUobG9jYXRpb24pIHtcbiAgICAgIGlmICghbG9jYXRpb24pIHJldHVybiBsb2NhdGlvbjtcblxuICAgICAgaWYgKGJhc2VuYW1lICYmIGxvY2F0aW9uLmJhc2VuYW1lID09IG51bGwpIHtcbiAgICAgICAgaWYgKGxvY2F0aW9uLnBhdGhuYW1lLmluZGV4T2YoYmFzZW5hbWUpID09PSAwKSB7XG4gICAgICAgICAgbG9jYXRpb24ucGF0aG5hbWUgPSBsb2NhdGlvbi5wYXRobmFtZS5zdWJzdHJpbmcoYmFzZW5hbWUubGVuZ3RoKTtcbiAgICAgICAgICBsb2NhdGlvbi5iYXNlbmFtZSA9IGJhc2VuYW1lO1xuXG4gICAgICAgICAgaWYgKGxvY2F0aW9uLnBhdGhuYW1lID09PSAnJykgbG9jYXRpb24ucGF0aG5hbWUgPSAnLyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbG9jYXRpb24uYmFzZW5hbWUgPSAnJztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbG9jYXRpb247XG4gICAgfTtcblxuICAgIHZhciBwcmVwZW5kQmFzZW5hbWUgPSBmdW5jdGlvbiBwcmVwZW5kQmFzZW5hbWUobG9jYXRpb24pIHtcbiAgICAgIGlmICghYmFzZW5hbWUpIHJldHVybiBsb2NhdGlvbjtcblxuICAgICAgdmFyIG9iamVjdCA9IHR5cGVvZiBsb2NhdGlvbiA9PT0gJ3N0cmluZycgPyAoMCwgX1BhdGhVdGlscy5wYXJzZVBhdGgpKGxvY2F0aW9uKSA6IGxvY2F0aW9uO1xuICAgICAgdmFyIHBuYW1lID0gb2JqZWN0LnBhdGhuYW1lO1xuICAgICAgdmFyIG5vcm1hbGl6ZWRCYXNlbmFtZSA9IGJhc2VuYW1lLnNsaWNlKC0xKSA9PT0gJy8nID8gYmFzZW5hbWUgOiBiYXNlbmFtZSArICcvJztcbiAgICAgIHZhciBub3JtYWxpemVkUGF0aG5hbWUgPSBwbmFtZS5jaGFyQXQoMCkgPT09ICcvJyA/IHBuYW1lLnNsaWNlKDEpIDogcG5hbWU7XG4gICAgICB2YXIgcGF0aG5hbWUgPSBub3JtYWxpemVkQmFzZW5hbWUgKyBub3JtYWxpemVkUGF0aG5hbWU7XG5cbiAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgbG9jYXRpb24sIHtcbiAgICAgICAgcGF0aG5hbWU6IHBhdGhuYW1lXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgLy8gT3ZlcnJpZGUgYWxsIHJlYWQgbWV0aG9kcyB3aXRoIGJhc2VuYW1lLWF3YXJlIHZlcnNpb25zLlxuICAgIHZhciBnZXRDdXJyZW50TG9jYXRpb24gPSBmdW5jdGlvbiBnZXRDdXJyZW50TG9jYXRpb24oKSB7XG4gICAgICByZXR1cm4gYWRkQmFzZW5hbWUoaGlzdG9yeS5nZXRDdXJyZW50TG9jYXRpb24oKSk7XG4gICAgfTtcblxuICAgIHZhciBsaXN0ZW5CZWZvcmUgPSBmdW5jdGlvbiBsaXN0ZW5CZWZvcmUoaG9vaykge1xuICAgICAgcmV0dXJuIGhpc3RvcnkubGlzdGVuQmVmb3JlKGZ1bmN0aW9uIChsb2NhdGlvbiwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuICgwLCBfcnVuVHJhbnNpdGlvbkhvb2syLmRlZmF1bHQpKGhvb2ssIGFkZEJhc2VuYW1lKGxvY2F0aW9uKSwgY2FsbGJhY2spO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHZhciBsaXN0ZW4gPSBmdW5jdGlvbiBsaXN0ZW4obGlzdGVuZXIpIHtcbiAgICAgIHJldHVybiBoaXN0b3J5Lmxpc3RlbihmdW5jdGlvbiAobG9jYXRpb24pIHtcbiAgICAgICAgcmV0dXJuIGxpc3RlbmVyKGFkZEJhc2VuYW1lKGxvY2F0aW9uKSk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgLy8gT3ZlcnJpZGUgYWxsIHdyaXRlIG1ldGhvZHMgd2l0aCBiYXNlbmFtZS1hd2FyZSB2ZXJzaW9ucy5cbiAgICB2YXIgcHVzaCA9IGZ1bmN0aW9uIHB1c2gobG9jYXRpb24pIHtcbiAgICAgIHJldHVybiBoaXN0b3J5LnB1c2gocHJlcGVuZEJhc2VuYW1lKGxvY2F0aW9uKSk7XG4gICAgfTtcblxuICAgIHZhciByZXBsYWNlID0gZnVuY3Rpb24gcmVwbGFjZShsb2NhdGlvbikge1xuICAgICAgcmV0dXJuIGhpc3RvcnkucmVwbGFjZShwcmVwZW5kQmFzZW5hbWUobG9jYXRpb24pKTtcbiAgICB9O1xuXG4gICAgdmFyIGNyZWF0ZVBhdGggPSBmdW5jdGlvbiBjcmVhdGVQYXRoKGxvY2F0aW9uKSB7XG4gICAgICByZXR1cm4gaGlzdG9yeS5jcmVhdGVQYXRoKHByZXBlbmRCYXNlbmFtZShsb2NhdGlvbikpO1xuICAgIH07XG5cbiAgICB2YXIgY3JlYXRlSHJlZiA9IGZ1bmN0aW9uIGNyZWF0ZUhyZWYobG9jYXRpb24pIHtcbiAgICAgIHJldHVybiBoaXN0b3J5LmNyZWF0ZUhyZWYocHJlcGVuZEJhc2VuYW1lKGxvY2F0aW9uKSk7XG4gICAgfTtcblxuICAgIHZhciBjcmVhdGVMb2NhdGlvbiA9IGZ1bmN0aW9uIGNyZWF0ZUxvY2F0aW9uKGxvY2F0aW9uKSB7XG4gICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhZGRCYXNlbmFtZShoaXN0b3J5LmNyZWF0ZUxvY2F0aW9uLmFwcGx5KGhpc3RvcnksIFtwcmVwZW5kQmFzZW5hbWUobG9jYXRpb24pXS5jb25jYXQoYXJncykpKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIF9leHRlbmRzKHt9LCBoaXN0b3J5LCB7XG4gICAgICBnZXRDdXJyZW50TG9jYXRpb246IGdldEN1cnJlbnRMb2NhdGlvbixcbiAgICAgIGxpc3RlbkJlZm9yZTogbGlzdGVuQmVmb3JlLFxuICAgICAgbGlzdGVuOiBsaXN0ZW4sXG4gICAgICBwdXNoOiBwdXNoLFxuICAgICAgcmVwbGFjZTogcmVwbGFjZSxcbiAgICAgIGNyZWF0ZVBhdGg6IGNyZWF0ZVBhdGgsXG4gICAgICBjcmVhdGVIcmVmOiBjcmVhdGVIcmVmLFxuICAgICAgY3JlYXRlTG9jYXRpb246IGNyZWF0ZUxvY2F0aW9uXG4gICAgfSk7XG4gIH07XG59O1xuXG5leHBvcnRzLmRlZmF1bHQgPSB1c2VCYXNlbmFtZTsiLCIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XG5cbnZhciBfaW52YXJpYW50ID0gcmVxdWlyZSgnaW52YXJpYW50Jyk7XG5cbnZhciBfaW52YXJpYW50MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2ludmFyaWFudCk7XG5cbnZhciBfRE9NVXRpbHMgPSByZXF1aXJlKCcuL0RPTVV0aWxzJyk7XG5cbnZhciBfRXhlY3V0aW9uRW52aXJvbm1lbnQgPSByZXF1aXJlKCcuL0V4ZWN1dGlvbkVudmlyb25tZW50Jyk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbnZhciBzdGFydExpc3RlbmVyID0gZnVuY3Rpb24gc3RhcnRMaXN0ZW5lcihnZXRQcm9tcHRNZXNzYWdlKSB7XG4gIHZhciBoYW5kbGVCZWZvcmVVbmxvYWQgPSBmdW5jdGlvbiBoYW5kbGVCZWZvcmVVbmxvYWQoZXZlbnQpIHtcbiAgICB2YXIgbWVzc2FnZSA9IGdldFByb21wdE1lc3NhZ2UoKTtcblxuICAgIGlmICh0eXBlb2YgbWVzc2FnZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIChldmVudCB8fCB3aW5kb3cuZXZlbnQpLnJldHVyblZhbHVlID0gbWVzc2FnZTtcbiAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH07XG5cbiAgKDAsIF9ET01VdGlscy5hZGRFdmVudExpc3RlbmVyKSh3aW5kb3csICdiZWZvcmV1bmxvYWQnLCBoYW5kbGVCZWZvcmVVbmxvYWQpO1xuXG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuICgwLCBfRE9NVXRpbHMucmVtb3ZlRXZlbnRMaXN0ZW5lcikod2luZG93LCAnYmVmb3JldW5sb2FkJywgaGFuZGxlQmVmb3JlVW5sb2FkKTtcbiAgfTtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhIG5ldyBjcmVhdGVIaXN0b3J5IGZ1bmN0aW9uIHRoYXQgY2FuIGJlIHVzZWQgdG8gY3JlYXRlXG4gKiBoaXN0b3J5IG9iamVjdHMgdGhhdCBrbm93IGhvdyB0byB1c2UgdGhlIGJlZm9yZXVubG9hZCBldmVudCBpbiB3ZWJcbiAqIGJyb3dzZXJzIHRvIGNhbmNlbCBuYXZpZ2F0aW9uLlxuICovXG52YXIgdXNlQmVmb3JlVW5sb2FkID0gZnVuY3Rpb24gdXNlQmVmb3JlVW5sb2FkKGNyZWF0ZUhpc3RvcnkpIHtcbiAgIV9FeGVjdXRpb25FbnZpcm9ubWVudC5jYW5Vc2VET00gPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gKDAsIF9pbnZhcmlhbnQyLmRlZmF1bHQpKGZhbHNlLCAndXNlQmVmb3JlVW5sb2FkIG9ubHkgd29ya3MgaW4gRE9NIGVudmlyb25tZW50cycpIDogKDAsIF9pbnZhcmlhbnQyLmRlZmF1bHQpKGZhbHNlKSA6IHZvaWQgMDtcblxuICByZXR1cm4gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgaGlzdG9yeSA9IGNyZWF0ZUhpc3Rvcnkob3B0aW9ucyk7XG5cbiAgICB2YXIgbGlzdGVuZXJzID0gW107XG4gICAgdmFyIHN0b3BMaXN0ZW5lciA9IHZvaWQgMDtcblxuICAgIHZhciBnZXRQcm9tcHRNZXNzYWdlID0gZnVuY3Rpb24gZ2V0UHJvbXB0TWVzc2FnZSgpIHtcbiAgICAgIHZhciBtZXNzYWdlID0gdm9pZCAwO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGxpc3RlbmVycy5sZW5ndGg7IG1lc3NhZ2UgPT0gbnVsbCAmJiBpIDwgbGVuOyArK2kpIHtcbiAgICAgICAgbWVzc2FnZSA9IGxpc3RlbmVyc1tpXS5jYWxsKCk7XG4gICAgICB9cmV0dXJuIG1lc3NhZ2U7XG4gICAgfTtcblxuICAgIHZhciBsaXN0ZW5CZWZvcmVVbmxvYWQgPSBmdW5jdGlvbiBsaXN0ZW5CZWZvcmVVbmxvYWQobGlzdGVuZXIpIHtcbiAgICAgIGlmIChsaXN0ZW5lcnMucHVzaChsaXN0ZW5lcikgPT09IDEpIHN0b3BMaXN0ZW5lciA9IHN0YXJ0TGlzdGVuZXIoZ2V0UHJvbXB0TWVzc2FnZSk7XG5cbiAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxpc3RlbmVycyA9IGxpc3RlbmVycy5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICByZXR1cm4gaXRlbSAhPT0gbGlzdGVuZXI7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChsaXN0ZW5lcnMubGVuZ3RoID09PSAwICYmIHN0b3BMaXN0ZW5lcikge1xuICAgICAgICAgIHN0b3BMaXN0ZW5lcigpO1xuICAgICAgICAgIHN0b3BMaXN0ZW5lciA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfTtcblxuICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgaGlzdG9yeSwge1xuICAgICAgbGlzdGVuQmVmb3JlVW5sb2FkOiBsaXN0ZW5CZWZvcmVVbmxvYWRcbiAgICB9KTtcbiAgfTtcbn07XG5cbmV4cG9ydHMuZGVmYXVsdCA9IHVzZUJlZm9yZVVubG9hZDsiLCIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XG5cbnZhciBfcXVlcnlTdHJpbmcgPSByZXF1aXJlKCdxdWVyeS1zdHJpbmcnKTtcblxudmFyIF9ydW5UcmFuc2l0aW9uSG9vayA9IHJlcXVpcmUoJy4vcnVuVHJhbnNpdGlvbkhvb2snKTtcblxudmFyIF9ydW5UcmFuc2l0aW9uSG9vazIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9ydW5UcmFuc2l0aW9uSG9vayk7XG5cbnZhciBfTG9jYXRpb25VdGlscyA9IHJlcXVpcmUoJy4vTG9jYXRpb25VdGlscycpO1xuXG52YXIgX1BhdGhVdGlscyA9IHJlcXVpcmUoJy4vUGF0aFV0aWxzJyk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbnZhciBkZWZhdWx0U3RyaW5naWZ5UXVlcnkgPSBmdW5jdGlvbiBkZWZhdWx0U3RyaW5naWZ5UXVlcnkocXVlcnkpIHtcbiAgcmV0dXJuICgwLCBfcXVlcnlTdHJpbmcuc3RyaW5naWZ5KShxdWVyeSkucmVwbGFjZSgvJTIwL2csICcrJyk7XG59O1xuXG52YXIgZGVmYXVsdFBhcnNlUXVlcnlTdHJpbmcgPSBfcXVlcnlTdHJpbmcucGFyc2U7XG5cbi8qKlxuICogUmV0dXJucyBhIG5ldyBjcmVhdGVIaXN0b3J5IGZ1bmN0aW9uIHRoYXQgbWF5IGJlIHVzZWQgdG8gY3JlYXRlXG4gKiBoaXN0b3J5IG9iamVjdHMgdGhhdCBrbm93IGhvdyB0byBoYW5kbGUgVVJMIHF1ZXJpZXMuXG4gKi9cbnZhciB1c2VRdWVyaWVzID0gZnVuY3Rpb24gdXNlUXVlcmllcyhjcmVhdGVIaXN0b3J5KSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoIDw9IDAgfHwgYXJndW1lbnRzWzBdID09PSB1bmRlZmluZWQgPyB7fSA6IGFyZ3VtZW50c1swXTtcblxuICAgIHZhciBoaXN0b3J5ID0gY3JlYXRlSGlzdG9yeShvcHRpb25zKTtcbiAgICB2YXIgc3RyaW5naWZ5UXVlcnkgPSBvcHRpb25zLnN0cmluZ2lmeVF1ZXJ5O1xuICAgIHZhciBwYXJzZVF1ZXJ5U3RyaW5nID0gb3B0aW9ucy5wYXJzZVF1ZXJ5U3RyaW5nO1xuXG5cbiAgICBpZiAodHlwZW9mIHN0cmluZ2lmeVF1ZXJ5ICE9PSAnZnVuY3Rpb24nKSBzdHJpbmdpZnlRdWVyeSA9IGRlZmF1bHRTdHJpbmdpZnlRdWVyeTtcblxuICAgIGlmICh0eXBlb2YgcGFyc2VRdWVyeVN0cmluZyAhPT0gJ2Z1bmN0aW9uJykgcGFyc2VRdWVyeVN0cmluZyA9IGRlZmF1bHRQYXJzZVF1ZXJ5U3RyaW5nO1xuXG4gICAgdmFyIGRlY29kZVF1ZXJ5ID0gZnVuY3Rpb24gZGVjb2RlUXVlcnkobG9jYXRpb24pIHtcbiAgICAgIGlmICghbG9jYXRpb24pIHJldHVybiBsb2NhdGlvbjtcblxuICAgICAgaWYgKGxvY2F0aW9uLnF1ZXJ5ID09IG51bGwpIGxvY2F0aW9uLnF1ZXJ5ID0gcGFyc2VRdWVyeVN0cmluZyhsb2NhdGlvbi5zZWFyY2guc3Vic3RyaW5nKDEpKTtcblxuICAgICAgcmV0dXJuIGxvY2F0aW9uO1xuICAgIH07XG5cbiAgICB2YXIgZW5jb2RlUXVlcnkgPSBmdW5jdGlvbiBlbmNvZGVRdWVyeShsb2NhdGlvbiwgcXVlcnkpIHtcbiAgICAgIGlmIChxdWVyeSA9PSBudWxsKSByZXR1cm4gbG9jYXRpb247XG5cbiAgICAgIHZhciBvYmplY3QgPSB0eXBlb2YgbG9jYXRpb24gPT09ICdzdHJpbmcnID8gKDAsIF9QYXRoVXRpbHMucGFyc2VQYXRoKShsb2NhdGlvbikgOiBsb2NhdGlvbjtcbiAgICAgIHZhciBxdWVyeVN0cmluZyA9IHN0cmluZ2lmeVF1ZXJ5KHF1ZXJ5KTtcbiAgICAgIHZhciBzZWFyY2ggPSBxdWVyeVN0cmluZyA/ICc/JyArIHF1ZXJ5U3RyaW5nIDogJyc7XG5cbiAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgb2JqZWN0LCB7XG4gICAgICAgIHNlYXJjaDogc2VhcmNoXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgLy8gT3ZlcnJpZGUgYWxsIHJlYWQgbWV0aG9kcyB3aXRoIHF1ZXJ5LWF3YXJlIHZlcnNpb25zLlxuICAgIHZhciBnZXRDdXJyZW50TG9jYXRpb24gPSBmdW5jdGlvbiBnZXRDdXJyZW50TG9jYXRpb24oKSB7XG4gICAgICByZXR1cm4gZGVjb2RlUXVlcnkoaGlzdG9yeS5nZXRDdXJyZW50TG9jYXRpb24oKSk7XG4gICAgfTtcblxuICAgIHZhciBsaXN0ZW5CZWZvcmUgPSBmdW5jdGlvbiBsaXN0ZW5CZWZvcmUoaG9vaykge1xuICAgICAgcmV0dXJuIGhpc3RvcnkubGlzdGVuQmVmb3JlKGZ1bmN0aW9uIChsb2NhdGlvbiwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuICgwLCBfcnVuVHJhbnNpdGlvbkhvb2syLmRlZmF1bHQpKGhvb2ssIGRlY29kZVF1ZXJ5KGxvY2F0aW9uKSwgY2FsbGJhY2spO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHZhciBsaXN0ZW4gPSBmdW5jdGlvbiBsaXN0ZW4obGlzdGVuZXIpIHtcbiAgICAgIHJldHVybiBoaXN0b3J5Lmxpc3RlbihmdW5jdGlvbiAobG9jYXRpb24pIHtcbiAgICAgICAgcmV0dXJuIGxpc3RlbmVyKGRlY29kZVF1ZXJ5KGxvY2F0aW9uKSk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgLy8gT3ZlcnJpZGUgYWxsIHdyaXRlIG1ldGhvZHMgd2l0aCBxdWVyeS1hd2FyZSB2ZXJzaW9ucy5cbiAgICB2YXIgcHVzaCA9IGZ1bmN0aW9uIHB1c2gobG9jYXRpb24pIHtcbiAgICAgIHJldHVybiBoaXN0b3J5LnB1c2goZW5jb2RlUXVlcnkobG9jYXRpb24sIGxvY2F0aW9uLnF1ZXJ5KSk7XG4gICAgfTtcblxuICAgIHZhciByZXBsYWNlID0gZnVuY3Rpb24gcmVwbGFjZShsb2NhdGlvbikge1xuICAgICAgcmV0dXJuIGhpc3RvcnkucmVwbGFjZShlbmNvZGVRdWVyeShsb2NhdGlvbiwgbG9jYXRpb24ucXVlcnkpKTtcbiAgICB9O1xuXG4gICAgdmFyIGNyZWF0ZVBhdGggPSBmdW5jdGlvbiBjcmVhdGVQYXRoKGxvY2F0aW9uKSB7XG4gICAgICByZXR1cm4gaGlzdG9yeS5jcmVhdGVQYXRoKGVuY29kZVF1ZXJ5KGxvY2F0aW9uLCBsb2NhdGlvbi5xdWVyeSkpO1xuICAgIH07XG5cbiAgICB2YXIgY3JlYXRlSHJlZiA9IGZ1bmN0aW9uIGNyZWF0ZUhyZWYobG9jYXRpb24pIHtcbiAgICAgIHJldHVybiBoaXN0b3J5LmNyZWF0ZUhyZWYoZW5jb2RlUXVlcnkobG9jYXRpb24sIGxvY2F0aW9uLnF1ZXJ5KSk7XG4gICAgfTtcblxuICAgIHZhciBjcmVhdGVMb2NhdGlvbiA9IGZ1bmN0aW9uIGNyZWF0ZUxvY2F0aW9uKGxvY2F0aW9uKSB7XG4gICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICB9XG5cbiAgICAgIHZhciBuZXdMb2NhdGlvbiA9IGhpc3RvcnkuY3JlYXRlTG9jYXRpb24uYXBwbHkoaGlzdG9yeSwgW2VuY29kZVF1ZXJ5KGxvY2F0aW9uLCBsb2NhdGlvbi5xdWVyeSldLmNvbmNhdChhcmdzKSk7XG5cbiAgICAgIGlmIChsb2NhdGlvbi5xdWVyeSkgbmV3TG9jYXRpb24ucXVlcnkgPSAoMCwgX0xvY2F0aW9uVXRpbHMuY3JlYXRlUXVlcnkpKGxvY2F0aW9uLnF1ZXJ5KTtcblxuICAgICAgcmV0dXJuIGRlY29kZVF1ZXJ5KG5ld0xvY2F0aW9uKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIF9leHRlbmRzKHt9LCBoaXN0b3J5LCB7XG4gICAgICBnZXRDdXJyZW50TG9jYXRpb246IGdldEN1cnJlbnRMb2NhdGlvbixcbiAgICAgIGxpc3RlbkJlZm9yZTogbGlzdGVuQmVmb3JlLFxuICAgICAgbGlzdGVuOiBsaXN0ZW4sXG4gICAgICBwdXNoOiBwdXNoLFxuICAgICAgcmVwbGFjZTogcmVwbGFjZSxcbiAgICAgIGNyZWF0ZVBhdGg6IGNyZWF0ZVBhdGgsXG4gICAgICBjcmVhdGVIcmVmOiBjcmVhdGVIcmVmLFxuICAgICAgY3JlYXRlTG9jYXRpb246IGNyZWF0ZUxvY2F0aW9uXG4gICAgfSk7XG4gIH07XG59O1xuXG5leHBvcnRzLmRlZmF1bHQgPSB1c2VRdWVyaWVzOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBVc2UgaW52YXJpYW50KCkgdG8gYXNzZXJ0IHN0YXRlIHdoaWNoIHlvdXIgcHJvZ3JhbSBhc3N1bWVzIHRvIGJlIHRydWUuXG4gKlxuICogUHJvdmlkZSBzcHJpbnRmLXN0eWxlIGZvcm1hdCAob25seSAlcyBpcyBzdXBwb3J0ZWQpIGFuZCBhcmd1bWVudHNcbiAqIHRvIHByb3ZpZGUgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCBicm9rZSBhbmQgd2hhdCB5b3Ugd2VyZVxuICogZXhwZWN0aW5nLlxuICpcbiAqIFRoZSBpbnZhcmlhbnQgbWVzc2FnZSB3aWxsIGJlIHN0cmlwcGVkIGluIHByb2R1Y3Rpb24sIGJ1dCB0aGUgaW52YXJpYW50XG4gKiB3aWxsIHJlbWFpbiB0byBlbnN1cmUgbG9naWMgZG9lcyBub3QgZGlmZmVyIGluIHByb2R1Y3Rpb24uXG4gKi9cblxudmFyIGludmFyaWFudCA9IGZ1bmN0aW9uKGNvbmRpdGlvbiwgZm9ybWF0LCBhLCBiLCBjLCBkLCBlLCBmKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaWYgKGZvcm1hdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFyaWFudCByZXF1aXJlcyBhbiBlcnJvciBtZXNzYWdlIGFyZ3VtZW50Jyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFjb25kaXRpb24pIHtcbiAgICB2YXIgZXJyb3I7XG4gICAgaWYgKGZvcm1hdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBlcnJvciA9IG5ldyBFcnJvcihcbiAgICAgICAgJ01pbmlmaWVkIGV4Y2VwdGlvbiBvY2N1cnJlZDsgdXNlIHRoZSBub24tbWluaWZpZWQgZGV2IGVudmlyb25tZW50ICcgK1xuICAgICAgICAnZm9yIHRoZSBmdWxsIGVycm9yIG1lc3NhZ2UgYW5kIGFkZGl0aW9uYWwgaGVscGZ1bCB3YXJuaW5ncy4nXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgYXJncyA9IFthLCBiLCBjLCBkLCBlLCBmXTtcbiAgICAgIHZhciBhcmdJbmRleCA9IDA7XG4gICAgICBlcnJvciA9IG5ldyBFcnJvcihcbiAgICAgICAgZm9ybWF0LnJlcGxhY2UoLyVzL2csIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJnc1thcmdJbmRleCsrXTsgfSlcbiAgICAgICk7XG4gICAgICBlcnJvci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xuICAgIH1cblxuICAgIGVycm9yLmZyYW1lc1RvUG9wID0gMTsgLy8gd2UgZG9uJ3QgY2FyZSBhYm91dCBpbnZhcmlhbnQncyBvd24gZnJhbWVcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBpbnZhcmlhbnQ7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgc3RyaWN0VXJpRW5jb2RlID0gcmVxdWlyZSgnc3RyaWN0LXVyaS1lbmNvZGUnKTtcbnZhciBvYmplY3RBc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG5cbmZ1bmN0aW9uIGVuY29kZSh2YWx1ZSwgb3B0cykge1xuXHRpZiAob3B0cy5lbmNvZGUpIHtcblx0XHRyZXR1cm4gb3B0cy5zdHJpY3QgPyBzdHJpY3RVcmlFbmNvZGUodmFsdWUpIDogZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKTtcblx0fVxuXG5cdHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0cy5leHRyYWN0ID0gZnVuY3Rpb24gKHN0cikge1xuXHRyZXR1cm4gc3RyLnNwbGl0KCc/JylbMV0gfHwgJyc7XG59O1xuXG5leHBvcnRzLnBhcnNlID0gZnVuY3Rpb24gKHN0cikge1xuXHQvLyBDcmVhdGUgYW4gb2JqZWN0IHdpdGggbm8gcHJvdG90eXBlXG5cdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvcXVlcnktc3RyaW5nL2lzc3Vlcy80N1xuXHR2YXIgcmV0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuXHRpZiAodHlwZW9mIHN0ciAhPT0gJ3N0cmluZycpIHtcblx0XHRyZXR1cm4gcmV0O1xuXHR9XG5cblx0c3RyID0gc3RyLnRyaW0oKS5yZXBsYWNlKC9eKFxcP3wjfCYpLywgJycpO1xuXG5cdGlmICghc3RyKSB7XG5cdFx0cmV0dXJuIHJldDtcblx0fVxuXG5cdHN0ci5zcGxpdCgnJicpLmZvckVhY2goZnVuY3Rpb24gKHBhcmFtKSB7XG5cdFx0dmFyIHBhcnRzID0gcGFyYW0ucmVwbGFjZSgvXFwrL2csICcgJykuc3BsaXQoJz0nKTtcblx0XHQvLyBGaXJlZm94IChwcmUgNDApIGRlY29kZXMgYCUzRGAgdG8gYD1gXG5cdFx0Ly8gaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9xdWVyeS1zdHJpbmcvcHVsbC8zN1xuXHRcdHZhciBrZXkgPSBwYXJ0cy5zaGlmdCgpO1xuXHRcdHZhciB2YWwgPSBwYXJ0cy5sZW5ndGggPiAwID8gcGFydHMuam9pbignPScpIDogdW5kZWZpbmVkO1xuXG5cdFx0a2V5ID0gZGVjb2RlVVJJQ29tcG9uZW50KGtleSk7XG5cblx0XHQvLyBtaXNzaW5nIGA9YCBzaG91bGQgYmUgYG51bGxgOlxuXHRcdC8vIGh0dHA6Ly93My5vcmcvVFIvMjAxMi9XRC11cmwtMjAxMjA1MjQvI2NvbGxlY3QtdXJsLXBhcmFtZXRlcnNcblx0XHR2YWwgPSB2YWwgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBkZWNvZGVVUklDb21wb25lbnQodmFsKTtcblxuXHRcdGlmIChyZXRba2V5XSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXRba2V5XSA9IHZhbDtcblx0XHR9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocmV0W2tleV0pKSB7XG5cdFx0XHRyZXRba2V5XS5wdXNoKHZhbCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldFtrZXldID0gW3JldFtrZXldLCB2YWxdO1xuXHRcdH1cblx0fSk7XG5cblx0cmV0dXJuIHJldDtcbn07XG5cbmV4cG9ydHMuc3RyaW5naWZ5ID0gZnVuY3Rpb24gKG9iaiwgb3B0cykge1xuXHR2YXIgZGVmYXVsdHMgPSB7XG5cdFx0ZW5jb2RlOiB0cnVlLFxuXHRcdHN0cmljdDogdHJ1ZVxuXHR9O1xuXG5cdG9wdHMgPSBvYmplY3RBc3NpZ24oZGVmYXVsdHMsIG9wdHMpO1xuXG5cdHJldHVybiBvYmogPyBPYmplY3Qua2V5cyhvYmopLnNvcnQoKS5tYXAoZnVuY3Rpb24gKGtleSkge1xuXHRcdHZhciB2YWwgPSBvYmpba2V5XTtcblxuXHRcdGlmICh2YWwgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuICcnO1xuXHRcdH1cblxuXHRcdGlmICh2YWwgPT09IG51bGwpIHtcblx0XHRcdHJldHVybiBlbmNvZGUoa2V5LCBvcHRzKTtcblx0XHR9XG5cblx0XHRpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XG5cdFx0XHR2YXIgcmVzdWx0ID0gW107XG5cblx0XHRcdHZhbC5zbGljZSgpLmZvckVhY2goZnVuY3Rpb24gKHZhbDIpIHtcblx0XHRcdFx0aWYgKHZhbDIgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICh2YWwyID09PSBudWxsKSB7XG5cdFx0XHRcdFx0cmVzdWx0LnB1c2goZW5jb2RlKGtleSwgb3B0cykpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJlc3VsdC5wdXNoKGVuY29kZShrZXksIG9wdHMpICsgJz0nICsgZW5jb2RlKHZhbDIsIG9wdHMpKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdHJldHVybiByZXN1bHQuam9pbignJicpO1xuXHRcdH1cblxuXHRcdHJldHVybiBlbmNvZGUoa2V5LCBvcHRzKSArICc9JyArIGVuY29kZSh2YWwsIG9wdHMpO1xuXHR9KS5maWx0ZXIoZnVuY3Rpb24gKHgpIHtcblx0XHRyZXR1cm4geC5sZW5ndGggPiAwO1xuXHR9KS5qb2luKCcmJykgOiAnJztcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xudmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBwcm9wSXNFbnVtZXJhYmxlID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblxuZnVuY3Rpb24gdG9PYmplY3QodmFsKSB7XG5cdGlmICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3QuYXNzaWduIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCBudWxsIG9yIHVuZGVmaW5lZCcpO1xuXHR9XG5cblx0cmV0dXJuIE9iamVjdCh2YWwpO1xufVxuXG5mdW5jdGlvbiBzaG91bGRVc2VOYXRpdmUoKSB7XG5cdHRyeSB7XG5cdFx0aWYgKCFPYmplY3QuYXNzaWduKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gRGV0ZWN0IGJ1Z2d5IHByb3BlcnR5IGVudW1lcmF0aW9uIG9yZGVyIGluIG9sZGVyIFY4IHZlcnNpb25zLlxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9NDExOFxuXHRcdHZhciB0ZXN0MSA9IG5ldyBTdHJpbmcoJ2FiYycpOyAgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXHRcdHRlc3QxWzVdID0gJ2RlJztcblx0XHRpZiAoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdDEpWzBdID09PSAnNScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMDU2XG5cdFx0dmFyIHRlc3QyID0ge307XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XG5cdFx0XHR0ZXN0MlsnXycgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGkpXSA9IGk7XG5cdFx0fVxuXHRcdHZhciBvcmRlcjIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0MikubWFwKGZ1bmN0aW9uIChuKSB7XG5cdFx0XHRyZXR1cm4gdGVzdDJbbl07XG5cdFx0fSk7XG5cdFx0aWYgKG9yZGVyMi5qb2luKCcnKSAhPT0gJzAxMjM0NTY3ODknKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxuXHRcdHZhciB0ZXN0MyA9IHt9O1xuXHRcdCdhYmNkZWZnaGlqa2xtbm9wcXJzdCcuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGxldHRlcikge1xuXHRcdFx0dGVzdDNbbGV0dGVyXSA9IGxldHRlcjtcblx0XHR9KTtcblx0XHRpZiAoT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSwgdGVzdDMpKS5qb2luKCcnKSAhPT1cblx0XHRcdFx0J2FiY2RlZmdoaWprbG1ub3BxcnN0Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0Ly8gV2UgZG9uJ3QgZXhwZWN0IGFueSBvZiB0aGUgYWJvdmUgdG8gdGhyb3csIGJ1dCBiZXR0ZXIgdG8gYmUgc2FmZS5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzaG91bGRVc2VOYXRpdmUoKSA/IE9iamVjdC5hc3NpZ24gOiBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcblx0dmFyIGZyb207XG5cdHZhciB0byA9IHRvT2JqZWN0KHRhcmdldCk7XG5cdHZhciBzeW1ib2xzO1xuXG5cdGZvciAodmFyIHMgPSAxOyBzIDwgYXJndW1lbnRzLmxlbmd0aDsgcysrKSB7XG5cdFx0ZnJvbSA9IE9iamVjdChhcmd1bWVudHNbc10pO1xuXG5cdFx0Zm9yICh2YXIga2V5IGluIGZyb20pIHtcblx0XHRcdGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGZyb20sIGtleSkpIHtcblx0XHRcdFx0dG9ba2V5XSA9IGZyb21ba2V5XTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuXHRcdFx0c3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZnJvbSk7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN5bWJvbHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKHByb3BJc0VudW1lcmFibGUuY2FsbChmcm9tLCBzeW1ib2xzW2ldKSkge1xuXHRcdFx0XHRcdHRvW3N5bWJvbHNbaV1dID0gZnJvbVtzeW1ib2xzW2ldXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0bztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzdHIpIHtcblx0cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChzdHIpLnJlcGxhY2UoL1shJygpKl0vZywgZnVuY3Rpb24gKGMpIHtcblx0XHRyZXR1cm4gJyUnICsgYy5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xuXHR9KTtcbn07XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDE0LTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogU2ltaWxhciB0byBpbnZhcmlhbnQgYnV0IG9ubHkgbG9ncyBhIHdhcm5pbmcgaWYgdGhlIGNvbmRpdGlvbiBpcyBub3QgbWV0LlxuICogVGhpcyBjYW4gYmUgdXNlZCB0byBsb2cgaXNzdWVzIGluIGRldmVsb3BtZW50IGVudmlyb25tZW50cyBpbiBjcml0aWNhbFxuICogcGF0aHMuIFJlbW92aW5nIHRoZSBsb2dnaW5nIGNvZGUgZm9yIHByb2R1Y3Rpb24gZW52aXJvbm1lbnRzIHdpbGwga2VlcCB0aGVcbiAqIHNhbWUgbG9naWMgYW5kIGZvbGxvdyB0aGUgc2FtZSBjb2RlIHBhdGhzLlxuICovXG5cbnZhciB3YXJuaW5nID0gZnVuY3Rpb24oKSB7fTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgd2FybmluZyA9IGZ1bmN0aW9uKGNvbmRpdGlvbiwgZm9ybWF0LCBhcmdzKSB7XG4gICAgdmFyIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgYXJncyA9IG5ldyBBcnJheShsZW4gPiAyID8gbGVuIC0gMiA6IDApO1xuICAgIGZvciAodmFyIGtleSA9IDI7IGtleSA8IGxlbjsga2V5KyspIHtcbiAgICAgIGFyZ3Nba2V5IC0gMl0gPSBhcmd1bWVudHNba2V5XTtcbiAgICB9XG4gICAgaWYgKGZvcm1hdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdgd2FybmluZyhjb25kaXRpb24sIGZvcm1hdCwgLi4uYXJncylgIHJlcXVpcmVzIGEgd2FybmluZyAnICtcbiAgICAgICAgJ21lc3NhZ2UgYXJndW1lbnQnXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChmb3JtYXQubGVuZ3RoIDwgMTAgfHwgKC9eW3NcXFddKiQvKS50ZXN0KGZvcm1hdCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ1RoZSB3YXJuaW5nIGZvcm1hdCBzaG91bGQgYmUgYWJsZSB0byB1bmlxdWVseSBpZGVudGlmeSB0aGlzICcgK1xuICAgICAgICAnd2FybmluZy4gUGxlYXNlLCB1c2UgYSBtb3JlIGRlc2NyaXB0aXZlIGZvcm1hdCB0aGFuOiAnICsgZm9ybWF0XG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICghY29uZGl0aW9uKSB7XG4gICAgICB2YXIgYXJnSW5kZXggPSAwO1xuICAgICAgdmFyIG1lc3NhZ2UgPSAnV2FybmluZzogJyArXG4gICAgICAgIGZvcm1hdC5yZXBsYWNlKC8lcy9nLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gYXJnc1thcmdJbmRleCsrXTtcbiAgICAgICAgfSk7XG4gICAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7XG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICAvLyBUaGlzIGVycm9yIHdhcyB0aHJvd24gYXMgYSBjb252ZW5pZW5jZSBzbyB0aGF0IHlvdSBjYW4gdXNlIHRoaXMgc3RhY2tcbiAgICAgICAgLy8gdG8gZmluZCB0aGUgY2FsbHNpdGUgdGhhdCBjYXVzZWQgdGhpcyB3YXJuaW5nIHRvIGZpcmUuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICAgIH0gY2F0Y2goeCkge31cbiAgICB9XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gd2FybmluZztcbiIsIi8vIHNoaW0gZm9yIHVzaW5nIHByb2Nlc3MgaW4gYnJvd3NlclxudmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xuXG4vLyBjYWNoZWQgZnJvbSB3aGF0ZXZlciBnbG9iYWwgaXMgcHJlc2VudCBzbyB0aGF0IHRlc3QgcnVubmVycyB0aGF0IHN0dWIgaXRcbi8vIGRvbid0IGJyZWFrIHRoaW5ncy4gIEJ1dCB3ZSBuZWVkIHRvIHdyYXAgaXQgaW4gYSB0cnkgY2F0Y2ggaW4gY2FzZSBpdCBpc1xuLy8gd3JhcHBlZCBpbiBzdHJpY3QgbW9kZSBjb2RlIHdoaWNoIGRvZXNuJ3QgZGVmaW5lIGFueSBnbG9iYWxzLiAgSXQncyBpbnNpZGUgYVxuLy8gZnVuY3Rpb24gYmVjYXVzZSB0cnkvY2F0Y2hlcyBkZW9wdGltaXplIGluIGNlcnRhaW4gZW5naW5lcy5cblxudmFyIGNhY2hlZFNldFRpbWVvdXQ7XG52YXIgY2FjaGVkQ2xlYXJUaW1lb3V0O1xuXG4oZnVuY3Rpb24gKCkge1xuICAgIHRyeSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc2V0VGltZW91dCBpcyBub3QgZGVmaW5lZCcpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignY2xlYXJUaW1lb3V0IGlzIG5vdCBkZWZpbmVkJyk7XG4gICAgICAgIH1cbiAgICB9XG59ICgpKVxuZnVuY3Rpb24gcnVuVGltZW91dChmdW4pIHtcbiAgICBpZiAoY2FjaGVkU2V0VGltZW91dCA9PT0gc2V0VGltZW91dCkge1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwobnVsbCwgZnVuLCAwKTtcbiAgICB9XG59XG5mdW5jdGlvbiBydW5DbGVhclRpbWVvdXQobWFya2VyKSB7XG4gICAgaWYgKGNhY2hlZENsZWFyVGltZW91dCA9PT0gY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKG51bGwsIG1hcmtlcik7XG4gICAgfVxufVxudmFyIHF1ZXVlID0gW107XG52YXIgZHJhaW5pbmcgPSBmYWxzZTtcbnZhciBjdXJyZW50UXVldWU7XG52YXIgcXVldWVJbmRleCA9IC0xO1xuXG5mdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XG4gICAgaWYgKCFkcmFpbmluZyB8fCAhY3VycmVudFF1ZXVlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBpZiAoY3VycmVudFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICB9XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBkcmFpblF1ZXVlKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xuICAgIGlmIChkcmFpbmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB0aW1lb3V0ID0gcnVuVGltZW91dChjbGVhblVwTmV4dFRpY2spO1xuICAgIGRyYWluaW5nID0gdHJ1ZTtcblxuICAgIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgd2hpbGUobGVuKSB7XG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xuICAgICAgICBxdWV1ZSA9IFtdO1xuICAgICAgICB3aGlsZSAoKytxdWV1ZUluZGV4IDwgbGVuKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFF1ZXVlW3F1ZXVlSW5kZXhdLnJ1bigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICAgICAgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIH1cbiAgICBjdXJyZW50UXVldWUgPSBudWxsO1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgcnVuQ2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xufVxuXG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHF1ZXVlLnB1c2gobmV3IEl0ZW0oZnVuLCBhcmdzKSk7XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSAmJiAhZHJhaW5pbmcpIHtcbiAgICAgICAgcnVuVGltZW91dChkcmFpblF1ZXVlKTtcbiAgICB9XG59O1xuXG4vLyB2OCBsaWtlcyBwcmVkaWN0aWJsZSBvYmplY3RzXG5mdW5jdGlvbiBJdGVtKGZ1biwgYXJyYXkpIHtcbiAgICB0aGlzLmZ1biA9IGZ1bjtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG59XG5JdGVtLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5mdW4uYXBwbHkobnVsbCwgdGhpcy5hcnJheSk7XG59O1xucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcbnByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5wcm9jZXNzLmVudiA9IHt9O1xucHJvY2Vzcy5hcmd2ID0gW107XG5wcm9jZXNzLnZlcnNpb24gPSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcbnByb2Nlc3MudmVyc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnByb2Nlc3Mub24gPSBub29wO1xucHJvY2Vzcy5hZGRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLm9uY2UgPSBub29wO1xucHJvY2Vzcy5vZmYgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XG5wcm9jZXNzLmVtaXQgPSBub29wO1xuXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5cbnByb2Nlc3MuY3dkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJy8nIH07XG5wcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24gKGRpcikge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xucHJvY2Vzcy51bWFzayA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCBmdW5jdGlvbiAoZCwgYikge1xuICAgIGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdO1xuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbn07XG52YXIgTk8gPSB7fTtcbmZ1bmN0aW9uIG5vb3AoKSB7IH1cbmZ1bmN0aW9uIGNvcHkoYSkge1xuICAgIHZhciBsID0gYS5sZW5ndGg7XG4gICAgdmFyIGIgPSBBcnJheShsKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGw7ICsraSkge1xuICAgICAgICBiW2ldID0gYVtpXTtcbiAgICB9XG4gICAgcmV0dXJuIGI7XG59XG5leHBvcnRzLk5PX0lMID0ge1xuICAgIF9uOiBub29wLFxuICAgIF9lOiBub29wLFxuICAgIF9jOiBub29wLFxufTtcbi8vIG11dGF0ZXMgdGhlIGlucHV0XG5mdW5jdGlvbiBpbnRlcm5hbGl6ZVByb2R1Y2VyKHByb2R1Y2VyKSB7XG4gICAgcHJvZHVjZXIuX3N0YXJ0ID1cbiAgICAgICAgZnVuY3Rpb24gX3N0YXJ0KGlsKSB7XG4gICAgICAgICAgICBpbC5uZXh0ID0gaWwuX247XG4gICAgICAgICAgICBpbC5lcnJvciA9IGlsLl9lO1xuICAgICAgICAgICAgaWwuY29tcGxldGUgPSBpbC5fYztcbiAgICAgICAgICAgIHRoaXMuc3RhcnQoaWwpO1xuICAgICAgICB9O1xuICAgIHByb2R1Y2VyLl9zdG9wID0gcHJvZHVjZXIuc3RvcDtcbn1cbmZ1bmN0aW9uIGNvbXBvc2UyKGYxLCBmMikge1xuICAgIHJldHVybiBmdW5jdGlvbiBjb21wb3NlZEZuKGFyZykge1xuICAgICAgICByZXR1cm4gZjEoZjIoYXJnKSk7XG4gICAgfTtcbn1cbmZ1bmN0aW9uIGFuZChmMSwgZjIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gYW5kRm4odCkge1xuICAgICAgICByZXR1cm4gZjEodCkgJiYgZjIodCk7XG4gICAgfTtcbn1cbnZhciBNZXJnZVByb2R1Y2VyID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBNZXJnZVByb2R1Y2VyKGluc0Fycikge1xuICAgICAgICB0aGlzLnR5cGUgPSAnbWVyZ2UnO1xuICAgICAgICB0aGlzLmluc0FyciA9IGluc0FycjtcbiAgICAgICAgdGhpcy5vdXQgPSBOTztcbiAgICAgICAgdGhpcy5hYyA9IDA7XG4gICAgfVxuICAgIE1lcmdlUHJvZHVjZXIucHJvdG90eXBlLl9zdGFydCA9IGZ1bmN0aW9uIChvdXQpIHtcbiAgICAgICAgdGhpcy5vdXQgPSBvdXQ7XG4gICAgICAgIHZhciBzID0gdGhpcy5pbnNBcnI7XG4gICAgICAgIHZhciBMID0gcy5sZW5ndGg7XG4gICAgICAgIHRoaXMuYWMgPSBMO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IEw7IGkrKykge1xuICAgICAgICAgICAgc1tpXS5fYWRkKHRoaXMpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBNZXJnZVByb2R1Y2VyLnByb3RvdHlwZS5fc3RvcCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHMgPSB0aGlzLmluc0FycjtcbiAgICAgICAgdmFyIEwgPSBzLmxlbmd0aDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBMOyBpKyspIHtcbiAgICAgICAgICAgIHNbaV0uX3JlbW92ZSh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm91dCA9IE5PO1xuICAgIH07XG4gICAgTWVyZ2VQcm9kdWNlci5wcm90b3R5cGUuX24gPSBmdW5jdGlvbiAodCkge1xuICAgICAgICB2YXIgdSA9IHRoaXMub3V0O1xuICAgICAgICBpZiAodSA9PT0gTk8pXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHUuX24odCk7XG4gICAgfTtcbiAgICBNZXJnZVByb2R1Y2VyLnByb3RvdHlwZS5fZSA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdmFyIHUgPSB0aGlzLm91dDtcbiAgICAgICAgaWYgKHUgPT09IE5PKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB1Ll9lKGVycik7XG4gICAgfTtcbiAgICBNZXJnZVByb2R1Y2VyLnByb3RvdHlwZS5fYyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKC0tdGhpcy5hYyA8PSAwKSB7XG4gICAgICAgICAgICB2YXIgdSA9IHRoaXMub3V0O1xuICAgICAgICAgICAgaWYgKHUgPT09IE5PKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHUuX2MoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIE1lcmdlUHJvZHVjZXI7XG59KCkpO1xuZXhwb3J0cy5NZXJnZVByb2R1Y2VyID0gTWVyZ2VQcm9kdWNlcjtcbnZhciBDb21iaW5lTGlzdGVuZXIgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIENvbWJpbmVMaXN0ZW5lcihpLCBvdXQsIHApIHtcbiAgICAgICAgdGhpcy5pID0gaTtcbiAgICAgICAgdGhpcy5vdXQgPSBvdXQ7XG4gICAgICAgIHRoaXMucCA9IHA7XG4gICAgICAgIHAuaWxzLnB1c2godGhpcyk7XG4gICAgfVxuICAgIENvbWJpbmVMaXN0ZW5lci5wcm90b3R5cGUuX24gPSBmdW5jdGlvbiAodCkge1xuICAgICAgICB2YXIgcCA9IHRoaXMucCwgb3V0ID0gdGhpcy5vdXQ7XG4gICAgICAgIGlmICghb3V0KVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAocC51cCh0LCB0aGlzLmkpKSB7XG4gICAgICAgICAgICBvdXQuX24ocC52YWxzKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQ29tYmluZUxpc3RlbmVyLnByb3RvdHlwZS5fZSA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdmFyIG91dCA9IHRoaXMub3V0O1xuICAgICAgICBpZiAoIW91dClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgb3V0Ll9lKGVycik7XG4gICAgfTtcbiAgICBDb21iaW5lTGlzdGVuZXIucHJvdG90eXBlLl9jID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcCA9IHRoaXMucDtcbiAgICAgICAgaWYgKCFwLm91dClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKC0tcC5OYyA9PT0gMCkge1xuICAgICAgICAgICAgcC5vdXQuX2MoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIENvbWJpbmVMaXN0ZW5lcjtcbn0oKSk7XG5leHBvcnRzLkNvbWJpbmVMaXN0ZW5lciA9IENvbWJpbmVMaXN0ZW5lcjtcbnZhciBDb21iaW5lUHJvZHVjZXIgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIENvbWJpbmVQcm9kdWNlcihpbnNBcnIpIHtcbiAgICAgICAgdGhpcy50eXBlID0gJ2NvbWJpbmUnO1xuICAgICAgICB0aGlzLmluc0FyciA9IGluc0FycjtcbiAgICAgICAgdGhpcy5vdXQgPSBOTztcbiAgICAgICAgdGhpcy5pbHMgPSBbXTtcbiAgICAgICAgdGhpcy5OYyA9IHRoaXMuTm4gPSAwO1xuICAgICAgICB0aGlzLnZhbHMgPSBbXTtcbiAgICB9XG4gICAgQ29tYmluZVByb2R1Y2VyLnByb3RvdHlwZS51cCA9IGZ1bmN0aW9uICh0LCBpKSB7XG4gICAgICAgIHZhciB2ID0gdGhpcy52YWxzW2ldO1xuICAgICAgICB2YXIgTm4gPSAhdGhpcy5ObiA/IDAgOiB2ID09PSBOTyA/IC0tdGhpcy5ObiA6IHRoaXMuTm47XG4gICAgICAgIHRoaXMudmFsc1tpXSA9IHQ7XG4gICAgICAgIHJldHVybiBObiA9PT0gMDtcbiAgICB9O1xuICAgIENvbWJpbmVQcm9kdWNlci5wcm90b3R5cGUuX3N0YXJ0ID0gZnVuY3Rpb24gKG91dCkge1xuICAgICAgICB0aGlzLm91dCA9IG91dDtcbiAgICAgICAgdmFyIHMgPSB0aGlzLmluc0FycjtcbiAgICAgICAgdmFyIG4gPSB0aGlzLk5jID0gdGhpcy5ObiA9IHMubGVuZ3RoO1xuICAgICAgICB2YXIgdmFscyA9IHRoaXMudmFscyA9IG5ldyBBcnJheShuKTtcbiAgICAgICAgaWYgKG4gPT09IDApIHtcbiAgICAgICAgICAgIG91dC5fbihbXSk7XG4gICAgICAgICAgICBvdXQuX2MoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFsc1tpXSA9IE5PO1xuICAgICAgICAgICAgICAgIHNbaV0uX2FkZChuZXcgQ29tYmluZUxpc3RlbmVyKGksIG91dCwgdGhpcykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBDb21iaW5lUHJvZHVjZXIucHJvdG90eXBlLl9zdG9wID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcyA9IHRoaXMuaW5zQXJyO1xuICAgICAgICB2YXIgbiA9IHMubGVuZ3RoO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgc1tpXS5fcmVtb3ZlKHRoaXMuaWxzW2ldKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm91dCA9IE5PO1xuICAgICAgICB0aGlzLmlscyA9IFtdO1xuICAgICAgICB0aGlzLnZhbHMgPSBbXTtcbiAgICB9O1xuICAgIHJldHVybiBDb21iaW5lUHJvZHVjZXI7XG59KCkpO1xuZXhwb3J0cy5Db21iaW5lUHJvZHVjZXIgPSBDb21iaW5lUHJvZHVjZXI7XG52YXIgRnJvbUFycmF5UHJvZHVjZXIgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEZyb21BcnJheVByb2R1Y2VyKGEpIHtcbiAgICAgICAgdGhpcy50eXBlID0gJ2Zyb21BcnJheSc7XG4gICAgICAgIHRoaXMuYSA9IGE7XG4gICAgfVxuICAgIEZyb21BcnJheVByb2R1Y2VyLnByb3RvdHlwZS5fc3RhcnQgPSBmdW5jdGlvbiAob3V0KSB7XG4gICAgICAgIHZhciBhID0gdGhpcy5hO1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGEubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICBvdXQuX24oYVtpXSk7XG4gICAgICAgIH1cbiAgICAgICAgb3V0Ll9jKCk7XG4gICAgfTtcbiAgICBGcm9tQXJyYXlQcm9kdWNlci5wcm90b3R5cGUuX3N0b3AgPSBmdW5jdGlvbiAoKSB7XG4gICAgfTtcbiAgICByZXR1cm4gRnJvbUFycmF5UHJvZHVjZXI7XG59KCkpO1xuZXhwb3J0cy5Gcm9tQXJyYXlQcm9kdWNlciA9IEZyb21BcnJheVByb2R1Y2VyO1xudmFyIEZyb21Qcm9taXNlUHJvZHVjZXIgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEZyb21Qcm9taXNlUHJvZHVjZXIocCkge1xuICAgICAgICB0aGlzLnR5cGUgPSAnZnJvbVByb21pc2UnO1xuICAgICAgICB0aGlzLm9uID0gZmFsc2U7XG4gICAgICAgIHRoaXMucCA9IHA7XG4gICAgfVxuICAgIEZyb21Qcm9taXNlUHJvZHVjZXIucHJvdG90eXBlLl9zdGFydCA9IGZ1bmN0aW9uIChvdXQpIHtcbiAgICAgICAgdmFyIHByb2QgPSB0aGlzO1xuICAgICAgICB0aGlzLm9uID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5wLnRoZW4oZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgIGlmIChwcm9kLm9uKSB7XG4gICAgICAgICAgICAgICAgb3V0Ll9uKHYpO1xuICAgICAgICAgICAgICAgIG91dC5fYygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgb3V0Ll9lKGUpO1xuICAgICAgICB9KS50aGVuKG51bGwsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyB0aHJvdyBlcnI7IH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIEZyb21Qcm9taXNlUHJvZHVjZXIucHJvdG90eXBlLl9zdG9wID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLm9uID0gZmFsc2U7XG4gICAgfTtcbiAgICByZXR1cm4gRnJvbVByb21pc2VQcm9kdWNlcjtcbn0oKSk7XG5leHBvcnRzLkZyb21Qcm9taXNlUHJvZHVjZXIgPSBGcm9tUHJvbWlzZVByb2R1Y2VyO1xudmFyIFBlcmlvZGljUHJvZHVjZXIgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFBlcmlvZGljUHJvZHVjZXIocGVyaW9kKSB7XG4gICAgICAgIHRoaXMudHlwZSA9ICdwZXJpb2RpYyc7XG4gICAgICAgIHRoaXMucGVyaW9kID0gcGVyaW9kO1xuICAgICAgICB0aGlzLmludGVydmFsSUQgPSAtMTtcbiAgICAgICAgdGhpcy5pID0gMDtcbiAgICB9XG4gICAgUGVyaW9kaWNQcm9kdWNlci5wcm90b3R5cGUuX3N0YXJ0ID0gZnVuY3Rpb24gKHN0cmVhbSkge1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAgIGZ1bmN0aW9uIGludGVydmFsSGFuZGxlcigpIHsgc3RyZWFtLl9uKHNlbGYuaSsrKTsgfVxuICAgICAgICB0aGlzLmludGVydmFsSUQgPSBzZXRJbnRlcnZhbChpbnRlcnZhbEhhbmRsZXIsIHRoaXMucGVyaW9kKTtcbiAgICB9O1xuICAgIFBlcmlvZGljUHJvZHVjZXIucHJvdG90eXBlLl9zdG9wID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5pbnRlcnZhbElEICE9PSAtMSlcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5pbnRlcnZhbElEKTtcbiAgICAgICAgdGhpcy5pbnRlcnZhbElEID0gLTE7XG4gICAgICAgIHRoaXMuaSA9IDA7XG4gICAgfTtcbiAgICByZXR1cm4gUGVyaW9kaWNQcm9kdWNlcjtcbn0oKSk7XG5leHBvcnRzLlBlcmlvZGljUHJvZHVjZXIgPSBQZXJpb2RpY1Byb2R1Y2VyO1xudmFyIERlYnVnT3BlcmF0b3IgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIERlYnVnT3BlcmF0b3IoYXJnLCBpbnMpIHtcbiAgICAgICAgdGhpcy50eXBlID0gJ2RlYnVnJztcbiAgICAgICAgdGhpcy5pbnMgPSBpbnM7XG4gICAgICAgIHRoaXMub3V0ID0gTk87XG4gICAgICAgIHRoaXMucyA9IG5vb3A7XG4gICAgICAgIHRoaXMubCA9ICcnO1xuICAgICAgICBpZiAodHlwZW9mIGFyZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRoaXMubCA9IGFyZztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgYXJnID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aGlzLnMgPSBhcmc7XG4gICAgICAgIH1cbiAgICB9XG4gICAgRGVidWdPcGVyYXRvci5wcm90b3R5cGUuX3N0YXJ0ID0gZnVuY3Rpb24gKG91dCkge1xuICAgICAgICB0aGlzLm91dCA9IG91dDtcbiAgICAgICAgdGhpcy5pbnMuX2FkZCh0aGlzKTtcbiAgICB9O1xuICAgIERlYnVnT3BlcmF0b3IucHJvdG90eXBlLl9zdG9wID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmlucy5fcmVtb3ZlKHRoaXMpO1xuICAgICAgICB0aGlzLm91dCA9IE5PO1xuICAgIH07XG4gICAgRGVidWdPcGVyYXRvci5wcm90b3R5cGUuX24gPSBmdW5jdGlvbiAodCkge1xuICAgICAgICB2YXIgdSA9IHRoaXMub3V0O1xuICAgICAgICBpZiAodSA9PT0gTk8pXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHZhciBzID0gdGhpcy5zLCBsID0gdGhpcy5sO1xuICAgICAgICBpZiAocyAhPT0gbm9vcCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBzKHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICB1Ll9lKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGwpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGwgKyAnOicsIHQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5sb2codCk7XG4gICAgICAgIH1cbiAgICAgICAgdS5fbih0KTtcbiAgICB9O1xuICAgIERlYnVnT3BlcmF0b3IucHJvdG90eXBlLl9lID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICB2YXIgdSA9IHRoaXMub3V0O1xuICAgICAgICBpZiAodSA9PT0gTk8pXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHUuX2UoZXJyKTtcbiAgICB9O1xuICAgIERlYnVnT3BlcmF0b3IucHJvdG90eXBlLl9jID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgdSA9IHRoaXMub3V0O1xuICAgICAgICBpZiAodSA9PT0gTk8pXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHUuX2MoKTtcbiAgICB9O1xuICAgIHJldHVybiBEZWJ1Z09wZXJhdG9yO1xufSgpKTtcbmV4cG9ydHMuRGVidWdPcGVyYXRvciA9IERlYnVnT3BlcmF0b3I7XG52YXIgRHJvcE9wZXJhdG9yID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBEcm9wT3BlcmF0b3IobWF4LCBpbnMpIHtcbiAgICAgICAgdGhpcy50eXBlID0gJ2Ryb3AnO1xuICAgICAgICB0aGlzLmlucyA9IGlucztcbiAgICAgICAgdGhpcy5vdXQgPSBOTztcbiAgICAgICAgdGhpcy5tYXggPSBtYXg7XG4gICAgICAgIHRoaXMuZHJvcHBlZCA9IDA7XG4gICAgfVxuICAgIERyb3BPcGVyYXRvci5wcm90b3R5cGUuX3N0YXJ0ID0gZnVuY3Rpb24gKG91dCkge1xuICAgICAgICB0aGlzLm91dCA9IG91dDtcbiAgICAgICAgdGhpcy5kcm9wcGVkID0gMDtcbiAgICAgICAgdGhpcy5pbnMuX2FkZCh0aGlzKTtcbiAgICB9O1xuICAgIERyb3BPcGVyYXRvci5wcm90b3R5cGUuX3N0b3AgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuaW5zLl9yZW1vdmUodGhpcyk7XG4gICAgICAgIHRoaXMub3V0ID0gTk87XG4gICAgfTtcbiAgICBEcm9wT3BlcmF0b3IucHJvdG90eXBlLl9uID0gZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgdmFyIHUgPSB0aGlzLm91dDtcbiAgICAgICAgaWYgKHUgPT09IE5PKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAodGhpcy5kcm9wcGVkKysgPj0gdGhpcy5tYXgpXG4gICAgICAgICAgICB1Ll9uKHQpO1xuICAgIH07XG4gICAgRHJvcE9wZXJhdG9yLnByb3RvdHlwZS5fZSA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdmFyIHUgPSB0aGlzLm91dDtcbiAgICAgICAgaWYgKHUgPT09IE5PKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB1Ll9lKGVycik7XG4gICAgfTtcbiAgICBEcm9wT3BlcmF0b3IucHJvdG90eXBlLl9jID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgdSA9IHRoaXMub3V0O1xuICAgICAgICBpZiAodSA9PT0gTk8pXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHUuX2MoKTtcbiAgICB9O1xuICAgIHJldHVybiBEcm9wT3BlcmF0b3I7XG59KCkpO1xuZXhwb3J0cy5Ecm9wT3BlcmF0b3IgPSBEcm9wT3BlcmF0b3I7XG52YXIgT3RoZXJJTCA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gT3RoZXJJTChvdXQsIG9wKSB7XG4gICAgICAgIHRoaXMub3V0ID0gb3V0O1xuICAgICAgICB0aGlzLm9wID0gb3A7XG4gICAgfVxuICAgIE90aGVySUwucHJvdG90eXBlLl9uID0gZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgdGhpcy5vcC5lbmQoKTtcbiAgICB9O1xuICAgIE90aGVySUwucHJvdG90eXBlLl9lID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICB0aGlzLm91dC5fZShlcnIpO1xuICAgIH07XG4gICAgT3RoZXJJTC5wcm90b3R5cGUuX2MgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMub3AuZW5kKCk7XG4gICAgfTtcbiAgICByZXR1cm4gT3RoZXJJTDtcbn0oKSk7XG52YXIgRW5kV2hlbk9wZXJhdG9yID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBFbmRXaGVuT3BlcmF0b3IobywgaW5zKSB7XG4gICAgICAgIHRoaXMudHlwZSA9ICdlbmRXaGVuJztcbiAgICAgICAgdGhpcy5pbnMgPSBpbnM7XG4gICAgICAgIHRoaXMub3V0ID0gTk87XG4gICAgICAgIHRoaXMubyA9IG87XG4gICAgICAgIHRoaXMub2lsID0gZXhwb3J0cy5OT19JTDtcbiAgICB9XG4gICAgRW5kV2hlbk9wZXJhdG9yLnByb3RvdHlwZS5fc3RhcnQgPSBmdW5jdGlvbiAob3V0KSB7XG4gICAgICAgIHRoaXMub3V0ID0gb3V0O1xuICAgICAgICB0aGlzLm8uX2FkZCh0aGlzLm9pbCA9IG5ldyBPdGhlcklMKG91dCwgdGhpcykpO1xuICAgICAgICB0aGlzLmlucy5fYWRkKHRoaXMpO1xuICAgIH07XG4gICAgRW5kV2hlbk9wZXJhdG9yLnByb3RvdHlwZS5fc3RvcCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5pbnMuX3JlbW92ZSh0aGlzKTtcbiAgICAgICAgdGhpcy5vLl9yZW1vdmUodGhpcy5vaWwpO1xuICAgICAgICB0aGlzLm91dCA9IE5PO1xuICAgICAgICB0aGlzLm9pbCA9IGV4cG9ydHMuTk9fSUw7XG4gICAgfTtcbiAgICBFbmRXaGVuT3BlcmF0b3IucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHUgPSB0aGlzLm91dDtcbiAgICAgICAgaWYgKHUgPT09IE5PKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB1Ll9jKCk7XG4gICAgfTtcbiAgICBFbmRXaGVuT3BlcmF0b3IucHJvdG90eXBlLl9uID0gZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgdmFyIHUgPSB0aGlzLm91dDtcbiAgICAgICAgaWYgKHUgPT09IE5PKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB1Ll9uKHQpO1xuICAgIH07XG4gICAgRW5kV2hlbk9wZXJhdG9yLnByb3RvdHlwZS5fZSA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdmFyIHUgPSB0aGlzLm91dDtcbiAgICAgICAgaWYgKHUgPT09IE5PKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB1Ll9lKGVycik7XG4gICAgfTtcbiAgICBFbmRXaGVuT3BlcmF0b3IucHJvdG90eXBlLl9jID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmVuZCgpO1xuICAgIH07XG4gICAgcmV0dXJuIEVuZFdoZW5PcGVyYXRvcjtcbn0oKSk7XG5leHBvcnRzLkVuZFdoZW5PcGVyYXRvciA9IEVuZFdoZW5PcGVyYXRvcjtcbnZhciBGaWx0ZXJPcGVyYXRvciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gRmlsdGVyT3BlcmF0b3IocGFzc2VzLCBpbnMpIHtcbiAgICAgICAgdGhpcy50eXBlID0gJ2ZpbHRlcic7XG4gICAgICAgIHRoaXMuaW5zID0gaW5zO1xuICAgICAgICB0aGlzLm91dCA9IE5PO1xuICAgICAgICB0aGlzLnBhc3NlcyA9IHBhc3NlcztcbiAgICB9XG4gICAgRmlsdGVyT3BlcmF0b3IucHJvdG90eXBlLl9zdGFydCA9IGZ1bmN0aW9uIChvdXQpIHtcbiAgICAgICAgdGhpcy5vdXQgPSBvdXQ7XG4gICAgICAgIHRoaXMuaW5zLl9hZGQodGhpcyk7XG4gICAgfTtcbiAgICBGaWx0ZXJPcGVyYXRvci5wcm90b3R5cGUuX3N0b3AgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuaW5zLl9yZW1vdmUodGhpcyk7XG4gICAgICAgIHRoaXMub3V0ID0gTk87XG4gICAgfTtcbiAgICBGaWx0ZXJPcGVyYXRvci5wcm90b3R5cGUuX24gPSBmdW5jdGlvbiAodCkge1xuICAgICAgICB2YXIgdSA9IHRoaXMub3V0O1xuICAgICAgICBpZiAodSA9PT0gTk8pXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wYXNzZXModCkpXG4gICAgICAgICAgICAgICAgdS5fbih0KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdS5fZShlKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgRmlsdGVyT3BlcmF0b3IucHJvdG90eXBlLl9lID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICB2YXIgdSA9IHRoaXMub3V0O1xuICAgICAgICBpZiAodSA9PT0gTk8pXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHUuX2UoZXJyKTtcbiAgICB9O1xuICAgIEZpbHRlck9wZXJhdG9yLnByb3RvdHlwZS5fYyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHUgPSB0aGlzLm91dDtcbiAgICAgICAgaWYgKHUgPT09IE5PKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB1Ll9jKCk7XG4gICAgfTtcbiAgICByZXR1cm4gRmlsdGVyT3BlcmF0b3I7XG59KCkpO1xuZXhwb3J0cy5GaWx0ZXJPcGVyYXRvciA9IEZpbHRlck9wZXJhdG9yO1xudmFyIEZsYXR0ZW5MaXN0ZW5lciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gRmxhdHRlbkxpc3RlbmVyKG91dCwgb3ApIHtcbiAgICAgICAgdGhpcy5vdXQgPSBvdXQ7XG4gICAgICAgIHRoaXMub3AgPSBvcDtcbiAgICB9XG4gICAgRmxhdHRlbkxpc3RlbmVyLnByb3RvdHlwZS5fbiA9IGZ1bmN0aW9uICh0KSB7XG4gICAgICAgIHRoaXMub3V0Ll9uKHQpO1xuICAgIH07XG4gICAgRmxhdHRlbkxpc3RlbmVyLnByb3RvdHlwZS5fZSA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdGhpcy5vdXQuX2UoZXJyKTtcbiAgICB9O1xuICAgIEZsYXR0ZW5MaXN0ZW5lci5wcm90b3R5cGUuX2MgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMub3AuaW5uZXIgPSBOTztcbiAgICAgICAgdGhpcy5vcC5sZXNzKCk7XG4gICAgfTtcbiAgICByZXR1cm4gRmxhdHRlbkxpc3RlbmVyO1xufSgpKTtcbnZhciBGbGF0dGVuT3BlcmF0b3IgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEZsYXR0ZW5PcGVyYXRvcihpbnMpIHtcbiAgICAgICAgdGhpcy50eXBlID0gJ2ZsYXR0ZW4nO1xuICAgICAgICB0aGlzLmlucyA9IGlucztcbiAgICAgICAgdGhpcy5vdXQgPSBOTztcbiAgICAgICAgdGhpcy5vcGVuID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pbm5lciA9IE5PO1xuICAgICAgICB0aGlzLmlsID0gZXhwb3J0cy5OT19JTDtcbiAgICB9XG4gICAgRmxhdHRlbk9wZXJhdG9yLnByb3RvdHlwZS5fc3RhcnQgPSBmdW5jdGlvbiAob3V0KSB7XG4gICAgICAgIHRoaXMub3V0ID0gb3V0O1xuICAgICAgICB0aGlzLm9wZW4gPSB0cnVlO1xuICAgICAgICB0aGlzLmlubmVyID0gTk87XG4gICAgICAgIHRoaXMuaWwgPSBleHBvcnRzLk5PX0lMO1xuICAgICAgICB0aGlzLmlucy5fYWRkKHRoaXMpO1xuICAgIH07XG4gICAgRmxhdHRlbk9wZXJhdG9yLnByb3RvdHlwZS5fc3RvcCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5pbnMuX3JlbW92ZSh0aGlzKTtcbiAgICAgICAgaWYgKHRoaXMuaW5uZXIgIT09IE5PKVxuICAgICAgICAgICAgdGhpcy5pbm5lci5fcmVtb3ZlKHRoaXMuaWwpO1xuICAgICAgICB0aGlzLm91dCA9IE5PO1xuICAgICAgICB0aGlzLm9wZW4gPSB0cnVlO1xuICAgICAgICB0aGlzLmlubmVyID0gTk87XG4gICAgICAgIHRoaXMuaWwgPSBleHBvcnRzLk5PX0lMO1xuICAgIH07XG4gICAgRmxhdHRlbk9wZXJhdG9yLnByb3RvdHlwZS5sZXNzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgdSA9IHRoaXMub3V0O1xuICAgICAgICBpZiAodSA9PT0gTk8pXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmICghdGhpcy5vcGVuICYmIHRoaXMuaW5uZXIgPT09IE5PKVxuICAgICAgICAgICAgdS5fYygpO1xuICAgIH07XG4gICAgRmxhdHRlbk9wZXJhdG9yLnByb3RvdHlwZS5fbiA9IGZ1bmN0aW9uIChzKSB7XG4gICAgICAgIHZhciB1ID0gdGhpcy5vdXQ7XG4gICAgICAgIGlmICh1ID09PSBOTylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIF9hID0gdGhpcywgaW5uZXIgPSBfYS5pbm5lciwgaWwgPSBfYS5pbDtcbiAgICAgICAgaWYgKHMgPT09IGlubmVyICYmIHMuX3Byb2QgIT09IE5PKVxuICAgICAgICAgICAgcy5fc3RvcE5vdygpO1xuICAgICAgICBpZiAoaW5uZXIgIT09IE5PICYmIGlsICE9PSBleHBvcnRzLk5PX0lMKVxuICAgICAgICAgICAgaW5uZXIuX3JlbW92ZShpbCk7XG4gICAgICAgICh0aGlzLmlubmVyID0gcykuX2FkZCh0aGlzLmlsID0gbmV3IEZsYXR0ZW5MaXN0ZW5lcih1LCB0aGlzKSk7XG4gICAgfTtcbiAgICBGbGF0dGVuT3BlcmF0b3IucHJvdG90eXBlLl9lID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICB2YXIgdSA9IHRoaXMub3V0O1xuICAgICAgICBpZiAodSA9PT0gTk8pXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHUuX2UoZXJyKTtcbiAgICB9O1xuICAgIEZsYXR0ZW5PcGVyYXRvci5wcm90b3R5cGUuX2MgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMub3BlbiA9IGZhbHNlO1xuICAgICAgICB0aGlzLmxlc3MoKTtcbiAgICB9O1xuICAgIHJldHVybiBGbGF0dGVuT3BlcmF0b3I7XG59KCkpO1xuZXhwb3J0cy5GbGF0dGVuT3BlcmF0b3IgPSBGbGF0dGVuT3BlcmF0b3I7XG52YXIgRm9sZE9wZXJhdG9yID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBGb2xkT3BlcmF0b3IoZiwgc2VlZCwgaW5zKSB7XG4gICAgICAgIHRoaXMudHlwZSA9ICdmb2xkJztcbiAgICAgICAgdGhpcy5pbnMgPSBpbnM7XG4gICAgICAgIHRoaXMub3V0ID0gTk87XG4gICAgICAgIHRoaXMuZiA9IGY7XG4gICAgICAgIHRoaXMuYWNjID0gdGhpcy5zZWVkID0gc2VlZDtcbiAgICB9XG4gICAgRm9sZE9wZXJhdG9yLnByb3RvdHlwZS5fc3RhcnQgPSBmdW5jdGlvbiAob3V0KSB7XG4gICAgICAgIHRoaXMub3V0ID0gb3V0O1xuICAgICAgICB0aGlzLmFjYyA9IHRoaXMuc2VlZDtcbiAgICAgICAgb3V0Ll9uKHRoaXMuYWNjKTtcbiAgICAgICAgdGhpcy5pbnMuX2FkZCh0aGlzKTtcbiAgICB9O1xuICAgIEZvbGRPcGVyYXRvci5wcm90b3R5cGUuX3N0b3AgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuaW5zLl9yZW1vdmUodGhpcyk7XG4gICAgICAgIHRoaXMub3V0ID0gTk87XG4gICAgICAgIHRoaXMuYWNjID0gdGhpcy5zZWVkO1xuICAgIH07XG4gICAgRm9sZE9wZXJhdG9yLnByb3RvdHlwZS5fbiA9IGZ1bmN0aW9uICh0KSB7XG4gICAgICAgIHZhciB1ID0gdGhpcy5vdXQ7XG4gICAgICAgIGlmICh1ID09PSBOTylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHUuX24odGhpcy5hY2MgPSB0aGlzLmYodGhpcy5hY2MsIHQpKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdS5fZShlKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgRm9sZE9wZXJhdG9yLnByb3RvdHlwZS5fZSA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdmFyIHUgPSB0aGlzLm91dDtcbiAgICAgICAgaWYgKHUgPT09IE5PKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB1Ll9lKGVycik7XG4gICAgfTtcbiAgICBGb2xkT3BlcmF0b3IucHJvdG90eXBlLl9jID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgdSA9IHRoaXMub3V0O1xuICAgICAgICBpZiAodSA9PT0gTk8pXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHUuX2MoKTtcbiAgICB9O1xuICAgIHJldHVybiBGb2xkT3BlcmF0b3I7XG59KCkpO1xuZXhwb3J0cy5Gb2xkT3BlcmF0b3IgPSBGb2xkT3BlcmF0b3I7XG52YXIgTGFzdE9wZXJhdG9yID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBMYXN0T3BlcmF0b3IoaW5zKSB7XG4gICAgICAgIHRoaXMudHlwZSA9ICdsYXN0JztcbiAgICAgICAgdGhpcy5pbnMgPSBpbnM7XG4gICAgICAgIHRoaXMub3V0ID0gTk87XG4gICAgICAgIHRoaXMuaGFzID0gZmFsc2U7XG4gICAgICAgIHRoaXMudmFsID0gTk87XG4gICAgfVxuICAgIExhc3RPcGVyYXRvci5wcm90b3R5cGUuX3N0YXJ0ID0gZnVuY3Rpb24gKG91dCkge1xuICAgICAgICB0aGlzLm91dCA9IG91dDtcbiAgICAgICAgdGhpcy5oYXMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pbnMuX2FkZCh0aGlzKTtcbiAgICB9O1xuICAgIExhc3RPcGVyYXRvci5wcm90b3R5cGUuX3N0b3AgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuaW5zLl9yZW1vdmUodGhpcyk7XG4gICAgICAgIHRoaXMub3V0ID0gTk87XG4gICAgICAgIHRoaXMudmFsID0gTk87XG4gICAgfTtcbiAgICBMYXN0T3BlcmF0b3IucHJvdG90eXBlLl9uID0gZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgdGhpcy5oYXMgPSB0cnVlO1xuICAgICAgICB0aGlzLnZhbCA9IHQ7XG4gICAgfTtcbiAgICBMYXN0T3BlcmF0b3IucHJvdG90eXBlLl9lID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICB2YXIgdSA9IHRoaXMub3V0O1xuICAgICAgICBpZiAodSA9PT0gTk8pXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHUuX2UoZXJyKTtcbiAgICB9O1xuICAgIExhc3RPcGVyYXRvci5wcm90b3R5cGUuX2MgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB1ID0gdGhpcy5vdXQ7XG4gICAgICAgIGlmICh1ID09PSBOTylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKHRoaXMuaGFzKSB7XG4gICAgICAgICAgICB1Ll9uKHRoaXMudmFsKTtcbiAgICAgICAgICAgIHUuX2MoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHUuX2UoJ1RPRE8gc2hvdyBwcm9wZXIgZXJyb3InKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIExhc3RPcGVyYXRvcjtcbn0oKSk7XG5leHBvcnRzLkxhc3RPcGVyYXRvciA9IExhc3RPcGVyYXRvcjtcbnZhciBNYXBGbGF0dGVuSW5uZXIgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIE1hcEZsYXR0ZW5Jbm5lcihvdXQsIG9wKSB7XG4gICAgICAgIHRoaXMub3V0ID0gb3V0O1xuICAgICAgICB0aGlzLm9wID0gb3A7XG4gICAgfVxuICAgIE1hcEZsYXR0ZW5Jbm5lci5wcm90b3R5cGUuX24gPSBmdW5jdGlvbiAocikge1xuICAgICAgICB0aGlzLm91dC5fbihyKTtcbiAgICB9O1xuICAgIE1hcEZsYXR0ZW5Jbm5lci5wcm90b3R5cGUuX2UgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHRoaXMub3V0Ll9lKGVycik7XG4gICAgfTtcbiAgICBNYXBGbGF0dGVuSW5uZXIucHJvdG90eXBlLl9jID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLm9wLmlubmVyID0gTk87XG4gICAgICAgIHRoaXMub3AubGVzcygpO1xuICAgIH07XG4gICAgcmV0dXJuIE1hcEZsYXR0ZW5Jbm5lcjtcbn0oKSk7XG52YXIgTWFwRmxhdHRlbk9wZXJhdG9yID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBNYXBGbGF0dGVuT3BlcmF0b3IobWFwT3ApIHtcbiAgICAgICAgdGhpcy50eXBlID0gbWFwT3AudHlwZSArIFwiK2ZsYXR0ZW5cIjtcbiAgICAgICAgdGhpcy5pbnMgPSBtYXBPcC5pbnM7XG4gICAgICAgIHRoaXMub3V0ID0gTk87XG4gICAgICAgIHRoaXMubWFwT3AgPSBtYXBPcDtcbiAgICAgICAgdGhpcy5pbm5lciA9IE5PO1xuICAgICAgICB0aGlzLmlsID0gZXhwb3J0cy5OT19JTDtcbiAgICAgICAgdGhpcy5vcGVuID0gdHJ1ZTtcbiAgICB9XG4gICAgTWFwRmxhdHRlbk9wZXJhdG9yLnByb3RvdHlwZS5fc3RhcnQgPSBmdW5jdGlvbiAob3V0KSB7XG4gICAgICAgIHRoaXMub3V0ID0gb3V0O1xuICAgICAgICB0aGlzLmlubmVyID0gTk87XG4gICAgICAgIHRoaXMuaWwgPSBleHBvcnRzLk5PX0lMO1xuICAgICAgICB0aGlzLm9wZW4gPSB0cnVlO1xuICAgICAgICB0aGlzLm1hcE9wLmlucy5fYWRkKHRoaXMpO1xuICAgIH07XG4gICAgTWFwRmxhdHRlbk9wZXJhdG9yLnByb3RvdHlwZS5fc3RvcCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5tYXBPcC5pbnMuX3JlbW92ZSh0aGlzKTtcbiAgICAgICAgaWYgKHRoaXMuaW5uZXIgIT09IE5PKVxuICAgICAgICAgICAgdGhpcy5pbm5lci5fcmVtb3ZlKHRoaXMuaWwpO1xuICAgICAgICB0aGlzLm91dCA9IE5PO1xuICAgICAgICB0aGlzLmlubmVyID0gTk87XG4gICAgICAgIHRoaXMuaWwgPSBleHBvcnRzLk5PX0lMO1xuICAgIH07XG4gICAgTWFwRmxhdHRlbk9wZXJhdG9yLnByb3RvdHlwZS5sZXNzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMub3BlbiAmJiB0aGlzLmlubmVyID09PSBOTykge1xuICAgICAgICAgICAgdmFyIHUgPSB0aGlzLm91dDtcbiAgICAgICAgICAgIGlmICh1ID09PSBOTylcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB1Ll9jKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE1hcEZsYXR0ZW5PcGVyYXRvci5wcm90b3R5cGUuX24gPSBmdW5jdGlvbiAodikge1xuICAgICAgICB2YXIgdSA9IHRoaXMub3V0O1xuICAgICAgICBpZiAodSA9PT0gTk8pXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHZhciBfYSA9IHRoaXMsIGlubmVyID0gX2EuaW5uZXIsIGlsID0gX2EuaWw7XG4gICAgICAgIHZhciBzO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcyA9IHRoaXMubWFwT3AucHJvamVjdCh2KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdS5fZShlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAocyA9PT0gaW5uZXIgJiYgcy5fcHJvZCAhPT0gTk8pXG4gICAgICAgICAgICBzLl9zdG9wTm93KCk7XG4gICAgICAgIGlmIChpbm5lciAhPT0gTk8gJiYgaWwgIT09IGV4cG9ydHMuTk9fSUwpXG4gICAgICAgICAgICBpbm5lci5fcmVtb3ZlKGlsKTtcbiAgICAgICAgKHRoaXMuaW5uZXIgPSBzKS5fYWRkKHRoaXMuaWwgPSBuZXcgTWFwRmxhdHRlbklubmVyKHUsIHRoaXMpKTtcbiAgICB9O1xuICAgIE1hcEZsYXR0ZW5PcGVyYXRvci5wcm90b3R5cGUuX2UgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHZhciB1ID0gdGhpcy5vdXQ7XG4gICAgICAgIGlmICh1ID09PSBOTylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdS5fZShlcnIpO1xuICAgIH07XG4gICAgTWFwRmxhdHRlbk9wZXJhdG9yLnByb3RvdHlwZS5fYyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5vcGVuID0gZmFsc2U7XG4gICAgICAgIHRoaXMubGVzcygpO1xuICAgIH07XG4gICAgcmV0dXJuIE1hcEZsYXR0ZW5PcGVyYXRvcjtcbn0oKSk7XG5leHBvcnRzLk1hcEZsYXR0ZW5PcGVyYXRvciA9IE1hcEZsYXR0ZW5PcGVyYXRvcjtcbnZhciBNYXBPcGVyYXRvciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gTWFwT3BlcmF0b3IocHJvamVjdCwgaW5zKSB7XG4gICAgICAgIHRoaXMudHlwZSA9ICdtYXAnO1xuICAgICAgICB0aGlzLmlucyA9IGlucztcbiAgICAgICAgdGhpcy5vdXQgPSBOTztcbiAgICAgICAgdGhpcy5wcm9qZWN0ID0gcHJvamVjdDtcbiAgICB9XG4gICAgTWFwT3BlcmF0b3IucHJvdG90eXBlLl9zdGFydCA9IGZ1bmN0aW9uIChvdXQpIHtcbiAgICAgICAgdGhpcy5vdXQgPSBvdXQ7XG4gICAgICAgIHRoaXMuaW5zLl9hZGQodGhpcyk7XG4gICAgfTtcbiAgICBNYXBPcGVyYXRvci5wcm90b3R5cGUuX3N0b3AgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuaW5zLl9yZW1vdmUodGhpcyk7XG4gICAgICAgIHRoaXMub3V0ID0gTk87XG4gICAgfTtcbiAgICBNYXBPcGVyYXRvci5wcm90b3R5cGUuX24gPSBmdW5jdGlvbiAodCkge1xuICAgICAgICB2YXIgdSA9IHRoaXMub3V0O1xuICAgICAgICBpZiAodSA9PT0gTk8pXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB1Ll9uKHRoaXMucHJvamVjdCh0KSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHUuX2UoZSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE1hcE9wZXJhdG9yLnByb3RvdHlwZS5fZSA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdmFyIHUgPSB0aGlzLm91dDtcbiAgICAgICAgaWYgKHUgPT09IE5PKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB1Ll9lKGVycik7XG4gICAgfTtcbiAgICBNYXBPcGVyYXRvci5wcm90b3R5cGUuX2MgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB1ID0gdGhpcy5vdXQ7XG4gICAgICAgIGlmICh1ID09PSBOTylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdS5fYygpO1xuICAgIH07XG4gICAgcmV0dXJuIE1hcE9wZXJhdG9yO1xufSgpKTtcbmV4cG9ydHMuTWFwT3BlcmF0b3IgPSBNYXBPcGVyYXRvcjtcbnZhciBGaWx0ZXJNYXBPcGVyYXRvciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEZpbHRlck1hcE9wZXJhdG9yLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEZpbHRlck1hcE9wZXJhdG9yKHBhc3NlcywgcHJvamVjdCwgaW5zKSB7XG4gICAgICAgIF9zdXBlci5jYWxsKHRoaXMsIHByb2plY3QsIGlucyk7XG4gICAgICAgIHRoaXMudHlwZSA9ICdmaWx0ZXIrbWFwJztcbiAgICAgICAgdGhpcy5wYXNzZXMgPSBwYXNzZXM7XG4gICAgfVxuICAgIEZpbHRlck1hcE9wZXJhdG9yLnByb3RvdHlwZS5fbiA9IGZ1bmN0aW9uICh2KSB7XG4gICAgICAgIGlmICh0aGlzLnBhc3Nlcyh2KSkge1xuICAgICAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5fbi5jYWxsKHRoaXMsIHYpO1xuICAgICAgICB9XG4gICAgICAgIDtcbiAgICB9O1xuICAgIHJldHVybiBGaWx0ZXJNYXBPcGVyYXRvcjtcbn0oTWFwT3BlcmF0b3IpKTtcbmV4cG9ydHMuRmlsdGVyTWFwT3BlcmF0b3IgPSBGaWx0ZXJNYXBPcGVyYXRvcjtcbnZhciBSZW1lbWJlck9wZXJhdG9yID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBSZW1lbWJlck9wZXJhdG9yKGlucykge1xuICAgICAgICB0aGlzLnR5cGUgPSAncmVtZW1iZXInO1xuICAgICAgICB0aGlzLmlucyA9IGlucztcbiAgICAgICAgdGhpcy5vdXQgPSBOTztcbiAgICB9XG4gICAgUmVtZW1iZXJPcGVyYXRvci5wcm90b3R5cGUuX3N0YXJ0ID0gZnVuY3Rpb24gKG91dCkge1xuICAgICAgICB0aGlzLm91dCA9IG91dDtcbiAgICAgICAgdGhpcy5pbnMuX2FkZChvdXQpO1xuICAgIH07XG4gICAgUmVtZW1iZXJPcGVyYXRvci5wcm90b3R5cGUuX3N0b3AgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuaW5zLl9yZW1vdmUodGhpcy5vdXQpO1xuICAgICAgICB0aGlzLm91dCA9IE5PO1xuICAgIH07XG4gICAgcmV0dXJuIFJlbWVtYmVyT3BlcmF0b3I7XG59KCkpO1xuZXhwb3J0cy5SZW1lbWJlck9wZXJhdG9yID0gUmVtZW1iZXJPcGVyYXRvcjtcbnZhciBSZXBsYWNlRXJyb3JPcGVyYXRvciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gUmVwbGFjZUVycm9yT3BlcmF0b3IoZm4sIGlucykge1xuICAgICAgICB0aGlzLnR5cGUgPSAncmVwbGFjZUVycm9yJztcbiAgICAgICAgdGhpcy5pbnMgPSBpbnM7XG4gICAgICAgIHRoaXMub3V0ID0gTk87XG4gICAgICAgIHRoaXMuZm4gPSBmbjtcbiAgICB9XG4gICAgUmVwbGFjZUVycm9yT3BlcmF0b3IucHJvdG90eXBlLl9zdGFydCA9IGZ1bmN0aW9uIChvdXQpIHtcbiAgICAgICAgdGhpcy5vdXQgPSBvdXQ7XG4gICAgICAgIHRoaXMuaW5zLl9hZGQodGhpcyk7XG4gICAgfTtcbiAgICBSZXBsYWNlRXJyb3JPcGVyYXRvci5wcm90b3R5cGUuX3N0b3AgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuaW5zLl9yZW1vdmUodGhpcyk7XG4gICAgICAgIHRoaXMub3V0ID0gTk87XG4gICAgfTtcbiAgICBSZXBsYWNlRXJyb3JPcGVyYXRvci5wcm90b3R5cGUuX24gPSBmdW5jdGlvbiAodCkge1xuICAgICAgICB2YXIgdSA9IHRoaXMub3V0O1xuICAgICAgICBpZiAodSA9PT0gTk8pXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHUuX24odCk7XG4gICAgfTtcbiAgICBSZXBsYWNlRXJyb3JPcGVyYXRvci5wcm90b3R5cGUuX2UgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHZhciB1ID0gdGhpcy5vdXQ7XG4gICAgICAgIGlmICh1ID09PSBOTylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuaW5zLl9yZW1vdmUodGhpcyk7XG4gICAgICAgICAgICAodGhpcy5pbnMgPSB0aGlzLmZuKGVycikpLl9hZGQodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHUuX2UoZSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFJlcGxhY2VFcnJvck9wZXJhdG9yLnByb3RvdHlwZS5fYyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHUgPSB0aGlzLm91dDtcbiAgICAgICAgaWYgKHUgPT09IE5PKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB1Ll9jKCk7XG4gICAgfTtcbiAgICByZXR1cm4gUmVwbGFjZUVycm9yT3BlcmF0b3I7XG59KCkpO1xuZXhwb3J0cy5SZXBsYWNlRXJyb3JPcGVyYXRvciA9IFJlcGxhY2VFcnJvck9wZXJhdG9yO1xudmFyIFN0YXJ0V2l0aE9wZXJhdG9yID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBTdGFydFdpdGhPcGVyYXRvcihpbnMsIHZhbCkge1xuICAgICAgICB0aGlzLnR5cGUgPSAnc3RhcnRXaXRoJztcbiAgICAgICAgdGhpcy5pbnMgPSBpbnM7XG4gICAgICAgIHRoaXMub3V0ID0gTk87XG4gICAgICAgIHRoaXMudmFsID0gdmFsO1xuICAgIH1cbiAgICBTdGFydFdpdGhPcGVyYXRvci5wcm90b3R5cGUuX3N0YXJ0ID0gZnVuY3Rpb24gKG91dCkge1xuICAgICAgICB0aGlzLm91dCA9IG91dDtcbiAgICAgICAgdGhpcy5vdXQuX24odGhpcy52YWwpO1xuICAgICAgICB0aGlzLmlucy5fYWRkKG91dCk7XG4gICAgfTtcbiAgICBTdGFydFdpdGhPcGVyYXRvci5wcm90b3R5cGUuX3N0b3AgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuaW5zLl9yZW1vdmUodGhpcy5vdXQpO1xuICAgICAgICB0aGlzLm91dCA9IE5PO1xuICAgIH07XG4gICAgcmV0dXJuIFN0YXJ0V2l0aE9wZXJhdG9yO1xufSgpKTtcbmV4cG9ydHMuU3RhcnRXaXRoT3BlcmF0b3IgPSBTdGFydFdpdGhPcGVyYXRvcjtcbnZhciBUYWtlT3BlcmF0b3IgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFRha2VPcGVyYXRvcihtYXgsIGlucykge1xuICAgICAgICB0aGlzLnR5cGUgPSAndGFrZSc7XG4gICAgICAgIHRoaXMuaW5zID0gaW5zO1xuICAgICAgICB0aGlzLm91dCA9IE5PO1xuICAgICAgICB0aGlzLm1heCA9IG1heDtcbiAgICAgICAgdGhpcy50YWtlbiA9IDA7XG4gICAgfVxuICAgIFRha2VPcGVyYXRvci5wcm90b3R5cGUuX3N0YXJ0ID0gZnVuY3Rpb24gKG91dCkge1xuICAgICAgICB0aGlzLm91dCA9IG91dDtcbiAgICAgICAgdGhpcy50YWtlbiA9IDA7XG4gICAgICAgIHRoaXMuaW5zLl9hZGQodGhpcyk7XG4gICAgfTtcbiAgICBUYWtlT3BlcmF0b3IucHJvdG90eXBlLl9zdG9wID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmlucy5fcmVtb3ZlKHRoaXMpO1xuICAgICAgICB0aGlzLm91dCA9IE5PO1xuICAgIH07XG4gICAgVGFrZU9wZXJhdG9yLnByb3RvdHlwZS5fbiA9IGZ1bmN0aW9uICh0KSB7XG4gICAgICAgIHZhciB1ID0gdGhpcy5vdXQ7XG4gICAgICAgIGlmICh1ID09PSBOTylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKHRoaXMudGFrZW4rKyA8IHRoaXMubWF4IC0gMSkge1xuICAgICAgICAgICAgdS5fbih0KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHUuX24odCk7XG4gICAgICAgICAgICB1Ll9jKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFRha2VPcGVyYXRvci5wcm90b3R5cGUuX2UgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHZhciB1ID0gdGhpcy5vdXQ7XG4gICAgICAgIGlmICh1ID09PSBOTylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdS5fZShlcnIpO1xuICAgIH07XG4gICAgVGFrZU9wZXJhdG9yLnByb3RvdHlwZS5fYyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHUgPSB0aGlzLm91dDtcbiAgICAgICAgaWYgKHUgPT09IE5PKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB1Ll9jKCk7XG4gICAgfTtcbiAgICByZXR1cm4gVGFrZU9wZXJhdG9yO1xufSgpKTtcbmV4cG9ydHMuVGFrZU9wZXJhdG9yID0gVGFrZU9wZXJhdG9yO1xudmFyIFN0cmVhbSA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gU3RyZWFtKHByb2R1Y2VyKSB7XG4gICAgICAgIHRoaXMuX3Byb2QgPSBwcm9kdWNlciB8fCBOTztcbiAgICAgICAgdGhpcy5faWxzID0gW107XG4gICAgICAgIHRoaXMuX3N0b3BJRCA9IE5PO1xuICAgICAgICB0aGlzLl90YXJnZXQgPSBOTztcbiAgICAgICAgdGhpcy5fZXJyID0gTk87XG4gICAgfVxuICAgIFN0cmVhbS5wcm90b3R5cGUuX24gPSBmdW5jdGlvbiAodCkge1xuICAgICAgICB2YXIgYSA9IHRoaXMuX2lscztcbiAgICAgICAgdmFyIEwgPSBhLmxlbmd0aDtcbiAgICAgICAgaWYgKEwgPT0gMSlcbiAgICAgICAgICAgIGFbMF0uX24odCk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIGIgPSBjb3B5KGEpO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBMOyBpKyspXG4gICAgICAgICAgICAgICAgYltpXS5fbih0KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3RyZWFtLnByb3RvdHlwZS5fZSA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgaWYgKHRoaXMuX2VyciAhPT0gTk8pXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMuX2VyciA9IGVycjtcbiAgICAgICAgdmFyIGEgPSB0aGlzLl9pbHM7XG4gICAgICAgIHZhciBMID0gYS5sZW5ndGg7XG4gICAgICAgIGlmIChMID09IDEpXG4gICAgICAgICAgICBhWzBdLl9lKGVycik7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIGIgPSBjb3B5KGEpO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBMOyBpKyspXG4gICAgICAgICAgICAgICAgYltpXS5fZShlcnIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3goKTtcbiAgICB9O1xuICAgIFN0cmVhbS5wcm90b3R5cGUuX2MgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhID0gdGhpcy5faWxzO1xuICAgICAgICB2YXIgTCA9IGEubGVuZ3RoO1xuICAgICAgICBpZiAoTCA9PSAxKVxuICAgICAgICAgICAgYVswXS5fYygpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhciBiID0gY29weShhKTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgTDsgaSsrKVxuICAgICAgICAgICAgICAgIGJbaV0uX2MoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl94KCk7XG4gICAgfTtcbiAgICBTdHJlYW0ucHJvdG90eXBlLl94ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5faWxzLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKHRoaXMuX3Byb2QgIT09IE5PKVxuICAgICAgICAgICAgdGhpcy5fcHJvZC5fc3RvcCgpO1xuICAgICAgICB0aGlzLl9lcnIgPSBOTztcbiAgICAgICAgdGhpcy5faWxzID0gW107XG4gICAgfTtcbiAgICBTdHJlYW0ucHJvdG90eXBlLl9zdG9wTm93ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBXQVJOSU5HOiBjb2RlIHRoYXQgY2FsbHMgdGhpcyBtZXRob2Qgc2hvdWxkXG4gICAgICAgIC8vIGZpcnN0IGNoZWNrIGlmIHRoaXMuX3Byb2QgaXMgdmFsaWQgKG5vdCBgTk9gKVxuICAgICAgICB0aGlzLl9wcm9kLl9zdG9wKCk7XG4gICAgICAgIHRoaXMuX2VyciA9IE5PO1xuICAgICAgICB0aGlzLl9zdG9wSUQgPSBOTztcbiAgICB9O1xuICAgIFN0cmVhbS5wcm90b3R5cGUuX2FkZCA9IGZ1bmN0aW9uIChpbCkge1xuICAgICAgICB2YXIgdGEgPSB0aGlzLl90YXJnZXQ7XG4gICAgICAgIGlmICh0YSAhPT0gTk8pXG4gICAgICAgICAgICByZXR1cm4gdGEuX2FkZChpbCk7XG4gICAgICAgIHZhciBhID0gdGhpcy5faWxzO1xuICAgICAgICBhLnB1c2goaWwpO1xuICAgICAgICBpZiAoYS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9zdG9wSUQgIT09IE5PKSB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3N0b3BJRCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RvcElEID0gTk87XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgcCA9IHRoaXMuX3Byb2Q7XG4gICAgICAgICAgICBpZiAocCAhPT0gTk8pXG4gICAgICAgICAgICAgICAgcC5fc3RhcnQodGhpcyk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN0cmVhbS5wcm90b3R5cGUuX3JlbW92ZSA9IGZ1bmN0aW9uIChpbCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgdGEgPSB0aGlzLl90YXJnZXQ7XG4gICAgICAgIGlmICh0YSAhPT0gTk8pXG4gICAgICAgICAgICByZXR1cm4gdGEuX3JlbW92ZShpbCk7XG4gICAgICAgIHZhciBhID0gdGhpcy5faWxzO1xuICAgICAgICB2YXIgaSA9IGEuaW5kZXhPZihpbCk7XG4gICAgICAgIGlmIChpID4gLTEpIHtcbiAgICAgICAgICAgIGEuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgaWYgKHRoaXMuX3Byb2QgIT09IE5PICYmIGEubGVuZ3RoIDw9IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIgPSBOTztcbiAgICAgICAgICAgICAgICB0aGlzLl9zdG9wSUQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgcmV0dXJuIF90aGlzLl9zdG9wTm93KCk7IH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9wcnVuZUN5Y2xlcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICAvLyBJZiBhbGwgcGF0aHMgc3RlbW1pbmcgZnJvbSBgdGhpc2Agc3RyZWFtIGV2ZW50dWFsbHkgZW5kIGF0IGB0aGlzYFxuICAgIC8vIHN0cmVhbSwgdGhlbiB3ZSByZW1vdmUgdGhlIHNpbmdsZSBsaXN0ZW5lciBvZiBgdGhpc2Agc3RyZWFtLCB0b1xuICAgIC8vIGZvcmNlIGl0IHRvIGVuZCBpdHMgZXhlY3V0aW9uIGFuZCBkaXNwb3NlIHJlc291cmNlcy4gVGhpcyBtZXRob2RcbiAgICAvLyBhc3N1bWVzIGFzIGEgcHJlY29uZGl0aW9uIHRoYXQgdGhpcy5faWxzIGhhcyBqdXN0IG9uZSBsaXN0ZW5lci5cbiAgICBTdHJlYW0ucHJvdG90eXBlLl9wcnVuZUN5Y2xlcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuX2hhc05vU2lua3ModGhpcywgW10pKSB7XG4gICAgICAgICAgICB0aGlzLl9yZW1vdmUodGhpcy5faWxzWzBdKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgLy8gQ2hlY2tzIHdoZXRoZXIgKnRoZXJlIGlzIG5vKiBwYXRoIHN0YXJ0aW5nIGZyb20gYHhgIHRoYXQgbGVhZHMgdG8gYW4gZW5kXG4gICAgLy8gbGlzdGVuZXIgKHNpbmspIGluIHRoZSBzdHJlYW0gZ3JhcGgsIGZvbGxvd2luZyBlZGdlcyBBLT5CIHdoZXJlIEIgaXMgYVxuICAgIC8vIGxpc3RlbmVyIG9mIEEuIFRoaXMgbWVhbnMgdGhlc2UgcGF0aHMgY29uc3RpdHV0ZSBhIGN5Y2xlIHNvbWVob3cuIElzIGdpdmVuXG4gICAgLy8gYSB0cmFjZSBvZiBhbGwgdmlzaXRlZCBub2RlcyBzbyBmYXIuXG4gICAgU3RyZWFtLnByb3RvdHlwZS5faGFzTm9TaW5rcyA9IGZ1bmN0aW9uICh4LCB0cmFjZSkge1xuICAgICAgICBpZiAodHJhY2UuaW5kZXhPZih4KSAhPT0gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHgub3V0ID09PSB0aGlzKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh4Lm91dCAmJiB4Lm91dCAhPT0gTk8pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9oYXNOb1NpbmtzKHgub3V0LCB0cmFjZS5jb25jYXQoeCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHguX2lscykge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIE4gPSB4Ll9pbHMubGVuZ3RoOyBpIDwgTjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9oYXNOb1NpbmtzKHguX2lsc1tpXSwgdHJhY2UuY29uY2F0KHgpKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN0cmVhbS5wcm90b3R5cGUuY3RvciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBNZW1vcnlTdHJlYW0gPyBNZW1vcnlTdHJlYW0gOiBTdHJlYW07XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBBZGRzIGEgTGlzdGVuZXIgdG8gdGhlIFN0cmVhbS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7TGlzdGVuZXI8VD59IGxpc3RlbmVyXG4gICAgICovXG4gICAgU3RyZWFtLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IGZ1bmN0aW9uIChsaXN0ZW5lcikge1xuICAgICAgICBpZiAodHlwZW9mIGxpc3RlbmVyLm5leHQgIT09ICdmdW5jdGlvbidcbiAgICAgICAgICAgIHx8IHR5cGVvZiBsaXN0ZW5lci5lcnJvciAhPT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgICAgfHwgdHlwZW9mIGxpc3RlbmVyLmNvbXBsZXRlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3N0cmVhbS5hZGRMaXN0ZW5lcigpIHJlcXVpcmVzIGFsbCB0aHJlZSBuZXh0LCBlcnJvciwgJyArXG4gICAgICAgICAgICAgICAgJ2FuZCBjb21wbGV0ZSBmdW5jdGlvbnMuJyk7XG4gICAgICAgIH1cbiAgICAgICAgbGlzdGVuZXIuX24gPSBsaXN0ZW5lci5uZXh0O1xuICAgICAgICBsaXN0ZW5lci5fZSA9IGxpc3RlbmVyLmVycm9yO1xuICAgICAgICBsaXN0ZW5lci5fYyA9IGxpc3RlbmVyLmNvbXBsZXRlO1xuICAgICAgICB0aGlzLl9hZGQobGlzdGVuZXIpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBhIExpc3RlbmVyIGZyb20gdGhlIFN0cmVhbSwgYXNzdW1pbmcgdGhlIExpc3RlbmVyIHdhcyBhZGRlZCB0byBpdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7TGlzdGVuZXI8VD59IGxpc3RlbmVyXG4gICAgICovXG4gICAgU3RyZWFtLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lciA9IGZ1bmN0aW9uIChsaXN0ZW5lcikge1xuICAgICAgICB0aGlzLl9yZW1vdmUobGlzdGVuZXIpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBTdHJlYW0gZ2l2ZW4gYSBQcm9kdWNlci5cbiAgICAgKlxuICAgICAqIEBmYWN0b3J5IHRydWVcbiAgICAgKiBAcGFyYW0ge1Byb2R1Y2VyfSBwcm9kdWNlciBBbiBvcHRpb25hbCBQcm9kdWNlciB0aGF0IGRpY3RhdGVzIGhvdyB0b1xuICAgICAqIHN0YXJ0LCBnZW5lcmF0ZSBldmVudHMsIGFuZCBzdG9wIHRoZSBTdHJlYW0uXG4gICAgICogQHJldHVybiB7U3RyZWFtfVxuICAgICAqL1xuICAgIFN0cmVhbS5jcmVhdGUgPSBmdW5jdGlvbiAocHJvZHVjZXIpIHtcbiAgICAgICAgaWYgKHByb2R1Y2VyKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHByb2R1Y2VyLnN0YXJ0ICE9PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICAgICAgfHwgdHlwZW9mIHByb2R1Y2VyLnN0b3AgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2R1Y2VyIHJlcXVpcmVzIGJvdGggc3RhcnQgYW5kIHN0b3AgZnVuY3Rpb25zJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpbnRlcm5hbGl6ZVByb2R1Y2VyKHByb2R1Y2VyKTsgLy8gbXV0YXRlcyB0aGUgaW5wdXRcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFN0cmVhbShwcm9kdWNlcik7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IE1lbW9yeVN0cmVhbSBnaXZlbiBhIFByb2R1Y2VyLlxuICAgICAqXG4gICAgICogQGZhY3RvcnkgdHJ1ZVxuICAgICAqIEBwYXJhbSB7UHJvZHVjZXJ9IHByb2R1Y2VyIEFuIG9wdGlvbmFsIFByb2R1Y2VyIHRoYXQgZGljdGF0ZXMgaG93IHRvXG4gICAgICogc3RhcnQsIGdlbmVyYXRlIGV2ZW50cywgYW5kIHN0b3AgdGhlIFN0cmVhbS5cbiAgICAgKiBAcmV0dXJuIHtNZW1vcnlTdHJlYW19XG4gICAgICovXG4gICAgU3RyZWFtLmNyZWF0ZVdpdGhNZW1vcnkgPSBmdW5jdGlvbiAocHJvZHVjZXIpIHtcbiAgICAgICAgaWYgKHByb2R1Y2VyKSB7XG4gICAgICAgICAgICBpbnRlcm5hbGl6ZVByb2R1Y2VyKHByb2R1Y2VyKTsgLy8gbXV0YXRlcyB0aGUgaW5wdXRcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IE1lbW9yeVN0cmVhbShwcm9kdWNlcik7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgU3RyZWFtIHRoYXQgZG9lcyBub3RoaW5nIHdoZW4gc3RhcnRlZC4gSXQgbmV2ZXIgZW1pdHMgYW55IGV2ZW50LlxuICAgICAqXG4gICAgICogTWFyYmxlIGRpYWdyYW06XG4gICAgICpcbiAgICAgKiBgYGB0ZXh0XG4gICAgICogICAgICAgICAgbmV2ZXJcbiAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQGZhY3RvcnkgdHJ1ZVxuICAgICAqIEByZXR1cm4ge1N0cmVhbX1cbiAgICAgKi9cbiAgICBTdHJlYW0ubmV2ZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBuZXcgU3RyZWFtKHsgX3N0YXJ0OiBub29wLCBfc3RvcDogbm9vcCB9KTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBTdHJlYW0gdGhhdCBpbW1lZGlhdGVseSBlbWl0cyB0aGUgXCJjb21wbGV0ZVwiIG5vdGlmaWNhdGlvbiB3aGVuXG4gICAgICogc3RhcnRlZCwgYW5kIHRoYXQncyBpdC5cbiAgICAgKlxuICAgICAqIE1hcmJsZSBkaWFncmFtOlxuICAgICAqXG4gICAgICogYGBgdGV4dFxuICAgICAqIGVtcHR5XG4gICAgICogLXxcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBmYWN0b3J5IHRydWVcbiAgICAgKiBAcmV0dXJuIHtTdHJlYW19XG4gICAgICovXG4gICAgU3RyZWFtLmVtcHR5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gbmV3IFN0cmVhbSh7XG4gICAgICAgICAgICBfc3RhcnQ6IGZ1bmN0aW9uIChpbCkgeyBpbC5fYygpOyB9LFxuICAgICAgICAgICAgX3N0b3A6IG5vb3AsXG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIFN0cmVhbSB0aGF0IGltbWVkaWF0ZWx5IGVtaXRzIGFuIFwiZXJyb3JcIiBub3RpZmljYXRpb24gd2l0aCB0aGVcbiAgICAgKiB2YWx1ZSB5b3UgcGFzc2VkIGFzIHRoZSBgZXJyb3JgIGFyZ3VtZW50IHdoZW4gdGhlIHN0cmVhbSBzdGFydHMsIGFuZCB0aGF0J3NcbiAgICAgKiBpdC5cbiAgICAgKlxuICAgICAqIE1hcmJsZSBkaWFncmFtOlxuICAgICAqXG4gICAgICogYGBgdGV4dFxuICAgICAqIHRocm93KFgpXG4gICAgICogLVhcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBmYWN0b3J5IHRydWVcbiAgICAgKiBAcGFyYW0gZXJyb3IgVGhlIGVycm9yIGV2ZW50IHRvIGVtaXQgb24gdGhlIGNyZWF0ZWQgc3RyZWFtLlxuICAgICAqIEByZXR1cm4ge1N0cmVhbX1cbiAgICAgKi9cbiAgICBTdHJlYW0udGhyb3cgPSBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTdHJlYW0oe1xuICAgICAgICAgICAgX3N0YXJ0OiBmdW5jdGlvbiAoaWwpIHsgaWwuX2UoZXJyb3IpOyB9LFxuICAgICAgICAgICAgX3N0b3A6IG5vb3AsXG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIFN0cmVhbSB0aGF0IGltbWVkaWF0ZWx5IGVtaXRzIHRoZSBhcmd1bWVudHMgdGhhdCB5b3UgZ2l2ZSB0b1xuICAgICAqICpvZiosIHRoZW4gY29tcGxldGVzLlxuICAgICAqXG4gICAgICogTWFyYmxlIGRpYWdyYW06XG4gICAgICpcbiAgICAgKiBgYGB0ZXh0XG4gICAgICogb2YoMSwyLDMpXG4gICAgICogMTIzfFxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQGZhY3RvcnkgdHJ1ZVxuICAgICAqIEBwYXJhbSBhIFRoZSBmaXJzdCB2YWx1ZSB5b3Ugd2FudCB0byBlbWl0IGFzIGFuIGV2ZW50IG9uIHRoZSBzdHJlYW0uXG4gICAgICogQHBhcmFtIGIgVGhlIHNlY29uZCB2YWx1ZSB5b3Ugd2FudCB0byBlbWl0IGFzIGFuIGV2ZW50IG9uIHRoZSBzdHJlYW0uIE9uZVxuICAgICAqIG9yIG1vcmUgb2YgdGhlc2UgdmFsdWVzIG1heSBiZSBnaXZlbiBhcyBhcmd1bWVudHMuXG4gICAgICogQHJldHVybiB7U3RyZWFtfVxuICAgICAqL1xuICAgIFN0cmVhbS5vZiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGl0ZW1zID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBpdGVtc1tfaSAtIDBdID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gU3RyZWFtLmZyb21BcnJheShpdGVtcyk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBhbiBhcnJheSB0byBhIHN0cmVhbS4gVGhlIHJldHVybmVkIHN0cmVhbSB3aWxsIGVtaXQgc3luY2hyb25vdXNseVxuICAgICAqIGFsbCB0aGUgaXRlbXMgaW4gdGhlIGFycmF5LCBhbmQgdGhlbiBjb21wbGV0ZS5cbiAgICAgKlxuICAgICAqIE1hcmJsZSBkaWFncmFtOlxuICAgICAqXG4gICAgICogYGBgdGV4dFxuICAgICAqIGZyb21BcnJheShbMSwyLDNdKVxuICAgICAqIDEyM3xcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBmYWN0b3J5IHRydWVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gYmUgY29udmVydGVkIGFzIGEgc3RyZWFtLlxuICAgICAqIEByZXR1cm4ge1N0cmVhbX1cbiAgICAgKi9cbiAgICBTdHJlYW0uZnJvbUFycmF5ID0gZnVuY3Rpb24gKGFycmF5KSB7XG4gICAgICAgIHJldHVybiBuZXcgU3RyZWFtKG5ldyBGcm9tQXJyYXlQcm9kdWNlcihhcnJheSkpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYSBwcm9taXNlIHRvIGEgc3RyZWFtLiBUaGUgcmV0dXJuZWQgc3RyZWFtIHdpbGwgZW1pdCB0aGUgcmVzb2x2ZWRcbiAgICAgKiB2YWx1ZSBvZiB0aGUgcHJvbWlzZSwgYW5kIHRoZW4gY29tcGxldGUuIEhvd2V2ZXIsIGlmIHRoZSBwcm9taXNlIGlzXG4gICAgICogcmVqZWN0ZWQsIHRoZSBzdHJlYW0gd2lsbCBlbWl0IHRoZSBjb3JyZXNwb25kaW5nIGVycm9yLlxuICAgICAqXG4gICAgICogTWFyYmxlIGRpYWdyYW06XG4gICAgICpcbiAgICAgKiBgYGB0ZXh0XG4gICAgICogZnJvbVByb21pc2UoIC0tLS00MiApXG4gICAgICogLS0tLS0tLS0tLS0tLS0tLS00MnxcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBmYWN0b3J5IHRydWVcbiAgICAgKiBAcGFyYW0ge1Byb21pc2V9IHByb21pc2UgVGhlIHByb21pc2UgdG8gYmUgY29udmVydGVkIGFzIGEgc3RyZWFtLlxuICAgICAqIEByZXR1cm4ge1N0cmVhbX1cbiAgICAgKi9cbiAgICBTdHJlYW0uZnJvbVByb21pc2UgPSBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICByZXR1cm4gbmV3IFN0cmVhbShuZXcgRnJvbVByb21pc2VQcm9kdWNlcihwcm9taXNlKSk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgc3RyZWFtIHRoYXQgcGVyaW9kaWNhbGx5IGVtaXRzIGluY3JlbWVudGFsIG51bWJlcnMsIGV2ZXJ5XG4gICAgICogYHBlcmlvZGAgbWlsbGlzZWNvbmRzLlxuICAgICAqXG4gICAgICogTWFyYmxlIGRpYWdyYW06XG4gICAgICpcbiAgICAgKiBgYGB0ZXh0XG4gICAgICogICAgIHBlcmlvZGljKDEwMDApXG4gICAgICogLS0tMC0tLTEtLS0yLS0tMy0tLTQtLS0uLi5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBmYWN0b3J5IHRydWVcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcGVyaW9kIFRoZSBpbnRlcnZhbCBpbiBtaWxsaXNlY29uZHMgdG8gdXNlIGFzIGEgcmF0ZSBvZlxuICAgICAqIGVtaXNzaW9uLlxuICAgICAqIEByZXR1cm4ge1N0cmVhbX1cbiAgICAgKi9cbiAgICBTdHJlYW0ucGVyaW9kaWMgPSBmdW5jdGlvbiAocGVyaW9kKSB7XG4gICAgICAgIHJldHVybiBuZXcgU3RyZWFtKG5ldyBQZXJpb2RpY1Byb2R1Y2VyKHBlcmlvZCkpO1xuICAgIH07XG4gICAgU3RyZWFtLnByb3RvdHlwZS5fbWFwID0gZnVuY3Rpb24gKHByb2plY3QpIHtcbiAgICAgICAgdmFyIHAgPSB0aGlzLl9wcm9kO1xuICAgICAgICB2YXIgY3RvciA9IHRoaXMuY3RvcigpO1xuICAgICAgICBpZiAocCBpbnN0YW5jZW9mIEZpbHRlck9wZXJhdG9yKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IGN0b3IobmV3IEZpbHRlck1hcE9wZXJhdG9yKHAucGFzc2VzLCBwcm9qZWN0LCBwLmlucykpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwIGluc3RhbmNlb2YgRmlsdGVyTWFwT3BlcmF0b3IpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgY3RvcihuZXcgRmlsdGVyTWFwT3BlcmF0b3IocC5wYXNzZXMsIGNvbXBvc2UyKHByb2plY3QsIHAucHJvamVjdCksIHAuaW5zKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHAgaW5zdGFuY2VvZiBNYXBPcGVyYXRvcikge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBjdG9yKG5ldyBNYXBPcGVyYXRvcihjb21wb3NlMihwcm9qZWN0LCBwLnByb2plY3QpLCBwLmlucykpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgY3RvcihuZXcgTWFwT3BlcmF0b3IocHJvamVjdCwgdGhpcykpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogVHJhbnNmb3JtcyBlYWNoIGV2ZW50IGZyb20gdGhlIGlucHV0IFN0cmVhbSB0aHJvdWdoIGEgYHByb2plY3RgIGZ1bmN0aW9uLFxuICAgICAqIHRvIGdldCBhIFN0cmVhbSB0aGF0IGVtaXRzIHRob3NlIHRyYW5zZm9ybWVkIGV2ZW50cy5cbiAgICAgKlxuICAgICAqIE1hcmJsZSBkaWFncmFtOlxuICAgICAqXG4gICAgICogYGBgdGV4dFxuICAgICAqIC0tMS0tLTMtLTUtLS0tLTctLS0tLS1cbiAgICAgKiAgICBtYXAoaSA9PiBpICogMTApXG4gICAgICogLS0xMC0tMzAtNTAtLS0tNzAtLS0tLVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gcHJvamVjdCBBIGZ1bmN0aW9uIG9mIHR5cGUgYCh0OiBUKSA9PiBVYCB0aGF0IHRha2VzIGV2ZW50XG4gICAgICogYHRgIG9mIHR5cGUgYFRgIGZyb20gdGhlIGlucHV0IFN0cmVhbSBhbmQgcHJvZHVjZXMgYW4gZXZlbnQgb2YgdHlwZSBgVWAsIHRvXG4gICAgICogYmUgZW1pdHRlZCBvbiB0aGUgb3V0cHV0IFN0cmVhbS5cbiAgICAgKiBAcmV0dXJuIHtTdHJlYW19XG4gICAgICovXG4gICAgU3RyZWFtLnByb3RvdHlwZS5tYXAgPSBmdW5jdGlvbiAocHJvamVjdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWFwKHByb2plY3QpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogSXQncyBsaWtlIGBtYXBgLCBidXQgdHJhbnNmb3JtcyBlYWNoIGlucHV0IGV2ZW50IHRvIGFsd2F5cyB0aGUgc2FtZVxuICAgICAqIGNvbnN0YW50IHZhbHVlIG9uIHRoZSBvdXRwdXQgU3RyZWFtLlxuICAgICAqXG4gICAgICogTWFyYmxlIGRpYWdyYW06XG4gICAgICpcbiAgICAgKiBgYGB0ZXh0XG4gICAgICogLS0xLS0tMy0tNS0tLS0tNy0tLS0tXG4gICAgICogICAgICAgbWFwVG8oMTApXG4gICAgICogLS0xMC0tMTAtMTAtLS0tMTAtLS0tXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvamVjdGVkVmFsdWUgQSB2YWx1ZSB0byBlbWl0IG9uIHRoZSBvdXRwdXQgU3RyZWFtIHdoZW5ldmVyIHRoZVxuICAgICAqIGlucHV0IFN0cmVhbSBlbWl0cyBhbnkgdmFsdWUuXG4gICAgICogQHJldHVybiB7U3RyZWFtfVxuICAgICAqL1xuICAgIFN0cmVhbS5wcm90b3R5cGUubWFwVG8gPSBmdW5jdGlvbiAocHJvamVjdGVkVmFsdWUpIHtcbiAgICAgICAgdmFyIHMgPSB0aGlzLm1hcChmdW5jdGlvbiAoKSB7IHJldHVybiBwcm9qZWN0ZWRWYWx1ZTsgfSk7XG4gICAgICAgIHZhciBvcCA9IHMuX3Byb2Q7XG4gICAgICAgIG9wLnR5cGUgPSBvcC50eXBlLnJlcGxhY2UoJ21hcCcsICdtYXBUbycpO1xuICAgICAgICByZXR1cm4gcztcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIE9ubHkgYWxsb3dzIGV2ZW50cyB0aGF0IHBhc3MgdGhlIHRlc3QgZ2l2ZW4gYnkgdGhlIGBwYXNzZXNgIGFyZ3VtZW50LlxuICAgICAqXG4gICAgICogRWFjaCBldmVudCBmcm9tIHRoZSBpbnB1dCBzdHJlYW0gaXMgZ2l2ZW4gdG8gdGhlIGBwYXNzZXNgIGZ1bmN0aW9uLiBJZiB0aGVcbiAgICAgKiBmdW5jdGlvbiByZXR1cm5zIGB0cnVlYCwgdGhlIGV2ZW50IGlzIGZvcndhcmRlZCB0byB0aGUgb3V0cHV0IHN0cmVhbSxcbiAgICAgKiBvdGhlcndpc2UgaXQgaXMgaWdub3JlZCBhbmQgbm90IGZvcndhcmRlZC5cbiAgICAgKlxuICAgICAqIE1hcmJsZSBkaWFncmFtOlxuICAgICAqXG4gICAgICogYGBgdGV4dFxuICAgICAqIC0tMS0tLTItLTMtLS0tLTQtLS0tLTUtLS02LS03LTgtLVxuICAgICAqICAgICBmaWx0ZXIoaSA9PiBpICUgMiA9PT0gMClcbiAgICAgKiAtLS0tLS0yLS0tLS0tLS00LS0tLS0tLS0tNi0tLS04LS1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHBhc3NlcyBBIGZ1bmN0aW9uIG9mIHR5cGUgYCh0OiBUKSArPiBib29sZWFuYCB0aGF0IHRha2VzXG4gICAgICogYW4gZXZlbnQgZnJvbSB0aGUgaW5wdXQgc3RyZWFtIGFuZCBjaGVja3MgaWYgaXQgcGFzc2VzLCBieSByZXR1cm5pbmcgYVxuICAgICAqIGJvb2xlYW4uXG4gICAgICogQHJldHVybiB7U3RyZWFtfVxuICAgICAqL1xuICAgIFN0cmVhbS5wcm90b3R5cGUuZmlsdGVyID0gZnVuY3Rpb24gKHBhc3Nlcykge1xuICAgICAgICB2YXIgcCA9IHRoaXMuX3Byb2Q7XG4gICAgICAgIGlmIChwIGluc3RhbmNlb2YgRmlsdGVyT3BlcmF0b3IpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgU3RyZWFtKG5ldyBGaWx0ZXJPcGVyYXRvcihhbmQocC5wYXNzZXMsIHBhc3NlcyksIHAuaW5zKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBTdHJlYW0obmV3IEZpbHRlck9wZXJhdG9yKHBhc3NlcywgdGhpcykpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogTGV0cyB0aGUgZmlyc3QgYGFtb3VudGAgbWFueSBldmVudHMgZnJvbSB0aGUgaW5wdXQgc3RyZWFtIHBhc3MgdG8gdGhlXG4gICAgICogb3V0cHV0IHN0cmVhbSwgdGhlbiBtYWtlcyB0aGUgb3V0cHV0IHN0cmVhbSBjb21wbGV0ZS5cbiAgICAgKlxuICAgICAqIE1hcmJsZSBkaWFncmFtOlxuICAgICAqXG4gICAgICogYGBgdGV4dFxuICAgICAqIC0tYS0tLWItLWMtLS0tZC0tLWUtLVxuICAgICAqICAgIHRha2UoMylcbiAgICAgKiAtLWEtLS1iLS1jfFxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGFtb3VudCBIb3cgbWFueSBldmVudHMgdG8gYWxsb3cgZnJvbSB0aGUgaW5wdXQgc3RyZWFtXG4gICAgICogYmVmb3JlIGNvbXBsZXRpbmcgdGhlIG91dHB1dCBzdHJlYW0uXG4gICAgICogQHJldHVybiB7U3RyZWFtfVxuICAgICAqL1xuICAgIFN0cmVhbS5wcm90b3R5cGUudGFrZSA9IGZ1bmN0aW9uIChhbW91bnQpIHtcbiAgICAgICAgcmV0dXJuIG5ldyAodGhpcy5jdG9yKCkpKG5ldyBUYWtlT3BlcmF0b3IoYW1vdW50LCB0aGlzKSk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBJZ25vcmVzIHRoZSBmaXJzdCBgYW1vdW50YCBtYW55IGV2ZW50cyBmcm9tIHRoZSBpbnB1dCBzdHJlYW0sIGFuZCB0aGVuXG4gICAgICogYWZ0ZXIgdGhhdCBzdGFydHMgZm9yd2FyZGluZyBldmVudHMgZnJvbSB0aGUgaW5wdXQgc3RyZWFtIHRvIHRoZSBvdXRwdXRcbiAgICAgKiBzdHJlYW0uXG4gICAgICpcbiAgICAgKiBNYXJibGUgZGlhZ3JhbTpcbiAgICAgKlxuICAgICAqIGBgYHRleHRcbiAgICAgKiAtLWEtLS1iLS1jLS0tLWQtLS1lLS1cbiAgICAgKiAgICAgICBkcm9wKDMpXG4gICAgICogLS0tLS0tLS0tLS0tLS1kLS0tZS0tXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYW1vdW50IEhvdyBtYW55IGV2ZW50cyB0byBpZ25vcmUgZnJvbSB0aGUgaW5wdXQgc3RyZWFtXG4gICAgICogYmVmb3JlIGZvcndhcmRpbmcgYWxsIGV2ZW50cyBmcm9tIHRoZSBpbnB1dCBzdHJlYW0gdG8gdGhlIG91dHB1dCBzdHJlYW0uXG4gICAgICogQHJldHVybiB7U3RyZWFtfVxuICAgICAqL1xuICAgIFN0cmVhbS5wcm90b3R5cGUuZHJvcCA9IGZ1bmN0aW9uIChhbW91bnQpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTdHJlYW0obmV3IERyb3BPcGVyYXRvcihhbW91bnQsIHRoaXMpKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFdoZW4gdGhlIGlucHV0IHN0cmVhbSBjb21wbGV0ZXMsIHRoZSBvdXRwdXQgc3RyZWFtIHdpbGwgZW1pdCB0aGUgbGFzdCBldmVudFxuICAgICAqIGVtaXR0ZWQgYnkgdGhlIGlucHV0IHN0cmVhbSwgYW5kIHRoZW4gd2lsbCBhbHNvIGNvbXBsZXRlLlxuICAgICAqXG4gICAgICogTWFyYmxlIGRpYWdyYW06XG4gICAgICpcbiAgICAgKiBgYGB0ZXh0XG4gICAgICogLS1hLS0tYi0tYy0tZC0tLS18XG4gICAgICogICAgICAgbGFzdCgpXG4gICAgICogLS0tLS0tLS0tLS0tLS0tLS1kfFxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQHJldHVybiB7U3RyZWFtfVxuICAgICAqL1xuICAgIFN0cmVhbS5wcm90b3R5cGUubGFzdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTdHJlYW0obmV3IExhc3RPcGVyYXRvcih0aGlzKSk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBQcmVwZW5kcyB0aGUgZ2l2ZW4gYGluaXRpYWxgIHZhbHVlIHRvIHRoZSBzZXF1ZW5jZSBvZiBldmVudHMgZW1pdHRlZCBieSB0aGVcbiAgICAgKiBpbnB1dCBzdHJlYW0uIFRoZSByZXR1cm5lZCBzdHJlYW0gaXMgYSBNZW1vcnlTdHJlYW0sIHdoaWNoIG1lYW5zIGl0IGlzXG4gICAgICogYWxyZWFkeSBgcmVtZW1iZXIoKWAnZC5cbiAgICAgKlxuICAgICAqIE1hcmJsZSBkaWFncmFtOlxuICAgICAqXG4gICAgICogYGBgdGV4dFxuICAgICAqIC0tLTEtLS0yLS0tLS0zLS0tXG4gICAgICogICBzdGFydFdpdGgoMClcbiAgICAgKiAwLS0xLS0tMi0tLS0tMy0tLVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQHBhcmFtIGluaXRpYWwgVGhlIHZhbHVlIG9yIGV2ZW50IHRvIHByZXBlbmQuXG4gICAgICogQHJldHVybiB7TWVtb3J5U3RyZWFtfVxuICAgICAqL1xuICAgIFN0cmVhbS5wcm90b3R5cGUuc3RhcnRXaXRoID0gZnVuY3Rpb24gKGluaXRpYWwpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBNZW1vcnlTdHJlYW0obmV3IFN0YXJ0V2l0aE9wZXJhdG9yKHRoaXMsIGluaXRpYWwpKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFVzZXMgYW5vdGhlciBzdHJlYW0gdG8gZGV0ZXJtaW5lIHdoZW4gdG8gY29tcGxldGUgdGhlIGN1cnJlbnQgc3RyZWFtLlxuICAgICAqXG4gICAgICogV2hlbiB0aGUgZ2l2ZW4gYG90aGVyYCBzdHJlYW0gZW1pdHMgYW4gZXZlbnQgb3IgY29tcGxldGVzLCB0aGUgb3V0cHV0XG4gICAgICogc3RyZWFtIHdpbGwgY29tcGxldGUuIEJlZm9yZSB0aGF0IGhhcHBlbnMsIHRoZSBvdXRwdXQgc3RyZWFtIHdpbGwgYmVoYXZlc1xuICAgICAqIGxpa2UgdGhlIGlucHV0IHN0cmVhbS5cbiAgICAgKlxuICAgICAqIE1hcmJsZSBkaWFncmFtOlxuICAgICAqXG4gICAgICogYGBgdGV4dFxuICAgICAqIC0tLTEtLS0yLS0tLS0zLS00LS0tLTUtLS0tNi0tLVxuICAgICAqICAgZW5kV2hlbiggLS0tLS0tLS1hLS1iLS18IClcbiAgICAgKiAtLS0xLS0tMi0tLS0tMy0tNC0tfFxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQHBhcmFtIG90aGVyIFNvbWUgb3RoZXIgc3RyZWFtIHRoYXQgaXMgdXNlZCB0byBrbm93IHdoZW4gc2hvdWxkIHRoZSBvdXRwdXRcbiAgICAgKiBzdHJlYW0gb2YgdGhpcyBvcGVyYXRvciBjb21wbGV0ZS5cbiAgICAgKiBAcmV0dXJuIHtTdHJlYW19XG4gICAgICovXG4gICAgU3RyZWFtLnByb3RvdHlwZS5lbmRXaGVuID0gZnVuY3Rpb24gKG90aGVyKSB7XG4gICAgICAgIHJldHVybiBuZXcgKHRoaXMuY3RvcigpKShuZXcgRW5kV2hlbk9wZXJhdG9yKG90aGVyLCB0aGlzKSk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBcIkZvbGRzXCIgdGhlIHN0cmVhbSBvbnRvIGl0c2VsZi5cbiAgICAgKlxuICAgICAqIENvbWJpbmVzIGV2ZW50cyBmcm9tIHRoZSBwYXN0IHRocm91Z2hvdXRcbiAgICAgKiB0aGUgZW50aXJlIGV4ZWN1dGlvbiBvZiB0aGUgaW5wdXQgc3RyZWFtLCBhbGxvd2luZyB5b3UgdG8gYWNjdW11bGF0ZSB0aGVtXG4gICAgICogdG9nZXRoZXIuIEl0J3MgZXNzZW50aWFsbHkgbGlrZSBgQXJyYXkucHJvdG90eXBlLnJlZHVjZWAuIFRoZSByZXR1cm5lZFxuICAgICAqIHN0cmVhbSBpcyBhIE1lbW9yeVN0cmVhbSwgd2hpY2ggbWVhbnMgaXQgaXMgYWxyZWFkeSBgcmVtZW1iZXIoKWAnZC5cbiAgICAgKlxuICAgICAqIFRoZSBvdXRwdXQgc3RyZWFtIHN0YXJ0cyBieSBlbWl0dGluZyB0aGUgYHNlZWRgIHdoaWNoIHlvdSBnaXZlIGFzIGFyZ3VtZW50LlxuICAgICAqIFRoZW4sIHdoZW4gYW4gZXZlbnQgaGFwcGVucyBvbiB0aGUgaW5wdXQgc3RyZWFtLCBpdCBpcyBjb21iaW5lZCB3aXRoIHRoYXRcbiAgICAgKiBzZWVkIHZhbHVlIHRocm91Z2ggdGhlIGBhY2N1bXVsYXRlYCBmdW5jdGlvbiwgYW5kIHRoZSBvdXRwdXQgdmFsdWUgaXNcbiAgICAgKiBlbWl0dGVkIG9uIHRoZSBvdXRwdXQgc3RyZWFtLiBgZm9sZGAgcmVtZW1iZXJzIHRoYXQgb3V0cHV0IHZhbHVlIGFzIGBhY2NgXG4gICAgICogKFwiYWNjdW11bGF0b3JcIiksIGFuZCB0aGVuIHdoZW4gYSBuZXcgaW5wdXQgZXZlbnQgYHRgIGhhcHBlbnMsIGBhY2NgIHdpbGwgYmVcbiAgICAgKiBjb21iaW5lZCB3aXRoIHRoYXQgdG8gcHJvZHVjZSB0aGUgbmV3IGBhY2NgIGFuZCBzbyBmb3J0aC5cbiAgICAgKlxuICAgICAqIE1hcmJsZSBkaWFncmFtOlxuICAgICAqXG4gICAgICogYGBgdGV4dFxuICAgICAqIC0tLS0tLTEtLS0tLTEtLTItLS0tMS0tLS0xLS0tLS0tXG4gICAgICogICBmb2xkKChhY2MsIHgpID0+IGFjYyArIHgsIDMpXG4gICAgICogMy0tLS0tNC0tLS0tNS0tNy0tLS04LS0tLTktLS0tLS1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGFjY3VtdWxhdGUgQSBmdW5jdGlvbiBvZiB0eXBlIGAoYWNjOiBSLCB0OiBUKSA9PiBSYCB0aGF0XG4gICAgICogdGFrZXMgdGhlIHByZXZpb3VzIGFjY3VtdWxhdGVkIHZhbHVlIGBhY2NgIGFuZCB0aGUgaW5jb21pbmcgZXZlbnQgZnJvbSB0aGVcbiAgICAgKiBpbnB1dCBzdHJlYW0gYW5kIHByb2R1Y2VzIHRoZSBuZXcgYWNjdW11bGF0ZWQgdmFsdWUuXG4gICAgICogQHBhcmFtIHNlZWQgVGhlIGluaXRpYWwgYWNjdW11bGF0ZWQgdmFsdWUsIG9mIHR5cGUgYFJgLlxuICAgICAqIEByZXR1cm4ge01lbW9yeVN0cmVhbX1cbiAgICAgKi9cbiAgICBTdHJlYW0ucHJvdG90eXBlLmZvbGQgPSBmdW5jdGlvbiAoYWNjdW11bGF0ZSwgc2VlZCkge1xuICAgICAgICByZXR1cm4gbmV3IE1lbW9yeVN0cmVhbShuZXcgRm9sZE9wZXJhdG9yKGFjY3VtdWxhdGUsIHNlZWQsIHRoaXMpKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFJlcGxhY2VzIGFuIGVycm9yIHdpdGggYW5vdGhlciBzdHJlYW0uXG4gICAgICpcbiAgICAgKiBXaGVuIChhbmQgaWYpIGFuIGVycm9yIGhhcHBlbnMgb24gdGhlIGlucHV0IHN0cmVhbSwgaW5zdGVhZCBvZiBmb3J3YXJkaW5nXG4gICAgICogdGhhdCBlcnJvciB0byB0aGUgb3V0cHV0IHN0cmVhbSwgKnJlcGxhY2VFcnJvciogd2lsbCBjYWxsIHRoZSBgcmVwbGFjZWBcbiAgICAgKiBmdW5jdGlvbiB3aGljaCByZXR1cm5zIHRoZSBzdHJlYW0gdGhhdCB0aGUgb3V0cHV0IHN0cmVhbSB3aWxsIHJlcGxpY2F0ZS5cbiAgICAgKiBBbmQsIGluIGNhc2UgdGhhdCBuZXcgc3RyZWFtIGFsc28gZW1pdHMgYW4gZXJyb3IsIGByZXBsYWNlYCB3aWxsIGJlIGNhbGxlZFxuICAgICAqIGFnYWluIHRvIGdldCBhbm90aGVyIHN0cmVhbSB0byBzdGFydCByZXBsaWNhdGluZy5cbiAgICAgKlxuICAgICAqIE1hcmJsZSBkaWFncmFtOlxuICAgICAqXG4gICAgICogYGBgdGV4dFxuICAgICAqIC0tMS0tLTItLS0tLTMtLTQtLS0tLVhcbiAgICAgKiAgIHJlcGxhY2VFcnJvciggKCkgPT4gLS0xMC0tfCApXG4gICAgICogLS0xLS0tMi0tLS0tMy0tNC0tLS0tLS0tMTAtLXxcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHJlcGxhY2UgQSBmdW5jdGlvbiBvZiB0eXBlIGAoZXJyKSA9PiBTdHJlYW1gIHRoYXQgdGFrZXNcbiAgICAgKiB0aGUgZXJyb3IgdGhhdCBvY2N1cnJlZCBvbiB0aGUgaW5wdXQgc3RyZWFtIG9yIG9uIHRoZSBwcmV2aW91cyByZXBsYWNlbWVudFxuICAgICAqIHN0cmVhbSBhbmQgcmV0dXJucyBhIG5ldyBzdHJlYW0uIFRoZSBvdXRwdXQgc3RyZWFtIHdpbGwgYmVoYXZlIGxpa2UgdGhlXG4gICAgICogc3RyZWFtIHRoYXQgdGhpcyBmdW5jdGlvbiByZXR1cm5zLlxuICAgICAqIEByZXR1cm4ge1N0cmVhbX1cbiAgICAgKi9cbiAgICBTdHJlYW0ucHJvdG90eXBlLnJlcGxhY2VFcnJvciA9IGZ1bmN0aW9uIChyZXBsYWNlKSB7XG4gICAgICAgIHJldHVybiBuZXcgKHRoaXMuY3RvcigpKShuZXcgUmVwbGFjZUVycm9yT3BlcmF0b3IocmVwbGFjZSwgdGhpcykpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogRmxhdHRlbnMgYSBcInN0cmVhbSBvZiBzdHJlYW1zXCIsIGhhbmRsaW5nIG9ubHkgb25lIG5lc3RlZCBzdHJlYW0gYXQgYSB0aW1lXG4gICAgICogKG5vIGNvbmN1cnJlbmN5KS5cbiAgICAgKlxuICAgICAqIElmIHRoZSBpbnB1dCBzdHJlYW0gaXMgYSBzdHJlYW0gdGhhdCBlbWl0cyBzdHJlYW1zLCB0aGVuIHRoaXMgb3BlcmF0b3Igd2lsbFxuICAgICAqIHJldHVybiBhbiBvdXRwdXQgc3RyZWFtIHdoaWNoIGlzIGEgZmxhdCBzdHJlYW06IGVtaXRzIHJlZ3VsYXIgZXZlbnRzLiBUaGVcbiAgICAgKiBmbGF0dGVuaW5nIGhhcHBlbnMgd2l0aG91dCBjb25jdXJyZW5jeS4gSXQgd29ya3MgbGlrZSB0aGlzOiB3aGVuIHRoZSBpbnB1dFxuICAgICAqIHN0cmVhbSBlbWl0cyBhIG5lc3RlZCBzdHJlYW0sICpmbGF0dGVuKiB3aWxsIHN0YXJ0IGltaXRhdGluZyB0aGF0IG5lc3RlZFxuICAgICAqIG9uZS4gSG93ZXZlciwgYXMgc29vbiBhcyB0aGUgbmV4dCBuZXN0ZWQgc3RyZWFtIGlzIGVtaXR0ZWQgb24gdGhlIGlucHV0XG4gICAgICogc3RyZWFtLCAqZmxhdHRlbiogd2lsbCBmb3JnZXQgdGhlIHByZXZpb3VzIG5lc3RlZCBvbmUgaXQgd2FzIGltaXRhdGluZywgYW5kXG4gICAgICogd2lsbCBzdGFydCBpbWl0YXRpbmcgdGhlIG5ldyBuZXN0ZWQgb25lLlxuICAgICAqXG4gICAgICogTWFyYmxlIGRpYWdyYW06XG4gICAgICpcbiAgICAgKiBgYGB0ZXh0XG4gICAgICogLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tXG4gICAgICogICBcXCAgICAgICAgXFxcbiAgICAgKiAgICBcXCAgICAgICAtLS0tMS0tLS0yLS0tMy0tXG4gICAgICogICAgLS1hLS1iLS0tLWMtLS0tZC0tLS0tLS0tXG4gICAgICogICAgICAgICAgIGZsYXR0ZW5cbiAgICAgKiAtLS0tLWEtLWItLS0tLS0xLS0tLTItLS0zLS1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge1N0cmVhbX1cbiAgICAgKi9cbiAgICBTdHJlYW0ucHJvdG90eXBlLmZsYXR0ZW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBwID0gdGhpcy5fcHJvZDtcbiAgICAgICAgcmV0dXJuIG5ldyBTdHJlYW0ocCBpbnN0YW5jZW9mIE1hcE9wZXJhdG9yICYmICEocCBpbnN0YW5jZW9mIEZpbHRlck1hcE9wZXJhdG9yKSA/XG4gICAgICAgICAgICBuZXcgTWFwRmxhdHRlbk9wZXJhdG9yKHApIDpcbiAgICAgICAgICAgIG5ldyBGbGF0dGVuT3BlcmF0b3IodGhpcykpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogUGFzc2VzIHRoZSBpbnB1dCBzdHJlYW0gdG8gYSBjdXN0b20gb3BlcmF0b3IsIHRvIHByb2R1Y2UgYW4gb3V0cHV0IHN0cmVhbS5cbiAgICAgKlxuICAgICAqICpjb21wb3NlKiBpcyBhIGhhbmR5IHdheSBvZiB1c2luZyBhbiBleGlzdGluZyBmdW5jdGlvbiBpbiBhIGNoYWluZWQgc3R5bGUuXG4gICAgICogSW5zdGVhZCBvZiB3cml0aW5nIGBvdXRTdHJlYW0gPSBmKGluU3RyZWFtKWAgeW91IGNhbiB3cml0ZVxuICAgICAqIGBvdXRTdHJlYW0gPSBpblN0cmVhbS5jb21wb3NlKGYpYC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IG9wZXJhdG9yIEEgZnVuY3Rpb24gdGhhdCB0YWtlcyBhIHN0cmVhbSBhcyBpbnB1dCBhbmRcbiAgICAgKiByZXR1cm5zIGEgc3RyZWFtIGFzIHdlbGwuXG4gICAgICogQHJldHVybiB7U3RyZWFtfVxuICAgICAqL1xuICAgIFN0cmVhbS5wcm90b3R5cGUuY29tcG9zZSA9IGZ1bmN0aW9uIChvcGVyYXRvcikge1xuICAgICAgICByZXR1cm4gb3BlcmF0b3IodGhpcyk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIG91dHB1dCBzdHJlYW0gdGhhdCBiZWhhdmVzIGxpa2UgdGhlIGlucHV0IHN0cmVhbSwgYnV0IGFsc29cbiAgICAgKiByZW1lbWJlcnMgdGhlIG1vc3QgcmVjZW50IGV2ZW50IHRoYXQgaGFwcGVucyBvbiB0aGUgaW5wdXQgc3RyZWFtLCBzbyB0aGF0IGFcbiAgICAgKiBuZXdseSBhZGRlZCBsaXN0ZW5lciB3aWxsIGltbWVkaWF0ZWx5IHJlY2VpdmUgdGhhdCBtZW1vcmlzZWQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtNZW1vcnlTdHJlYW19XG4gICAgICovXG4gICAgU3RyZWFtLnByb3RvdHlwZS5yZW1lbWJlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBNZW1vcnlTdHJlYW0obmV3IFJlbWVtYmVyT3BlcmF0b3IodGhpcykpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhbiBvdXRwdXQgc3RyZWFtIHRoYXQgaWRlbnRpY2FsbHkgYmVoYXZlcyBsaWtlIHRoZSBpbnB1dCBzdHJlYW0sXG4gICAgICogYnV0IGFsc28gcnVucyBhIGBzcHlgIGZ1bmN0aW9uIGZvIGVhY2ggZXZlbnQsIHRvIGhlbHAgeW91IGRlYnVnIHlvdXIgYXBwLlxuICAgICAqXG4gICAgICogKmRlYnVnKiB0YWtlcyBhIGBzcHlgIGZ1bmN0aW9uIGFzIGFyZ3VtZW50LCBhbmQgcnVucyB0aGF0IGZvciBlYWNoIGV2ZW50XG4gICAgICogaGFwcGVuaW5nIG9uIHRoZSBpbnB1dCBzdHJlYW0uIElmIHlvdSBkb24ndCBwcm92aWRlIHRoZSBgc3B5YCBhcmd1bWVudCxcbiAgICAgKiB0aGVuICpkZWJ1Zyogd2lsbCBqdXN0IGBjb25zb2xlLmxvZ2AgZWFjaCBldmVudC4gVGhpcyBoZWxwcyB5b3UgdG9cbiAgICAgKiB1bmRlcnN0YW5kIHRoZSBmbG93IG9mIGV2ZW50cyB0aHJvdWdoIHNvbWUgb3BlcmF0b3IgY2hhaW4uXG4gICAgICpcbiAgICAgKiBQbGVhc2Ugbm90ZSB0aGF0IGlmIHRoZSBvdXRwdXQgc3RyZWFtIGhhcyBubyBsaXN0ZW5lcnMsIHRoZW4gaXQgd2lsbCBub3RcbiAgICAgKiBzdGFydCwgd2hpY2ggbWVhbnMgYHNweWAgd2lsbCBuZXZlciBydW4gYmVjYXVzZSBubyBhY3R1YWwgZXZlbnQgaGFwcGVucyBpblxuICAgICAqIHRoYXQgY2FzZS5cbiAgICAgKlxuICAgICAqIE1hcmJsZSBkaWFncmFtOlxuICAgICAqXG4gICAgICogYGBgdGV4dFxuICAgICAqIC0tMS0tLS0yLS0tLS0zLS0tLS00LS1cbiAgICAgKiAgICAgICAgIGRlYnVnXG4gICAgICogLS0xLS0tLTItLS0tLTMtLS0tLTQtLVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbn0gbGFiZWxPclNweSBBIHN0cmluZyB0byB1c2UgYXMgdGhlIGxhYmVsIHdoZW4gcHJpbnRpbmdcbiAgICAgKiBkZWJ1ZyBpbmZvcm1hdGlvbiBvbiB0aGUgY29uc29sZSwgb3IgYSAnc3B5JyBmdW5jdGlvbiB0aGF0IHRha2VzIGFuIGV2ZW50XG4gICAgICogYXMgYXJndW1lbnQsIGFuZCBkb2VzIG5vdCBuZWVkIHRvIHJldHVybiBhbnl0aGluZy5cbiAgICAgKiBAcmV0dXJuIHtTdHJlYW19XG4gICAgICovXG4gICAgU3RyZWFtLnByb3RvdHlwZS5kZWJ1ZyA9IGZ1bmN0aW9uIChsYWJlbE9yU3B5KSB7XG4gICAgICAgIHJldHVybiBuZXcgKHRoaXMuY3RvcigpKShuZXcgRGVidWdPcGVyYXRvcihsYWJlbE9yU3B5LCB0aGlzKSk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiAqaW1pdGF0ZSogY2hhbmdlcyB0aGlzIGN1cnJlbnQgU3RyZWFtIHRvIGVtaXQgdGhlIHNhbWUgZXZlbnRzIHRoYXQgdGhlXG4gICAgICogYG90aGVyYCBnaXZlbiBTdHJlYW0gZG9lcy4gVGhpcyBtZXRob2QgcmV0dXJucyBub3RoaW5nLlxuICAgICAqXG4gICAgICogVGhpcyBtZXRob2QgZXhpc3RzIHRvIGFsbG93IG9uZSB0aGluZzogKipjaXJjdWxhciBkZXBlbmRlbmN5IG9mIHN0cmVhbXMqKi5cbiAgICAgKiBGb3IgaW5zdGFuY2UsIGxldCdzIGltYWdpbmUgdGhhdCBmb3Igc29tZSByZWFzb24geW91IG5lZWQgdG8gY3JlYXRlIGFcbiAgICAgKiBjaXJjdWxhciBkZXBlbmRlbmN5IHdoZXJlIHN0cmVhbSBgZmlyc3QkYCBkZXBlbmRzIG9uIHN0cmVhbSBgc2Vjb25kJGBcbiAgICAgKiB3aGljaCBpbiB0dXJuIGRlcGVuZHMgb24gYGZpcnN0JGA6XG4gICAgICpcbiAgICAgKiA8IS0tIHNraXAtZXhhbXBsZSAtLT5cbiAgICAgKiBgYGBqc1xuICAgICAqIGltcG9ydCBkZWxheSBmcm9tICd4c3RyZWFtL2V4dHJhL2RlbGF5J1xuICAgICAqXG4gICAgICogdmFyIGZpcnN0JCA9IHNlY29uZCQubWFwKHggPT4geCAqIDEwKS50YWtlKDMpO1xuICAgICAqIHZhciBzZWNvbmQkID0gZmlyc3QkLm1hcCh4ID0+IHggKyAxKS5zdGFydFdpdGgoMSkuY29tcG9zZShkZWxheSgxMDApKTtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEhvd2V2ZXIsIHRoYXQgaXMgaW52YWxpZCBKYXZhU2NyaXB0LCBiZWNhdXNlIGBzZWNvbmQkYCBpcyB1bmRlZmluZWRcbiAgICAgKiBvbiB0aGUgZmlyc3QgbGluZS4gVGhpcyBpcyBob3cgKmltaXRhdGUqIGNhbiBoZWxwIHNvbHZlIGl0OlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiBpbXBvcnQgZGVsYXkgZnJvbSAneHN0cmVhbS9leHRyYS9kZWxheSdcbiAgICAgKlxuICAgICAqIHZhciBzZWNvbmRQcm94eSQgPSB4cy5jcmVhdGUoKTtcbiAgICAgKiB2YXIgZmlyc3QkID0gc2Vjb25kUHJveHkkLm1hcCh4ID0+IHggKiAxMCkudGFrZSgzKTtcbiAgICAgKiB2YXIgc2Vjb25kJCA9IGZpcnN0JC5tYXAoeCA9PiB4ICsgMSkuc3RhcnRXaXRoKDEpLmNvbXBvc2UoZGVsYXkoMTAwKSk7XG4gICAgICogc2Vjb25kUHJveHkkLmltaXRhdGUoc2Vjb25kJCk7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBXZSBjcmVhdGUgYHNlY29uZFByb3h5JGAgYmVmb3JlIHRoZSBvdGhlcnMsIHNvIGl0IGNhbiBiZSB1c2VkIGluIHRoZVxuICAgICAqIGRlY2xhcmF0aW9uIG9mIGBmaXJzdCRgLiBUaGVuLCBhZnRlciBib3RoIGBmaXJzdCRgIGFuZCBgc2Vjb25kJGAgYXJlXG4gICAgICogZGVmaW5lZCwgd2UgaG9vayBgc2Vjb25kUHJveHkkYCB3aXRoIGBzZWNvbmQkYCB3aXRoIGBpbWl0YXRlKClgIHRvIHRlbGxcbiAgICAgKiB0aGF0IHRoZXkgYXJlIFwidGhlIHNhbWVcIi4gYGltaXRhdGVgIHdpbGwgbm90IHRyaWdnZXIgdGhlIHN0YXJ0IG9mIGFueVxuICAgICAqIHN0cmVhbSwgaXQganVzdCBiaW5kcyBgc2Vjb25kUHJveHkkYCBhbmQgYHNlY29uZCRgIHRvZ2V0aGVyLlxuICAgICAqXG4gICAgICogVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlIHdoZXJlIGBpbWl0YXRlKClgIGlzIGltcG9ydGFudCBpbiBDeWNsZS5qc1xuICAgICAqIGFwcGxpY2F0aW9ucy4gQSBwYXJlbnQgY29tcG9uZW50IGNvbnRhaW5zIHNvbWUgY2hpbGQgY29tcG9uZW50cy4gQSBjaGlsZFxuICAgICAqIGhhcyBhbiBhY3Rpb24gc3RyZWFtIHdoaWNoIGlzIGdpdmVuIHRvIHRoZSBwYXJlbnQgdG8gZGVmaW5lIGl0cyBzdGF0ZTpcbiAgICAgKlxuICAgICAqIDwhLS0gc2tpcC1leGFtcGxlIC0tPlxuICAgICAqIGBgYGpzXG4gICAgICogY29uc3QgY2hpbGRBY3Rpb25Qcm94eSQgPSB4cy5jcmVhdGUoKTtcbiAgICAgKiBjb25zdCBwYXJlbnQgPSBQYXJlbnQoey4uLnNvdXJjZXMsIGNoaWxkQWN0aW9uJDogY2hpbGRBY3Rpb25Qcm94eSR9KTtcbiAgICAgKiBjb25zdCBjaGlsZEFjdGlvbiQgPSBwYXJlbnQuc3RhdGUkLm1hcChzID0+IHMuY2hpbGQuYWN0aW9uJCkuZmxhdHRlbigpO1xuICAgICAqIGNoaWxkQWN0aW9uUHJveHkkLmltaXRhdGUoY2hpbGRBY3Rpb24kKTtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIE5vdGUsIHRob3VnaCwgdGhhdCAqKmBpbWl0YXRlKClgIGRvZXMgbm90IHN1cHBvcnQgTWVtb3J5U3RyZWFtcyoqLiBJZiB3ZVxuICAgICAqIHdvdWxkIGF0dGVtcHQgdG8gaW1pdGF0ZSBhIE1lbW9yeVN0cmVhbSBpbiBhIGNpcmN1bGFyIGRlcGVuZGVuY3ksIHdlIHdvdWxkXG4gICAgICogZWl0aGVyIGdldCBhIHJhY2UgY29uZGl0aW9uICh3aGVyZSB0aGUgc3ltcHRvbSB3b3VsZCBiZSBcIm5vdGhpbmcgaGFwcGVuc1wiKVxuICAgICAqIG9yIGFuIGluZmluaXRlIGN5Y2xpYyBlbWlzc2lvbiBvZiB2YWx1ZXMuIEl0J3MgdXNlZnVsIHRvIHRoaW5rIGFib3V0XG4gICAgICogTWVtb3J5U3RyZWFtcyBhcyBjZWxscyBpbiBhIHNwcmVhZHNoZWV0LiBJdCBkb2Vzbid0IG1ha2UgYW55IHNlbnNlIHRvXG4gICAgICogZGVmaW5lIGEgc3ByZWFkc2hlZXQgY2VsbCBgQTFgIHdpdGggYSBmb3JtdWxhIHRoYXQgZGVwZW5kcyBvbiBgQjFgIGFuZFxuICAgICAqIGNlbGwgYEIxYCBkZWZpbmVkIHdpdGggYSBmb3JtdWxhIHRoYXQgZGVwZW5kcyBvbiBgQTFgLlxuICAgICAqXG4gICAgICogSWYgeW91IGZpbmQgeW91cnNlbGYgd2FudGluZyB0byB1c2UgYGltaXRhdGUoKWAgd2l0aCBhXG4gICAgICogTWVtb3J5U3RyZWFtLCB5b3Ugc2hvdWxkIHJld29yayB5b3VyIGNvZGUgYXJvdW5kIGBpbWl0YXRlKClgIHRvIHVzZSBhXG4gICAgICogU3RyZWFtIGluc3RlYWQuIExvb2sgZm9yIHRoZSBzdHJlYW0gaW4gdGhlIGNpcmN1bGFyIGRlcGVuZGVuY3kgdGhhdFxuICAgICAqIHJlcHJlc2VudHMgYW4gZXZlbnQgc3RyZWFtLCBhbmQgdGhhdCB3b3VsZCBiZSBhIGNhbmRpZGF0ZSBmb3IgY3JlYXRpbmcgYVxuICAgICAqIHByb3h5IFN0cmVhbSB3aGljaCB0aGVuIGltaXRhdGVzIHRoZSB0YXJnZXQgU3RyZWFtLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtTdHJlYW19IHRhcmdldCBUaGUgb3RoZXIgc3RyZWFtIHRvIGltaXRhdGUgb24gdGhlIGN1cnJlbnQgb25lLiBNdXN0XG4gICAgICogbm90IGJlIGEgTWVtb3J5U3RyZWFtLlxuICAgICAqL1xuICAgIFN0cmVhbS5wcm90b3R5cGUuaW1pdGF0ZSA9IGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICAgICAgaWYgKHRhcmdldCBpbnN0YW5jZW9mIE1lbW9yeVN0cmVhbSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBIE1lbW9yeVN0cmVhbSB3YXMgZ2l2ZW4gdG8gaW1pdGF0ZSgpLCBidXQgaXQgb25seSAnICtcbiAgICAgICAgICAgICAgICAnc3VwcG9ydHMgYSBTdHJlYW0uIFJlYWQgbW9yZSBhYm91dCB0aGlzIHJlc3RyaWN0aW9uIGhlcmU6ICcgK1xuICAgICAgICAgICAgICAgICdodHRwczovL2dpdGh1Yi5jb20vc3RhbHR6L3hzdHJlYW0jZmFxJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fdGFyZ2V0ID0gdGFyZ2V0O1xuICAgICAgICBmb3IgKHZhciBpbHMgPSB0aGlzLl9pbHMsIE4gPSBpbHMubGVuZ3RoLCBpID0gMDsgaSA8IE47IGkrKykge1xuICAgICAgICAgICAgdGFyZ2V0Ll9hZGQoaWxzW2ldKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9pbHMgPSBbXTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEZvcmNlcyB0aGUgU3RyZWFtIHRvIGVtaXQgdGhlIGdpdmVuIHZhbHVlIHRvIGl0cyBsaXN0ZW5lcnMuXG4gICAgICpcbiAgICAgKiBBcyB0aGUgbmFtZSBpbmRpY2F0ZXMsIGlmIHlvdSB1c2UgdGhpcywgeW91IGFyZSBtb3N0IGxpa2VseSBkb2luZyBzb21ldGhpbmdcbiAgICAgKiBUaGUgV3JvbmcgV2F5LiBQbGVhc2UgdHJ5IHRvIHVuZGVyc3RhbmQgdGhlIHJlYWN0aXZlIHdheSBiZWZvcmUgdXNpbmcgdGhpc1xuICAgICAqIG1ldGhvZC4gVXNlIGl0IG9ubHkgd2hlbiB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdmFsdWUgVGhlIFwibmV4dFwiIHZhbHVlIHlvdSB3YW50IHRvIGJyb2FkY2FzdCB0byBhbGwgbGlzdGVuZXJzIG9mXG4gICAgICogdGhpcyBTdHJlYW0uXG4gICAgICovXG4gICAgU3RyZWFtLnByb3RvdHlwZS5zaGFtZWZ1bGx5U2VuZE5leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdGhpcy5fbih2YWx1ZSk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBGb3JjZXMgdGhlIFN0cmVhbSB0byBlbWl0IHRoZSBnaXZlbiBlcnJvciB0byBpdHMgbGlzdGVuZXJzLlxuICAgICAqXG4gICAgICogQXMgdGhlIG5hbWUgaW5kaWNhdGVzLCBpZiB5b3UgdXNlIHRoaXMsIHlvdSBhcmUgbW9zdCBsaWtlbHkgZG9pbmcgc29tZXRoaW5nXG4gICAgICogVGhlIFdyb25nIFdheS4gUGxlYXNlIHRyeSB0byB1bmRlcnN0YW5kIHRoZSByZWFjdGl2ZSB3YXkgYmVmb3JlIHVzaW5nIHRoaXNcbiAgICAgKiBtZXRob2QuIFVzZSBpdCBvbmx5IHdoZW4geW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLlxuICAgICAqXG4gICAgICogQHBhcmFtIHthbnl9IGVycm9yIFRoZSBlcnJvciB5b3Ugd2FudCB0byBicm9hZGNhc3QgdG8gYWxsIHRoZSBsaXN0ZW5lcnMgb2ZcbiAgICAgKiB0aGlzIFN0cmVhbS5cbiAgICAgKi9cbiAgICBTdHJlYW0ucHJvdG90eXBlLnNoYW1lZnVsbHlTZW5kRXJyb3IgPSBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgdGhpcy5fZShlcnJvcik7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBGb3JjZXMgdGhlIFN0cmVhbSB0byBlbWl0IHRoZSBcImNvbXBsZXRlZFwiIGV2ZW50IHRvIGl0cyBsaXN0ZW5lcnMuXG4gICAgICpcbiAgICAgKiBBcyB0aGUgbmFtZSBpbmRpY2F0ZXMsIGlmIHlvdSB1c2UgdGhpcywgeW91IGFyZSBtb3N0IGxpa2VseSBkb2luZyBzb21ldGhpbmdcbiAgICAgKiBUaGUgV3JvbmcgV2F5LiBQbGVhc2UgdHJ5IHRvIHVuZGVyc3RhbmQgdGhlIHJlYWN0aXZlIHdheSBiZWZvcmUgdXNpbmcgdGhpc1xuICAgICAqIG1ldGhvZC4gVXNlIGl0IG9ubHkgd2hlbiB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuXG4gICAgICovXG4gICAgU3RyZWFtLnByb3RvdHlwZS5zaGFtZWZ1bGx5U2VuZENvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLl9jKCk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBCbGVuZHMgbXVsdGlwbGUgc3RyZWFtcyB0b2dldGhlciwgZW1pdHRpbmcgZXZlbnRzIGZyb20gYWxsIG9mIHRoZW1cbiAgICAgKiBjb25jdXJyZW50bHkuXG4gICAgICpcbiAgICAgKiAqbWVyZ2UqIHRha2VzIG11bHRpcGxlIHN0cmVhbXMgYXMgYXJndW1lbnRzLCBhbmQgY3JlYXRlcyBhIHN0cmVhbSB0aGF0XG4gICAgICogYmVoYXZlcyBsaWtlIGVhY2ggb2YgdGhlIGFyZ3VtZW50IHN0cmVhbXMsIGluIHBhcmFsbGVsLlxuICAgICAqXG4gICAgICogTWFyYmxlIGRpYWdyYW06XG4gICAgICpcbiAgICAgKiBgYGB0ZXh0XG4gICAgICogLS0xLS0tLTItLS0tLTMtLS0tLS0tLTQtLS1cbiAgICAgKiAtLS0tYS0tLS0tYi0tLS1jLS0tZC0tLS0tLVxuICAgICAqICAgICAgICAgICAgbWVyZ2VcbiAgICAgKiAtLTEtYS0tMi0tYi0tMy1jLS0tZC0tNC0tLVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQGZhY3RvcnkgdHJ1ZVxuICAgICAqIEBwYXJhbSB7U3RyZWFtfSBzdHJlYW0xIEEgc3RyZWFtIHRvIG1lcmdlIHRvZ2V0aGVyIHdpdGggb3RoZXIgc3RyZWFtcy5cbiAgICAgKiBAcGFyYW0ge1N0cmVhbX0gc3RyZWFtMiBBIHN0cmVhbSB0byBtZXJnZSB0b2dldGhlciB3aXRoIG90aGVyIHN0cmVhbXMuIFR3b1xuICAgICAqIG9yIG1vcmUgc3RyZWFtcyBtYXkgYmUgZ2l2ZW4gYXMgYXJndW1lbnRzLlxuICAgICAqIEByZXR1cm4ge1N0cmVhbX1cbiAgICAgKi9cbiAgICBTdHJlYW0ubWVyZ2UgPSBmdW5jdGlvbiBtZXJnZSgpIHtcbiAgICAgICAgdmFyIHN0cmVhbXMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIHN0cmVhbXNbX2kgLSAwXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBTdHJlYW0obmV3IE1lcmdlUHJvZHVjZXIoc3RyZWFtcykpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogQ29tYmluZXMgbXVsdGlwbGUgaW5wdXQgc3RyZWFtcyB0b2dldGhlciB0byByZXR1cm4gYSBzdHJlYW0gd2hvc2UgZXZlbnRzXG4gICAgICogYXJlIGFycmF5cyB0aGF0IGNvbGxlY3QgdGhlIGxhdGVzdCBldmVudHMgZnJvbSBlYWNoIGlucHV0IHN0cmVhbS5cbiAgICAgKlxuICAgICAqICpjb21iaW5lKiBpbnRlcm5hbGx5IHJlbWVtYmVycyB0aGUgbW9zdCByZWNlbnQgZXZlbnQgZnJvbSBlYWNoIG9mIHRoZSBpbnB1dFxuICAgICAqIHN0cmVhbXMuIFdoZW4gYW55IG9mIHRoZSBpbnB1dCBzdHJlYW1zIGVtaXRzIGFuIGV2ZW50LCB0aGF0IGV2ZW50IHRvZ2V0aGVyXG4gICAgICogd2l0aCBhbGwgdGhlIG90aGVyIHNhdmVkIGV2ZW50cyBhcmUgY29tYmluZWQgaW50byBhbiBhcnJheS4gVGhhdCBhcnJheSB3aWxsXG4gICAgICogYmUgZW1pdHRlZCBvbiB0aGUgb3V0cHV0IHN0cmVhbS4gSXQncyBlc3NlbnRpYWxseSBhIHdheSBvZiBqb2luaW5nIHRvZ2V0aGVyXG4gICAgICogdGhlIGV2ZW50cyBmcm9tIG11bHRpcGxlIHN0cmVhbXMuXG4gICAgICpcbiAgICAgKiBNYXJibGUgZGlhZ3JhbTpcbiAgICAgKlxuICAgICAqIGBgYHRleHRcbiAgICAgKiAtLTEtLS0tMi0tLS0tMy0tLS0tLS0tNC0tLVxuICAgICAqIC0tLS1hLS0tLS1iLS0tLS1jLS1kLS0tLS0tXG4gICAgICogICAgICAgICAgY29tYmluZVxuICAgICAqIC0tLS0xYS0yYS0yYi0zYi0zYy0zZC00ZC0tXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAZmFjdG9yeSB0cnVlXG4gICAgICogQHBhcmFtIHtTdHJlYW19IHN0cmVhbTEgQSBzdHJlYW0gdG8gY29tYmluZSB0b2dldGhlciB3aXRoIG90aGVyIHN0cmVhbXMuXG4gICAgICogQHBhcmFtIHtTdHJlYW19IHN0cmVhbTIgQSBzdHJlYW0gdG8gY29tYmluZSB0b2dldGhlciB3aXRoIG90aGVyIHN0cmVhbXMuXG4gICAgICogTXVsdGlwbGUgc3RyZWFtcywgbm90IGp1c3QgdHdvLCBtYXkgYmUgZ2l2ZW4gYXMgYXJndW1lbnRzLlxuICAgICAqIEByZXR1cm4ge1N0cmVhbX1cbiAgICAgKi9cbiAgICBTdHJlYW0uY29tYmluZSA9IGZ1bmN0aW9uIGNvbWJpbmUoKSB7XG4gICAgICAgIHZhciBzdHJlYW1zID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBzdHJlYW1zW19pIC0gMF0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgU3RyZWFtKG5ldyBDb21iaW5lUHJvZHVjZXIoc3RyZWFtcykpO1xuICAgIH07XG4gICAgcmV0dXJuIFN0cmVhbTtcbn0oKSk7XG5leHBvcnRzLlN0cmVhbSA9IFN0cmVhbTtcbnZhciBNZW1vcnlTdHJlYW0gPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhNZW1vcnlTdHJlYW0sIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gTWVtb3J5U3RyZWFtKHByb2R1Y2VyKSB7XG4gICAgICAgIF9zdXBlci5jYWxsKHRoaXMsIHByb2R1Y2VyKTtcbiAgICAgICAgdGhpcy5faGFzID0gZmFsc2U7XG4gICAgfVxuICAgIE1lbW9yeVN0cmVhbS5wcm90b3R5cGUuX24gPSBmdW5jdGlvbiAoeCkge1xuICAgICAgICB0aGlzLl92ID0geDtcbiAgICAgICAgdGhpcy5faGFzID0gdHJ1ZTtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5fbi5jYWxsKHRoaXMsIHgpO1xuICAgIH07XG4gICAgTWVtb3J5U3RyZWFtLnByb3RvdHlwZS5fYWRkID0gZnVuY3Rpb24gKGlsKSB7XG4gICAgICAgIGlmICh0aGlzLl9oYXMpIHtcbiAgICAgICAgICAgIGlsLl9uKHRoaXMuX3YpO1xuICAgICAgICB9XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUuX2FkZC5jYWxsKHRoaXMsIGlsKTtcbiAgICB9O1xuICAgIE1lbW9yeVN0cmVhbS5wcm90b3R5cGUuX3N0b3BOb3cgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuX2hhcyA9IGZhbHNlO1xuICAgICAgICBfc3VwZXIucHJvdG90eXBlLl9zdG9wTm93LmNhbGwodGhpcyk7XG4gICAgfTtcbiAgICBNZW1vcnlTdHJlYW0ucHJvdG90eXBlLl94ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLl9oYXMgPSBmYWxzZTtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5feC5jYWxsKHRoaXMpO1xuICAgIH07XG4gICAgTWVtb3J5U3RyZWFtLnByb3RvdHlwZS5tYXAgPSBmdW5jdGlvbiAocHJvamVjdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWFwKHByb2plY3QpO1xuICAgIH07XG4gICAgTWVtb3J5U3RyZWFtLnByb3RvdHlwZS5tYXBUbyA9IGZ1bmN0aW9uIChwcm9qZWN0ZWRWYWx1ZSkge1xuICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5tYXBUby5jYWxsKHRoaXMsIHByb2plY3RlZFZhbHVlKTtcbiAgICB9O1xuICAgIE1lbW9yeVN0cmVhbS5wcm90b3R5cGUudGFrZSA9IGZ1bmN0aW9uIChhbW91bnQpIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUudGFrZS5jYWxsKHRoaXMsIGFtb3VudCk7XG4gICAgfTtcbiAgICBNZW1vcnlTdHJlYW0ucHJvdG90eXBlLmVuZFdoZW4gPSBmdW5jdGlvbiAob3RoZXIpIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUuZW5kV2hlbi5jYWxsKHRoaXMsIG90aGVyKTtcbiAgICB9O1xuICAgIE1lbW9yeVN0cmVhbS5wcm90b3R5cGUucmVwbGFjZUVycm9yID0gZnVuY3Rpb24gKHJlcGxhY2UpIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUucmVwbGFjZUVycm9yLmNhbGwodGhpcywgcmVwbGFjZSk7XG4gICAgfTtcbiAgICBNZW1vcnlTdHJlYW0ucHJvdG90eXBlLnJlbWVtYmVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIE1lbW9yeVN0cmVhbS5wcm90b3R5cGUuZGVidWcgPSBmdW5jdGlvbiAobGFiZWxPclNweSkge1xuICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5kZWJ1Zy5jYWxsKHRoaXMsIGxhYmVsT3JTcHkpO1xuICAgIH07XG4gICAgcmV0dXJuIE1lbW9yeVN0cmVhbTtcbn0oU3RyZWFtKSk7XG5leHBvcnRzLk1lbW9yeVN0cmVhbSA9IE1lbW9yeVN0cmVhbTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZGVmYXVsdCA9IFN0cmVhbTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvcmUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgY29yZV8xID0gcmVxdWlyZSgnLi4vY29yZScpO1xudmFyIENvbmNhdFByb2R1Y2VyID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBDb25jYXRQcm9kdWNlcihzdHJlYW1zKSB7XG4gICAgICAgIHRoaXMuc3RyZWFtcyA9IHN0cmVhbXM7XG4gICAgICAgIHRoaXMudHlwZSA9ICdjb25jYXQnO1xuICAgICAgICB0aGlzLm91dCA9IG51bGw7XG4gICAgICAgIHRoaXMuaSA9IDA7XG4gICAgfVxuICAgIENvbmNhdFByb2R1Y2VyLnByb3RvdHlwZS5fc3RhcnQgPSBmdW5jdGlvbiAob3V0KSB7XG4gICAgICAgIHRoaXMub3V0ID0gb3V0O1xuICAgICAgICB0aGlzLnN0cmVhbXNbdGhpcy5pXS5fYWRkKHRoaXMpO1xuICAgIH07XG4gICAgQ29uY2F0UHJvZHVjZXIucHJvdG90eXBlLl9zdG9wID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgc3RyZWFtcyA9IHRoaXMuc3RyZWFtcztcbiAgICAgICAgaWYgKHRoaXMuaSA8IHN0cmVhbXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBzdHJlYW1zW3RoaXMuaV0uX3JlbW92ZSh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmkgPSAwO1xuICAgICAgICB0aGlzLm91dCA9IG51bGw7XG4gICAgfTtcbiAgICBDb25jYXRQcm9kdWNlci5wcm90b3R5cGUuX24gPSBmdW5jdGlvbiAodCkge1xuICAgICAgICB2YXIgdSA9IHRoaXMub3V0O1xuICAgICAgICBpZiAoIXUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHUuX24odCk7XG4gICAgfTtcbiAgICBDb25jYXRQcm9kdWNlci5wcm90b3R5cGUuX2UgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHZhciB1ID0gdGhpcy5vdXQ7XG4gICAgICAgIGlmICghdSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdS5fZShlcnIpO1xuICAgIH07XG4gICAgQ29uY2F0UHJvZHVjZXIucHJvdG90eXBlLl9jID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgdSA9IHRoaXMub3V0O1xuICAgICAgICBpZiAoIXUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHZhciBzdHJlYW1zID0gdGhpcy5zdHJlYW1zO1xuICAgICAgICBzdHJlYW1zW3RoaXMuaV0uX3JlbW92ZSh0aGlzKTtcbiAgICAgICAgaWYgKCsrdGhpcy5pIDwgc3RyZWFtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHN0cmVhbXNbdGhpcy5pXS5fYWRkKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdS5fYygpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gQ29uY2F0UHJvZHVjZXI7XG59KCkpO1xuLyoqXG4gKiBQdXRzIG9uZSBzdHJlYW0gYWZ0ZXIgdGhlIG90aGVyLiAqY29uY2F0KiBpcyBhIGZhY3RvcnkgdGhhdCB0YWtlcyBtdWx0aXBsZVxuICogc3RyZWFtcyBhcyBhcmd1bWVudHMsIGFuZCBzdGFydHMgdGhlIGBuKzFgLXRoIHN0cmVhbSBvbmx5IHdoZW4gdGhlIGBuYC10aFxuICogc3RyZWFtIGhhcyBjb21wbGV0ZWQuIEl0IGNvbmNhdGVuYXRlcyB0aG9zZSBzdHJlYW1zIHRvZ2V0aGVyLlxuICpcbiAqIE1hcmJsZSBkaWFncmFtOlxuICpcbiAqIGBgYHRleHRcbiAqIC0tMS0tMi0tLTMtLS00LXxcbiAqIC4uLi4uLi4uLi4uLi4uLi0tYS1iLWMtLWQtfFxuICogICAgICAgICAgIGNvbmNhdFxuICogLS0xLS0yLS0tMy0tLTQtLS1hLWItYy0tZC18XG4gKiBgYGBcbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiBpbXBvcnQgY29uY2F0IGZyb20gJ3hzdHJlYW0vZXh0cmEvY29uY2F0J1xuICpcbiAqIGNvbnN0IHN0cmVhbUEgPSB4cy5vZignYScsICdiJywgJ2MnKVxuICogY29uc3Qgc3RyZWFtQiA9IHhzLm9mKDEwLCAyMCwgMzApXG4gKiBjb25zdCBzdHJlYW1DID0geHMub2YoJ1gnLCAnWScsICdaJylcbiAqXG4gKiBjb25zdCBvdXRwdXRTdHJlYW0gPSBjb25jYXQoc3RyZWFtQSwgc3RyZWFtQiwgc3RyZWFtQylcbiAqXG4gKiBvdXRwdXRTdHJlYW0uYWRkTGlzdGVuZXIoe1xuICogICBuZXh0OiAoeCkgPT4gY29uc29sZS5sb2coeCksXG4gKiAgIGVycm9yOiAoZXJyKSA9PiBjb25zb2xlLmVycm9yKGVyciksXG4gKiAgIGNvbXBsZXRlOiAoKSA9PiBjb25zb2xlLmxvZygnY29uY2F0IGNvbXBsZXRlZCcpLFxuICogfSlcbiAqIGBgYFxuICpcbiAqIEBmYWN0b3J5IHRydWVcbiAqIEBwYXJhbSB7U3RyZWFtfSBzdHJlYW0xIEEgc3RyZWFtIHRvIGNvbmNhdGVuYXRlIHRvZ2V0aGVyIHdpdGggb3RoZXIgc3RyZWFtcy5cbiAqIEBwYXJhbSB7U3RyZWFtfSBzdHJlYW0yIEEgc3RyZWFtIHRvIGNvbmNhdGVuYXRlIHRvZ2V0aGVyIHdpdGggb3RoZXIgc3RyZWFtcy4gVHdvXG4gKiBvciBtb3JlIHN0cmVhbXMgbWF5IGJlIGdpdmVuIGFzIGFyZ3VtZW50cy5cbiAqIEByZXR1cm4ge1N0cmVhbX1cbiAqL1xuZnVuY3Rpb24gY29uY2F0KCkge1xuICAgIHZhciBzdHJlYW1zID0gW107XG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgc3RyZWFtc1tfaSAtIDBdID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBjb3JlXzEuU3RyZWFtKG5ldyBDb25jYXRQcm9kdWNlcihzdHJlYW1zKSk7XG59XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRlZmF1bHQgPSBjb25jYXQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25jYXQuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgY29yZV8xID0gcmVxdWlyZSgnLi4vY29yZScpO1xudmFyIERlbGF5T3BlcmF0b3IgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIERlbGF5T3BlcmF0b3IoZHQsIGlucykge1xuICAgICAgICB0aGlzLmR0ID0gZHQ7XG4gICAgICAgIHRoaXMuaW5zID0gaW5zO1xuICAgICAgICB0aGlzLnR5cGUgPSAnZGVsYXknO1xuICAgICAgICB0aGlzLm91dCA9IG51bGw7XG4gICAgfVxuICAgIERlbGF5T3BlcmF0b3IucHJvdG90eXBlLl9zdGFydCA9IGZ1bmN0aW9uIChvdXQpIHtcbiAgICAgICAgdGhpcy5vdXQgPSBvdXQ7XG4gICAgICAgIHRoaXMuaW5zLl9hZGQodGhpcyk7XG4gICAgfTtcbiAgICBEZWxheU9wZXJhdG9yLnByb3RvdHlwZS5fc3RvcCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5pbnMuX3JlbW92ZSh0aGlzKTtcbiAgICAgICAgdGhpcy5vdXQgPSBudWxsO1xuICAgIH07XG4gICAgRGVsYXlPcGVyYXRvci5wcm90b3R5cGUuX24gPSBmdW5jdGlvbiAodCkge1xuICAgICAgICB2YXIgdSA9IHRoaXMub3V0O1xuICAgICAgICBpZiAoIXUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHZhciBpZCA9IHNldEludGVydmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHUuX24odCk7XG4gICAgICAgICAgICBjbGVhckludGVydmFsKGlkKTtcbiAgICAgICAgfSwgdGhpcy5kdCk7XG4gICAgfTtcbiAgICBEZWxheU9wZXJhdG9yLnByb3RvdHlwZS5fZSA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdmFyIHUgPSB0aGlzLm91dDtcbiAgICAgICAgaWYgKCF1KVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2YXIgaWQgPSBzZXRJbnRlcnZhbChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB1Ll9lKGVycik7XG4gICAgICAgICAgICBjbGVhckludGVydmFsKGlkKTtcbiAgICAgICAgfSwgdGhpcy5kdCk7XG4gICAgfTtcbiAgICBEZWxheU9wZXJhdG9yLnByb3RvdHlwZS5fYyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHUgPSB0aGlzLm91dDtcbiAgICAgICAgaWYgKCF1KVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2YXIgaWQgPSBzZXRJbnRlcnZhbChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB1Ll9jKCk7XG4gICAgICAgICAgICBjbGVhckludGVydmFsKGlkKTtcbiAgICAgICAgfSwgdGhpcy5kdCk7XG4gICAgfTtcbiAgICByZXR1cm4gRGVsYXlPcGVyYXRvcjtcbn0oKSk7XG4vKipcbiAqIERlbGF5cyBwZXJpb2RpYyBldmVudHMgYnkgYSBnaXZlbiB0aW1lIHBlcmlvZC5cbiAqXG4gKiBNYXJibGUgZGlhZ3JhbTpcbiAqXG4gKiBgYGB0ZXh0XG4gKiAxLS0tLTItLTMtLTQtLS0tNXxcbiAqICAgICBkZWxheSg2MClcbiAqIC0tLTEtLS0tMi0tMy0tNC0tLS01fFxuICogYGBgXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogaW1wb3J0IGZyb21EaWFncmFtIGZyb20gJ3hzdHJlYW0vZXh0cmEvZnJvbURpYWdyYW0nXG4gKiBpbXBvcnQgZGVsYXkgZnJvbSAneHN0cmVhbS9leHRyYS9kZWxheSdcbiAqXG4gKiBjb25zdCBzdHJlYW0gPSBmcm9tRGlhZ3JhbSgnMS0tLS0yLS0zLS00LS0tLTV8JylcbiAqICAuY29tcG9zZShkZWxheSg2MCkpXG4gKlxuICogc3RyZWFtLmFkZExpc3RlbmVyKHtcbiAqICAgbmV4dDogaSA9PiBjb25zb2xlLmxvZyhpKSxcbiAqICAgZXJyb3I6IGVyciA9PiBjb25zb2xlLmVycm9yKGVyciksXG4gKiAgIGNvbXBsZXRlOiAoKSA9PiBjb25zb2xlLmxvZygnY29tcGxldGVkJylcbiAqIH0pXG4gKiBgYGBcbiAqXG4gKiBgYGB0ZXh0XG4gKiA+IDEgIChhZnRlciA2MCBtcylcbiAqID4gMiAgKGFmdGVyIDE2MCBtcylcbiAqID4gMyAgKGFmdGVyIDIyMCBtcylcbiAqID4gNCAgKGFmdGVyIDI4MCBtcylcbiAqID4gNSAgKGFmdGVyIDM4MCBtcylcbiAqID4gY29tcGxldGVkXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gcGVyaW9kIFRoZSBhbW91bnQgb2Ygc2lsZW5jZSByZXF1aXJlZCBpbiBtaWxsaXNlY29uZHMuXG4gKiBAcmV0dXJuIHtTdHJlYW19XG4gKi9cbmZ1bmN0aW9uIGRlbGF5KHBlcmlvZCkge1xuICAgIHJldHVybiBmdW5jdGlvbiBkZWxheU9wZXJhdG9yKGlucykge1xuICAgICAgICByZXR1cm4gbmV3IGNvcmVfMS5TdHJlYW0obmV3IERlbGF5T3BlcmF0b3IocGVyaW9kLCBpbnMpKTtcbiAgICB9O1xufVxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVsYXk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kZWxheS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBjb3JlXzEgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG52YXIgZW1wdHkgPSB7fTtcbnZhciBEcm9wUmVwZWF0c09wZXJhdG9yID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBEcm9wUmVwZWF0c09wZXJhdG9yKGZuLCBpbnMpIHtcbiAgICAgICAgdGhpcy5mbiA9IGZuO1xuICAgICAgICB0aGlzLmlucyA9IGlucztcbiAgICAgICAgdGhpcy50eXBlID0gJ2Ryb3BSZXBlYXRzJztcbiAgICAgICAgdGhpcy5vdXQgPSBudWxsO1xuICAgICAgICB0aGlzLnYgPSBlbXB0eTtcbiAgICB9XG4gICAgRHJvcFJlcGVhdHNPcGVyYXRvci5wcm90b3R5cGUuX3N0YXJ0ID0gZnVuY3Rpb24gKG91dCkge1xuICAgICAgICB0aGlzLm91dCA9IG91dDtcbiAgICAgICAgdGhpcy5pbnMuX2FkZCh0aGlzKTtcbiAgICB9O1xuICAgIERyb3BSZXBlYXRzT3BlcmF0b3IucHJvdG90eXBlLl9zdG9wID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmlucy5fcmVtb3ZlKHRoaXMpO1xuICAgICAgICB0aGlzLm91dCA9IG51bGw7XG4gICAgICAgIHRoaXMudiA9IGVtcHR5O1xuICAgIH07XG4gICAgRHJvcFJlcGVhdHNPcGVyYXRvci5wcm90b3R5cGUuaXNFcSA9IGZ1bmN0aW9uICh4LCB5KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZuID8gdGhpcy5mbih4LCB5KSA6IHggPT09IHk7XG4gICAgfTtcbiAgICBEcm9wUmVwZWF0c09wZXJhdG9yLnByb3RvdHlwZS5fbiA9IGZ1bmN0aW9uICh0KSB7XG4gICAgICAgIHZhciB1ID0gdGhpcy5vdXQ7XG4gICAgICAgIGlmICghdSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIHYgPSB0aGlzLnY7XG4gICAgICAgIGlmICh2ID09PSBlbXB0eSB8fCAhdGhpcy5pc0VxKHQsIHYpKSB7XG4gICAgICAgICAgICB1Ll9uKHQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudiA9IHQ7XG4gICAgfTtcbiAgICBEcm9wUmVwZWF0c09wZXJhdG9yLnByb3RvdHlwZS5fZSA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdmFyIHUgPSB0aGlzLm91dDtcbiAgICAgICAgaWYgKCF1KVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB1Ll9lKGVycik7XG4gICAgfTtcbiAgICBEcm9wUmVwZWF0c09wZXJhdG9yLnByb3RvdHlwZS5fYyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHUgPSB0aGlzLm91dDtcbiAgICAgICAgaWYgKCF1KVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB1Ll9jKCk7XG4gICAgfTtcbiAgICByZXR1cm4gRHJvcFJlcGVhdHNPcGVyYXRvcjtcbn0oKSk7XG5leHBvcnRzLkRyb3BSZXBlYXRzT3BlcmF0b3IgPSBEcm9wUmVwZWF0c09wZXJhdG9yO1xuLyoqXG4gKiBEcm9wcyBjb25zZWN1dGl2ZSBkdXBsaWNhdGUgdmFsdWVzIGluIGEgc3RyZWFtLlxuICpcbiAqIE1hcmJsZSBkaWFncmFtOlxuICpcbiAqIGBgYHRleHRcbiAqIC0tMS0tMi0tMS0tMS0tMS0tMi0tMy0tNC0tMy0tM3xcbiAqICAgICBkcm9wUmVwZWF0c1xuICogLS0xLS0yLS0xLS0tLS0tLS0yLS0zLS00LS0zLS0tfFxuICogYGBgXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogaW1wb3J0IGRyb3BSZXBlYXRzIGZyb20gJ3hzdHJlYW0vZXh0cmEvZHJvcFJlcGVhdHMnXG4gKlxuICogY29uc3Qgc3RyZWFtID0geHMub2YoMSwgMiwgMSwgMSwgMSwgMiwgMywgNCwgMywgMylcbiAqICAgLmNvbXBvc2UoZHJvcFJlcGVhdHMoKSlcbiAqXG4gKiBzdHJlYW0uYWRkTGlzdGVuZXIoe1xuICogICBuZXh0OiBpID0+IGNvbnNvbGUubG9nKGkpLFxuICogICBlcnJvcjogZXJyID0+IGNvbnNvbGUuZXJyb3IoZXJyKSxcbiAqICAgY29tcGxldGU6ICgpID0+IGNvbnNvbGUubG9nKCdjb21wbGV0ZWQnKVxuICogfSlcbiAqIGBgYFxuICpcbiAqIGBgYHRleHRcbiAqID4gMVxuICogPiAyXG4gKiA+IDFcbiAqID4gMlxuICogPiAzXG4gKiA+IDRcbiAqID4gM1xuICogPiBjb21wbGV0ZWRcbiAqIGBgYFxuICpcbiAqIEV4YW1wbGUgd2l0aCBhIGN1c3RvbSBpc0VxdWFsIGZ1bmN0aW9uOlxuICpcbiAqIGBgYGpzXG4gKiBpbXBvcnQgZHJvcFJlcGVhdHMgZnJvbSAneHN0cmVhbS9leHRyYS9kcm9wUmVwZWF0cydcbiAqXG4gKiBjb25zdCBzdHJlYW0gPSB4cy5vZignYScsICdiJywgJ2EnLCAnQScsICdCJywgJ2InKVxuICogICAuY29tcG9zZShkcm9wUmVwZWF0cygoeCwgeSkgPT4geC50b0xvd2VyQ2FzZSgpID09PSB5LnRvTG93ZXJDYXNlKCkpKVxuICpcbiAqIHN0cmVhbS5hZGRMaXN0ZW5lcih7XG4gKiAgIG5leHQ6IGkgPT4gY29uc29sZS5sb2coaSksXG4gKiAgIGVycm9yOiBlcnIgPT4gY29uc29sZS5lcnJvcihlcnIpLFxuICogICBjb21wbGV0ZTogKCkgPT4gY29uc29sZS5sb2coJ2NvbXBsZXRlZCcpXG4gKiB9KVxuICogYGBgXG4gKlxuICogYGBgdGV4dFxuICogPiBhXG4gKiA+IGJcbiAqID4gYVxuICogPiBCXG4gKiA+IGNvbXBsZXRlZFxuICogYGBgXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXNFcXVhbCBBbiBvcHRpb25hbCBmdW5jdGlvbiBvZiB0eXBlXG4gKiBgKHg6IFQsIHk6IFQpID0+IGJvb2xlYW5gIHRoYXQgdGFrZXMgYW4gZXZlbnQgZnJvbSB0aGUgaW5wdXQgc3RyZWFtIGFuZFxuICogY2hlY2tzIGlmIGl0IGlzIGVxdWFsIHRvIHByZXZpb3VzIGV2ZW50LCBieSByZXR1cm5pbmcgYSBib29sZWFuLlxuICogQHJldHVybiB7U3RyZWFtfVxuICovXG5mdW5jdGlvbiBkcm9wUmVwZWF0cyhpc0VxdWFsKSB7XG4gICAgaWYgKGlzRXF1YWwgPT09IHZvaWQgMCkgeyBpc0VxdWFsID0gbnVsbDsgfVxuICAgIHJldHVybiBmdW5jdGlvbiBkcm9wUmVwZWF0c09wZXJhdG9yKGlucykge1xuICAgICAgICByZXR1cm4gbmV3IGNvcmVfMS5TdHJlYW0obmV3IERyb3BSZXBlYXRzT3BlcmF0b3IoaXNFcXVhbCwgaW5zKSk7XG4gICAgfTtcbn1cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRyb3BSZXBlYXRzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZHJvcFJlcGVhdHMuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgY29yZV8xID0gcmVxdWlyZSgnLi9jb3JlJyk7XG5leHBvcnRzLlN0cmVhbSA9IGNvcmVfMS5TdHJlYW07XG5leHBvcnRzLk1lbW9yeVN0cmVhbSA9IGNvcmVfMS5NZW1vcnlTdHJlYW07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRlZmF1bHQgPSBjb3JlXzEuU3RyZWFtO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiaW1wb3J0IHtydW59IGZyb20gJ0BjeWNsZS94c3RyZWFtLXJ1bic7XG5pbXBvcnQge21ha2VET01Ecml2ZXJ9IGZyb20gJ0BjeWNsZS9kb20nO1xuaW1wb3J0IHttYWtlSGlzdG9yeURyaXZlcn0gZnJvbSAnQGN5Y2xlL2hpc3RvcnknXG5pbXBvcnQge2NyZWF0ZUhpc3Rvcnl9IGZyb20gJ2hpc3RvcnknO1xuaW1wb3J0IHN0b3JhZ2VEcml2ZXIgZnJvbSAnQGN5Y2xlL3N0b3JhZ2UnO1xuLy8gVEhFIE1BSU4gRlVOQ1RJT05cbi8vIFRoaXMgaXMgdGhlIHRvZG8gbGlzdCBjb21wb25lbnQuXG5pbXBvcnQgVGFza0xpc3QgZnJvbSAnLi9jb21wb25lbnRzL1Rhc2tMaXN0L2luZGV4JztcblxuY29uc3QgbWFpbiA9IFRhc2tMaXN0O1xuXG4vLyBUSEUgRU5UUlkgUE9JTlRcbi8vIFRoaXMgaXMgd2hlcmUgdGhlIHdob2xlIHN0b3J5IHN0YXJ0cy5cbi8vIGBydW5gIHJlY2VpdmVzIGEgbWFpbiBmdW5jdGlvbiBhbmQgYW4gb2JqZWN0XG4vLyB3aXRoIHRoZSBkcml2ZXJzLlxucnVuKG1haW4sIHtcbiAgLy8gVEhFIERPTSBEUklWRVJcbiAgLy8gYG1ha2VET01Ecml2ZXIoY29udGFpbmVyKWAgZnJvbSBDeWNsZSBET00gcmV0dXJucyBhXG4gIC8vIGRyaXZlciBmdW5jdGlvbiB0byBpbnRlcmFjdCB3aXRoIHRoZSBET00uXG4gIERPTTogbWFrZURPTURyaXZlcignLnRvZG9hcHAnLCB7dHJhbnNwb3NpdGlvbjogdHJ1ZX0pLFxuICAvLyBUSEUgSElTVE9SWSBEUklWRVJcbiAgLy8gQSBkcml2ZXIgdG8gaW50ZXJhY3Qgd2l0aCBicm93c2VyIGhpc3RvcnlcbiAgSGlzdG9yeTogbWFrZUhpc3RvcnlEcml2ZXIoY3JlYXRlSGlzdG9yeSgpLCB7Y2FwdHVyZTogdHJ1ZX0pLFxuICAvLyBUSEUgU1RPUkFHRSBEUklWRVJcbiAgLy8gVGhlIHN0b3JhZ2UgZHJpdmVyIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGFjY2VzcyB2YWx1ZXMgZm9yXG4gIC8vIGxvY2FsLSBhbmQgc2Vzc2lvblN0b3JhZ2Uga2V5cyBhcyBzdHJlYW1zLlxuICBzdG9yYWdlOiBzdG9yYWdlRHJpdmVyXG59KTtcbiIsImltcG9ydCBpbnRlbnQgZnJvbSAnLi9pbnRlbnQnO1xuaW1wb3J0IG1vZGVsIGZyb20gJy4vbW9kZWwnO1xuaW1wb3J0IHZpZXcgZnJvbSAnLi92aWV3JztcblxuLy8gVEhFIFRPRE8gSVRFTSBGVU5DVElPTlxuLy8gVGhpcyBpcyBhIHNpbXBsZSB0b2RvIGl0ZW0gY29tcG9uZW50LFxuLy8gc3RydWN0dXJlZCB3aXRoIHRoZSBNVkktcGF0dGVybi5cbmZ1bmN0aW9uIFRhc2soc291cmNlcykge1xuICBsZXQgYWN0aW9uJCA9IGludGVudChzb3VyY2VzKTtcbiAgbGV0IHN0YXRlJCA9IG1vZGVsKHNvdXJjZXMucHJvcHMkLCBhY3Rpb24kKTtcbiAgbGV0IHZ0cmVlJCA9IHZpZXcoc3RhdGUkKTtcblxuICByZXR1cm4ge1xuICAgIERPTTogdnRyZWUkLFxuICAgIGFjdGlvbiQsXG4gICAgc3RhdGUkXG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRhc2s7XG4iLCJpbXBvcnQgeHMgZnJvbSAneHN0cmVhbSc7XG5pbXBvcnQge0VOVEVSX0tFWSwgRVNDX0tFWX0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuXG4vLyBUSEUgVE9ETyBJVEVNIElOVEVOVFxuLy8gVGhpcyBpbnRlbnQgZnVuY3Rpb24gcmV0dXJucyBhIHN0cmVhbSBvZiBhbGwgdGhlIGRpZmZlcmVudCxcbi8vIGFjdGlvbnMgdGhhdCBjYW4gYmUgdGFrZW4gb24gYSB0b2RvLlxuZnVuY3Rpb24gaW50ZW50KHNvdXJjZXMpIHtcbiAgLy8gVEhFIElOVEVOVCBNRVJHRVxuICAvLyBNZXJnZSBhbGwgYWN0aW9ucyBpbnRvIG9uZSBzdHJlYW0uXG4gIHJldHVybiB4cy5tZXJnZShcbiAgICAvLyBUSEUgREVTVFJPWSBBQ1RJT04gU1RSRUFNXG4gICAgc291cmNlcy5ET00uc2VsZWN0KCcuZGVzdHJveScpLmV2ZW50cygnY2xpY2snKVxuICAgICAgLm1hcFRvKHt0eXBlOiAnZGVzdHJveSd9KSxcblxuICAgIC8vIFRIRSBUT0dHTEUgQUNUSU9OIFNUUkVBTVxuICAgIHNvdXJjZXMuRE9NLnNlbGVjdCgnLnRvZ2dsZScpLmV2ZW50cygnY2hhbmdlJylcbiAgICAgIC5tYXAoZXYgPT4gZXYudGFyZ2V0LmNoZWNrZWQpXG4gICAgICAubWFwKHBheWxvYWQgPT4gKHt0eXBlOiAndG9nZ2xlJywgcGF5bG9hZH0pKSxcbiAgICBzb3VyY2VzLmFjdGlvbiRcbiAgICAgIC5maWx0ZXIoYWN0aW9uID0+IGFjdGlvbi50eXBlID09PSAndG9nZ2xlQWxsJylcbiAgICAgIC5tYXAoYWN0aW9uID0+ICh7Li4uYWN0aW9uLCB0eXBlOiAndG9nZ2xlJ30pKSxcblxuICAgIC8vIFRIRSBTVEFSVCBFRElUIEFDVElPTiBTVFJFQU1cbiAgICBzb3VyY2VzLkRPTS5zZWxlY3QoJ2xhYmVsJykuZXZlbnRzKCdkYmxjbGljaycpXG4gICAgICAubWFwVG8oe3R5cGU6ICdzdGFydEVkaXQnfSksXG5cbiAgICAvLyBUSEUgRVNDIEtFWSBBQ1RJT04gU1RSRUFNXG4gICAgc291cmNlcy5ET00uc2VsZWN0KCcuZWRpdCcpLmV2ZW50cygna2V5dXAnKVxuICAgICAgLmZpbHRlcihldiA9PiBldi5rZXlDb2RlID09PSBFU0NfS0VZKVxuICAgICAgLm1hcFRvKHt0eXBlOiAnY2FuY2VsRWRpdCd9KSxcblxuICAgIC8vIFRIRSBFTlRFUiBLRVkgQUNUSU9OIFNUUkVBTVxuICAgIHNvdXJjZXMuRE9NLnNlbGVjdCgnLmVkaXQnKS5ldmVudHMoJ2tleXVwJylcbiAgICAgIC5maWx0ZXIoZXYgPT4gZXYua2V5Q29kZSA9PT0gRU5URVJfS0VZKVxuICAgICAgLmNvbXBvc2UocyA9PiB4cy5tZXJnZShzLCBzb3VyY2VzLkRPTS5zZWxlY3QoJy5lZGl0JykuZXZlbnRzKCdibHVyJywgdHJ1ZSkpKVxuICAgICAgLm1hcChldiA9PiAoe3RpdGxlOiBldi50YXJnZXQudmFsdWUsIHR5cGU6ICdkb25lRWRpdCd9KSlcbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaW50ZW50O1xuIiwiaW1wb3J0IHhzIGZyb20gJ3hzdHJlYW0nO1xuXG5mdW5jdGlvbiBtYWtlUmVkdWNlciQoYWN0aW9uJCkge1xuICBsZXQgc3RhcnRFZGl0UmVkdWNlciQgPSBhY3Rpb24kXG4gICAgLmZpbHRlcihhY3Rpb24gPT4gYWN0aW9uLnR5cGUgPT09ICdzdGFydEVkaXQnKVxuICAgIC5tYXBUbyhmdW5jdGlvbiBzdGFydEVkaXRSZWR1Y2VyKGRhdGEpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmRhdGEsXG4gICAgICAgIGVkaXRpbmc6IHRydWVcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgbGV0IGRvbmVFZGl0UmVkdWNlciQgPSBhY3Rpb24kXG4gICAgLmZpbHRlcihhY3Rpb24gPT4gYWN0aW9uLnR5cGUgPT09ICdkb25lRWRpdCcpXG4gICAgLm1hcChhY3Rpb24gPT4gZnVuY3Rpb24gZG9uZUVkaXRSZWR1Y2VyKGRhdGEpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmRhdGEsXG4gICAgICAgIHRpdGxlOiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgZWRpdGluZzogZmFsc2VcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgbGV0IGNhbmNlbEVkaXRSZWR1Y2VyJCA9IGFjdGlvbiRcbiAgICAuZmlsdGVyKGFjdGlvbiA9PiBhY3Rpb24udHlwZSA9PT0gJ2NhbmNlbEVkaXQnKVxuICAgIC5tYXBUbyhmdW5jdGlvbiBjYW5jZWxFZGl0UmVkdWNlcihkYXRhKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5kYXRhLFxuICAgICAgICBlZGl0aW5nOiBmYWxzZVxuICAgICAgfTtcbiAgICB9KTtcblxuICBsZXQgdG9nZ2xlUmVkdWNlciQgPSBhY3Rpb24kXG4gICAgLmZpbHRlcihhY3Rpb24gPT4gYWN0aW9uLnR5cGUgPT09ICd0b2dnbGUnKVxuICAgIC5tYXAoYWN0aW9uID0+IGZ1bmN0aW9uIHRvZ2dsZVJlZHVjZXIoZGF0YSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uZGF0YSxcbiAgICAgICAgY29tcGxldGVkOiBhY3Rpb24ucGF5bG9hZFxuICAgICAgfTtcbiAgICB9KTtcblxuICByZXR1cm4geHMubWVyZ2UoXG4gICAgc3RhcnRFZGl0UmVkdWNlciQsXG4gICAgZG9uZUVkaXRSZWR1Y2VyJCxcbiAgICBjYW5jZWxFZGl0UmVkdWNlciQsXG4gICAgdG9nZ2xlUmVkdWNlciRcbiAgKTtcbn1cblxuZnVuY3Rpb24gbW9kZWwocHJvcHMkLCBhY3Rpb24kKSB7XG4gIC8vIFRIRSBTQU5JVElaRUQgUFJPUEVSVElFU1xuICAvLyBJZiB0aGUgbGlzdCBpdGVtIGhhcyBubyBkYXRhIHNldCBpdCBhcyBlbXB0eSBhbmQgbm90IGNvbXBsZXRlZC5cbiAgbGV0IHNhbml0aXplZFByb3BzJCA9IHByb3BzJC5zdGFydFdpdGgoe3RpdGxlOiAnJywgY29tcGxldGVkOiBmYWxzZX0pO1xuICBsZXQgcmVkdWNlciQgPSBtYWtlUmVkdWNlciQoYWN0aW9uJCk7XG5cbiAgcmV0dXJuIHNhbml0aXplZFByb3BzJC5tYXAocHJvcHMgPT5cbiAgICByZWR1Y2VyJC5mb2xkKChkYXRhLCByZWR1Y2VyKSA9PiByZWR1Y2VyKGRhdGEpLCBwcm9wcylcbiAgKS5mbGF0dGVuKCkucmVtZW1iZXIoKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbW9kZWw7XG4iLCJpbXBvcnQge2J1dHRvbiwgZGl2LCBpbnB1dCwgbGFiZWwsIGxpfSBmcm9tICdAY3ljbGUvZG9tJztcblxuZnVuY3Rpb24gdmlldyhzdGF0ZSQpIHtcbiAgcmV0dXJuIHN0YXRlJC5tYXAoKHt0aXRsZSwgY29tcGxldGVkLCBlZGl0aW5nfSkgPT4ge1xuICAgIGxldCB0b2RvUm9vdENsYXNzZXMgPSB7XG4gICAgICBjb21wbGV0ZWQsXG4gICAgICBlZGl0aW5nLFxuICAgIH07XG5cbiAgICByZXR1cm4gbGkoJy50b2RvUm9vdCcsIHtjbGFzczogdG9kb1Jvb3RDbGFzc2VzfSwgW1xuICAgICAgZGl2KCcudmlldycsIFtcbiAgICAgICAgaW5wdXQoJy50b2dnbGUnLCB7XG4gICAgICAgICAgcHJvcHM6IHt0eXBlOiAnY2hlY2tib3gnLCBjaGVja2VkOiBjb21wbGV0ZWR9LFxuICAgICAgICB9KSxcbiAgICAgICAgbGFiZWwodGl0bGUpLFxuICAgICAgICBidXR0b24oJy5kZXN0cm95JylcbiAgICAgIF0pLFxuICAgICAgaW5wdXQoJy5lZGl0Jywge1xuICAgICAgICBwcm9wczoge3R5cGU6ICd0ZXh0J30sXG4gICAgICAgIGhvb2s6IHtcbiAgICAgICAgICB1cGRhdGU6IChvbGRWTm9kZSwge2VsbX0pID0+IHtcbiAgICAgICAgICAgIGVsbS52YWx1ZSA9IHRpdGxlO1xuICAgICAgICAgICAgaWYgKGVkaXRpbmcpIHtcbiAgICAgICAgICAgICAgZWxtLmZvY3VzKCk7XG4gICAgICAgICAgICAgIGVsbS5zZWxlY3Rpb25TdGFydCA9IGVsbS52YWx1ZS5sZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIF0pO1xuICB9KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdmlldztcbiIsImltcG9ydCB4cyBmcm9tICd4c3RyZWFtJztcbmltcG9ydCBpc29sYXRlIGZyb20gJ0BjeWNsZS9pc29sYXRlJ1xuaW1wb3J0IGludGVudCBmcm9tICcuL2ludGVudCc7XG5pbXBvcnQgbW9kZWwgZnJvbSAnLi9tb2RlbCc7XG5pbXBvcnQgdmlldyBmcm9tICcuL3ZpZXcnO1xuaW1wb3J0IGRlc2VyaWFsaXplIGZyb20gJy4vc3RvcmFnZS1zb3VyY2UnO1xuaW1wb3J0IHNlcmlhbGl6ZSBmcm9tICcuL3N0b3JhZ2Utc2luayc7XG5pbXBvcnQgVGFzayBmcm9tICcuLi9UYXNrL2luZGV4JztcbmltcG9ydCBDb2xsZWN0aW9uIGZyb20gJ0BjeWNsZS9jb2xsZWN0aW9uJztcblxuLy8gVEhFIFRBU0tMSVNUIENPTVBPTkVOVFxuLy8gVGhpcyBpcyB0aGUgVGFza0xpc3QgY29tcG9uZW50IHdoaWNoIGlzIGJlaW5nIGV4cG9ydGVkIGJlbG93LlxuZnVuY3Rpb24gVGFza0xpc3Qoc291cmNlcykge1xuICAvLyBUSEUgTE9DQUxTVE9SQUdFIFNUUkVBTVxuICAvLyBIZXJlIHdlIGNyZWF0ZSBhIGxvY2FsU3RvcmFnZSBzdHJlYW0gdGhhdCBvbmx5IHN0cmVhbXNcbiAgLy8gdGhlIGZpcnN0IHZhbHVlIHJlYWQgZnJvbSBsb2NhbFN0b3JhZ2UgaW4gb3JkZXIgdG9cbiAgLy8gc3VwcGx5IHRoZSBhcHBsaWNhdGlvbiB3aXRoIGluaXRpYWwgc3RhdGUuXG4gIGxldCBsb2NhbFN0b3JhZ2UkID0gc291cmNlcy5zdG9yYWdlLmxvY2FsLmdldEl0ZW0oJ3RvZG9zLWN5Y2xlJykudGFrZSgxKTtcbiAgLy8gVEhFIElOSVRJQUwgVE9ETyBEQVRBXG4gIC8vIFRoZSBgZGVzZXJpYWxpemVgIGZ1bmN0aW9uIHRha2VzIHRoZSBzZXJpYWxpemVkIEpTT04gc3RvcmVkIGluIGxvY2FsU3RvcmFnZVxuICAvLyBhbmQgdHVybnMgaXQgaW50byBhIHN0cmVhbSBzZW5kaW5nIGEgSlNPTiBvYmplY3QuXG4gIGxldCBzb3VyY2VUb2Rvc0RhdGEkID0gZGVzZXJpYWxpemUobG9jYWxTdG9yYWdlJCk7XG4gIC8vIFRIRSBJTlRFTlQgKE1WSSBQQVRURVJOKVxuICAvLyBQYXNzIHJlbGV2YW50IHNvdXJjZXMgdG8gdGhlIGludGVudCBmdW5jdGlvbiwgd2hpY2ggc2V0IHVwXG4gIC8vIHN0cmVhbXMgdGhhdCBtb2RlbCB0aGUgdXNlcnMgYWN0aW9ucy5cbiAgbGV0IGFjdGlvbiQgPSBpbnRlbnQoc291cmNlcy5ET00sIHNvdXJjZXMuSGlzdG9yeSk7XG4gIC8vIFRIRSBNT0RFTCAoTVZJIFBBVFRFUk4pXG4gIC8vIEFjdGlvbnMgZ2V0IHBhc3NlZCB0byB0aGUgbW9kZWwgZnVuY3Rpb24gd2hpY2ggdHJhbnNmb3JtcyB0aGUgZGF0YVxuICAvLyBjb21pbmcgdGhyb3VnaCBhbmQgcHJlcGFyZXMgdGhlIGRhdGEgZm9yIHRoZSB2aWV3LlxuICBsZXQgc3RhdGUkID0gbW9kZWwoYWN0aW9uJCwgc291cmNlVG9kb3NEYXRhJCk7XG4gIC8vIFRIRSBJVEVNIEFERElUSU9OIFNUUkVBTVxuICAvLyBFbWl0cyBvYmplY3RzIG9mIHNvdXJjZXMgc3BlY2lmaWMgdG8gZWFjaCBpdGVtLlxuICAvLyBNZXJnZXMgc3RvcmVkIGl0ZW1zIHdpdGggbmV3IGl0ZW1zXG4gIGxldCBhZGQkID0geHMubWVyZ2UoXG4gICAgc291cmNlVG9kb3NEYXRhJFxuICAgICAgLm1hcChkYXRhID0+IGRhdGEubGlzdC5tYXAocHJvcHMgPT4gKHtwcm9wcyQ6IHhzLm9mKHByb3BzKX0pKSksXG4gICAgYWN0aW9uJFxuICAgICAgLmZpbHRlcihhY3Rpb24gPT4gYWN0aW9uLnR5cGUgPT09ICdpbnNlcnRUb2RvJylcbiAgICAgIC5tYXAoYWN0aW9uID0+ICh7XG4gICAgICAgIHByb3BzJDogeHMub2Yoe1xuICAgICAgICAgIHRpdGxlOiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgICBjb21wbGV0ZWQ6IGZhbHNlXG4gICAgICAgIH0pXG4gICAgICB9KSlcbiAgKTtcbiAgLy8gVEhFIElURU0gUkVNT1ZBTCBTRUxFQ1RPUiBGVU5DVElPTlxuICAvLyBUaGlzIGZ1bmN0aW9uIHRha2VzIGl0ZW0ncyBzaW5rcyBhbmQgcmV0dXJucyBhIHN0cmVhbSByZXByZXNlbnRpbmdcbiAgLy8gaXRzIHJlbW92YWwuIE1lcmdlcyBpbnRlcm5hbCByZW1vdmFscyBhbmQgYGRlbGV0ZUNvbXBsZXRlZHNgIGFjdGlvbnNcbiAgZnVuY3Rpb24gcmVtb3ZlU2VsZWN0b3IoaXRlbVNpbmtzKSB7XG4gICAgbGV0IGRlbGV0ZUNvbXBsZXRlZHMkID0gYWN0aW9uJFxuICAgICAgLmZpbHRlcihhY3Rpb24gPT4gYWN0aW9uLnR5cGUgPT09ICdkZWxldGVDb21wbGV0ZWRzJyk7XG4gICAgcmV0dXJuIHhzLm1lcmdlKFxuICAgICAgLy8gQ29uc2lkZXIgZGVsZXRlQ29tcGxldGVkcyQgb25seSBpZiB0aGUgdGFzayBpcyBjb21wbGV0ZWQuXG4gICAgICAvLyBhbmFsb2d1ZSBvZiByeCBwYXVzYWJsZVxuICAgICAgaXRlbVNpbmtzLnN0YXRlJFxuICAgICAgICAubWFwKHN0YXRlID0+IGRlbGV0ZUNvbXBsZXRlZHMkLmZpbHRlcigoKSA9PiBzdGF0ZS5jb21wbGV0ZWQpKVxuICAgICAgICAuZmxhdHRlbigpLFxuICAgICAgaXRlbVNpbmtzLmFjdGlvbiRcbiAgICAgICAgLmZpbHRlcihhY3Rpb24gPT4gYWN0aW9uLnR5cGUgPT09ICdkZXN0cm95JylcbiAgICApO1xuICB9XG4gIC8vIFRIRSBDT0xMRUNUSU9OIFNUUkVBTVxuICAvLyBDb2xsZWN0aW9uIGZ1bmN0aW9uIHRha2VzIGEgY29tcG9uZW50IGZ1bmN0aW9uLCBhIGNvbW1vbiBzb3VyY2VzIG9iamVjdCxcbiAgLy8gYSBzdHJlYW0gb2YgaXRlbSBhZGRpdGlvbnMsIGFuZCBhIHNlbGVjdG9yIGZ1bmN0aW9uIGZyb20gaXRlbSBzaW5rcyB0b1xuICAvLyBhIHN0cmVhbSBvZiByZW1vdmFsc1xuICBsZXQgbGlzdCQgPSBDb2xsZWN0aW9uKFxuICAgIFRhc2ssXG4gICAge1xuICAgICAgRE9NOiBzb3VyY2VzLkRPTSxcbiAgICAgIGFjdGlvbiQ6IGFjdGlvbiRcbiAgICAgICAgLmZpbHRlcihhY3Rpb24gPT4gYWN0aW9uLnR5cGUgPT09ICd0b2dnbGVBbGwnKVxuICAgIH0sXG4gICAgYWRkJCxcbiAgICByZW1vdmVTZWxlY3RvclxuICApO1xuICAvLyBUSEUgQ09NQklORUQgQ0hJTERSRU4gVlRSRUUgQU5EIFNUQVRFIFNUUkVBTVNcbiAgbGV0IHRvZG9WdHJlZXMkID0gQ29sbGVjdGlvbi5wbHVjayhsaXN0JCwgaXRlbVNpbmtzID0+IGl0ZW1TaW5rcy5ET00pO1xuICBsZXQgdG9kb1N0YXRlcyQgPSBDb2xsZWN0aW9uLnBsdWNrKGxpc3QkLCBpdGVtU2lua3MgPT4gaXRlbVNpbmtzLnN0YXRlJCk7XG5cbiAgbGV0IGFtZW5kZWRTdGF0ZSQgPSB4cy5jb21iaW5lKHN0YXRlJCwgdG9kb1Z0cmVlcyQsIHRvZG9TdGF0ZXMkKVxuICAgIC5tYXAoKFtwYXJlbnRTdGF0ZSwgdG9kb1Z0cmVlcywgdG9kb1N0YXRlc10pID0+ICh7XG4gICAgICAuLi5wYXJlbnRTdGF0ZSxcbiAgICAgIGxpc3Q6IHRvZG9TdGF0ZXMubWFwKChzdGF0ZSwgaSkgPT4gKHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHRvZG9JdGVtOiB7RE9NOiB0b2RvVnRyZWVzW2ldfVxuICAgICAgfSkpXG4gICAgfSkpO1xuICAvLyBUSEUgVklFVyAoTVZJIFBBVFRFUk4pXG4gIC8vIFdlIHJlbmRlciBzdGF0ZSBhcyBtYXJrdXAgZm9yIHRoZSBET00uXG4gIGxldCB2ZG9tJCA9IHZpZXcoYW1lbmRlZFN0YXRlJCk7XG4gIC8vIFdSSVRFIFRPIExPQ0FMU1RPUkFHRVxuICAvLyBUaGUgbGF0ZXN0IHN0YXRlIGlzIHdyaXR0ZW4gdG8gbG9jYWxTdG9yYWdlLlxuICBsZXQgc3RvcmFnZSQgPSBzZXJpYWxpemUoYW1lbmRlZFN0YXRlJCkubWFwKChzdGF0ZSkgPT4gKHtcbiAgICBrZXk6ICd0b2Rvcy1jeWNsZScsIHZhbHVlOiBzdGF0ZVxuICB9KSk7XG4gIC8vIENPTVBMRVRFIFRIRSBDWUNMRVxuICAvLyBXcml0ZSB0aGUgdmlydHVhbCBkb20gc3RyZWFtIHRvIHRoZSBET00gYW5kIHdyaXRlIHRoZVxuICAvLyBzdG9yYWdlIHN0cmVhbSB0byBsb2NhbFN0b3JhZ2UuXG4gIGxldCBzaW5rcyA9IHtcbiAgICBET006IHZkb20kLFxuICAgIHN0b3JhZ2U6IHN0b3JhZ2UkLFxuICB9O1xuICByZXR1cm4gc2lua3M7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRhc2tMaXN0O1xuIiwiaW1wb3J0IHhzIGZyb20gJ3hzdHJlYW0nO1xuaW1wb3J0IGRyb3BSZXBlYXRzIGZyb20gJ3hzdHJlYW0vZXh0cmEvZHJvcFJlcGVhdHMnO1xuaW1wb3J0IHtFTlRFUl9LRVksIEVTQ19LRVl9IGZyb20gJy4uLy4uL3V0aWxzJztcblxuLy8gVEhFIElOVEVOVCBGT1IgVEhFIExJU1RcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGludGVudChET01Tb3VyY2UsIEhpc3RvcnkpIHtcbiAgcmV0dXJuIHhzLm1lcmdlKFxuICAgIC8vIFRIRSBST1VURSBTVFJFQU1cbiAgICAvLyBBIHN0cmVhbSB0aGF0IHByb3ZpZGVzIHRoZSBwYXRoIHdoZW5ldmVyIHRoZSByb3V0ZSBjaGFuZ2VzLlxuICAgIEhpc3RvcnlcbiAgICAgIC5zdGFydFdpdGgoe3BhdGhuYW1lOiAnLyd9KVxuICAgICAgLm1hcChsb2NhdGlvbiA9PiBsb2NhdGlvbi5wYXRobmFtZSlcbiAgICAgIC5jb21wb3NlKGRyb3BSZXBlYXRzKCkpXG4gICAgICAubWFwKHBheWxvYWQgPT4gKHt0eXBlOiAnY2hhbmdlUm91dGUnLCBwYXlsb2FkfSkpLFxuXG4gICAgLy8gVEhFIFVSTCBTVFJFQU1cbiAgICAvLyBBIHN0cmVhbSBvZiBVUkwgY2xpY2tzIGluIHRoZSBhcHBcbiAgICBET01Tb3VyY2Uuc2VsZWN0KCdhJykuZXZlbnRzKCdjbGljaycpXG4gICAgICAubWFwKGV2ZW50ID0+ICBldmVudC50YXJnZXQuaGFzaC5yZXBsYWNlKCcjJywgJycpKVxuICAgICAgLm1hcChwYXlsb2FkID0+ICh7dHlwZTogJ3VybCcsIHBheWxvYWR9KSksXG5cbiAgICAvLyBDTEVBUiBJTlBVVCBTVFJFQU1cbiAgICAvLyBBIHN0cmVhbSBvZiBFU0Mga2V5IHN0cm9rZXMgaW4gdGhlIGAubmV3LXRvZG9gIGZpZWxkLlxuICAgIERPTVNvdXJjZS5zZWxlY3QoJy5uZXctdG9kbycpLmV2ZW50cygna2V5ZG93bicpXG4gICAgICAuZmlsdGVyKGV2ID0+IGV2LmtleUNvZGUgPT09IEVTQ19LRVkpXG4gICAgICAubWFwKHBheWxvYWQgPT4gKHt0eXBlOiAnY2xlYXJJbnB1dCcsIHBheWxvYWR9KSksXG5cbiAgICAvLyBFTlRFUiBLRVkgU1RSRUFNXG4gICAgLy8gQSBzdHJlYW0gb2YgRU5URVIga2V5IHN0cm9rZXMgaW4gdGhlIGAubmV3LXRvZG9gIGZpZWxkLlxuICAgIERPTVNvdXJjZS5zZWxlY3QoJy5uZXctdG9kbycpLmV2ZW50cygna2V5ZG93bicpXG4gICAgICAvLyBUcmltIHZhbHVlIGFuZCBvbmx5IGxldCB0aGUgZGF0YSB0aHJvdWdoIHdoZW4gdGhlcmVcbiAgICAgIC8vIGlzIGFueXRoaW5nIGJ1dCB3aGl0ZXNwYWNlIGluIHRoZSBmaWVsZCBhbmQgdGhlIEVOVEVSIGtleSB3YXMgaGl0LlxuICAgICAgLmZpbHRlcihldiA9PiB7XG4gICAgICAgIGxldCB0cmltbWVkVmFsID0gU3RyaW5nKGV2LnRhcmdldC52YWx1ZSkudHJpbSgpO1xuICAgICAgICByZXR1cm4gZXYua2V5Q29kZSA9PT0gRU5URVJfS0VZICYmIHRyaW1tZWRWYWw7XG4gICAgICB9KVxuICAgICAgLy8gUmV0dXJuIHRoZSB0cmltbWVkIHZhbHVlLlxuICAgICAgLm1hcChldiA9PiBTdHJpbmcoZXYudGFyZ2V0LnZhbHVlKS50cmltKCkpXG4gICAgICAubWFwKHBheWxvYWQgPT4gKHt0eXBlOiAnaW5zZXJ0VG9kbycsIHBheWxvYWR9KSksXG5cbiAgICAvLyBUT0dHTEUgQUxMIFNUUkVBTVxuICAgIC8vIENyZWF0ZSBhIHN0cmVhbSBvdXQgb2YgdGhlIGNsaWNrcyBvbiB0aGUgYC50b2dnbGUtYWxsYCBidXR0b24uXG4gICAgRE9NU291cmNlLnNlbGVjdCgnLnRvZ2dsZS1hbGwnKS5ldmVudHMoJ2NsaWNrJylcbiAgICAgIC5tYXAoZXYgPT4gZXYudGFyZ2V0LmNoZWNrZWQpXG4gICAgICAubWFwKHBheWxvYWQgPT4gKHt0eXBlOiAndG9nZ2xlQWxsJywgcGF5bG9hZH0pKSxcblxuICAgIC8vIERFTEVURSBDT01QTEVURUQgVE9ET1MgU1RSRUFNXG4gICAgLy8gQSBzdHJlYW0gb2YgY2xpY2sgZXZlbnRzIG9uIHRoZSBgLmNsZWFyLWNvbXBsZXRlZGAgZWxlbWVudC5cbiAgICBET01Tb3VyY2Uuc2VsZWN0KCcuY2xlYXItY29tcGxldGVkJykuZXZlbnRzKCdjbGljaycpXG4gICAgICAubWFwVG8oe3R5cGU6ICdkZWxldGVDb21wbGV0ZWRzJ30pXG4gICk7XG59O1xuIiwiaW1wb3J0IHhzIGZyb20gJ3hzdHJlYW0nO1xuaW1wb3J0IGNvbmNhdCBmcm9tICd4c3RyZWFtL2V4dHJhL2NvbmNhdCc7XG5cbi8vIEEgaGVscGVyIGZ1bmN0aW9uIHRoYXQgcHJvdmlkZXMgZmlsdGVyIGZ1bmN0aW9uc1xuLy8gZGVwZW5kaW5nIG9uIHRoZSByb3V0ZSB2YWx1ZS5cbmZ1bmN0aW9uIGdldEZpbHRlckZuKHJvdXRlKSB7XG4gIHN3aXRjaCAocm91dGUpIHtcbiAgICBjYXNlICcvYWN0aXZlJzogcmV0dXJuICh0YXNrID0+IHRhc2suY29tcGxldGVkID09PSBmYWxzZSk7XG4gICAgY2FzZSAnL2NvbXBsZXRlZCc6IHJldHVybiAodGFzayA9PiB0YXNrLmNvbXBsZXRlZCA9PT0gdHJ1ZSk7XG4gICAgZGVmYXVsdDogcmV0dXJuICgpID0+IHRydWU7IC8vIGFsbG93IGFueXRoaW5nXG4gIH1cbn1cblxuLy8gTUFLRSBSRURVQ0VSIFNUUkVBTVxuLy8gQSBmdW5jdGlvbiB0aGF0IHRha2VzIHRoZSBhY3Rpb25zIG9uIHRoZSB0b2RvIGxpc3Rcbi8vIGFuZCByZXR1cm5zIGEgc3RyZWFtIG9mIFwicmVkdWNlcnNcIjogZnVuY3Rpb25zIHRoYXQgZXhwZWN0IHRoZSBjdXJyZW50XG4vLyB0b2Rvc0RhdGEgKHRoZSBzdGF0ZSkgYW5kIHJldHVybiBhIG5ldyB2ZXJzaW9uIG9mIHRvZG9zRGF0YS5cbmZ1bmN0aW9uIG1ha2VSZWR1Y2VyJChhY3Rpb24kKSB7XG4gIGxldCBjbGVhcklucHV0UmVkdWNlciQgPSBhY3Rpb24kXG4gICAgLmZpbHRlcihhID0+IGEudHlwZSA9PT0gJ2NsZWFySW5wdXQnKVxuICAgIC5tYXBUbyhmdW5jdGlvbiBjbGVhcklucHV0UmVkdWNlcih0b2Rvc0RhdGEpIHtcbiAgICAgIHJldHVybiB0b2Rvc0RhdGE7XG4gICAgfSk7XG5cbiAgbGV0IGNoYW5nZVJvdXRlUmVkdWNlciQgPSBhY3Rpb24kXG4gICAgLmZpbHRlcihhID0+IGEudHlwZSA9PT0gJ2NoYW5nZVJvdXRlJylcbiAgICAubWFwKGEgPT4gYS5wYXlsb2FkKVxuICAgIC5zdGFydFdpdGgoJy8nKVxuICAgIC5tYXAocGF0aCA9PiB7XG4gICAgICBsZXQgZmlsdGVyRm4gPSBnZXRGaWx0ZXJGbihwYXRoKTtcbiAgICAgIHJldHVybiBmdW5jdGlvbiBjaGFuZ2VSb3V0ZVJlZHVjZXIodG9kb3NEYXRhKSB7XG4gICAgICAgIHRvZG9zRGF0YS5maWx0ZXIgPSBwYXRoLnJlcGxhY2UoJy8nLCAnJykudHJpbSgpO1xuICAgICAgICB0b2Rvc0RhdGEuZmlsdGVyRm4gPSBmaWx0ZXJGbjtcbiAgICAgICAgcmV0dXJuIHRvZG9zRGF0YTtcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgcmV0dXJuIHhzLm1lcmdlKFxuICAgIGNsZWFySW5wdXRSZWR1Y2VyJCxcbiAgICBjaGFuZ2VSb3V0ZVJlZHVjZXIkXG4gICk7XG59XG5cbi8vIFRISVMgSVMgVEhFIE1PREVMIEZVTkNUSU9OXG4vLyBJdCBleHBlY3RzIHRoZSBhY3Rpb25zIGNvbWluZyBpbiBmcm9tIHRoZSBzb3VyY2VzXG5mdW5jdGlvbiBtb2RlbChhY3Rpb24kLCBzb3VyY2VUb2Rvc0RhdGEkKSB7XG4gIC8vIFRIRSBCVVNJTkVTUyBMT0dJQ1xuICAvLyBBY3Rpb25zIGFyZSBwYXNzZWQgdG8gdGhlIGBtYWtlUmVkdWNlciRgIGZ1bmN0aW9uXG4gIC8vIHdoaWNoIGNyZWF0ZXMgYSBzdHJlYW0gb2YgcmVkdWNlciBmdW5jdGlvbnMgdGhhdCBuZWVkc1xuICAvLyB0byBiZSBhcHBsaWVkIG9uIHRoZSB0b2RvRGF0YSB3aGVuIGFuIGFjdGlvbiBoYXBwZW5zLlxuICBsZXQgcmVkdWNlciQgPSBtYWtlUmVkdWNlciQoYWN0aW9uJCk7XG5cbiAgLy8gUkVUVVJOIFRIRSBNT0RFTCBEQVRBXG4gIHJldHVybiBzb3VyY2VUb2Rvc0RhdGEkLm1hcChzb3VyY2VUb2Rvc0RhdGEgPT5cbiAgICByZWR1Y2VyJC5mb2xkKCh0b2Rvc0RhdGEsIHJlZHVjZXIpID0+IHJlZHVjZXIodG9kb3NEYXRhKSwgc291cmNlVG9kb3NEYXRhKVxuICApLmZsYXR0ZW4oKVxuICAvLyBNYWtlIHRoaXMgcmVtZW1iZXIgaXRzIGxhdGVzdCBldmVudCwgc28gbGF0ZSBsaXN0ZW5lcnNcbiAgLy8gd2lsbCBiZSB1cGRhdGVkIHdpdGggdGhlIGxhdGVzdCBzdGF0ZS5cbiAgLnJlbWVtYmVyKCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG1vZGVsO1xuIiwiLy8gVHVybiB0aGUgZGF0YSBvYmplY3QgdGhhdCBjb250YWluc1xuLy8gdGhlIHRvZG9zIGludG8gYSBzdHJpbmcgZm9yIGxvY2FsU3RvcmFnZS5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNlcmlhbGl6ZSh0b2RvcyQpIHtcbiAgcmV0dXJuIHRvZG9zJC5tYXAodG9kb3NEYXRhID0+IEpTT04uc3RyaW5naWZ5KFxuICAgIHtcbiAgICAgIGxpc3Q6IHRvZG9zRGF0YS5saXN0Lm1hcCh0b2RvRGF0YSA9PlxuICAgICAgICAoe1xuICAgICAgICAgIHRpdGxlOiB0b2RvRGF0YS50aXRsZSxcbiAgICAgICAgICBjb21wbGV0ZWQ6IHRvZG9EYXRhLmNvbXBsZXRlZFxuICAgICAgICB9KVxuICAgICAgKVxuICAgIH1cbiAgKSk7XG59O1xuIiwiZnVuY3Rpb24gbWVyZ2UoKSB7XG4gIGxldCByZXN1bHQgPSB7fTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICBsZXQgb2JqZWN0ID0gYXJndW1lbnRzW2ldO1xuICAgIGZvciAobGV0IGtleSBpbiBvYmplY3QpIHtcbiAgICAgIGlmIChvYmplY3QuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICByZXN1bHRba2V5XSA9IG9iamVjdFtrZXldO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5sZXQgc2FmZUpTT05QYXJzZSA9IHN0ciA9PiBKU09OLnBhcnNlKHN0cikgfHwge307XG5cbmxldCBtZXJnZVdpdGhEZWZhdWx0VG9kb3NEYXRhID0gdG9kb3NEYXRhID0+IHtcbiAgcmV0dXJuIG1lcmdlKHtcbiAgICBsaXN0OiBbXSxcbiAgICBmaWx0ZXI6ICcnLFxuICAgIGZpbHRlckZuOiAoKSA9PiB0cnVlLCAvLyBhbGxvdyBhbnl0aGluZ1xuICB9LCB0b2Rvc0RhdGEpO1xufVxuXG4vLyBUYWtlIGxvY2FsU3RvcmFnZSB0b2RvRGF0YSBzdHJlYW0gYW5kIHRyYW5zZm9ybSBpbnRvXG4vLyBhIEphdmFTY3JpcHQgb2JqZWN0LiBTZXQgZGVmYXVsdCBkYXRhLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGVzZXJpYWxpemUobG9jYWxTdG9yYWdlVmFsdWUkKSB7XG4gIHJldHVybiBsb2NhbFN0b3JhZ2VWYWx1ZSRcbiAgICAubWFwKHNhZmVKU09OUGFyc2UpXG4gICAgLm1hcChtZXJnZVdpdGhEZWZhdWx0VG9kb3NEYXRhKTtcbn07XG4iLCJpbXBvcnQge2EsIGJ1dHRvbiwgZGl2LCBmb290ZXIsIGgxLCBoZWFkZXIsIGlucHV0LCBsaSxcbiAgICAgICAgc2VjdGlvbiwgc3Bhbiwgc3Ryb25nLCB1bH0gZnJvbSAnQGN5Y2xlL2RvbSc7XG5cbmZ1bmN0aW9uIHJlbmRlckhlYWRlcigpIHtcbiAgcmV0dXJuIGhlYWRlcignLmhlYWRlcicsIFtcbiAgICBoMSgndG9kb3MnKSxcbiAgICBpbnB1dCgnLm5ldy10b2RvJywge1xuICAgICAgcHJvcHM6IHtcbiAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICBwbGFjZWhvbGRlcjogJ1doYXQgbmVlZHMgdG8gYmUgZG9uZT8nLFxuICAgICAgICBhdXRvZm9jdXM6IHRydWUsXG4gICAgICAgIG5hbWU6ICduZXdUb2RvJ1xuICAgICAgfSxcbiAgICAgIGhvb2s6IHtcbiAgICAgICAgdXBkYXRlOiAob2xkVk5vZGUsIHtlbG19KSA9PiB7XG4gICAgICAgICAgZWxtLnZhbHVlID0gJyc7XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pXG4gIF0pO1xufVxuXG5mdW5jdGlvbiByZW5kZXJNYWluU2VjdGlvbih0b2Rvc0RhdGEpIHtcbiAgbGV0IGFsbENvbXBsZXRlZCA9IHRvZG9zRGF0YS5saXN0LnJlZHVjZSgoeCwgeSkgPT4geCAmJiB5LmNvbXBsZXRlZCwgdHJ1ZSk7XG4gIGxldCBzZWN0aW9uU3R5bGUgPSB7J2Rpc3BsYXknOiB0b2Rvc0RhdGEubGlzdC5sZW5ndGggPyAnJyA6ICdub25lJ307XG5cbiAgcmV0dXJuIHNlY3Rpb24oJy5tYWluJywge3N0eWxlOiBzZWN0aW9uU3R5bGV9LCBbXG4gICAgaW5wdXQoJy50b2dnbGUtYWxsJywge1xuICAgICAgcHJvcHM6IHt0eXBlOiAnY2hlY2tib3gnLCBjaGVja2VkOiBhbGxDb21wbGV0ZWR9LFxuICAgIH0pLFxuICAgIHVsKCcudG9kby1saXN0JywgdG9kb3NEYXRhLmxpc3RcbiAgICAgIC5maWx0ZXIodG9kb3NEYXRhLmZpbHRlckZuKVxuICAgICAgLm1hcChkYXRhID0+IGRhdGEudG9kb0l0ZW0uRE9NKVxuICAgIClcbiAgXSk7XG59XG5cbmZ1bmN0aW9uIHJlbmRlckZpbHRlckJ1dHRvbih0b2Rvc0RhdGEsIGZpbHRlclRhZywgcGF0aCwgbGFiZWwpIHtcbiAgcmV0dXJuIGxpKFtcbiAgICBhKHtcbiAgICAgIHByb3BzOiB7aHJlZjogcGF0aH0sXG4gICAgICBjbGFzczoge3NlbGVjdGVkOiB0b2Rvc0RhdGEuZmlsdGVyID09PSBmaWx0ZXJUYWd9XG4gICAgfSwgbGFiZWwpXG4gIF0pO1xufVxuXG5mdW5jdGlvbiByZW5kZXJGb290ZXIodG9kb3NEYXRhKSB7XG4gIGxldCBhbW91bnRDb21wbGV0ZWQgPSB0b2Rvc0RhdGEubGlzdFxuICAgIC5maWx0ZXIodG9kb0RhdGEgPT4gdG9kb0RhdGEuY29tcGxldGVkKVxuICAgIC5sZW5ndGg7XG4gIGxldCBhbW91bnRBY3RpdmUgPSB0b2Rvc0RhdGEubGlzdC5sZW5ndGggLSBhbW91bnRDb21wbGV0ZWQ7XG4gIGxldCBmb290ZXJTdHlsZSA9IHsnZGlzcGxheSc6IHRvZG9zRGF0YS5saXN0Lmxlbmd0aCA/ICcnIDogJ25vbmUnfTtcblxuICByZXR1cm4gZm9vdGVyKCcuZm9vdGVyJywge3N0eWxlOiBmb290ZXJTdHlsZX0sIFtcbiAgICBzcGFuKCcudG9kby1jb3VudCcsIFtcbiAgICAgIHN0cm9uZyhTdHJpbmcoYW1vdW50QWN0aXZlKSksXG4gICAgICAnIGl0ZW0nICsgKGFtb3VudEFjdGl2ZSAhPT0gMSA/ICdzJyA6ICcnKSArICcgbGVmdCdcbiAgICBdKSxcbiAgICB1bCgnLmZpbHRlcnMnLCBbXG4gICAgICByZW5kZXJGaWx0ZXJCdXR0b24odG9kb3NEYXRhLCAnJywgJy8nLCAnQWxsJyksXG4gICAgICByZW5kZXJGaWx0ZXJCdXR0b24odG9kb3NEYXRhLCAnYWN0aXZlJywgJy9hY3RpdmUnLCAnQWN0aXZlJyksXG4gICAgICByZW5kZXJGaWx0ZXJCdXR0b24odG9kb3NEYXRhLCAnY29tcGxldGVkJywgJy9jb21wbGV0ZWQnLCAnQ29tcGxldGVkJyksXG4gICAgXSksXG4gICAgKGFtb3VudENvbXBsZXRlZCA+IDAgP1xuICAgICAgYnV0dG9uKCcuY2xlYXItY29tcGxldGVkJywgJ0NsZWFyIGNvbXBsZXRlZCAoJyArIGFtb3VudENvbXBsZXRlZCArICcpJylcbiAgICAgIDogbnVsbFxuICAgIClcbiAgXSlcbn1cblxuLy8gVEhFIFZJRVdcbi8vIFRoaXMgZnVuY3Rpb24gZXhwZWN0cyB0aGUgc3RyZWFtIG9mIHRvZG9zRGF0YVxuLy8gZnJvbSB0aGUgbW9kZWwgZnVuY3Rpb24gYW5kIHR1cm5zIGl0IGludG8gYVxuLy8gdmlydHVhbCBET00gc3RyZWFtIHRoYXQgaXMgdGhlbiB1bHRpbWF0ZWx5IHJldHVybmVkIGludG9cbi8vIHRoZSBET00gc2luayBpbiB0aGUgaW5kZXguanMuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB2aWV3KHRvZG9zJCkge1xuICByZXR1cm4gdG9kb3MkLm1hcCh0b2RvcyA9PlxuICAgIGRpdihbXG4gICAgICByZW5kZXJIZWFkZXIoKSxcbiAgICAgIHJlbmRlck1haW5TZWN0aW9uKHRvZG9zKSxcbiAgICAgIHJlbmRlckZvb3Rlcih0b2RvcylcbiAgICBdKVxuICApO1xufTtcbiIsImNvbnN0IEVOVEVSX0tFWSA9IDEzO1xuY29uc3QgRVNDX0tFWSA9IDI3O1xuXG5leHBvcnQge0VOVEVSX0tFWSwgRVNDX0tFWX07XG4iXX0= diff --git a/examples/cyclejs/js/app.min.js b/examples/cyclejs/js/app.min.js new file mode 100644 index 0000000000..d481f809e9 --- /dev/null +++ b/examples/cyclejs/js/app.min.js @@ -0,0 +1,12 @@ +(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o2?_len-2:0),_key=2;_key<_len;_key++){children[_key-2]=arguments[_key]}return h(tag,attrs,children)},svg:svg,mockDOMSource:mockDOMSource});module.exports=CycleDOM},{"./mock-dom-source":4,"./render-dom":5,"./render-html":6,"./virtual-hyperscript":9,"./virtual-hyperscript-svg":8,"hyperscript-helpers":10}],3:[function(require,module,exports){"use strict";var Rx=require("rx");var disposableCreate=Rx.Disposable.create;var CompositeDisposable=Rx.CompositeDisposable;var AnonymousObservable=Rx.AnonymousObservable;function createListener(_ref){var element=_ref.element;var eventName=_ref.eventName;var handler=_ref.handler;var useCapture=_ref.useCapture;if(element.addEventListener){element.addEventListener(eventName,handler,useCapture);return disposableCreate(function removeEventListener(){element.removeEventListener(eventName,handler,useCapture)})}throw new Error("No listener found")}function createEventListener(_ref2){var element=_ref2.element;var eventName=_ref2.eventName;var handler=_ref2.handler;var useCapture=_ref2.useCapture;var disposables=new CompositeDisposable;if(Array.isArray(element)){for(var i=0,len=element.length;i0){return Rx.Observable.combineLatest(vtree.children.map(transposeVTree),function(){for(var _len=arguments.length,arr=Array(_len),_key=0;_key<_len;_key++){arr[_key]=arguments[_key]}return new VirtualNode(vtree.tagName,vtree.properties,arr,vtree.key,vtree.namespace)})}else if(vtree.type==="VirtualNode"||vtree.type==="Widget"||vtree.type==="Thunk"){return Rx.Observable.just(vtree)}else{throw new Error("Unhandled case in transposeVTree()")}}module.exports={transposeVTree:transposeVTree}},{rx:66,"virtual-dom/vnode/vnode":53}],8:[function(require,module,exports){"use strict";var isArray=require("x-is-array");var h=require("./virtual-hyperscript");var SVGAttributeNamespace=require("virtual-dom/virtual-hyperscript/svg-attribute-namespace");var attributeHook=require("virtual-dom/virtual-hyperscript/hooks/attribute-hook");var SVG_NAMESPACE="http://www.w3.org/2000/svg";module.exports=svg;function svg(tagName,properties,children){if(!children&&isChildren(properties)){children=properties;properties={}}properties=properties||{};properties.namespace=SVG_NAMESPACE;var attributes=properties.attributes||(properties.attributes={});for(var key in properties){if(!properties.hasOwnProperty(key)){continue}var namespace=SVGAttributeNamespace(key);if(namespace===undefined){continue}var value=properties[key];if(typeof value!=="string"&&typeof value!=="number"&&typeof value!=="boolean"){continue}if(namespace!==null){properties[key]=attributeHook(namespace,value);continue}attributes[key]=value;properties[key]=undefined}return h(tagName,properties,children)}function isObservable(x){return x&&typeof x.subscribe==="function"}function isChildren(x){return typeof x==="string"||isArray(x)||isObservable(x)}},{"./virtual-hyperscript":9,"virtual-dom/virtual-hyperscript/hooks/attribute-hook":41,"virtual-dom/virtual-hyperscript/svg-attribute-namespace":45,"x-is-array":58}],9:[function(require,module,exports){"use strict";var isArray=require("x-is-array");var VNode=require("virtual-dom/vnode/vnode.js");var VText=require("virtual-dom/vnode/vtext.js");var isVNode=require("virtual-dom/vnode/is-vnode");var isVText=require("virtual-dom/vnode/is-vtext");var isWidget=require("virtual-dom/vnode/is-widget");var isHook=require("virtual-dom/vnode/is-vhook");var isVThunk=require("virtual-dom/vnode/is-thunk");var parseTag=require("virtual-dom/virtual-hyperscript/parse-tag.js");var softSetHook=require("virtual-dom/virtual-hyperscript/hooks/soft-set-hook.js");var evHook=require("virtual-dom/virtual-hyperscript/hooks/ev-hook.js");module.exports=h;function h(tagName,properties,children){var childNodes=[];var tag,props,key,namespace;if(!children&&isChildren(properties)){children=properties;props={}}props=props||properties||{};tag=parseTag(tagName,props);if(props.hasOwnProperty("key")){key=props.key;props.key=undefined}if(props.hasOwnProperty("namespace")){namespace=props.namespace;props.namespace=undefined}if(tag==="INPUT"&&!namespace&&props.hasOwnProperty("value")&&props.value!==undefined&&!isHook(props.value)){props.value=softSetHook(props.value)}transformProperties(props);if(children!==undefined&&children!==null){addChild(children,childNodes,tag,props)}return new VNode(tag,props,childNodes,key,namespace)}function addChild(c,childNodes,tag,props){if(typeof c==="string"){childNodes.push(new VText(c))}else if(typeof c==="number"){childNodes.push(new VText(String(c)))}else if(isChild(c)){childNodes.push(c)}else if(isArray(c)){for(var i=0;i0};var startsWith=function startsWith(string,start){return string.indexOf(start)===0};var isSelector=function isSelector(param){return isValidString(param)&&(startsWith(param,".")||startsWith(param,"#"))};var node=function node(h){return function(tagName){return function(first){for(var _len=arguments.length,rest=Array(_len>1?_len-1:0),_key=1;_key<_len;_key++){rest[_key-1]=arguments[_key]}if(isSelector(first)){return h.apply(undefined,[tagName+first].concat(rest))}else{return h.apply(undefined,[tagName,first].concat(rest))}}}};var TAG_NAMES=["a","abbr","address","area","article","aside","audio","b","base","bdi","bdo","blockquote","body","br","button","canvas","caption","cite","code","col","colgroup","dd","del","dfn","dir","div","dl","dt","em","embed","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","iframe","img","input","ins","kbd","keygen","label","legend","li","link","map","mark","menu","meta","nav","noscript","object","ol","optgroup","option","p","param","pre","q","rp","rt","ruby","s","samp","script","section","select","small","source","span","strong","style","sub","sup","table","tbody","td","textarea","tfoot","th","thead","title","tr","u","ul","video"];module.exports=function(h){var exported={TAG_NAMES:TAG_NAMES,isSelector:isSelector};var appliedNode=node(h);TAG_NAMES.forEach(function(n){exported[n]=appliedNode(n)});return exported}},{}],11:[function(require,module,exports){"use strict";var proto=Element.prototype;var vendor=proto.matches||proto.matchesSelector||proto.webkitMatchesSelector||proto.mozMatchesSelector||proto.msMatchesSelector||proto.oMatchesSelector;module.exports=match;function match(el,selector){if(vendor)return vendor.call(el,selector);var nodes=el.parentNode.querySelectorAll(selector);for(var i=0;i"}function tagContent(node){var innerHTML=node.properties.innerHTML;if(innerHTML!=null)return innerHTML;else{var ret="";if(node.children&&node.children.length){for(var i=0,l=node.children.length;i"}},{"./create-attribute":15,"./void-elements":26,"escape-html":17,"param-case":23,"virtual-dom/virtual-hyperscript/hooks/attribute-hook":41,"virtual-dom/virtual-hyperscript/hooks/soft-set-hook":43,"virtual-dom/vnode/is-thunk":47,"virtual-dom/vnode/is-vnode":49,"virtual-dom/vnode/is-vtext":50,"virtual-dom/vnode/is-widget":51,xtend:24}],17:[function(require,module,exports){"use strict";var matchHtmlRegExp=/["'&<>]/;module.exports=escapeHtml;function escapeHtml(string){var str=""+string;var match=matchHtmlRegExp.exec(str);if(!match){return str}var escape;var html="";var index=0;var lastIndex=0;for(index=match.index;index>>0:limit>>>0;while(match=separator.exec(str)){lastIndex=match.index+match[0].length;if(lastIndex>lastLastIndex){output.push(str.slice(lastLastIndex,match.index));if(!compliantExecNpcg&&match.length>1){match[0].replace(separator2,function(){for(var i=1;i1&&match.index=limit){break}}if(separator.lastIndex===match.index){separator.lastIndex++}}if(lastLastIndex===str.length){if(lastLength||!separator.test("")){output.push("")}}else{output.push(str.slice(lastLastIndex))}return output.length>limit?output.slice(0,limit):output};return self}()},{}],29:[function(require,module,exports){"use strict";var OneVersionConstraint=require("individual/one-version");var MY_VERSION="7";OneVersionConstraint("ev-store",MY_VERSION);var hashKey="__EV_STORE_KEY@"+MY_VERSION;module.exports=EvStore;function EvStore(elem){var hash=elem[hashKey];if(!hash){hash=elem[hashKey]={}}return hash}},{"individual/one-version":31}],30:[function(require,module,exports){(function(global){"use strict";var root=typeof window!=="undefined"?window:typeof global!=="undefined"?global:{};module.exports=Individual;function Individual(key,value){if(key in root){return root[key]}root[key]=value;return value}}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{}],31:[function(require,module,exports){"use strict";var Individual=require("./index.js");module.exports=OneVersion;function OneVersion(moduleName,version,defaultValue){var key="__INDIVIDUAL_ONE_VERSION_"+moduleName;var enforceKey=key+"_ENFORCE_SINGLETON";var versionValue=Individual(enforceKey,version);if(versionValue!==version){throw new Error("Can only have one copy of "+moduleName+".\n"+"You already have version "+versionValue+" installed.\n"+"This means you cannot install version "+version)}return Individual(key,defaultValue)}},{"./index.js":30}],32:[function(require,module,exports){(function(global){var topLevel=typeof global!=="undefined"?global:typeof window!=="undefined"?window:{};var minDoc=require("min-document");if(typeof document!=="undefined"){module.exports=document}else{var doccy=topLevel["__GLOBAL_DOCUMENT_CACHE@4"];if(!doccy){doccy=topLevel["__GLOBAL_DOCUMENT_CACHE@4"]=minDoc}module.exports=doccy}}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{"min-document":64}],33:[function(require,module,exports){"use strict";module.exports=function isObject(x){return typeof x==="object"&&x!==null}},{}],34:[function(require,module,exports){var patch=require("./vdom/patch.js");module.exports=patch},{"./vdom/patch.js":39}],35:[function(require,module,exports){var isObject=require("is-object");var isHook=require("../vnode/is-vhook.js");module.exports=applyProperties;function applyProperties(node,props,previous){for(var propName in props){var propValue=props[propName];if(propValue===undefined){removeProperty(node,propName,propValue,previous)}else if(isHook(propValue)){removeProperty(node,propName,propValue,previous);if(propValue.hook){propValue.hook(node,propName,previous?previous[propName]:undefined)}}else{if(isObject(propValue)){patchObject(node,props,previous,propName,propValue)}else{node[propName]=propValue}}}}function removeProperty(node,propName,propValue,previous){if(previous){var previousValue=previous[propName];if(!isHook(previousValue)){if(propName==="attributes"){for(var attrName in previousValue){node.removeAttribute(attrName)}}else if(propName==="style"){for(var i in previousValue){ +node.style[i]=""}}else if(typeof previousValue==="string"){node[propName]=""}else{node[propName]=null}}else if(previousValue.unhook){previousValue.unhook(node,propName,propValue)}}}function patchObject(node,props,previous,propName,propValue){var previousValue=previous?previous[propName]:undefined;if(propName==="attributes"){for(var attrName in propValue){var attrValue=propValue[attrName];if(attrValue===undefined){node.removeAttribute(attrName)}else{node.setAttribute(attrName,attrValue)}}return}if(previousValue&&isObject(previousValue)&&getPrototype(previousValue)!==getPrototype(propValue)){node[propName]=propValue;return}if(!isObject(node[propName])){node[propName]={}}var replacer=propName==="style"?"":undefined;for(var k in propValue){var value=propValue[k];node[propName][k]=value===undefined?replacer:value}}function getPrototype(value){if(Object.getPrototypeOf){return Object.getPrototypeOf(value)}else if(value.__proto__){return value.__proto__}else if(value.constructor){return value.constructor.prototype}}},{"../vnode/is-vhook.js":48,"is-object":33}],36:[function(require,module,exports){var document=require("global/document");var applyProperties=require("./apply-properties");var isVNode=require("../vnode/is-vnode.js");var isVText=require("../vnode/is-vtext.js");var isWidget=require("../vnode/is-widget.js");var handleThunk=require("../vnode/handle-thunk.js");module.exports=createElement;function createElement(vnode,opts){var doc=opts?opts.document||document:document;var warn=opts?opts.warn:null;vnode=handleThunk(vnode).a;if(isWidget(vnode)){return vnode.init()}else if(isVText(vnode)){return doc.createTextNode(vnode.text)}else if(!isVNode(vnode)){if(warn){warn("Item is not a valid virtual dom node",vnode)}return null}var node=vnode.namespace===null?doc.createElement(vnode.tagName):doc.createElementNS(vnode.namespace,vnode.tagName);var props=vnode.properties;applyProperties(node,props);var children=vnode.children;for(var i=0;i>0;currentItem=indices[currentIndex];if(minIndex===maxIndex){return currentItem>=left&¤tItem<=right}else if(currentItemright){maxIndex=currentIndex-1}else{return true}}return false}function ascending(a,b){return a>b?1:-1}},{}],38:[function(require,module,exports){var applyProperties=require("./apply-properties");var isWidget=require("../vnode/is-widget.js");var VPatch=require("../vnode/vpatch.js");var updateWidget=require("./update-widget");module.exports=applyPatch;function applyPatch(vpatch,domNode,renderOptions){var type=vpatch.type;var vNode=vpatch.vNode;var patch=vpatch.patch;switch(type){case VPatch.REMOVE:return removeNode(domNode,vNode);case VPatch.INSERT:return insertNode(domNode,patch,renderOptions);case VPatch.VTEXT:return stringPatch(domNode,vNode,patch,renderOptions);case VPatch.WIDGET:return widgetPatch(domNode,vNode,patch,renderOptions);case VPatch.VNODE:return vNodePatch(domNode,vNode,patch,renderOptions);case VPatch.ORDER:reorderChildren(domNode,patch);return domNode;case VPatch.PROPS:applyProperties(domNode,patch,vNode.properties);return domNode;case VPatch.THUNK:return replaceRoot(domNode,renderOptions.patch(domNode,patch,renderOptions));default:return domNode}}function removeNode(domNode,vNode){var parentNode=domNode.parentNode;if(parentNode){parentNode.removeChild(domNode)}destroyWidget(domNode,vNode);return null}function insertNode(parentNode,vNode,renderOptions){var newNode=renderOptions.render(vNode,renderOptions);if(parentNode){parentNode.appendChild(newNode)}return parentNode}function stringPatch(domNode,leftVNode,vText,renderOptions){var newNode;if(domNode.nodeType===3){domNode.replaceData(0,domNode.length,vText.text);newNode=domNode}else{var parentNode=domNode.parentNode;newNode=renderOptions.render(vText,renderOptions);if(parentNode&&newNode!==domNode){parentNode.replaceChild(newNode,domNode)}}return newNode}function widgetPatch(domNode,leftVNode,widget,renderOptions){var updating=updateWidget(leftVNode,widget);var newNode;if(updating){newNode=widget.update(leftVNode,domNode)||domNode}else{newNode=renderOptions.render(widget,renderOptions)}var parentNode=domNode.parentNode;if(parentNode&&newNode!==domNode){parentNode.replaceChild(newNode,domNode)}if(!updating){destroyWidget(domNode,leftVNode)}return newNode}function vNodePatch(domNode,leftVNode,vNode,renderOptions){var parentNode=domNode.parentNode;var newNode=renderOptions.render(vNode,renderOptions);if(parentNode&&newNode!==domNode){parentNode.replaceChild(newNode,domNode)}return newNode}function destroyWidget(domNode,w){if(typeof w.destroy==="function"&&isWidget(w)){w.destroy(domNode)}}function reorderChildren(domNode,moves){var childNodes=domNode.childNodes;var keyMap={};var node;var remove;var insert;for(var i=0;i=length++?null:childNodes[insert.to])}}function replaceRoot(oldRoot,newRoot){if(oldRoot&&newRoot&&oldRoot!==newRoot&&oldRoot.parentNode){oldRoot.parentNode.replaceChild(newRoot,oldRoot)}return newRoot}},{"../vnode/is-widget.js":51,"../vnode/vpatch.js":54,"./apply-properties":35,"./update-widget":40}],39:[function(require,module,exports){var document=require("global/document");var isArray=require("x-is-array");var render=require("./create-element");var domIndex=require("./dom-index");var patchOp=require("./patch-op");module.exports=patch;function patch(rootNode,patches,renderOptions){renderOptions=renderOptions||{};renderOptions.patch=renderOptions.patch&&renderOptions.patch!==patch?renderOptions.patch:patchRecursive;renderOptions.render=renderOptions.render||render;return renderOptions.patch(rootNode,patches,renderOptions)}function patchRecursive(rootNode,patches,renderOptions){var indices=patchIndices(patches);if(indices.length===0){return rootNode}var index=domIndex(rootNode,patches.a,indices);var ownerDocument=rootNode.ownerDocument;if(!renderOptions.document&&ownerDocument!==document){renderOptions.document=ownerDocument}for(var i=0;i-1?prop.substr(colonPosition+1):prop;node.removeAttributeNS(this.namespace,localName)};AttributeHook.prototype.type="AttributeHook"},{}],42:[function(require,module,exports){"use strict";var EvStore=require("ev-store");module.exports=EvHook;function EvHook(value){if(!(this instanceof EvHook)){return new EvHook(value)}this.value=value}EvHook.prototype.hook=function(node,propertyName){var es=EvStore(node);var propName=propertyName.substr(3);es[propName]=this.value};EvHook.prototype.unhook=function(node,propertyName){var es=EvStore(node);var propName=propertyName.substr(3);es[propName]=undefined}},{"ev-store":29}],43:[function(require,module,exports){"use strict";module.exports=SoftSetHook;function SoftSetHook(value){if(!(this instanceof SoftSetHook)){return new SoftSetHook(value)}this.value=value}SoftSetHook.prototype.hook=function(node,propertyName){if(node[propertyName]!==this.value){node[propertyName]=this.value}}},{}],44:[function(require,module,exports){"use strict";var split=require("browser-split");var classIdSplit=/([\.#]?[a-zA-Z0-9\u007F-\uFFFF_:-]+)/;var notClassId=/^\.|#/;module.exports=parseTag;function parseTag(tag,props){if(!tag){return"DIV"}var noId=!props.hasOwnProperty("id");var tagParts=split(tag,classIdSplit);var tagName=null;if(notClassId.test(tagParts[1])){tagName="DIV"}var classes,part,type,i;for(i=0;ibLen?aLen:bLen;for(var i=0;i=bFree.length?bChildren.length:bFree[freeIndex];for(var j=0;j=lastFreeIndex){newChildren.push(newItem)}}var simulate=newChildren.slice();var simulateIndex=0;var removes=[];var inserts=[];var simulateItem;for(var k=0;k1?_len-1:0),_key=1;_key<_len;_key++){rest[_key-1]=arguments[_key]}var sinks=dataflowComponent.apply(undefined,[scopedSources].concat(rest));var scopedSinks={};for(var key in sinks){if(sinks.hasOwnProperty(key)&&sources.hasOwnProperty(key)&&typeof sources[key].isolateSink==="function"){scopedSinks[key]=sources[key].isolateSink(sinks[key],scope)}else if(sinks.hasOwnProperty(key)){scopedSinks[key]=sinks[key]}}return scopedSinks}}isolate.reset=function(){return counter=0};module.exports=isolate},{}],60:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.default=storageDriver;var _writeToStore=require("./writeToStore");var _writeToStore2=_interopRequireDefault(_writeToStore);var _responseCollection=require("./responseCollection");var _responseCollection2=_interopRequireDefault(_responseCollection);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{"default":obj}}function storageDriver(request$){request$.subscribe(function(request){return(0,_writeToStore2.default)(request)});return(0,_responseCollection2.default)(request$)}},{"./responseCollection":61,"./writeToStore":63}],61:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.default=function(request$){return{get local(){return(0,_util2.default)(request$)},get session(){return(0,_util2.default)(request$,"session")}}};var _util=require("./util");var _util2=_interopRequireDefault(_util);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{"default":obj}}},{"./util":62}],62:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.default=getResponseObj;var _rx=require("rx");var _rx2=_interopRequireDefault(_rx);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{"default":obj}}function getStorage$(request$,type){return _rx2.default.Observable.if(function(){return type==="local"},request$.filter(function(req){return!req.target||req.target==="local"}),request$.filter(function(req){return req.target==="session"}))}function storageKey(n,request$){var type=arguments.length<=2||arguments[2]===undefined?"local":arguments[2];var storage$=getStorage$(request$,type);var key=type==="local"?localStorage.key(n):sessionStorage.key(n);return storage$.filter(function(req){return req.key===key}).map(function(req){return req.key}).startWith(key).distinctUntilChanged()}function storageGetItem(key,request$){var type=arguments.length<=2||arguments[2]===undefined?"local":arguments[2];var storage$=getStorage$(request$,type);var storageObj=type==="local"?localStorage:sessionStorage;return storage$.filter(function(req){return req.key===key}).map(function(req){return req.value}).startWith(storageObj.getItem(key))}function getResponseObj(request$){var type=arguments.length<=1||arguments[1]===undefined?"local":arguments[1];return{key:function key(n){return storageKey(n,request$,type)},getItem:function getItem(key){return storageGetItem(key,request$,type)}}}},{rx:66}],63:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});function writeToStore(_ref){var _ref$target=_ref.target;var target=_ref$target===undefined?"local":_ref$target;var _ref$action=_ref.action;var action=_ref$action===undefined?"setItem":_ref$action;var key=_ref.key;var value=_ref.value;var storage=target==="local"?localStorage:sessionStorage;storage[action](key,value)}exports.default=writeToStore},{}],64:[function(require,module,exports){},{}],65:[function(require,module,exports){var process=module.exports={};var queue=[];var draining=false;var currentQueue;var queueIndex=-1;function cleanUpNextTick(){draining=false;if(currentQueue.length){queue=currentQueue.concat(queue)}else{queueIndex=-1}if(queue.length){drainQueue()}}function drainQueue(){if(draining){return}var timeout=setTimeout(cleanUpNextTick);draining=true;var len=queue.length;while(len){currentQueue=queue;queue=[];while(++queueIndex1){for(var i=1;iy?1:x=rStartingLine&&lineNumber<=rEndingLine}function isNodeFrame(stackLine){return stackLine.indexOf("(module.js:")!==-1||stackLine.indexOf("(node.js:")!==-1}function captureLine(){if(!hasStacks){return}try{throw new Error}catch(e){var lines=e.stack.split("\n");var firstLine=lines[0].indexOf("@")>0?lines[1]:lines[2];var fileNameAndLineNumber=getFileNameAndLineNumber(firstLine);if(!fileNameAndLineNumber){return}rFileName=fileNameAndLineNumber[0];return fileNameAndLineNumber[1]}}function getFileNameAndLineNumber(stackLine){var attempt1=/at .+ \((.+):(\d+):(?:\d+)\)$/.exec(stackLine);if(attempt1){return[attempt1[1],Number(attempt1[2])]}var attempt2=/at ([^ ]+):(\d+):(?:\d+)$/.exec(stackLine);if(attempt2){return[attempt2[1],Number(attempt2[2])]}var attempt3=/.*@(.+):(\d+)$/.exec(stackLine);if(attempt3){return[attempt3[1],Number(attempt3[2])]}}var EmptyError=Rx.EmptyError=function(){this.message="Sequence contains no elements.";Error.call(this)};EmptyError.prototype=Object.create(Error.prototype);EmptyError.prototype.name="EmptyError";var ObjectDisposedError=Rx.ObjectDisposedError=function(){this.message="Object has been disposed";Error.call(this)};ObjectDisposedError.prototype=Object.create(Error.prototype);ObjectDisposedError.prototype.name="ObjectDisposedError";var ArgumentOutOfRangeError=Rx.ArgumentOutOfRangeError=function(){this.message="Argument out of range";Error.call(this)};ArgumentOutOfRangeError.prototype=Object.create(Error.prototype);ArgumentOutOfRangeError.prototype.name="ArgumentOutOfRangeError";var NotSupportedError=Rx.NotSupportedError=function(message){this.message=message||"This operation is not supported";Error.call(this)};NotSupportedError.prototype=Object.create(Error.prototype);NotSupportedError.prototype.name="NotSupportedError";var NotImplementedError=Rx.NotImplementedError=function(message){this.message=message||"This operation is not implemented";Error.call(this)};NotImplementedError.prototype=Object.create(Error.prototype);NotImplementedError.prototype.name="NotImplementedError";var notImplemented=Rx.helpers.notImplemented=function(){throw new NotImplementedError};var notSupported=Rx.helpers.notSupported=function(){throw new NotSupportedError};var $iterator$=typeof Symbol==="function"&&Symbol.iterator||"_es6shim_iterator_";if(root.Set&&typeof(new root.Set)["@@iterator"]==="function"){$iterator$="@@iterator"}var doneEnumerator=Rx.doneEnumerator={done:true,value:undefined};var isIterable=Rx.helpers.isIterable=function(o){return o&&o[$iterator$]!==undefined};var isArrayLike=Rx.helpers.isArrayLike=function(o){return o&&o.length!==undefined};Rx.helpers.iterator=$iterator$;var bindCallback=Rx.internals.bindCallback=function(func,thisArg,argCount){if(typeof thisArg==="undefined"){return func}switch(argCount){case 0:return function(){return func.call(thisArg)};case 1:return function(arg){return func.call(thisArg,arg)};case 2:return function(value,index){return func.call(thisArg,value,index)};case 3:return function(value,index,collection){return func.call(thisArg,value,index,collection)}}return function(){return func.apply(thisArg,arguments)}};var dontEnums=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],dontEnumsLength=dontEnums.length;var argsTag="[object Arguments]",arrayTag="[object Array]",boolTag="[object Boolean]",dateTag="[object Date]",errorTag="[object Error]",funcTag="[object Function]",mapTag="[object Map]",numberTag="[object Number]",objectTag="[object Object]",regexpTag="[object RegExp]",setTag="[object Set]",stringTag="[object String]",weakMapTag="[object WeakMap]";var arrayBufferTag="[object ArrayBuffer]",float32Tag="[object Float32Array]",float64Tag="[object Float64Array]",int8Tag="[object Int8Array]",int16Tag="[object Int16Array]",int32Tag="[object Int32Array]",uint8Tag="[object Uint8Array]",uint8ClampedTag="[object Uint8ClampedArray]",uint16Tag="[object Uint16Array]",uint32Tag="[object Uint32Array]";var typedArrayTags={};typedArrayTags[float32Tag]=typedArrayTags[float64Tag]=typedArrayTags[int8Tag]=typedArrayTags[int16Tag]=typedArrayTags[int32Tag]=typedArrayTags[uint8Tag]=typedArrayTags[uint8ClampedTag]=typedArrayTags[uint16Tag]=typedArrayTags[uint32Tag]=true;typedArrayTags[argsTag]=typedArrayTags[arrayTag]=typedArrayTags[arrayBufferTag]=typedArrayTags[boolTag]=typedArrayTags[dateTag]=typedArrayTags[errorTag]=typedArrayTags[funcTag]=typedArrayTags[mapTag]=typedArrayTags[numberTag]=typedArrayTags[objectTag]=typedArrayTags[regexpTag]=typedArrayTags[setTag]=typedArrayTags[stringTag]=typedArrayTags[weakMapTag]=false;var objectProto=Object.prototype,hasOwnProperty=objectProto.hasOwnProperty,objToString=objectProto.toString,MAX_SAFE_INTEGER=Math.pow(2,53)-1;var keys=Object.keys||function(){var hasOwnProperty=Object.prototype.hasOwnProperty,hasDontEnumBug=!{toString:null}.propertyIsEnumerable("toString"),dontEnums=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],dontEnumsLength=dontEnums.length;return function(obj){if(typeof obj!=="object"&&(typeof obj!=="function"||obj===null)){throw new TypeError("Object.keys called on non-object")}var result=[],prop,i;for(prop in obj){if(hasOwnProperty.call(obj,prop)){result.push(prop)}}if(hasDontEnumBug){for(i=0;i-1&&value%1===0&&value<=MAX_SAFE_INTEGER}var isHostObject=function(){try{Object({toString:0}+"")}catch(e){return function(){return false}}return function(value){return typeof value.toString!=="function"&&typeof(value+"")==="string"}}();function isTypedArray(value){return isObjectLike(value)&&isLength(value.length)&&!!typedArrayTags[objToString.call(value)]}var isArray=Array.isArray||function(value){return isObjectLike(value)&&isLength(value.length)&&objToString.call(value)===arrayTag};function arraySome(array,predicate){var index=-1,length=array.length;while(++indexarrLength)){return false}while(++index=this.length||index<0){return}var parent=index-1>>1;if(parent<0||parent===index){return}if(this.isHigherPriority(index,parent)){var temp=this.items[index];this.items[index]=this.items[parent];this.items[parent]=temp;this.percolate(parent)}};priorityProto.heapify=function(index){+index||(index=0);if(index>=this.length||index<0){return}var left=2*index+1,right=2*index+2,first=index;if(left0){var item=queue.dequeue();!item.isCancelled()&&item.invoke()}}inherits(CurrentThreadScheduler,__super__);function CurrentThreadScheduler(){__super__.call(this)}CurrentThreadScheduler.prototype.schedule=function(state,action){var si=new ScheduledItem(this,state,action,this.now());if(!queue){queue=new PriorityQueue(4);queue.enqueue(si);var result=tryCatch(runTrampoline)();queue=null;if(result===errorObj){thrower(result.e)}}else{queue.enqueue(si)}return si.disposable};CurrentThreadScheduler.prototype.scheduleRequired=function(){return!queue};return CurrentThreadScheduler}(Scheduler);var currentThreadScheduler=Scheduler.currentThread=new CurrentThreadScheduler;var scheduleMethod,clearMethod;var localTimer=function(){var localSetTimeout,localClearTimeout=noop;if(!!root.setTimeout){localSetTimeout=root.setTimeout;localClearTimeout=root.clearTimeout}else if(!!root.WScript){localSetTimeout=function(fn,time){root.WScript.Sleep(time);fn()}}else{throw new NotSupportedError}return{setTimeout:localSetTimeout,clearTimeout:localClearTimeout}}();var localSetTimeout=localTimer.setTimeout,localClearTimeout=localTimer.clearTimeout;(function(){var nextHandle=1,tasksByHandle={},currentlyRunning=false;clearMethod=function(handle){delete tasksByHandle[handle]};function runTask(handle){if(currentlyRunning){localSetTimeout(function(){runTask(handle)},0)}else{var task=tasksByHandle[handle];if(task){currentlyRunning=true;var result=tryCatch(task)();clearMethod(handle);currentlyRunning=false;if(result===errorObj){thrower(result.e)}}}}var reNative=new RegExp("^"+String(toString).replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/toString| for [^\]]+/g,".*?")+"$");var setImmediate=typeof(setImmediate=freeGlobal&&moduleExports&&freeGlobal.setImmediate)=="function"&&!reNative.test(setImmediate)&&setImmediate;function postMessageSupported(){if(!root.postMessage||root.importScripts){return false}var isAsync=false,oldHandler=root.onmessage;root.onmessage=function(){isAsync=true};root.postMessage("","*");root.onmessage=oldHandler;return isAsync}if(isFunction(setImmediate)){scheduleMethod=function(action){var id=nextHandle++;tasksByHandle[id]=action;setImmediate(function(){runTask(id)});return id}}else if(typeof process!=="undefined"&&{}.toString.call(process)==="[object process]"){ +scheduleMethod=function(action){var id=nextHandle++;tasksByHandle[id]=action;process.nextTick(function(){runTask(id)});return id}}else if(postMessageSupported()){var MSG_PREFIX="ms.rx.schedule"+Math.random();var onGlobalPostMessage=function(event){if(typeof event.data==="string"&&event.data.substring(0,MSG_PREFIX.length)===MSG_PREFIX){runTask(event.data.substring(MSG_PREFIX.length))}};root.addEventListener("message",onGlobalPostMessage,false);scheduleMethod=function(action){var id=nextHandle++;tasksByHandle[id]=action;root.postMessage(MSG_PREFIX+currentId,"*");return id}}else if(!!root.MessageChannel){var channel=new root.MessageChannel;channel.port1.onmessage=function(e){runTask(e.data)};scheduleMethod=function(action){var id=nextHandle++;tasksByHandle[id]=action;channel.port2.postMessage(id);return id}}else if("document"in root&&"onreadystatechange"in root.document.createElement("script")){scheduleMethod=function(action){var scriptElement=root.document.createElement("script");var id=nextHandle++;tasksByHandle[id]=action;scriptElement.onreadystatechange=function(){runTask(id);scriptElement.onreadystatechange=null;scriptElement.parentNode.removeChild(scriptElement);scriptElement=null};root.document.documentElement.appendChild(scriptElement);return id}}else{scheduleMethod=function(action){var id=nextHandle++;tasksByHandle[id]=action;localSetTimeout(function(){runTask(id)},0);return id}}})();var DefaultScheduler=function(__super__){inherits(DefaultScheduler,__super__);function DefaultScheduler(){__super__.call(this)}function scheduleAction(disposable,action,scheduler,state){return function schedule(){disposable.setDisposable(Disposable._fixup(action(scheduler,state)))}}function ClearDisposable(id){this._id=id;this.isDisposed=false}ClearDisposable.prototype.dispose=function(){if(!this.isDisposed){this.isDisposed=true;clearMethod(this._id)}};function LocalClearDisposable(id){this._id=id;this.isDisposed=false}LocalClearDisposable.prototype.dispose=function(){if(!this.isDisposed){this.isDisposed=true;localClearTimeout(this._id)}};DefaultScheduler.prototype.schedule=function(state,action){var disposable=new SingleAssignmentDisposable,id=scheduleMethod(scheduleAction(disposable,action,this,state));return new BinaryDisposable(disposable,new ClearDisposable(id))};DefaultScheduler.prototype._scheduleFuture=function(state,dueTime,action){if(dueTime===0){return this.schedule(state,action)}var disposable=new SingleAssignmentDisposable,id=localSetTimeout(scheduleAction(disposable,action,this,state),dueTime);return new BinaryDisposable(disposable,new LocalClearDisposable(id))};return DefaultScheduler}(Scheduler);var defaultScheduler=Scheduler["default"]=Scheduler.async=new DefaultScheduler;var CatchScheduler=function(__super__){inherits(CatchScheduler,__super__);function CatchScheduler(scheduler,handler){this._scheduler=scheduler;this._handler=handler;this._recursiveOriginal=null;this._recursiveWrapper=null;__super__.call(this)}CatchScheduler.prototype.schedule=function(state,action){return this._scheduler.schedule(state,this._wrap(action))};CatchScheduler.prototype._scheduleFuture=function(state,dueTime,action){return this._scheduler.schedule(state,dueTime,this._wrap(action))};CatchScheduler.prototype.now=function(){return this._scheduler.now()};CatchScheduler.prototype._clone=function(scheduler){return new CatchScheduler(scheduler,this._handler)};CatchScheduler.prototype._wrap=function(action){var parent=this;return function(self,state){var res=tryCatch(action)(parent._getRecursiveWrapper(self),state);if(res===errorObj){if(!parent._handler(res.e)){thrower(res.e)}return disposableEmpty}return disposableFixup(res)}};CatchScheduler.prototype._getRecursiveWrapper=function(scheduler){if(this._recursiveOriginal!==scheduler){this._recursiveOriginal=scheduler;var wrapper=this._clone(scheduler);wrapper._recursiveOriginal=scheduler;wrapper._recursiveWrapper=wrapper;this._recursiveWrapper=wrapper}return this._recursiveWrapper};CatchScheduler.prototype.schedulePeriodic=function(state,period,action){var self=this,failed=false,d=new SingleAssignmentDisposable;d.setDisposable(this._scheduler.schedulePeriodic(state,period,function(state1){if(failed){return null}var res=tryCatch(action)(state1);if(res===errorObj){failed=true;if(!self._handler(res.e)){thrower(res.e)}d.dispose();return null}return res}));return d};return CatchScheduler}(Scheduler);var Notification=Rx.Notification=function(){function Notification(){}Notification.prototype._accept=function(onNext,onError,onCompleted){throw new NotImplementedError};Notification.prototype._acceptObserver=function(onNext,onError,onCompleted){throw new NotImplementedError};Notification.prototype.accept=function(observerOrOnNext,onError,onCompleted){return observerOrOnNext&&typeof observerOrOnNext==="object"?this._acceptObserver(observerOrOnNext):this._accept(observerOrOnNext,onError,onCompleted)};Notification.prototype.toObservable=function(scheduler){var self=this;isScheduler(scheduler)||(scheduler=immediateScheduler);return new AnonymousObservable(function(o){return scheduler.schedule(self,function(_,notification){notification._acceptObserver(o);notification.kind==="N"&&o.onCompleted()})})};return Notification}();var OnNextNotification=function(__super__){inherits(OnNextNotification,__super__);function OnNextNotification(value){this.value=value;this.kind="N"}OnNextNotification.prototype._accept=function(onNext){return onNext(this.value)};OnNextNotification.prototype._acceptObserver=function(o){return o.onNext(this.value)};OnNextNotification.prototype.toString=function(){return"OnNext("+this.value+")"};return OnNextNotification}(Notification);var OnErrorNotification=function(__super__){inherits(OnErrorNotification,__super__);function OnErrorNotification(error){this.error=error;this.kind="E"}OnErrorNotification.prototype._accept=function(onNext,onError){return onError(this.error)};OnErrorNotification.prototype._acceptObserver=function(o){return o.onError(this.error)};OnErrorNotification.prototype.toString=function(){return"OnError("+this.error+")"};return OnErrorNotification}(Notification);var OnCompletedNotification=function(__super__){inherits(OnCompletedNotification,__super__);function OnCompletedNotification(){this.kind="C"}OnCompletedNotification.prototype._accept=function(onNext,onError,onCompleted){return onCompleted()};OnCompletedNotification.prototype._acceptObserver=function(o){return o.onCompleted()};OnCompletedNotification.prototype.toString=function(){return"OnCompleted()"};return OnCompletedNotification}(Notification);var notificationCreateOnNext=Notification.createOnNext=function(value){return new OnNextNotification(value)};var notificationCreateOnError=Notification.createOnError=function(error){return new OnErrorNotification(error)};var notificationCreateOnCompleted=Notification.createOnCompleted=function(){return new OnCompletedNotification};var Observer=Rx.Observer=function(){};Observer.prototype.toNotifier=function(){var observer=this;return function(n){return n.accept(observer)}};Observer.prototype.asObserver=function(){var self=this;return new AnonymousObserver(function(x){self.onNext(x)},function(err){self.onError(err)},function(){self.onCompleted()})};Observer.prototype.checked=function(){return new CheckedObserver(this)};var observerCreate=Observer.create=function(onNext,onError,onCompleted){onNext||(onNext=noop);onError||(onError=defaultError);onCompleted||(onCompleted=noop);return new AnonymousObserver(onNext,onError,onCompleted)};Observer.fromNotifier=function(handler,thisArg){var cb=bindCallback(handler,thisArg,1);return new AnonymousObserver(function(x){return cb(notificationCreateOnNext(x))},function(e){return cb(notificationCreateOnError(e))},function(){return cb(notificationCreateOnCompleted())})};Observer.prototype.notifyOn=function(scheduler){return new ObserveOnObserver(scheduler,this)};Observer.prototype.makeSafe=function(disposable){return new AnonymousSafeObserver(this._onNext,this._onError,this._onCompleted,disposable)};var AbstractObserver=Rx.internals.AbstractObserver=function(__super__){inherits(AbstractObserver,__super__);function AbstractObserver(){this.isStopped=false}AbstractObserver.prototype.next=notImplemented;AbstractObserver.prototype.error=notImplemented;AbstractObserver.prototype.completed=notImplemented;AbstractObserver.prototype.onNext=function(value){!this.isStopped&&this.next(value)};AbstractObserver.prototype.onError=function(error){if(!this.isStopped){this.isStopped=true;this.error(error)}};AbstractObserver.prototype.onCompleted=function(){if(!this.isStopped){this.isStopped=true;this.completed()}};AbstractObserver.prototype.dispose=function(){this.isStopped=true};AbstractObserver.prototype.fail=function(e){if(!this.isStopped){this.isStopped=true;this.error(e);return true}return false};return AbstractObserver}(Observer);var AnonymousObserver=Rx.AnonymousObserver=function(__super__){inherits(AnonymousObserver,__super__);function AnonymousObserver(onNext,onError,onCompleted){__super__.call(this);this._onNext=onNext;this._onError=onError;this._onCompleted=onCompleted}AnonymousObserver.prototype.next=function(value){this._onNext(value)};AnonymousObserver.prototype.error=function(error){this._onError(error)};AnonymousObserver.prototype.completed=function(){this._onCompleted()};return AnonymousObserver}(AbstractObserver);var CheckedObserver=function(__super__){inherits(CheckedObserver,__super__);function CheckedObserver(observer){__super__.call(this);this._observer=observer;this._state=0}var CheckedObserverPrototype=CheckedObserver.prototype;CheckedObserverPrototype.onNext=function(value){this.checkAccess();var res=tryCatch(this._observer.onNext).call(this._observer,value);this._state=0;res===errorObj&&thrower(res.e)};CheckedObserverPrototype.onError=function(err){this.checkAccess();var res=tryCatch(this._observer.onError).call(this._observer,err);this._state=2;res===errorObj&&thrower(res.e)};CheckedObserverPrototype.onCompleted=function(){this.checkAccess();var res=tryCatch(this._observer.onCompleted).call(this._observer);this._state=2;res===errorObj&&thrower(res.e)};CheckedObserverPrototype.checkAccess=function(){if(this._state===1){throw new Error("Re-entrancy detected")}if(this._state===2){throw new Error("Observer completed")}if(this._state===0){this._state=1}};return CheckedObserver}(Observer);var ScheduledObserver=Rx.internals.ScheduledObserver=function(__super__){inherits(ScheduledObserver,__super__);function ScheduledObserver(scheduler,observer){__super__.call(this);this.scheduler=scheduler;this.observer=observer;this.isAcquired=false;this.hasFaulted=false;this.queue=[];this.disposable=new SerialDisposable}function enqueueNext(observer,x){return function(){observer.onNext(x)}}function enqueueError(observer,e){return function(){observer.onError(e)}}function enqueueCompleted(observer){return function(){observer.onCompleted()}}ScheduledObserver.prototype.next=function(x){this.queue.push(enqueueNext(this.observer,x))};ScheduledObserver.prototype.error=function(e){this.queue.push(enqueueError(this.observer,e))};ScheduledObserver.prototype.completed=function(){this.queue.push(enqueueCompleted(this.observer))};function scheduleMethod(state,recurse){var work;if(state.queue.length>0){work=state.queue.shift()}else{state.isAcquired=false;return}var res=tryCatch(work)();if(res===errorObj){state.queue=[];state.hasFaulted=true;return thrower(res.e)}recurse(state)}ScheduledObserver.prototype.ensureActive=function(){var isOwner=false;if(!this.hasFaulted&&this.queue.length>0){isOwner=!this.isAcquired;this.isAcquired=true}isOwner&&this.disposable.setDisposable(this.scheduler.scheduleRecursive(this,scheduleMethod))};ScheduledObserver.prototype.dispose=function(){__super__.prototype.dispose.call(this);this.disposable.dispose()};return ScheduledObserver}(AbstractObserver);var ObserveOnObserver=function(__super__){inherits(ObserveOnObserver,__super__);function ObserveOnObserver(scheduler,observer,cancel){__super__.call(this,scheduler,observer);this._cancel=cancel}ObserveOnObserver.prototype.next=function(value){__super__.prototype.next.call(this,value);this.ensureActive()};ObserveOnObserver.prototype.error=function(e){__super__.prototype.error.call(this,e);this.ensureActive()};ObserveOnObserver.prototype.completed=function(){__super__.prototype.completed.call(this);this.ensureActive()};ObserveOnObserver.prototype.dispose=function(){__super__.prototype.dispose.call(this);this._cancel&&this._cancel.dispose();this._cancel=null};return ObserveOnObserver}(ScheduledObserver);var observableProto;var Observable=Rx.Observable=function(){function makeSubscribe(self,subscribe){return function(o){var oldOnError=o.onError;o.onError=function(e){makeStackTraceLong(e,self);oldOnError.call(o,e)};return subscribe.call(self,o)}}function Observable(){if(Rx.config.longStackSupport&&hasStacks){var oldSubscribe=this._subscribe;var e=tryCatch(thrower)(new Error).e;this.stack=e.stack.substring(e.stack.indexOf("\n")+1);this._subscribe=makeSubscribe(this,oldSubscribe)}}observableProto=Observable.prototype;Observable.isObservable=function(o){return o&&isFunction(o.subscribe)};observableProto.subscribe=observableProto.forEach=function(oOrOnNext,onError,onCompleted){return this._subscribe(typeof oOrOnNext==="object"?oOrOnNext:observerCreate(oOrOnNext,onError,onCompleted))};observableProto.subscribeOnNext=function(onNext,thisArg){return this._subscribe(observerCreate(typeof thisArg!=="undefined"?function(x){onNext.call(thisArg,x)}:onNext))};observableProto.subscribeOnError=function(onError,thisArg){return this._subscribe(observerCreate(null,typeof thisArg!=="undefined"?function(e){onError.call(thisArg,e)}:onError))};observableProto.subscribeOnCompleted=function(onCompleted,thisArg){return this._subscribe(observerCreate(null,null,typeof thisArg!=="undefined"?function(){onCompleted.call(thisArg)}:onCompleted))};return Observable}();var ObservableBase=Rx.ObservableBase=function(__super__){inherits(ObservableBase,__super__);function fixSubscriber(subscriber){return subscriber&&isFunction(subscriber.dispose)?subscriber:isFunction(subscriber)?disposableCreate(subscriber):disposableEmpty}function setDisposable(s,state){var ado=state[0],self=state[1];var sub=tryCatch(self.subscribeCore).call(self,ado);if(sub===errorObj&&!ado.fail(errorObj.e)){thrower(errorObj.e)}ado.setDisposable(fixSubscriber(sub))}function ObservableBase(){__super__.call(this)}ObservableBase.prototype._subscribe=function(o){var ado=new AutoDetachObserver(o),state=[ado,this];if(currentThreadScheduler.scheduleRequired()){currentThreadScheduler.schedule(state,setDisposable)}else{setDisposable(null,state)}return ado};ObservableBase.prototype.subscribeCore=notImplemented;return ObservableBase}(Observable);var FlatMapObservable=Rx.FlatMapObservable=function(__super__){inherits(FlatMapObservable,__super__);function FlatMapObservable(source,selector,resultSelector,thisArg){this.resultSelector=isFunction(resultSelector)?resultSelector:null;this.selector=bindCallback(isFunction(selector)?selector:function(){return selector},thisArg,3);this.source=source;__super__.call(this)}FlatMapObservable.prototype.subscribeCore=function(o){return this.source.subscribe(new InnerObserver(o,this.selector,this.resultSelector,this))};inherits(InnerObserver,AbstractObserver);function InnerObserver(observer,selector,resultSelector,source){this.i=0;this.selector=selector;this.resultSelector=resultSelector;this.source=source;this.o=observer;AbstractObserver.call(this)}InnerObserver.prototype._wrapResult=function(result,x,i){return this.resultSelector?result.map(function(y,i2){return this.resultSelector(x,y,i,i2)},this):result};InnerObserver.prototype.next=function(x){var i=this.i++;var result=tryCatch(this.selector)(x,i,this.source);if(result===errorObj){return this.o.onError(result.e)}isPromise(result)&&(result=observableFromPromise(result));(isArrayLike(result)||isIterable(result))&&(result=Observable.from(result));this.o.onNext(this._wrapResult(result,x,i))};InnerObserver.prototype.error=function(e){this.o.onError(e)};InnerObserver.prototype.completed=function(){this.o.onCompleted()};return FlatMapObservable}(ObservableBase);var Enumerable=Rx.internals.Enumerable=function(){};function IsDisposedDisposable(state){this._s=state;this.isDisposed=false}IsDisposedDisposable.prototype.dispose=function(){if(!this.isDisposed){this.isDisposed=true;this._s.isDisposed=true}};var ConcatEnumerableObservable=function(__super__){inherits(ConcatEnumerableObservable,__super__);function ConcatEnumerableObservable(sources){this.sources=sources;__super__.call(this)}function scheduleMethod(state,recurse){if(state.isDisposed){return}var currentItem=tryCatch(state.e.next).call(state.e);if(currentItem===errorObj){return state.o.onError(currentItem.e)}if(currentItem.done){return state.o.onCompleted()}var currentValue=currentItem.value;isPromise(currentValue)&&(currentValue=observableFromPromise(currentValue));var d=new SingleAssignmentDisposable;state.subscription.setDisposable(d);d.setDisposable(currentValue.subscribe(new InnerObserver(state,recurse)))}ConcatEnumerableObservable.prototype.subscribeCore=function(o){var subscription=new SerialDisposable;var state={isDisposed:false,o:o,subscription:subscription,e:this.sources[$iterator$]()};var cancelable=currentThreadScheduler.scheduleRecursive(state,scheduleMethod);return new NAryDisposable([subscription,cancelable,new IsDisposedDisposable(state)])};function InnerObserver(state,recurse){this._state=state;this._recurse=recurse;AbstractObserver.call(this)}inherits(InnerObserver,AbstractObserver);InnerObserver.prototype.next=function(x){this._state.o.onNext(x)};InnerObserver.prototype.error=function(e){this._state.o.onError(e)};InnerObserver.prototype.completed=function(){this._recurse(this._state)};return ConcatEnumerableObservable}(ObservableBase);Enumerable.prototype.concat=function(){return new ConcatEnumerableObservable(this)};var CatchErrorObservable=function(__super__){function CatchErrorObservable(sources){this.sources=sources;__super__.call(this)}inherits(CatchErrorObservable,__super__);function scheduleMethod(state,recurse){if(state.isDisposed){return}var currentItem=tryCatch(state.e.next).call(state.e);if(currentItem===errorObj){return state.o.onError(currentItem.e)}if(currentItem.done){return state.lastError!==null?state.o.onError(state.lastError):state.o.onCompleted()}var currentValue=currentItem.value;isPromise(currentValue)&&(currentValue=observableFromPromise(currentValue));var d=new SingleAssignmentDisposable;state.subscription.setDisposable(d);d.setDisposable(currentValue.subscribe(new InnerObserver(state,recurse)))}CatchErrorObservable.prototype.subscribeCore=function(o){var subscription=new SerialDisposable;var state={isDisposed:false,e:this.sources[$iterator$](),subscription:subscription,lastError:null,o:o};var cancelable=currentThreadScheduler.scheduleRecursive(state,scheduleMethod);return new NAryDisposable([subscription,cancelable,new IsDisposedDisposable(state)])};function InnerObserver(state,recurse){this._state=state;this._recurse=recurse;AbstractObserver.call(this)}inherits(InnerObserver,AbstractObserver);InnerObserver.prototype.next=function(x){this._state.o.onNext(x)};InnerObserver.prototype.error=function(e){this._state.lastError=e;this._recurse(this._state)};InnerObserver.prototype.completed=function(){this._state.o.onCompleted()};return CatchErrorObservable}(ObservableBase);Enumerable.prototype.catchError=function(){return new CatchErrorObservable(this)};Enumerable.prototype.catchErrorWhen=function(notificationHandler){var sources=this;return new AnonymousObservable(function(o){var exceptions=new Subject,notifier=new Subject,handled=notificationHandler(exceptions),notificationDisposable=handled.subscribe(notifier);var e=sources[$iterator$]();var state={isDisposed:false},lastError,subscription=new SerialDisposable;var cancelable=currentThreadScheduler.scheduleRecursive(null,function(_,self){if(state.isDisposed){return}var currentItem=tryCatch(e.next).call(e);if(currentItem===errorObj){return o.onError(currentItem.e)}if(currentItem.done){if(lastError){o.onError(lastError)}else{o.onCompleted()}return}var currentValue=currentItem.value;isPromise(currentValue)&&(currentValue=observableFromPromise(currentValue));var outer=new SingleAssignmentDisposable;var inner=new SingleAssignmentDisposable;subscription.setDisposable(new BinaryDisposable(inner,outer));outer.setDisposable(currentValue.subscribe(function(x){o.onNext(x)},function(exn){inner.setDisposable(notifier.subscribe(self,function(ex){o.onError(ex)},function(){o.onCompleted()}));exceptions.onNext(exn)},function(){o.onCompleted()}))});return new NAryDisposable([notificationDisposable,subscription,cancelable,new IsDisposedDisposable(state)])})};var RepeatEnumerable=function(__super__){inherits(RepeatEnumerable,__super__);function RepeatEnumerable(v,c){this.v=v;this.c=c==null?-1:c}RepeatEnumerable.prototype[$iterator$]=function(){return new RepeatEnumerator(this)};function RepeatEnumerator(p){this.v=p.v;this.l=p.c}RepeatEnumerator.prototype.next=function(){if(this.l===0){return doneEnumerator}if(this.l>0){this.l--}return{done:false,value:this.v}};return RepeatEnumerable}(Enumerable);var enumerableRepeat=Enumerable.repeat=function(value,repeatCount){return new RepeatEnumerable(value,repeatCount)};var OfEnumerable=function(__super__){inherits(OfEnumerable,__super__);function OfEnumerable(s,fn,thisArg){this.s=s;this.fn=fn?bindCallback(fn,thisArg,3):null}OfEnumerable.prototype[$iterator$]=function(){return new OfEnumerator(this)};function OfEnumerator(p){this.i=-1;this.s=p.s;this.l=this.s.length;this.fn=p.fn}OfEnumerator.prototype.next=function(){return++this.imaxSafeInteger){return maxSafeInteger}return len}var observableFrom=Observable.from=function(iterable,mapFn,thisArg,scheduler){if(iterable==null){throw new Error("iterable cannot be null.")}if(mapFn&&!isFunction(mapFn)){throw new Error("mapFn when provided must be a function")}if(mapFn){var mapper=bindCallback(mapFn,thisArg,2)}isScheduler(scheduler)||(scheduler=currentThreadScheduler);return new FromObservable(iterable,mapper,scheduler)};var FromArrayObservable=function(__super__){inherits(FromArrayObservable,__super__);function FromArrayObservable(args,scheduler){this._args=args;this._scheduler=scheduler;__super__.call(this)}function scheduleMethod(o,args){var len=args.length;return function loopRecursive(i,recurse){if(i0){observer.onNext(value);i>0&&i--}if(i===0){return observer.onCompleted()}recurse(i)}return this.parent.scheduler.scheduleRecursive(this.parent.repeatCount,loopRecursive)};Observable.repeat=function(value,repeatCount,scheduler){isScheduler(scheduler)||(scheduler=currentThreadScheduler);return new RepeatObservable(value,repeatCount,scheduler)};var JustObservable=function(__super__){inherits(JustObservable,__super__);function JustObservable(value,scheduler){this._value=value;this._scheduler=scheduler;__super__.call(this)}JustObservable.prototype.subscribeCore=function(o){var state=[this._value,o];return this._scheduler===immediateScheduler?scheduleItem(null,state):this._scheduler.schedule(state,scheduleItem)};function scheduleItem(s,state){var value=state[0],observer=state[1];observer.onNext(value);observer.onCompleted();return disposableEmpty}return JustObservable}(ObservableBase);var observableReturn=Observable["return"]=Observable.just=function(value,scheduler){isScheduler(scheduler)||(scheduler=immediateScheduler);return new JustObservable(value,scheduler)};var ThrowObservable=function(__super__){inherits(ThrowObservable,__super__);function ThrowObservable(error,scheduler){this._error=error;this._scheduler=scheduler;__super__.call(this)}ThrowObservable.prototype.subscribeCore=function(o){var state=[this._error,o];return this._scheduler===immediateScheduler?scheduleItem(null,state):this._scheduler.schedule(state,scheduleItem)};function scheduleItem(s,state){var e=state[0],o=state[1];o.onError(e);return disposableEmpty}return ThrowObservable}(ObservableBase);var observableThrow=Observable["throw"]=function(error,scheduler){isScheduler(scheduler)||(scheduler=immediateScheduler);return new ThrowObservable(error,scheduler)};var UsingObservable=function(__super__){inherits(UsingObservable,__super__);function UsingObservable(resFn,obsFn){this._resFn=resFn;this._obsFn=obsFn;__super__.call(this)}UsingObservable.prototype.subscribeCore=function(o){var disposable=disposableEmpty;var resource=tryCatch(this._resFn)();if(resource===errorObj){return new BinaryDisposable(observableThrow(resource.e).subscribe(o),disposable)}resource&&(disposable=resource);var source=tryCatch(this._obsFn)(resource);if(source===errorObj){return new BinaryDisposable(observableThrow(source.e).subscribe(o),disposable)}return new BinaryDisposable(source.subscribe(o),disposable)};return UsingObservable}(ObservableBase);Observable.using=function(resourceFactory,observableFactory){return new UsingObservable(resourceFactory,observableFactory)};observableProto.amb=function(rightSource){var leftSource=this;return new AnonymousObservable(function(observer){var choice,leftChoice="L",rightChoice="R",leftSubscription=new SingleAssignmentDisposable,rightSubscription=new SingleAssignmentDisposable;isPromise(rightSource)&&(rightSource=observableFromPromise(rightSource));function choiceL(){if(!choice){choice=leftChoice;rightSubscription.dispose()}}function choiceR(){if(!choice){choice=rightChoice;leftSubscription.dispose()}}var leftSubscribe=observerCreate(function(left){choiceL();choice===leftChoice&&observer.onNext(left)},function(e){choiceL();choice===leftChoice&&observer.onError(e)},function(){choiceL();choice===leftChoice&&observer.onCompleted()});var rightSubscribe=observerCreate(function(right){choiceR();choice===rightChoice&&observer.onNext(right)},function(e){choiceR();choice===rightChoice&&observer.onError(e)},function(){choiceR();choice===rightChoice&&observer.onCompleted()});leftSubscription.setDisposable(leftSource.subscribe(leftSubscribe));rightSubscription.setDisposable(rightSource.subscribe(rightSubscribe));return new BinaryDisposable(leftSubscription,rightSubscription)})};function amb(p,c){return p.amb(c)}Observable.amb=function(){var acc=observableNever(),items;if(Array.isArray(arguments[0])){items=arguments[0]}else{var len=arguments.length;items=new Array(items);for(var i=0;i0){this.parent.handleSubscribe(this.parent.q.shift())}else{this.parent.activeCount--;this.parent.done&&this.parent.activeCount===0&&this.parent.o.onCompleted()}};return MergeObserver}(AbstractObserver);observableProto.merge=function(maxConcurrentOrOther){return typeof maxConcurrentOrOther!=="number"?observableMerge(this,maxConcurrentOrOther):new MergeObservable(this,maxConcurrentOrOther)};var observableMerge=Observable.merge=function(){var scheduler,sources=[],i,len=arguments.length;if(!arguments[0]){scheduler=immediateScheduler;for(i=1;i0}function shiftEach(x){return x.shift()}function notTheSame(i){return function(x,j){return j!==i}}ZipObserver.prototype.next=function(x){this._q[this._i].push(x);if(this._q.every(notEmpty)){var queuedValues=this._q.map(shiftEach);var res=tryCatch(this._p._cb).apply(null,queuedValues);if(res===errorObj){return this._o.onError(res.e)}this._o.onNext(res)}else if(this._d.filter(notTheSame(this._i)).every(identity)){this._o.onCompleted()}};ZipObserver.prototype.error=function(e){this._o.onError(e)};ZipObserver.prototype.completed=function(){this._d[this._i]=true;this._d.every(identity)&&this._o.onCompleted()};return ZipObserver}(AbstractObserver);observableProto.zip=function(){if(arguments.length===0){throw new Error("invalid arguments")}var len=arguments.length,args=new Array(len);for(var i=0;i0}function shiftEach(x){return x.shift()}function notTheSame(i){return function(x,j){return j!==i}}ZipIterableObserver.prototype.next=function(x){this._s.q[this._i].push(x);if(this._s.q.every(notEmpty)){var queuedValues=this._s.q.map(shiftEach),res=tryCatch(this._s.cb).apply(null,queuedValues);if(res===errorObj){return this._s.o.onError(res.e)}this._s.o.onNext(res)}else if(this._s.done.filter(notTheSame(this._i)).every(identity)){this._s.o.onCompleted()}};ZipIterableObserver.prototype.error=function(e){this._s.o.onError(e)};ZipIterableObserver.prototype.completed=function(){this._s.done[this._i]=true; +this._s.done.every(identity)&&this._s.o.onCompleted()};return ZipIterableObserver}(AbstractObserver);observableProto.zipIterable=function(){if(arguments.length===0){throw new Error("invalid arguments")}var len=arguments.length,args=new Array(len);for(var i=0;i0}observableProto.bufferWithCount=function(count,skip){typeof skip!=="number"&&(skip=count);return this.windowWithCount(count,skip).flatMap(toArray).filter(notEmpty)};var DematerializeObservable=function(__super__){inherits(DematerializeObservable,__super__);function DematerializeObservable(source){this.source=source;__super__.call(this)}DematerializeObservable.prototype.subscribeCore=function(o){return this.source.subscribe(new DematerializeObserver(o))};return DematerializeObservable}(ObservableBase);var DematerializeObserver=function(__super__){inherits(DematerializeObserver,__super__);function DematerializeObserver(o){this._o=o;__super__.call(this)}DematerializeObserver.prototype.next=function(x){x.accept(this._o)};DematerializeObserver.prototype.error=function(e){this._o.onError(e)};DematerializeObserver.prototype.completed=function(){this._o.onCompleted()};return DematerializeObserver}(AbstractObserver);observableProto.dematerialize=function(){return new DematerializeObservable(this)};var DistinctUntilChangedObservable=function(__super__){inherits(DistinctUntilChangedObservable,__super__);function DistinctUntilChangedObservable(source,keyFn,comparer){this.source=source;this.keyFn=keyFn;this.comparer=comparer;__super__.call(this)}DistinctUntilChangedObservable.prototype.subscribeCore=function(o){return this.source.subscribe(new DistinctUntilChangedObserver(o,this.keyFn,this.comparer))};return DistinctUntilChangedObservable}(ObservableBase);var DistinctUntilChangedObserver=function(__super__){inherits(DistinctUntilChangedObserver,__super__);function DistinctUntilChangedObserver(o,keyFn,comparer){this.o=o;this.keyFn=keyFn;this.comparer=comparer;this.hasCurrentKey=false;this.currentKey=null;__super__.call(this)}DistinctUntilChangedObserver.prototype.next=function(x){var key=x,comparerEquals;if(isFunction(this.keyFn)){key=tryCatch(this.keyFn)(x);if(key===errorObj){return this.o.onError(key.e)}}if(this.hasCurrentKey){comparerEquals=tryCatch(this.comparer)(this.currentKey,key);if(comparerEquals===errorObj){return this.o.onError(comparerEquals.e)}}if(!this.hasCurrentKey||!comparerEquals){this.hasCurrentKey=true;this.currentKey=key;this.o.onNext(x)}};DistinctUntilChangedObserver.prototype.error=function(e){this.o.onError(e)};DistinctUntilChangedObserver.prototype.completed=function(){this.o.onCompleted()};return DistinctUntilChangedObserver}(AbstractObserver);observableProto.distinctUntilChanged=function(keyFn,comparer){comparer||(comparer=defaultComparer);return new DistinctUntilChangedObservable(this,keyFn,comparer)};var TapObservable=function(__super__){inherits(TapObservable,__super__);function TapObservable(source,observerOrOnNext,onError,onCompleted){this.source=source;this._oN=observerOrOnNext;this._oE=onError;this._oC=onCompleted;__super__.call(this)}TapObservable.prototype.subscribeCore=function(o){return this.source.subscribe(new InnerObserver(o,this))};inherits(InnerObserver,AbstractObserver);function InnerObserver(o,p){this.o=o;this.t=!p._oN||isFunction(p._oN)?observerCreate(p._oN||noop,p._oE||noop,p._oC||noop):p._oN;this.isStopped=false;AbstractObserver.call(this)}InnerObserver.prototype.next=function(x){var res=tryCatch(this.t.onNext).call(this.t,x);if(res===errorObj){this.o.onError(res.e)}this.o.onNext(x)};InnerObserver.prototype.error=function(err){var res=tryCatch(this.t.onError).call(this.t,err);if(res===errorObj){return this.o.onError(res.e)}this.o.onError(err)};InnerObserver.prototype.completed=function(){var res=tryCatch(this.t.onCompleted).call(this.t);if(res===errorObj){return this.o.onError(res.e)}this.o.onCompleted()};return TapObservable}(ObservableBase);observableProto["do"]=observableProto.tap=observableProto.doAction=function(observerOrOnNext,onError,onCompleted){return new TapObservable(this,observerOrOnNext,onError,onCompleted)};observableProto.doOnNext=observableProto.tapOnNext=function(onNext,thisArg){return this.tap(typeof thisArg!=="undefined"?function(x){onNext.call(thisArg,x)}:onNext)};observableProto.doOnError=observableProto.tapOnError=function(onError,thisArg){return this.tap(noop,typeof thisArg!=="undefined"?function(e){onError.call(thisArg,e)}:onError)};observableProto.doOnCompleted=observableProto.tapOnCompleted=function(onCompleted,thisArg){return this.tap(noop,null,typeof thisArg!=="undefined"?function(){onCompleted.call(thisArg)}:onCompleted)};var FinallyObservable=function(__super__){inherits(FinallyObservable,__super__);function FinallyObservable(source,fn,thisArg){this.source=source;this._fn=bindCallback(fn,thisArg,0);__super__.call(this)}FinallyObservable.prototype.subscribeCore=function(o){var d=tryCatch(this.source.subscribe).call(this.source,o);if(d===errorObj){this._fn();thrower(d.e)}return new FinallyDisposable(d,this._fn)};function FinallyDisposable(s,fn){this.isDisposed=false;this._s=s;this._fn=fn}FinallyDisposable.prototype.dispose=function(){if(!this.isDisposed){var res=tryCatch(this._s.dispose).call(this._s);this._fn();res===errorObj&&thrower(res.e)}};return FinallyObservable}(ObservableBase);observableProto["finally"]=function(action,thisArg){return new FinallyObservable(this,action,thisArg)};var IgnoreElementsObservable=function(__super__){inherits(IgnoreElementsObservable,__super__);function IgnoreElementsObservable(source){this.source=source;__super__.call(this)}IgnoreElementsObservable.prototype.subscribeCore=function(o){return this.source.subscribe(new InnerObserver(o))};function InnerObserver(o){this.o=o;this.isStopped=false}InnerObserver.prototype.onNext=noop;InnerObserver.prototype.onError=function(err){if(!this.isStopped){this.isStopped=true;this.o.onError(err)}};InnerObserver.prototype.onCompleted=function(){if(!this.isStopped){this.isStopped=true;this.o.onCompleted()}};InnerObserver.prototype.dispose=function(){this.isStopped=true};InnerObserver.prototype.fail=function(e){if(!this.isStopped){this.isStopped=true;this.observer.onError(e);return true}return false};return IgnoreElementsObservable}(ObservableBase);observableProto.ignoreElements=function(){return new IgnoreElementsObservable(this)};var MaterializeObservable=function(__super__){inherits(MaterializeObservable,__super__);function MaterializeObservable(source,fn){this.source=source;__super__.call(this)}MaterializeObservable.prototype.subscribeCore=function(o){return this.source.subscribe(new MaterializeObserver(o))};return MaterializeObservable}(ObservableBase);var MaterializeObserver=function(__super__){inherits(MaterializeObserver,__super__);function MaterializeObserver(o){this._o=o;__super__.call(this)}MaterializeObserver.prototype.next=function(x){this._o.onNext(notificationCreateOnNext(x))};MaterializeObserver.prototype.error=function(e){this._o.onNext(notificationCreateOnError(e));this._o.onCompleted()};MaterializeObserver.prototype.completed=function(){this._o.onNext(notificationCreateOnCompleted());this._o.onCompleted()};return MaterializeObserver}(AbstractObserver);observableProto.materialize=function(){return new MaterializeObservable(this)};observableProto.repeat=function(repeatCount){return enumerableRepeat(this,repeatCount).concat()};observableProto.retry=function(retryCount){return enumerableRepeat(this,retryCount).catchError()};observableProto.retryWhen=function(notifier){return enumerableRepeat(this).catchErrorWhen(notifier)};var ScanObservable=function(__super__){inherits(ScanObservable,__super__);function ScanObservable(source,accumulator,hasSeed,seed){this.source=source;this.accumulator=accumulator;this.hasSeed=hasSeed;this.seed=seed;__super__.call(this)}ScanObservable.prototype.subscribeCore=function(o){return this.source.subscribe(new ScanObserver(o,this))};return ScanObservable}(ObservableBase);var ScanObserver=function(__super__){inherits(ScanObserver,__super__);function ScanObserver(o,parent){this._o=o;this._p=parent;this._fn=parent.accumulator;this._hs=parent.hasSeed;this._s=parent.seed;this._ha=false;this._a=null;this._hv=false;this._i=0;__super__.call(this)}ScanObserver.prototype.next=function(x){!this._hv&&(this._hv=true);if(this._ha){this._a=tryCatch(this._fn)(this._a,x,this._i,this._p)}else{this._a=this._hs?tryCatch(this._fn)(this._s,x,this._i,this._p):x;this._ha=true}if(this._a===errorObj){return this._o.onError(this._a.e)}this._o.onNext(this._a);this._i++};ScanObserver.prototype.error=function(e){this._o.onError(e)};ScanObserver.prototype.completed=function(){!this._hv&&this._hs&&this._o.onNext(this._s);this._o.onCompleted()};return ScanObserver}(AbstractObserver);observableProto.scan=function(){var hasSeed=false,seed,accumulator=arguments[0];if(arguments.length===2){hasSeed=true;seed=arguments[1]}return new ScanObservable(this,accumulator,hasSeed,seed)};var SkipLastObservable=function(__super__){inherits(SkipLastObservable,__super__);function SkipLastObservable(source,c){this.source=source;this._c=c;__super__.call(this)}SkipLastObservable.prototype.subscribeCore=function(o){return this.source.subscribe(new SkipLastObserver(o,this._c))};return SkipLastObservable}(ObservableBase);var SkipLastObserver=function(__super__){inherits(SkipLastObserver,__super__);function SkipLastObserver(o,c){this._o=o;this._c=c;this._q=[];__super__.call(this)}SkipLastObserver.prototype.next=function(x){this._q.push(x);this._q.length>this._c&&this._o.onNext(this._q.shift())};SkipLastObserver.prototype.error=function(e){this._o.onError(e)};SkipLastObserver.prototype.completed=function(){this._o.onCompleted()};return SkipLastObserver}(AbstractObserver);observableProto.skipLast=function(count){if(count<0){throw new ArgumentOutOfRangeError}return new SkipLastObservable(this,count)};observableProto.startWith=function(){var values,scheduler,start=0;if(!!arguments.length&&isScheduler(arguments[0])){scheduler=arguments[0];start=1}else{scheduler=immediateScheduler}for(var args=[],i=start,len=arguments.length;ithis._c&&this._q.shift()};TakeLastObserver.prototype.error=function(e){this._o.onError(e)};TakeLastObserver.prototype.completed=function(){while(this._q.length>0){this._o.onNext(this._q.shift())}this._o.onCompleted()};return TakeLastObserver}(AbstractObserver);observableProto.takeLast=function(count){if(count<0){throw new ArgumentOutOfRangeError}var source=this;return new AnonymousObservable(function(o){return source.subscribe(new TakeLastObserver(o,count))},source)};var TakeLastBufferObserver=function(__super__){inherits(TakeLastBufferObserver,__super__);function TakeLastBufferObserver(o,c){this._o=o;this._c=c;this._q=[];__super__.call(this)}TakeLastBufferObserver.prototype.next=function(x){this._q.push(x);this._q.length>this._c&&this._q.shift()};TakeLastBufferObserver.prototype.error=function(e){this._o.onError(e)};TakeLastBufferObserver.prototype.completed=function(){this._o.onNext(this._q);this._o.onCompleted()};return TakeLastBufferObserver}(AbstractObserver);observableProto.takeLastBuffer=function(count){if(count<0){throw new ArgumentOutOfRangeError}var source=this;return new AnonymousObservable(function(o){return source.subscribe(new TakeLastBufferObserver(o,count))},source)};observableProto.windowWithCount=function(count,skip){var source=this;+count||(count=0);Math.abs(count)===Infinity&&(count=0);if(count<=0){throw new ArgumentOutOfRangeError}skip==null&&(skip=count);+skip||(skip=0);Math.abs(skip)===Infinity&&(skip=0);if(skip<=0){throw new ArgumentOutOfRangeError}return new AnonymousObservable(function(observer){var m=new SingleAssignmentDisposable,refCountDisposable=new RefCountDisposable(m),n=0,q=[];function createWindow(){var s=new Subject;q.push(s);observer.onNext(addRef(s,refCountDisposable))}createWindow();m.setDisposable(source.subscribe(function(x){for(var i=0,len=q.length;i=0&&c%skip===0&&q.shift().onCompleted();++n%skip===0&&createWindow()},function(e){while(q.length>0){q.shift().onError(e)}observer.onError(e)},function(){while(q.length>0){q.shift().onCompleted()}observer.onCompleted()}));return refCountDisposable},source)};function concatMap(source,selector,thisArg){var selectorFunc=bindCallback(selector,thisArg,3);return source.map(function(x,i){var result=selectorFunc(x,i,source);isPromise(result)&&(result=observableFromPromise(result));(isArrayLike(result)||isIterable(result))&&(result=observableFrom(result));return result}).concatAll()}observableProto.selectConcat=observableProto.concatMap=function(selector,resultSelector,thisArg){if(isFunction(selector)&&isFunction(resultSelector)){return this.concatMap(function(x,i){var selectorResult=selector(x,i);isPromise(selectorResult)&&(selectorResult=observableFromPromise(selectorResult));(isArrayLike(selectorResult)||isIterable(selectorResult))&&(selectorResult=observableFrom(selectorResult));return selectorResult.map(function(y,i2){return resultSelector(x,y,i,i2)})})}return isFunction(selector)?concatMap(this,selector,thisArg):concatMap(this,function(){return selector})};observableProto.concatMapObserver=observableProto.selectConcatObserver=function(onNext,onError,onCompleted,thisArg){var source=this,onNextFunc=bindCallback(onNext,thisArg,2),onErrorFunc=bindCallback(onError,thisArg,1),onCompletedFunc=bindCallback(onCompleted,thisArg,0);return new AnonymousObservable(function(observer){var index=0;return source.subscribe(function(x){var result;try{result=onNextFunc(x,index++)}catch(e){observer.onError(e);return}isPromise(result)&&(result=observableFromPromise(result));observer.onNext(result)},function(err){var result;try{result=onErrorFunc(err)}catch(e){observer.onError(e);return}isPromise(result)&&(result=observableFromPromise(result));observer.onNext(result);observer.onCompleted()},function(){var result;try{result=onCompletedFunc()}catch(e){observer.onError(e);return}isPromise(result)&&(result=observableFromPromise(result));observer.onNext(result);observer.onCompleted()})},this).concatAll()};var DefaultIfEmptyObserver=function(__super__){inherits(DefaultIfEmptyObserver,__super__);function DefaultIfEmptyObserver(o,d){this._o=o;this._d=d;this._f=false;__super__.call(this)}DefaultIfEmptyObserver.prototype.next=function(x){this._f=true;this._o.onNext(x)};DefaultIfEmptyObserver.prototype.error=function(e){this._o.onError(e)};DefaultIfEmptyObserver.prototype.completed=function(){!this._f&&this._o.onNext(this._d);this._o.onCompleted()};return DefaultIfEmptyObserver}(AbstractObserver);observableProto.defaultIfEmpty=function(defaultValue){var source=this;defaultValue===undefined&&(defaultValue=null);return new AnonymousObservable(function(o){return source.subscribe(new DefaultIfEmptyObserver(o,defaultValue))},source)};function arrayIndexOfComparer(array,item,comparer){for(var i=0,len=array.length;i0){this._o.onNext(x);this._r<=0&&this._o.onCompleted()}};TakeObserver.prototype.error=function(e){this._o.onError(e)};TakeObserver.prototype.completed=function(){this._o.onCompleted()};return TakeObservable}(ObservableBase);observableProto.take=function(count,scheduler){if(count<0){throw new ArgumentOutOfRangeError}if(count===0){return observableEmpty(scheduler)}return new TakeObservable(this,count)};var TakeWhileObservable=function(__super__){inherits(TakeWhileObservable,__super__);function TakeWhileObservable(source,fn){this.source=source;this._fn=fn;__super__.call(this)}TakeWhileObservable.prototype.subscribeCore=function(o){return this.source.subscribe(new TakeWhileObserver(o,this))};return TakeWhileObservable}(ObservableBase);var TakeWhileObserver=function(__super__){inherits(TakeWhileObserver,__super__);function TakeWhileObserver(o,p){this._o=o;this._p=p;this._i=0;this._r=true;__super__.call(this)}TakeWhileObserver.prototype.next=function(x){if(this._r){this._r=tryCatch(this._p._fn)(x,this._i++,this._p);if(this._r===errorObj){return this._o.onError(this._r.e)}}if(this._r){this._o.onNext(x)}else{this._o.onCompleted()}};TakeWhileObserver.prototype.error=function(e){this._o.onError(e)};TakeWhileObserver.prototype.completed=function(){this._o.onCompleted()};return TakeWhileObserver}(AbstractObserver);observableProto.takeWhile=function(predicate,thisArg){var fn=bindCallback(predicate,thisArg,3);return new TakeWhileObservable(this,fn)};var FilterObservable=function(__super__){inherits(FilterObservable,__super__);function FilterObservable(source,predicate,thisArg){this.source=source;this.predicate=bindCallback(predicate,thisArg,3);__super__.call(this)}FilterObservable.prototype.subscribeCore=function(o){return this.source.subscribe(new InnerObserver(o,this.predicate,this))};function innerPredicate(predicate,self){return function(x,i,o){return self.predicate(x,i,o)&&predicate.call(this,x,i,o)}}FilterObservable.prototype.internalFilter=function(predicate,thisArg){return new FilterObservable(this.source,innerPredicate(predicate,this),thisArg)};inherits(InnerObserver,AbstractObserver);function InnerObserver(o,predicate,source){this.o=o;this.predicate=predicate;this.source=source;this.i=0;AbstractObserver.call(this)}InnerObserver.prototype.next=function(x){var shouldYield=tryCatch(this.predicate)(x,this.i++,this.source);if(shouldYield===errorObj){return this.o.onError(shouldYield.e)}shouldYield&&this.o.onNext(x)};InnerObserver.prototype.error=function(e){this.o.onError(e)};InnerObserver.prototype.completed=function(){this.o.onCompleted()};return FilterObservable}(ObservableBase);observableProto.filter=observableProto.where=function(predicate,thisArg){return this instanceof FilterObservable?this.internalFilter(predicate,thisArg):new FilterObservable(this,predicate,thisArg)};var ExtremaByObservable=function(__super__){inherits(ExtremaByObservable,__super__);function ExtremaByObservable(source,k,c){this.source=source;this._k=k;this._c=c;__super__.call(this)}ExtremaByObservable.prototype.subscribeCore=function(o){return this.source.subscribe(new ExtremaByObserver(o,this._k,this._c))};return ExtremaByObservable}(ObservableBase);var ExtremaByObserver=function(__super__){inherits(ExtremaByObserver,__super__);function ExtremaByObserver(o,k,c){this._o=o;this._k=k;this._c=c;this._v=null;this._hv=false;this._l=[];__super__.call(this)}ExtremaByObserver.prototype.next=function(x){var key=tryCatch(this._k)(x);if(key===errorObj){return this._o.onError(key.e)}var comparison=0;if(!this._hv){this._hv=true;this._v=key}else{comparison=tryCatch(this._c)(key,this._v);if(comparison===errorObj){return this._o.onError(comparison.e)}}if(comparison>0){this._v=key;this._l=[]}if(comparison>=0){this._l.push(x)}};ExtremaByObserver.prototype.error=function(e){this._o.onError(e)};ExtremaByObserver.prototype.completed=function(){this._o.onNext(this._l);this._o.onCompleted()};return ExtremaByObserver}(AbstractObserver);function firstOnly(x){if(x.length===0){throw new EmptyError}return x[0]}var ReduceObservable=function(__super__){inherits(ReduceObservable,__super__);function ReduceObservable(source,accumulator,hasSeed,seed){this.source=source;this.accumulator=accumulator;this.hasSeed=hasSeed;this.seed=seed;__super__.call(this)}ReduceObservable.prototype.subscribeCore=function(observer){return this.source.subscribe(new ReduceObserver(observer,this))};return ReduceObservable}(ObservableBase);var ReduceObserver=function(__super__){inherits(ReduceObserver,__super__);function ReduceObserver(o,parent){this._o=o;this._p=parent;this._fn=parent.accumulator;this._hs=parent.hasSeed;this._s=parent.seed;this._ha=false;this._a=null;this._hv=false;this._i=0;__super__.call(this)}ReduceObserver.prototype.next=function(x){!this._hv&&(this._hv=true);if(this._ha){this._a=tryCatch(this._fn)(this._a,x,this._i,this._p)}else{this._a=this._hs?tryCatch(this._fn)(this._s,x,this._i,this._p):x;this._ha=true}if(this._a===errorObj){return this._o.onError(this._a.e)}this._i++};ReduceObserver.prototype.error=function(e){this._o.onError(e)};ReduceObserver.prototype.completed=function(){this._hv&&this._o.onNext(this._a);!this._hv&&this._hs&&this._o.onNext(this._s);!this._hv&&!this._hs&&this._o.onError(new EmptyError);this._o.onCompleted()};return ReduceObserver}(AbstractObserver);observableProto.reduce=function(){var hasSeed=false,seed,accumulator=arguments[0];if(arguments.length===2){hasSeed=true;seed=arguments[1]}return new ReduceObservable(this,accumulator,hasSeed,seed)};var SomeObservable=function(__super__){inherits(SomeObservable,__super__);function SomeObservable(source,fn){this.source=source;this._fn=fn;__super__.call(this)}SomeObservable.prototype.subscribeCore=function(o){return this.source.subscribe(new SomeObserver(o,this._fn,this.source))};return SomeObservable}(ObservableBase);var SomeObserver=function(__super__){inherits(SomeObserver,__super__);function SomeObserver(o,fn,s){this._o=o;this._fn=fn;this._s=s;this._i=0;__super__.call(this)}SomeObserver.prototype.next=function(x){var result=tryCatch(this._fn)(x,this._i++,this._s);if(result===errorObj){return this._o.onError(result.e)}if(Boolean(result)){this._o.onNext(true);this._o.onCompleted()}};SomeObserver.prototype.error=function(e){this._o.onError(e)};SomeObserver.prototype.completed=function(){this._o.onNext(false);this._o.onCompleted()};return SomeObserver}(AbstractObserver);observableProto.some=function(predicate,thisArg){var fn=bindCallback(predicate,thisArg,3);return new SomeObservable(this,fn)};var IsEmptyObservable=function(__super__){inherits(IsEmptyObservable,__super__);function IsEmptyObservable(source){this.source=source;__super__.call(this)}IsEmptyObservable.prototype.subscribeCore=function(o){return this.source.subscribe(new IsEmptyObserver(o))};return IsEmptyObservable}(ObservableBase);var IsEmptyObserver=function(__super__){inherits(IsEmptyObserver,__super__);function IsEmptyObserver(o){this._o=o;__super__.call(this)}IsEmptyObserver.prototype.next=function(){this._o.onNext(false);this._o.onCompleted()};IsEmptyObserver.prototype.error=function(e){this._o.onError(e)};IsEmptyObserver.prototype.completed=function(){this._o.onNext(true);this._o.onCompleted()};return IsEmptyObserver}(AbstractObserver);observableProto.isEmpty=function(){return new IsEmptyObservable(this)};var EveryObservable=function(__super__){inherits(EveryObservable,__super__);function EveryObservable(source,fn){this.source=source;this._fn=fn;__super__.call(this)}EveryObservable.prototype.subscribeCore=function(o){return this.source.subscribe(new EveryObserver(o,this._fn,this.source))};return EveryObservable}(ObservableBase);var EveryObserver=function(__super__){inherits(EveryObserver,__super__);function EveryObserver(o,fn,s){this._o=o;this._fn=fn;this._s=s;this._i=0;__super__.call(this)}EveryObserver.prototype.next=function(x){var result=tryCatch(this._fn)(x,this._i++,this._s);if(result===errorObj){return this._o.onError(result.e)}if(!Boolean(result)){this._o.onNext(false);this._o.onCompleted()}};EveryObserver.prototype.error=function(e){this._o.onError(e)};EveryObserver.prototype.completed=function(){ +this._o.onNext(true);this._o.onCompleted()};return EveryObserver}(AbstractObserver);observableProto.every=function(predicate,thisArg){var fn=bindCallback(predicate,thisArg,3);return new EveryObservable(this,fn)};var IncludesObservable=function(__super__){inherits(IncludesObservable,__super__);function IncludesObservable(source,elem,idx){var n=+idx||0;Math.abs(n)===Infinity&&(n=0);this.source=source;this._elem=elem;this._n=n;__super__.call(this)}IncludesObservable.prototype.subscribeCore=function(o){if(this._n<0){o.onNext(false);o.onCompleted();return disposableEmpty}return this.source.subscribe(new IncludesObserver(o,this._elem,this._n))};return IncludesObservable}(ObservableBase);var IncludesObserver=function(__super__){inherits(IncludesObserver,__super__);function IncludesObserver(o,elem,n){this._o=o;this._elem=elem;this._n=n;this._i=0;__super__.call(this)}function comparer(a,b){return a===0&&b===0||(a===b||isNaN(a)&&isNaN(b))}IncludesObserver.prototype.next=function(x){if(this._i++>=this._n&&comparer(x,this._elem)){this._o.onNext(true);this._o.onCompleted()}};IncludesObserver.prototype.error=function(e){this._o.onError(e)};IncludesObserver.prototype.completed=function(){this._o.onNext(false);this._o.onCompleted()};return IncludesObserver}(AbstractObserver);observableProto.includes=function(searchElement,fromIndex){return new IncludesObservable(this,searchElement,fromIndex)};var CountObservable=function(__super__){inherits(CountObservable,__super__);function CountObservable(source,fn){this.source=source;this._fn=fn;__super__.call(this)}CountObservable.prototype.subscribeCore=function(o){return this.source.subscribe(new CountObserver(o,this._fn,this.source))};return CountObservable}(ObservableBase);var CountObserver=function(__super__){inherits(CountObserver,__super__);function CountObserver(o,fn,s){this._o=o;this._fn=fn;this._s=s;this._i=0;this._c=0;__super__.call(this)}CountObserver.prototype.next=function(x){if(this._fn){var result=tryCatch(this._fn)(x,this._i++,this._s);if(result===errorObj){return this._o.onError(result.e)}Boolean(result)&&this._c++}else{this._c++}};CountObserver.prototype.error=function(e){this._o.onError(e)};CountObserver.prototype.completed=function(){this._o.onNext(this._c);this._o.onCompleted()};return CountObserver}(AbstractObserver);observableProto.count=function(predicate,thisArg){var fn=bindCallback(predicate,thisArg,3);return new CountObservable(this,fn)};var IndexOfObservable=function(__super__){inherits(IndexOfObservable,__super__);function IndexOfObservable(source,e,n){this.source=source;this._e=e;this._n=n;__super__.call(this)}IndexOfObservable.prototype.subscribeCore=function(o){if(this._n<0){o.onNext(-1);o.onCompleted();return disposableEmpty}return this.source.subscribe(new IndexOfObserver(o,this._e,this._n))};return IndexOfObservable}(ObservableBase);var IndexOfObserver=function(__super__){inherits(IndexOfObserver,__super__);function IndexOfObserver(o,e,n){this._o=o;this._e=e;this._n=n;this._i=0;__super__.call(this)}IndexOfObserver.prototype.next=function(x){if(this._i>=this._n&&x===this._e){this._o.onNext(this._i);this._o.onCompleted()}this._i++};IndexOfObserver.prototype.error=function(e){this._o.onError(e)};IndexOfObserver.prototype.completed=function(){this._o.onNext(-1);this._o.onCompleted()};return IndexOfObserver}(AbstractObserver);observableProto.indexOf=function(searchElement,fromIndex){var n=+fromIndex||0;Math.abs(n)===Infinity&&(n=0);return new IndexOfObservable(this,searchElement,n)};var SumObservable=function(__super__){inherits(SumObservable,__super__);function SumObservable(source,fn){this.source=source;this._fn=fn;__super__.call(this)}SumObservable.prototype.subscribeCore=function(o){return this.source.subscribe(new SumObserver(o,this._fn,this.source))};return SumObservable}(ObservableBase);var SumObserver=function(__super__){inherits(SumObserver,__super__);function SumObserver(o,fn,s){this._o=o;this._fn=fn;this._s=s;this._i=0;this._c=0;__super__.call(this)}SumObserver.prototype.next=function(x){if(this._fn){var result=tryCatch(this._fn)(x,this._i++,this._s);if(result===errorObj){return this._o.onError(result.e)}this._c+=result}else{this._c+=x}};SumObserver.prototype.error=function(e){this._o.onError(e)};SumObserver.prototype.completed=function(){this._o.onNext(this._c);this._o.onCompleted()};return SumObserver}(AbstractObserver);observableProto.sum=function(keySelector,thisArg){var fn=bindCallback(keySelector,thisArg,3);return new SumObservable(this,fn)};observableProto.minBy=function(keySelector,comparer){comparer||(comparer=defaultSubComparer);return new ExtremaByObservable(this,keySelector,function(x,y){return comparer(x,y)*-1})};observableProto.min=function(comparer){return this.minBy(identity,comparer).map(function(x){return firstOnly(x)})};observableProto.maxBy=function(keySelector,comparer){comparer||(comparer=defaultSubComparer);return new ExtremaByObservable(this,keySelector,comparer)};observableProto.max=function(comparer){return this.maxBy(identity,comparer).map(function(x){return firstOnly(x)})};var AverageObservable=function(__super__){inherits(AverageObservable,__super__);function AverageObservable(source,fn){this.source=source;this._fn=fn;__super__.call(this)}AverageObservable.prototype.subscribeCore=function(o){return this.source.subscribe(new AverageObserver(o,this._fn,this.source))};return AverageObservable}(ObservableBase);var AverageObserver=function(__super__){inherits(AverageObserver,__super__);function AverageObserver(o,fn,s){this._o=o;this._fn=fn;this._s=s;this._c=0;this._t=0;__super__.call(this)}AverageObserver.prototype.next=function(x){if(this._fn){var r=tryCatch(this._fn)(x,this._c++,this._s);if(r===errorObj){return this._o.onError(r.e)}this._t+=r}else{this._c++;this._t+=x}};AverageObserver.prototype.error=function(e){this._o.onError(e)};AverageObserver.prototype.completed=function(){if(this._c===0){return this._o.onError(new EmptyError)}this._o.onNext(this._t/this._c);this._o.onCompleted()};return AverageObserver}(AbstractObserver);observableProto.average=function(keySelector,thisArg){var source=this,fn;if(isFunction(keySelector)){fn=bindCallback(keySelector,thisArg,3)}return new AverageObservable(source,fn)};observableProto.sequenceEqual=function(second,comparer){var first=this;comparer||(comparer=defaultComparer);return new AnonymousObservable(function(o){var donel=false,doner=false,ql=[],qr=[];var subscription1=first.subscribe(function(x){if(qr.length>0){var v=qr.shift();var equal=tryCatch(comparer)(v,x);if(equal===errorObj){return o.onError(equal.e)}if(!equal){o.onNext(false);o.onCompleted()}}else if(doner){o.onNext(false);o.onCompleted()}else{ql.push(x)}},function(e){o.onError(e)},function(){donel=true;if(ql.length===0){if(qr.length>0){o.onNext(false);o.onCompleted()}else if(doner){o.onNext(true);o.onCompleted()}}});(isArrayLike(second)||isIterable(second))&&(second=observableFrom(second));isPromise(second)&&(second=observableFromPromise(second));var subscription2=second.subscribe(function(x){if(ql.length>0){var v=ql.shift();var equal=tryCatch(comparer)(v,x);if(equal===errorObj){return o.onError(equal.e)}if(!equal){o.onNext(false);o.onCompleted()}}else if(donel){o.onNext(false);o.onCompleted()}else{qr.push(x)}},function(e){o.onError(e)},function(){doner=true;if(qr.length===0){if(ql.length>0){o.onNext(false);o.onCompleted()}else if(donel){o.onNext(true);o.onCompleted()}}});return new BinaryDisposable(subscription1,subscription2)},first)};var ElementAtObservable=function(__super__){inherits(ElementAtObservable,__super__);function ElementAtObservable(source,i,d){this.source=source;this._i=i;this._d=d;__super__.call(this)}ElementAtObservable.prototype.subscribeCore=function(o){return this.source.subscribe(new ElementAtObserver(o,this._i,this._d))};return ElementAtObservable}(ObservableBase);var ElementAtObserver=function(__super__){inherits(ElementAtObserver,__super__);function ElementAtObserver(o,i,d){this._o=o;this._i=i;this._d=d;__super__.call(this)}ElementAtObserver.prototype.next=function(x){if(this._i--===0){this._o.onNext(x);this._o.onCompleted()}};ElementAtObserver.prototype.error=function(e){this._o.onError(e)};ElementAtObserver.prototype.completed=function(){if(this._d===undefined){this._o.onError(new ArgumentOutOfRangeError)}else{this._o.onNext(this._d);this._o.onCompleted()}};return ElementAtObserver}(AbstractObserver);observableProto.elementAt=function(index,defaultValue){if(index<0){throw new ArgumentOutOfRangeError}return new ElementAtObservable(this,index,defaultValue)};var SingleObserver=function(__super__){inherits(SingleObserver,__super__);function SingleObserver(o,obj,s){this._o=o;this._obj=obj;this._s=s;this._i=0;this._hv=false;this._v=null;__super__.call(this)}SingleObserver.prototype.next=function(x){var shouldYield=false;if(this._obj.predicate){var res=tryCatch(this._obj.predicate)(x,this._i++,this._s);if(res===errorObj){return this._o.onError(res.e)}Boolean(res)&&(shouldYield=true)}else if(!this._obj.predicate){shouldYield=true}if(shouldYield){if(this._hv){return this._o.onError(new Error("Sequence contains more than one matching element"))}this._hv=true;this._v=x}};SingleObserver.prototype.error=function(e){this._o.onError(e)};SingleObserver.prototype.completed=function(){if(this._hv){this._o.onNext(this._v);this._o.onCompleted()}else if(this._obj.defaultValue===undefined){this._o.onError(new EmptyError)}else{this._o.onNext(this._obj.defaultValue);this._o.onCompleted()}};return SingleObserver}(AbstractObserver);observableProto.single=function(predicate,thisArg){var obj={},source=this;if(typeof arguments[0]==="object"){obj=arguments[0]}else{obj={predicate:arguments[0],thisArg:arguments[1],defaultValue:arguments[2]}}if(isFunction(obj.predicate)){var fn=obj.predicate;obj.predicate=bindCallback(fn,obj.thisArg,3)}return new AnonymousObservable(function(o){return source.subscribe(new SingleObserver(o,obj,source))},source)};var FirstObservable=function(__super__){inherits(FirstObservable,__super__);function FirstObservable(source,obj){this.source=source;this._obj=obj;__super__.call(this)}FirstObservable.prototype.subscribeCore=function(o){return this.source.subscribe(new FirstObserver(o,this._obj,this.source))};return FirstObservable}(ObservableBase);var FirstObserver=function(__super__){inherits(FirstObserver,__super__);function FirstObserver(o,obj,s){this._o=o;this._obj=obj;this._s=s;this._i=0;__super__.call(this)}FirstObserver.prototype.next=function(x){if(this._obj.predicate){var res=tryCatch(this._obj.predicate)(x,this._i++,this._s);if(res===errorObj){return this._o.onError(res.e)}if(Boolean(res)){this._o.onNext(x);this._o.onCompleted()}}else if(!this._obj.predicate){this._o.onNext(x);this._o.onCompleted()}};FirstObserver.prototype.error=function(e){this._o.onError(e)};FirstObserver.prototype.completed=function(){if(this._obj.defaultValue===undefined){this._o.onError(new EmptyError)}else{this._o.onNext(this._obj.defaultValue);this._o.onCompleted()}};return FirstObserver}(AbstractObserver);observableProto.first=function(){var obj={},source=this;if(typeof arguments[0]==="object"){obj=arguments[0]}else{obj={predicate:arguments[0],thisArg:arguments[1],defaultValue:arguments[2]}}if(isFunction(obj.predicate)){var fn=obj.predicate;obj.predicate=bindCallback(fn,obj.thisArg,3)}return new FirstObservable(this,obj)};var LastObservable=function(__super__){inherits(LastObservable,__super__);function LastObservable(source,obj){this.source=source;this._obj=obj;__super__.call(this)}LastObservable.prototype.subscribeCore=function(o){return this.source.subscribe(new LastObserver(o,this._obj,this.source))};return LastObservable}(ObservableBase);var LastObserver=function(__super__){inherits(LastObserver,__super__);function LastObserver(o,obj,s){this._o=o;this._obj=obj;this._s=s;this._i=0;this._hv=false;this._v=null;__super__.call(this)}LastObserver.prototype.next=function(x){var shouldYield=false;if(this._obj.predicate){var res=tryCatch(this._obj.predicate)(x,this._i++,this._s);if(res===errorObj){return this._o.onError(res.e)}Boolean(res)&&(shouldYield=true)}else if(!this._obj.predicate){shouldYield=true}if(shouldYield){this._hv=true;this._v=x}};LastObserver.prototype.error=function(e){this._o.onError(e)};LastObserver.prototype.completed=function(){if(this._hv){this._o.onNext(this._v);this._o.onCompleted()}else if(this._obj.defaultValue===undefined){this._o.onError(new EmptyError)}else{this._o.onNext(this._obj.defaultValue);this._o.onCompleted()}};return LastObserver}(AbstractObserver);observableProto.last=function(){var obj={},source=this;if(typeof arguments[0]==="object"){obj=arguments[0]}else{obj={predicate:arguments[0],thisArg:arguments[1],defaultValue:arguments[2]}}if(isFunction(obj.predicate)){var fn=obj.predicate;obj.predicate=bindCallback(fn,obj.thisArg,3)}return new LastObservable(this,obj)};var FindValueObserver=function(__super__){inherits(FindValueObserver,__super__);function FindValueObserver(observer,source,callback,yieldIndex){this._o=observer;this._s=source;this._cb=callback;this._y=yieldIndex;this._i=0;__super__.call(this)}FindValueObserver.prototype.next=function(x){var shouldRun=tryCatch(this._cb)(x,this._i,this._s);if(shouldRun===errorObj){return this._o.onError(shouldRun.e)}if(shouldRun){this._o.onNext(this._y?this._i:x);this._o.onCompleted()}else{this._i++}};FindValueObserver.prototype.error=function(e){this._o.onError(e)};FindValueObserver.prototype.completed=function(){this._y&&this._o.onNext(-1);this._o.onCompleted()};return FindValueObserver}(AbstractObserver);function findValue(source,predicate,thisArg,yieldIndex){var callback=bindCallback(predicate,thisArg,3);return new AnonymousObservable(function(o){return source.subscribe(new FindValueObserver(o,source,callback,yieldIndex))},source)}observableProto.find=function(predicate,thisArg){return findValue(this,predicate,thisArg,false)};observableProto.findIndex=function(predicate,thisArg){return findValue(this,predicate,thisArg,true)};var ToSetObservable=function(__super__){inherits(ToSetObservable,__super__);function ToSetObservable(source){this.source=source;__super__.call(this)}ToSetObservable.prototype.subscribeCore=function(o){return this.source.subscribe(new ToSetObserver(o))};return ToSetObservable}(ObservableBase);var ToSetObserver=function(__super__){inherits(ToSetObserver,__super__);function ToSetObserver(o){this._o=o;this._s=new root.Set;__super__.call(this)}ToSetObserver.prototype.next=function(x){this._s.add(x)};ToSetObserver.prototype.error=function(e){this._o.onError(e)};ToSetObserver.prototype.completed=function(){this._o.onNext(this._s);this._o.onCompleted()};return ToSetObserver}(AbstractObserver);observableProto.toSet=function(){if(typeof root.Set==="undefined"){throw new TypeError}return new ToSetObservable(this)};var ToMapObservable=function(__super__){inherits(ToMapObservable,__super__);function ToMapObservable(source,k,e){this.source=source;this._k=k;this._e=e;__super__.call(this)}ToMapObservable.prototype.subscribeCore=function(o){return this.source.subscribe(new ToMapObserver(o,this._k,this._e))};return ToMapObservable}(ObservableBase);var ToMapObserver=function(__super__){inherits(ToMapObserver,__super__);function ToMapObserver(o,k,e){this._o=o;this._k=k;this._e=e;this._m=new root.Map;__super__.call(this)}ToMapObserver.prototype.next=function(x){var key=tryCatch(this._k)(x);if(key===errorObj){return this._o.onError(key.e)}var elem=x;if(this._e){elem=tryCatch(this._e)(x);if(elem===errorObj){return this._o.onError(elem.e)}}this._m.set(key,elem)};ToMapObserver.prototype.error=function(e){this._o.onError(e)};ToMapObserver.prototype.completed=function(){this._o.onNext(this._m);this._o.onCompleted()};return ToMapObserver}(AbstractObserver);observableProto.toMap=function(keySelector,elementSelector){if(typeof root.Map==="undefined"){throw new TypeError}return new ToMapObservable(this,keySelector,elementSelector)};var SliceObservable=function(__super__){inherits(SliceObservable,__super__);function SliceObservable(source,b,e){this.source=source;this._b=b;this._e=e;__super__.call(this)}SliceObservable.prototype.subscribeCore=function(o){return this.source.subscribe(new SliceObserver(o,this._b,this._e))};return SliceObservable}(ObservableBase);var SliceObserver=function(__super__){inherits(SliceObserver,__super__);function SliceObserver(o,b,e){this._o=o;this._b=b;this._e=e;this._i=0;__super__.call(this)}SliceObserver.prototype.next=function(x){if(this._i>=this._b){if(this._e===this._i){this._o.onCompleted()}else{this._o.onNext(x)}}this._i++};SliceObserver.prototype.error=function(e){this._o.onError(e)};SliceObserver.prototype.completed=function(){this._o.onCompleted()};return SliceObserver}(AbstractObserver);observableProto.slice=function(begin,end){var start=begin||0;if(start<0){throw new Rx.ArgumentOutOfRangeError}if(typeof end==="number"&&end=this._n&&x===this._e){this._hv=true;this._v=this._i}this._i++};LastIndexOfObserver.prototype.error=function(e){this._o.onError(e)};LastIndexOfObserver.prototype.completed=function(){if(this._hv){this._o.onNext(this._v)}else{this._o.onNext(-1)}this._o.onCompleted()};return LastIndexOfObserver}(AbstractObserver);observableProto.lastIndexOf=function(searchElement,fromIndex){var n=+fromIndex||0;Math.abs(n)===Infinity&&(n=0);return new LastIndexOfObservable(this,searchElement,n)};Observable.wrap=function(fn){function createObservable(){return Observable.spawn.call(this,fn.apply(this,arguments))}createObservable.__generatorFunction__=fn;return createObservable};var spawn=Observable.spawn=function(){var gen=arguments[0],self=this,args=[];for(var i=1,len=arguments.length;i2){var args=[];for(var i=1,len=arguments.length;i0){o.onNext(q.shift())}}var subscription=combineLatestSource(this.source,this.pauser.startWith(false).distinctUntilChanged(),function(data,shouldFire){return{data:data,shouldFire:shouldFire}}).subscribe(function(results){if(previousShouldFire!==undefined&&results.shouldFire!==previousShouldFire){previousShouldFire=results.shouldFire;if(results.shouldFire){drainQueue()}}else{previousShouldFire=results.shouldFire;if(results.shouldFire){o.onNext(results.data)}else{q.push(results.data)}}},function(err){drainQueue();o.onError(err)},function(){drainQueue();o.onCompleted()});return subscription};PausableBufferedObservable.prototype.pause=function(){this.controller.onNext(false)};PausableBufferedObservable.prototype.resume=function(){this.controller.onNext(true)};return PausableBufferedObservable}(Observable);observableProto.pausableBuffered=function(pauser){return new PausableBufferedObservable(this,pauser)};var ControlledObservable=function(__super__){inherits(ControlledObservable,__super__);function ControlledObservable(source,enableQueue,scheduler){__super__.call(this);this.subject=new ControlledSubject(enableQueue,scheduler);this.source=source.multicast(this.subject).refCount()}ControlledObservable.prototype._subscribe=function(o){return this.source.subscribe(o)};ControlledObservable.prototype.request=function(numberOfItems){return this.subject.request(numberOfItems==null?-1:numberOfItems)};return ControlledObservable}(Observable);var ControlledSubject=function(__super__){inherits(ControlledSubject,__super__);function ControlledSubject(enableQueue,scheduler){enableQueue==null&&(enableQueue=true);__super__.call(this);this.subject=new Subject;this.enableQueue=enableQueue;this.queue=enableQueue?[]:null;this.requestedCount=0;this.requestedDisposable=null;this.error=null;this.hasFailed=false;this.hasCompleted=false;this.scheduler=scheduler||currentThreadScheduler}addProperties(ControlledSubject.prototype,Observer,{_subscribe:function(o){return this.subject.subscribe(o)},onCompleted:function(){this.hasCompleted=true;if(!this.enableQueue||this.queue.length===0){this.subject.onCompleted();this.disposeCurrentRequest()}else{this.queue.push(Notification.createOnCompleted())}},onError:function(error){this.hasFailed=true;this.error=error;if(!this.enableQueue||this.queue.length===0){this.subject.onError(error);this.disposeCurrentRequest()}else{this.queue.push(Notification.createOnError(error))}},onNext:function(value){if(this.requestedCount<=0){this.enableQueue&&this.queue.push(Notification.createOnNext(value))}else{this.requestedCount--===0&&this.disposeCurrentRequest();this.subject.onNext(value)}},_processRequest:function(numberOfItems){if(this.enableQueue){while(this.queue.length>0&&(numberOfItems>0||this.queue[0].kind!=="N")){var first=this.queue.shift();first.accept(this.subject);if(first.kind==="N"){numberOfItems--}else{this.disposeCurrentRequest();this.queue=[]}}}return numberOfItems},request:function(number){this.disposeCurrentRequest();var self=this;this.requestedDisposable=this.scheduler.schedule(number,function(s,i){var remaining=self._processRequest(i);var stopped=self.hasCompleted||self.hasFailed;if(!stopped&&remaining>0){self.requestedCount=remaining;return disposableCreate(function(){self.requestedCount=0})}});return this.requestedDisposable},disposeCurrentRequest:function(){if(this.requestedDisposable){this.requestedDisposable.dispose();this.requestedDisposable=null}}});return ControlledSubject}(Observable);observableProto.controlled=function(enableQueue,scheduler){ +if(enableQueue&&isScheduler(enableQueue)){scheduler=enableQueue;enableQueue=true}if(enableQueue==null){enableQueue=true}return new ControlledObservable(this,enableQueue,scheduler)};var StopAndWaitObservable=function(__super__){inherits(StopAndWaitObservable,__super__);function StopAndWaitObservable(source){__super__.call(this);this.source=source}function scheduleMethod(s,self){self.source.request(1)}StopAndWaitObservable.prototype._subscribe=function(o){this.subscription=this.source.subscribe(new StopAndWaitObserver(o,this,this.subscription));return new BinaryDisposable(this.subscription,defaultScheduler.schedule(this,scheduleMethod))};var StopAndWaitObserver=function(__sub__){inherits(StopAndWaitObserver,__sub__);function StopAndWaitObserver(observer,observable,cancel){__sub__.call(this);this.observer=observer;this.observable=observable;this.cancel=cancel;this.scheduleDisposable=null}StopAndWaitObserver.prototype.completed=function(){this.observer.onCompleted();this.dispose()};StopAndWaitObserver.prototype.error=function(error){this.observer.onError(error);this.dispose()};function innerScheduleMethod(s,self){self.observable.source.request(1)}StopAndWaitObserver.prototype.next=function(value){this.observer.onNext(value);this.scheduleDisposable=defaultScheduler.schedule(this,innerScheduleMethod)};StopAndWaitObservable.dispose=function(){this.observer=null;if(this.cancel){this.cancel.dispose();this.cancel=null}if(this.scheduleDisposable){this.scheduleDisposable.dispose();this.scheduleDisposable=null}__sub__.prototype.dispose.call(this)};return StopAndWaitObserver}(AbstractObserver);return StopAndWaitObservable}(Observable);ControlledObservable.prototype.stopAndWait=function(){return new StopAndWaitObservable(this)};var WindowedObservable=function(__super__){inherits(WindowedObservable,__super__);function WindowedObservable(source,windowSize){__super__.call(this);this.source=source;this.windowSize=windowSize}function scheduleMethod(s,self){self.source.request(self.windowSize)}WindowedObservable.prototype._subscribe=function(o){this.subscription=this.source.subscribe(new WindowedObserver(o,this,this.subscription));return new BinaryDisposable(this.subscription,defaultScheduler.schedule(this,scheduleMethod))};var WindowedObserver=function(__sub__){inherits(WindowedObserver,__sub__);function WindowedObserver(observer,observable,cancel){this.observer=observer;this.observable=observable;this.cancel=cancel;this.received=0;this.scheduleDisposable=null;__sub__.call(this)}WindowedObserver.prototype.completed=function(){this.observer.onCompleted();this.dispose()};WindowedObserver.prototype.error=function(error){this.observer.onError(error);this.dispose()};function innerScheduleMethod(s,self){self.observable.source.request(self.observable.windowSize)}WindowedObserver.prototype.next=function(value){this.observer.onNext(value);this.received=++this.received%this.observable.windowSize;this.received===0&&(this.scheduleDisposable=defaultScheduler.schedule(this,innerScheduleMethod))};WindowedObserver.prototype.dispose=function(){this.observer=null;if(this.cancel){this.cancel.dispose();this.cancel=null}if(this.scheduleDisposable){this.scheduleDisposable.dispose();this.scheduleDisposable=null}__sub__.prototype.dispose.call(this)};return WindowedObserver}(AbstractObserver);return WindowedObservable}(Observable);ControlledObservable.prototype.windowed=function(windowSize){return new WindowedObservable(this,windowSize)};observableProto.pipe=function(dest){var source=this.pausableBuffered();function onDrain(){source.resume()}dest.addListener("drain",onDrain);source.subscribe(function(x){!dest.write(String(x))&&source.pause()},function(err){dest.emit("error",err)},function(){!dest._isStdio&&dest.end();dest.removeListener("drain",onDrain)});source.resume();return dest};var MulticastObservable=function(__super__){inherits(MulticastObservable,__super__);function MulticastObservable(source,fn1,fn2){this.source=source;this._fn1=fn1;this._fn2=fn2;__super__.call(this)}MulticastObservable.prototype.subscribeCore=function(o){var connectable=this.source.multicast(this._fn1());return new BinaryDisposable(this._fn2(connectable).subscribe(o),connectable.connect())};return MulticastObservable}(ObservableBase);observableProto.multicast=function(subjectOrSubjectSelector,selector){return isFunction(subjectOrSubjectSelector)?new MulticastObservable(this,subjectOrSubjectSelector,selector):new ConnectableObservable(this,subjectOrSubjectSelector)};observableProto.publish=function(selector){return selector&&isFunction(selector)?this.multicast(function(){return new Subject},selector):this.multicast(new Subject)};observableProto.share=function(){return this.publish().refCount()};observableProto.publishLast=function(selector){return selector&&isFunction(selector)?this.multicast(function(){return new AsyncSubject},selector):this.multicast(new AsyncSubject)};observableProto.publishValue=function(initialValueOrSelector,initialValue){return arguments.length===2?this.multicast(function(){return new BehaviorSubject(initialValue)},initialValueOrSelector):this.multicast(new BehaviorSubject(initialValueOrSelector))};observableProto.shareValue=function(initialValue){return this.publishValue(initialValue).refCount()};observableProto.replay=function(selector,bufferSize,windowSize,scheduler){return selector&&isFunction(selector)?this.multicast(function(){return new ReplaySubject(bufferSize,windowSize,scheduler)},selector):this.multicast(new ReplaySubject(bufferSize,windowSize,scheduler))};observableProto.shareReplay=function(bufferSize,windowSize,scheduler){return this.replay(null,bufferSize,windowSize,scheduler).refCount()};var InnerSubscription=function(s,o){this._s=s;this._o=o};InnerSubscription.prototype.dispose=function(){if(!this._s.isDisposed&&this._o!==null){var idx=this._s.observers.indexOf(this._o);this._s.observers.splice(idx,1);this._o=null}};var RefCountObservable=function(__super__){inherits(RefCountObservable,__super__);function RefCountObservable(source){this.source=source;this._count=0;this._connectableSubscription=null;__super__.call(this)}RefCountObservable.prototype.subscribeCore=function(o){var subscription=this.source.subscribe(o);++this._count===1&&(this._connectableSubscription=this.source.connect());return new RefCountDisposable(this,subscription)};function RefCountDisposable(p,s){this._p=p;this._s=s;this.isDisposed=false}RefCountDisposable.prototype.dispose=function(){if(!this.isDisposed){this.isDisposed=true;this._s.dispose();--this._p._count===0&&this._p._connectableSubscription.dispose()}};return RefCountObservable}(ObservableBase);var ConnectableObservable=Rx.ConnectableObservable=function(__super__){inherits(ConnectableObservable,__super__);function ConnectableObservable(source,subject){this.source=source;this._connection=null;this._source=source.asObservable();this._subject=subject;__super__.call(this)}function ConnectDisposable(parent,subscription){this._p=parent;this._s=subscription}ConnectDisposable.prototype.dispose=function(){if(this._s){this._s.dispose();this._s=null;this._p._connection=null}};ConnectableObservable.prototype.connect=function(){if(!this._connection){var subscription=this._source.subscribe(this._subject);this._connection=new ConnectDisposable(this,subscription)}return this._connection};ConnectableObservable.prototype._subscribe=function(o){return this._subject.subscribe(o)};ConnectableObservable.prototype.refCount=function(){return new RefCountObservable(this)};return ConnectableObservable}(Observable);observableProto.singleInstance=function(){var source=this,hasObservable=false,observable;function getObservable(){if(!hasObservable){hasObservable=true;observable=source["finally"](function(){hasObservable=false}).publish().refCount()}return observable}return new AnonymousObservable(function(o){return getObservable().subscribe(o)})};observableProto.join=function(right,leftDurationSelector,rightDurationSelector,resultSelector){var left=this;return new AnonymousObservable(function(o){var group=new CompositeDisposable;var leftDone=false,rightDone=false;var leftId=0,rightId=0;var leftMap=new Map,rightMap=new Map;var handleError=function(e){o.onError(e)};group.add(left.subscribe(function(value){var id=leftId++,md=new SingleAssignmentDisposable;leftMap.set(id,value);group.add(md);var duration=tryCatch(leftDurationSelector)(value);if(duration===errorObj){return o.onError(duration.e)}md.setDisposable(duration.take(1).subscribe(noop,handleError,function(){leftMap["delete"](id)&&leftMap.size===0&&leftDone&&o.onCompleted();group.remove(md)}));rightMap.forEach(function(v){var result=tryCatch(resultSelector)(value,v);if(result===errorObj){return o.onError(result.e)}o.onNext(result)})},handleError,function(){leftDone=true;(rightDone||leftMap.size===0)&&o.onCompleted()}));group.add(right.subscribe(function(value){var id=rightId++,md=new SingleAssignmentDisposable;rightMap.set(id,value);group.add(md);var duration=tryCatch(rightDurationSelector)(value);if(duration===errorObj){return o.onError(duration.e)}md.setDisposable(duration.take(1).subscribe(noop,handleError,function(){rightMap["delete"](id)&&rightMap.size===0&&rightDone&&o.onCompleted();group.remove(md)}));leftMap.forEach(function(v){var result=tryCatch(resultSelector)(v,value);if(result===errorObj){return o.onError(result.e)}o.onNext(result)})},handleError,function(){rightDone=true;(leftDone||rightMap.size===0)&&o.onCompleted()}));return group},left)};observableProto.groupJoin=function(right,leftDurationSelector,rightDurationSelector,resultSelector){var left=this;return new AnonymousObservable(function(o){var group=new CompositeDisposable;var r=new RefCountDisposable(group);var leftMap=new Map,rightMap=new Map;var leftId=0,rightId=0;var handleError=function(e){return function(v){v.onError(e)}};function handleError(e){}group.add(left.subscribe(function(value){var s=new Subject;var id=leftId++;leftMap.set(id,s);var result=tryCatch(resultSelector)(value,addRef(s,r));if(result===errorObj){leftMap.forEach(handleError(result.e));return o.onError(result.e)}o.onNext(result);rightMap.forEach(function(v){s.onNext(v)});var md=new SingleAssignmentDisposable;group.add(md);var duration=tryCatch(leftDurationSelector)(value);if(duration===errorObj){leftMap.forEach(handleError(duration.e));return o.onError(duration.e)}md.setDisposable(duration.take(1).subscribe(noop,function(e){leftMap.forEach(handleError(e));o.onError(e)},function(){leftMap["delete"](id)&&s.onCompleted();group.remove(md)}))},function(e){leftMap.forEach(handleError(e));o.onError(e)},function(){o.onCompleted()}));group.add(right.subscribe(function(value){var id=rightId++;rightMap.set(id,value);var md=new SingleAssignmentDisposable;group.add(md);var duration=tryCatch(rightDurationSelector)(value);if(duration===errorObj){leftMap.forEach(handleError(duration.e));return o.onError(duration.e)}md.setDisposable(duration.take(1).subscribe(noop,function(e){leftMap.forEach(handleError(e));o.onError(e)},function(){rightMap["delete"](id);group.remove(md)}));leftMap.forEach(function(v){v.onNext(value)})},function(e){leftMap.forEach(handleError(e));o.onError(e)}));return r},left)};function toArray(x){return x.toArray()}observableProto.buffer=function(){return this.window.apply(this,arguments).flatMap(toArray)};observableProto.window=function(windowOpeningsOrClosingSelector,windowClosingSelector){if(arguments.length===1&&typeof arguments[0]!=="function"){return observableWindowWithBoundaries.call(this,windowOpeningsOrClosingSelector)}return typeof windowOpeningsOrClosingSelector==="function"?observableWindowWithClosingSelector.call(this,windowOpeningsOrClosingSelector):observableWindowWithOpenings.call(this,windowOpeningsOrClosingSelector,windowClosingSelector)};function observableWindowWithOpenings(windowOpenings,windowClosingSelector){return windowOpenings.groupJoin(this,windowClosingSelector,observableEmpty,function(_,win){return win})}function observableWindowWithBoundaries(windowBoundaries){var source=this;return new AnonymousObservable(function(observer){var win=new Subject,d=new CompositeDisposable,r=new RefCountDisposable(d);observer.onNext(addRef(win,r));d.add(source.subscribe(function(x){win.onNext(x)},function(err){win.onError(err);observer.onError(err)},function(){win.onCompleted();observer.onCompleted()}));isPromise(windowBoundaries)&&(windowBoundaries=observableFromPromise(windowBoundaries));d.add(windowBoundaries.subscribe(function(w){win.onCompleted();win=new Subject;observer.onNext(addRef(win,r))},function(err){win.onError(err);observer.onError(err)},function(){win.onCompleted();observer.onCompleted()}));return r},source)}function observableWindowWithClosingSelector(windowClosingSelector){var source=this;return new AnonymousObservable(function(observer){var m=new SerialDisposable,d=new CompositeDisposable(m),r=new RefCountDisposable(d),win=new Subject;observer.onNext(addRef(win,r));d.add(source.subscribe(function(x){win.onNext(x)},function(err){win.onError(err);observer.onError(err)},function(){win.onCompleted();observer.onCompleted()}));function createWindowClose(){var windowClose;try{windowClose=windowClosingSelector()}catch(e){observer.onError(e);return}isPromise(windowClose)&&(windowClose=observableFromPromise(windowClose));var m1=new SingleAssignmentDisposable;m.setDisposable(m1);m1.setDisposable(windowClose.take(1).subscribe(noop,function(err){win.onError(err);observer.onError(err)},function(){win.onCompleted();win=new Subject;observer.onNext(addRef(win,r));createWindowClose()}))}createWindowClose();return r},source)}var PairwiseObservable=function(__super__){inherits(PairwiseObservable,__super__);function PairwiseObservable(source){this.source=source;__super__.call(this)}PairwiseObservable.prototype.subscribeCore=function(o){return this.source.subscribe(new PairwiseObserver(o))};return PairwiseObservable}(ObservableBase);var PairwiseObserver=function(__super__){inherits(PairwiseObserver,__super__);function PairwiseObserver(o){this._o=o;this._p=null;this._hp=false}PairwiseObserver.prototype.next=function(x){if(this._hp){this._o.onNext([this._p,x])}else{this._hp=true}this._p=x};PairwiseObserver.prototype.error=function(err){this._o.onError(err)};PairwiseObserver.prototype.completed=function(){this._o.onCompleted()};return PairwiseObserver}(AbstractObserver);observableProto.pairwise=function(){return new PairwiseObservable(this)};observableProto.partition=function(predicate,thisArg){var fn=bindCallback(predicate,thisArg,3);return[this.filter(predicate,thisArg),this.filter(function(x,i,o){return!fn(x,i,o)})]};var WhileEnumerable=function(__super__){inherits(WhileEnumerable,__super__);function WhileEnumerable(c,s){this.c=c;this.s=s}WhileEnumerable.prototype[$iterator$]=function(){var self=this;return{next:function(){return self.c()?{done:false,value:self.s}:{done:true,value:void 0}}}};return WhileEnumerable}(Enumerable);function enumerableWhile(condition,source){return new WhileEnumerable(condition,source)}observableProto.letBind=observableProto["let"]=function(func){return func(this)};Observable["if"]=function(condition,thenSource,elseSourceOrScheduler){return observableDefer(function(){elseSourceOrScheduler||(elseSourceOrScheduler=observableEmpty());isPromise(thenSource)&&(thenSource=observableFromPromise(thenSource));isPromise(elseSourceOrScheduler)&&(elseSourceOrScheduler=observableFromPromise(elseSourceOrScheduler));typeof elseSourceOrScheduler.now==="function"&&(elseSourceOrScheduler=observableEmpty(elseSourceOrScheduler));return condition()?thenSource:elseSourceOrScheduler})};Observable["for"]=Observable.forIn=function(sources,resultSelector,thisArg){return enumerableOf(sources,resultSelector,thisArg).concat()};var observableWhileDo=Observable["while"]=Observable.whileDo=function(condition,source){isPromise(source)&&(source=observableFromPromise(source));return enumerableWhile(condition,source).concat()};observableProto.doWhile=function(condition){return observableConcat([this,observableWhileDo(condition,this)])};Observable["case"]=function(selector,sources,defaultSourceOrScheduler){return observableDefer(function(){isPromise(defaultSourceOrScheduler)&&(defaultSourceOrScheduler=observableFromPromise(defaultSourceOrScheduler));defaultSourceOrScheduler||(defaultSourceOrScheduler=observableEmpty());isScheduler(defaultSourceOrScheduler)&&(defaultSourceOrScheduler=observableEmpty(defaultSourceOrScheduler));var result=sources[selector()];isPromise(result)&&(result=observableFromPromise(result));return result||defaultSourceOrScheduler})};var ExpandObservable=function(__super__){inherits(ExpandObservable,__super__);function ExpandObservable(source,fn,scheduler){this.source=source;this._fn=fn;this._scheduler=scheduler;__super__.call(this)}function scheduleRecursive(args,recurse){var state=args[0],self=args[1];var work;if(state.q.length>0){work=state.q.shift()}else{state.isAcquired=false;return}var m1=new SingleAssignmentDisposable;state.d.add(m1);m1.setDisposable(work.subscribe(new ExpandObserver(state,self,m1)));recurse([state,self])}ExpandObservable.prototype._ensureActive=function(state){var isOwner=false;if(state.q.length>0){isOwner=!state.isAcquired;state.isAcquired=true}isOwner&&state.m.setDisposable(this._scheduler.scheduleRecursive([state,this],scheduleRecursive))};ExpandObservable.prototype.subscribeCore=function(o){var m=new SerialDisposable,d=new CompositeDisposable(m),state={q:[],m:m,d:d,activeCount:0,isAcquired:false,o:o};state.q.push(this.source);state.activeCount++;this._ensureActive(state);return d};return ExpandObservable}(ObservableBase);var ExpandObserver=function(__super__){inherits(ExpandObserver,__super__);function ExpandObserver(state,parent,m1){this._s=state;this._p=parent;this._m1=m1;__super__.call(this)}ExpandObserver.prototype.next=function(x){this._s.o.onNext(x);var result=tryCatch(this._p._fn)(x);if(result===errorObj){return this._s.o.onError(result.e)}this._s.q.push(result);this._s.activeCount++;this._p._ensureActive(this._s)};ExpandObserver.prototype.error=function(e){this._s.o.onError(e)};ExpandObserver.prototype.completed=function(){this._s.d.remove(this._m1);this._s.activeCount--;this._s.activeCount===0&&this._s.o.onCompleted()};return ExpandObserver}(AbstractObserver);observableProto.expand=function(selector,scheduler){isScheduler(scheduler)||(scheduler=currentThreadScheduler);return new ExpandObservable(this,selector,scheduler)};function argumentsToArray(){var len=arguments.length,args=new Array(len);for(var i=0;i0){var now=scheduler.now();d=new Date(d.getTime()+p);d.getTime()<=now&&(d=new Date(now+p))}observer.onNext(count);self(count+1,new Date(d))})})}function observableTimerTimeSpanAndPeriod(dueTime,period,scheduler){return dueTime===period?new AnonymousObservable(function(observer){return scheduler.schedulePeriodic(0,period,function(count){observer.onNext(count);return count+1})}):observableDefer(function(){return observableTimerDateAndPeriod(new Date(scheduler.now()+dueTime),period,scheduler)})}var observableinterval=Observable.interval=function(period,scheduler){return observableTimerTimeSpanAndPeriod(period,period,isScheduler(scheduler)?scheduler:defaultScheduler)};var observableTimer=Observable.timer=function(dueTime,periodOrScheduler,scheduler){var period;isScheduler(scheduler)||(scheduler=defaultScheduler);if(periodOrScheduler!=null&&typeof periodOrScheduler==="number"){period=periodOrScheduler}else if(isScheduler(periodOrScheduler)){scheduler=periodOrScheduler}if((dueTime instanceof Date||typeof dueTime==="number")&&period===undefined){return _observableTimer(dueTime,scheduler)}if(dueTime instanceof Date&&period!==undefined){return observableTimerDateAndPeriod(dueTime.getTime(),periodOrScheduler,scheduler)}return observableTimerTimeSpanAndPeriod(dueTime,period,scheduler)};function observableDelayRelative(source,dueTime,scheduler){return new AnonymousObservable(function(o){var active=false,cancelable=new SerialDisposable,exception=null,q=[],running=false,subscription;subscription=source.materialize().timestamp(scheduler).subscribe(function(notification){var d,shouldRun;if(notification.value.kind==="E"){q=[];q.push(notification);exception=notification.value.error;shouldRun=!running}else{q.push({value:notification.value,timestamp:notification.timestamp+dueTime});shouldRun=!active;active=true}if(shouldRun){if(exception!==null){o.onError(exception)}else{d=new SingleAssignmentDisposable;cancelable.setDisposable(d);d.setDisposable(scheduler.scheduleRecursiveFuture(null,dueTime,function(_,self){var e,recurseDueTime,result,shouldRecurse;if(exception!==null){return}running=true;do{result=null;if(q.length>0&&q[0].timestamp-scheduler.now()<=0){result=q.shift().value}if(result!==null){result.accept(o)}}while(result!==null);shouldRecurse=false;recurseDueTime=0;if(q.length>0){shouldRecurse=true;recurseDueTime=Math.max(0,q[0].timestamp-scheduler.now())}else{active=false}e=exception;running=false;if(e!==null){o.onError(e)}else if(shouldRecurse){self(null,recurseDueTime)}}))}}});return new BinaryDisposable(subscription,cancelable)},source)}function observableDelayAbsolute(source,dueTime,scheduler){return observableDefer(function(){return observableDelayRelative(source,dueTime-scheduler.now(),scheduler)})}function delayWithSelector(source,subscriptionDelay,delayDurationSelector){var subDelay,selector;if(isFunction(subscriptionDelay)){selector=subscriptionDelay}else{subDelay=subscriptionDelay;selector=delayDurationSelector}return new AnonymousObservable(function(o){var delays=new CompositeDisposable,atEnd=false,subscription=new SerialDisposable;function start(){subscription.setDisposable(source.subscribe(function(x){var delay=tryCatch(selector)(x);if(delay===errorObj){return o.onError(delay.e)}var d=new SingleAssignmentDisposable;delays.add(d);d.setDisposable(delay.subscribe(function(){o.onNext(x);delays.remove(d);done()},function(e){o.onError(e)},function(){o.onNext(x);delays.remove(d);done()}))},function(e){o.onError(e)},function(){atEnd=true;subscription.dispose();done()}))}function done(){atEnd&&delays.length===0&&o.onCompleted()}if(!subDelay){start()}else{subscription.setDisposable(subDelay.subscribe(start,function(e){o.onError(e)},start))}return new BinaryDisposable(subscription,delays)},this)}observableProto.delay=function(){var firstArg=arguments[0];if(typeof firstArg==="number"||firstArg instanceof Date){var dueTime=firstArg,scheduler=arguments[1];isScheduler(scheduler)||(scheduler=defaultScheduler);return dueTime instanceof Date?observableDelayAbsolute(this,dueTime,scheduler):observableDelayRelative(this,dueTime,scheduler)}else if(Observable.isObservable(firstArg)||isFunction(firstArg)){ +return delayWithSelector(this,firstArg,arguments[1])}else{throw new Error("Invalid arguments")}};var DebounceObservable=function(__super__){inherits(DebounceObservable,__super__);function DebounceObservable(source,dt,s){isScheduler(s)||(s=defaultScheduler);this.source=source;this._dt=dt;this._s=s;__super__.call(this)}DebounceObservable.prototype.subscribeCore=function(o){var cancelable=new SerialDisposable;return new BinaryDisposable(this.source.subscribe(new DebounceObserver(o,this.source,this._dt,this._s,cancelable)),cancelable)};return DebounceObservable}(ObservableBase);var DebounceObserver=function(__super__){inherits(DebounceObserver,__super__);function DebounceObserver(observer,source,dueTime,scheduler,cancelable){this._o=observer;this._s=source;this._d=dueTime;this._scheduler=scheduler;this._c=cancelable;this._v=null;this._hv=false;this._id=0;__super__.call(this)}DebounceObserver.prototype.next=function(x){this._hv=true;this._v=x;var currentId=++this._id,d=new SingleAssignmentDisposable;this._c.setDisposable(d);d.setDisposable(this._scheduler.scheduleFuture(this,this._d,function(_,self){self._hv&&self._id===currentId&&self._o.onNext(x);self._hv=false}))};DebounceObserver.prototype.error=function(e){this._c.dispose();this._o.onError(e);this._hv=false;this._id++};DebounceObserver.prototype.completed=function(){this._c.dispose();this._hv&&this._o.onNext(this._v);this._o.onCompleted();this._hv=false;this._id++};return DebounceObserver}(AbstractObserver);function debounceWithSelector(source,durationSelector){return new AnonymousObservable(function(o){var value,hasValue=false,cancelable=new SerialDisposable,id=0;var subscription=source.subscribe(function(x){var throttle=tryCatch(durationSelector)(x);if(throttle===errorObj){return o.onError(throttle.e)}isPromise(throttle)&&(throttle=observableFromPromise(throttle));hasValue=true;value=x;id++;var currentid=id,d=new SingleAssignmentDisposable;cancelable.setDisposable(d);d.setDisposable(throttle.subscribe(function(){hasValue&&id===currentid&&o.onNext(value);hasValue=false;d.dispose()},function(e){o.onError(e)},function(){hasValue&&id===currentid&&o.onNext(value);hasValue=false;d.dispose()}))},function(e){cancelable.dispose();o.onError(e);hasValue=false;id++},function(){cancelable.dispose();hasValue&&o.onNext(value);o.onCompleted();hasValue=false;id++});return new BinaryDisposable(subscription,cancelable)},source)}observableProto.debounce=function(){if(isFunction(arguments[0])){return debounceWithSelector(this,arguments[0])}else if(typeof arguments[0]==="number"){return new DebounceObservable(this,arguments[0],arguments[1])}else{throw new Error("Invalid arguments")}};observableProto.windowWithTime=function(timeSpan,timeShiftOrScheduler,scheduler){var source=this,timeShift;timeShiftOrScheduler==null&&(timeShift=timeSpan);isScheduler(scheduler)||(scheduler=defaultScheduler);if(typeof timeShiftOrScheduler==="number"){timeShift=timeShiftOrScheduler}else if(isScheduler(timeShiftOrScheduler)){timeShift=timeSpan;scheduler=timeShiftOrScheduler}return new AnonymousObservable(function(observer){var groupDisposable,nextShift=timeShift,nextSpan=timeSpan,q=[],refCountDisposable,timerD=new SerialDisposable,totalTime=0;groupDisposable=new CompositeDisposable(timerD),refCountDisposable=new RefCountDisposable(groupDisposable);function createTimer(){var m=new SingleAssignmentDisposable,isSpan=false,isShift=false;timerD.setDisposable(m);if(nextSpan===nextShift){isSpan=true;isShift=true}else if(nextSpan0&&now-this._q[0].interval>=this._d){this._o.onNext(this._q.shift().value)}};SkipLastWithTimeObserver.prototype.error=function(e){this._o.onError(e)};SkipLastWithTimeObserver.prototype.completed=function(){var now=this._s.now();while(this._q.length>0&&now-this._q[0].interval>=this._d){this._o.onNext(this._q.shift().value)}this._o.onCompleted()};return SkipLastWithTimeObserver}(AbstractObserver);observableProto.skipLastWithTime=function(duration,scheduler){isScheduler(scheduler)||(scheduler=defaultScheduler);return new SkipLastWithTimeObservable(this,duration,scheduler)};var TakeLastWithTimeObservable=function(__super__){inherits(TakeLastWithTimeObservable,__super__);function TakeLastWithTimeObservable(source,d,s){this.source=source;this._d=d;this._s=s;__super__.call(this)}TakeLastWithTimeObservable.prototype.subscribeCore=function(o){return this.source.subscribe(new TakeLastWithTimeObserver(o,this._d,this._s))};return TakeLastWithTimeObservable}(ObservableBase);var TakeLastWithTimeObserver=function(__super__){inherits(TakeLastWithTimeObserver,__super__);function TakeLastWithTimeObserver(o,d,s){this._o=o;this._d=d;this._s=s;this._q=[];__super__.call(this)}TakeLastWithTimeObserver.prototype.next=function(x){var now=this._s.now();this._q.push({interval:now,value:x});while(this._q.length>0&&now-this._q[0].interval>=this._d){this._q.shift()}};TakeLastWithTimeObserver.prototype.error=function(e){this._o.onError(e)};TakeLastWithTimeObserver.prototype.completed=function(){var now=this._s.now();while(this._q.length>0){var next=this._q.shift();if(now-next.interval<=this._d){this._o.onNext(next.value)}}this._o.onCompleted()};return TakeLastWithTimeObserver}(AbstractObserver);observableProto.takeLastWithTime=function(duration,scheduler){isScheduler(scheduler)||(scheduler=defaultScheduler);return new TakeLastWithTimeObservable(this,duration,scheduler)};observableProto.takeLastBufferWithTime=function(duration,scheduler){var source=this;isScheduler(scheduler)||(scheduler=defaultScheduler);return new AnonymousObservable(function(o){var q=[];return source.subscribe(function(x){var now=scheduler.now();q.push({interval:now,value:x});while(q.length>0&&now-q[0].interval>=duration){q.shift()}},function(e){o.onError(e)},function(){var now=scheduler.now(),res=[];while(q.length>0){var next=q.shift();now-next.interval<=duration&&res.push(next.value)}o.onNext(res);o.onCompleted()})},source)};var TakeWithTimeObservable=function(__super__){inherits(TakeWithTimeObservable,__super__);function TakeWithTimeObservable(source,d,s){this.source=source;this._d=d;this._s=s;__super__.call(this)}function scheduleMethod(s,o){o.onCompleted()}TakeWithTimeObservable.prototype.subscribeCore=function(o){return new BinaryDisposable(this._s.scheduleFuture(o,this._d,scheduleMethod),this.source.subscribe(o))};return TakeWithTimeObservable}(ObservableBase);observableProto.takeWithTime=function(duration,scheduler){isScheduler(scheduler)||(scheduler=defaultScheduler);return new TakeWithTimeObservable(this,duration,scheduler)};var SkipWithTimeObservable=function(__super__){inherits(SkipWithTimeObservable,__super__);function SkipWithTimeObservable(source,d,s){this.source=source;this._d=d;this._s=s;this._open=false;__super__.call(this)}function scheduleMethod(s,self){self._open=true}SkipWithTimeObservable.prototype.subscribeCore=function(o){return new BinaryDisposable(this._s.scheduleFuture(this,this._d,scheduleMethod),this.source.subscribe(new SkipWithTimeObserver(o,this)))};return SkipWithTimeObservable}(ObservableBase);var SkipWithTimeObserver=function(__super__){inherits(SkipWithTimeObserver,__super__);function SkipWithTimeObserver(o,p){this._o=o;this._p=p;__super__.call(this)}SkipWithTimeObserver.prototype.next=function(x){this._p._open&&this._o.onNext(x)};SkipWithTimeObserver.prototype.error=function(e){this._o.onError(e)};SkipWithTimeObserver.prototype.completed=function(){this._o.onCompleted()};return SkipWithTimeObserver}(AbstractObserver);observableProto.skipWithTime=function(duration,scheduler){isScheduler(scheduler)||(scheduler=defaultScheduler);return new SkipWithTimeObservable(this,duration,scheduler)};var SkipUntilWithTimeObservable=function(__super__){inherits(SkipUntilWithTimeObservable,__super__);function SkipUntilWithTimeObservable(source,startTime,scheduler){this.source=source;this._st=startTime;this._s=scheduler;__super__.call(this)}function scheduleMethod(s,state){state._open=true}SkipUntilWithTimeObservable.prototype.subscribeCore=function(o){this._open=false;return new BinaryDisposable(this._s.scheduleFuture(this,this._st,scheduleMethod),this.source.subscribe(new SkipUntilWithTimeObserver(o,this)))};return SkipUntilWithTimeObservable}(ObservableBase);var SkipUntilWithTimeObserver=function(__super__){inherits(SkipUntilWithTimeObserver,__super__);function SkipUntilWithTimeObserver(o,p){this._o=o;this._p=p;__super__.call(this)}SkipUntilWithTimeObserver.prototype.next=function(x){this._p._open&&this._o.onNext(x)};SkipUntilWithTimeObserver.prototype.error=function(e){this._o.onError(e)};SkipUntilWithTimeObserver.prototype.completed=function(){this._o.onCompleted()};return SkipUntilWithTimeObserver}(AbstractObserver);observableProto.skipUntilWithTime=function(startTime,scheduler){isScheduler(scheduler)||(scheduler=defaultScheduler);return new SkipUntilWithTimeObservable(this,startTime,scheduler)};observableProto.takeUntilWithTime=function(endTime,scheduler){isScheduler(scheduler)||(scheduler=defaultScheduler);var source=this;return new AnonymousObservable(function(o){return new BinaryDisposable(scheduler.scheduleFuture(o,endTime,function(_,o){o.onCompleted()}),source.subscribe(o))},source)};observableProto.throttle=function(windowDuration,scheduler){isScheduler(scheduler)||(scheduler=defaultScheduler);var duration=+windowDuration||0;if(duration<=0){throw new RangeError("windowDuration cannot be less or equal zero.")}var source=this;return new AnonymousObservable(function(o){var lastOnNext=0;return source.subscribe(function(x){var now=scheduler.now();if(lastOnNext===0||now-lastOnNext>=duration){lastOnNext=now;o.onNext(x)}},function(e){o.onError(e)},function(){o.onCompleted()})},source)};var TransduceObserver=function(__super__){inherits(TransduceObserver,__super__);function TransduceObserver(o,xform){this._o=o;this._xform=xform;__super__.call(this)}TransduceObserver.prototype.next=function(x){var res=tryCatch(this._xform["@@transducer/step"]).call(this._xform,this._o,x);if(res===errorObj){this._o.onError(res.e)}};TransduceObserver.prototype.error=function(e){this._o.onError(e)};TransduceObserver.prototype.completed=function(){this._xform["@@transducer/result"](this._o)};return TransduceObserver}(AbstractObserver);function transformForObserver(o){return{"@@transducer/init":function(){return o},"@@transducer/step":function(obs,input){return obs.onNext(input)},"@@transducer/result":function(obs){return obs.onCompleted()}}}observableProto.transduce=function(transducer){var source=this;return new AnonymousObservable(function(o){var xform=transducer(transformForObserver(o));return source.subscribe(new TransduceObserver(o,xform))},source)};var SwitchFirstObservable=function(__super__){inherits(SwitchFirstObservable,__super__);function SwitchFirstObservable(source){this.source=source;__super__.call(this)}SwitchFirstObservable.prototype.subscribeCore=function(o){var m=new SingleAssignmentDisposable,g=new CompositeDisposable,state={hasCurrent:false,isStopped:false,o:o,g:g};g.add(m);m.setDisposable(this.source.subscribe(new SwitchFirstObserver(state)));return g};return SwitchFirstObservable}(ObservableBase);var SwitchFirstObserver=function(__super__){inherits(SwitchFirstObserver,__super__);function SwitchFirstObserver(state){this._s=state;__super__.call(this)}SwitchFirstObserver.prototype.next=function(x){if(!this._s.hasCurrent){this._s.hasCurrent=true;isPromise(x)&&(x=observableFromPromise(x));var inner=new SingleAssignmentDisposable;this._s.g.add(inner);inner.setDisposable(x.subscribe(new InnerObserver(this._s,inner)))}};SwitchFirstObserver.prototype.error=function(e){this._s.o.onError(e)};SwitchFirstObserver.prototype.completed=function(){this._s.isStopped=true;!this._s.hasCurrent&&this._s.g.length===1&&this._s.o.onCompleted()};inherits(InnerObserver,__super__);function InnerObserver(state,inner){this._s=state;this._i=inner;__super__.call(this)}InnerObserver.prototype.next=function(x){this._s.o.onNext(x)};InnerObserver.prototype.error=function(e){this._s.o.onError(e)};InnerObserver.prototype.completed=function(){this._s.g.remove(this._i);this._s.hasCurrent=false;this._s.isStopped&&this._s.g.length===1&&this._s.o.onCompleted()};return SwitchFirstObserver}(AbstractObserver);observableProto.switchFirst=function(){return new SwitchFirstObservable(this)};observableProto.flatMapFirst=observableProto.selectManyFirst=function(selector,resultSelector,thisArg){return new FlatMapObservable(this,selector,resultSelector,thisArg).switchFirst()};Rx.Observable.prototype.flatMapWithMaxConcurrent=function(limit,selector,resultSelector,thisArg){return new FlatMapObservable(this,selector,resultSelector,thisArg).merge(limit)};var VirtualTimeScheduler=Rx.VirtualTimeScheduler=function(__super__){inherits(VirtualTimeScheduler,__super__);function VirtualTimeScheduler(initialClock,comparer){this.clock=initialClock;this.comparer=comparer;this.isEnabled=false;this.queue=new PriorityQueue(1024);__super__.call(this)}var VirtualTimeSchedulerPrototype=VirtualTimeScheduler.prototype;VirtualTimeSchedulerPrototype.now=function(){return this.toAbsoluteTime(this.clock)};VirtualTimeSchedulerPrototype.schedule=function(state,action){return this.scheduleAbsolute(state,this.clock,action)};VirtualTimeSchedulerPrototype.scheduleFuture=function(state,dueTime,action){var dt=dueTime instanceof Date?this.toRelativeTime(dueTime-this.now()):this.toRelativeTime(dueTime);return this.scheduleRelative(state,dt,action)};VirtualTimeSchedulerPrototype.add=notImplemented;VirtualTimeSchedulerPrototype.toAbsoluteTime=notImplemented;VirtualTimeSchedulerPrototype.toRelativeTime=notImplemented;VirtualTimeSchedulerPrototype.schedulePeriodic=function(state,period,action){var s=new SchedulePeriodicRecursive(this,state,period,action);return s.start()};VirtualTimeSchedulerPrototype.scheduleRelative=function(state,dueTime,action){var runAt=this.add(this.clock,dueTime);return this.scheduleAbsolute(state,runAt,action)};VirtualTimeSchedulerPrototype.start=function(){if(!this.isEnabled){this.isEnabled=true;do{var next=this.getNext();if(next!==null){this.comparer(next.dueTime,this.clock)>0&&(this.clock=next.dueTime);next.invoke()}else{this.isEnabled=false}}while(this.isEnabled)}};VirtualTimeSchedulerPrototype.stop=function(){this.isEnabled=false};VirtualTimeSchedulerPrototype.advanceTo=function(time){var dueToClock=this.comparer(this.clock,time);if(this.comparer(this.clock,time)>0){throw new ArgumentOutOfRangeError}if(dueToClock===0){return}if(!this.isEnabled){this.isEnabled=true;do{var next=this.getNext();if(next!==null&&this.comparer(next.dueTime,time)<=0){this.comparer(next.dueTime,this.clock)>0&&(this.clock=next.dueTime);next.invoke()}else{this.isEnabled=false}}while(this.isEnabled);this.clock=time}};VirtualTimeSchedulerPrototype.advanceBy=function(time){var dt=this.add(this.clock,time),dueToClock=this.comparer(this.clock,dt);if(dueToClock>0){throw new ArgumentOutOfRangeError}if(dueToClock===0){return}this.advanceTo(dt)};VirtualTimeSchedulerPrototype.sleep=function(time){var dt=this.add(this.clock,time);if(this.comparer(this.clock,dt)>=0){throw new ArgumentOutOfRangeError}this.clock=dt};VirtualTimeSchedulerPrototype.getNext=function(){while(this.queue.length>0){var next=this.queue.peek();if(next.isCancelled()){this.queue.dequeue()}else{return next}}return null};VirtualTimeSchedulerPrototype.scheduleAbsolute=function(state,dueTime,action){var self=this;function run(scheduler,state1){self.queue.remove(si);return action(scheduler,state1)}var si=new ScheduledItem(this,state,run,dueTime,this.comparer);this.queue.enqueue(si);return si.disposable};return VirtualTimeScheduler}(Scheduler);Rx.HistoricalScheduler=function(__super__){inherits(HistoricalScheduler,__super__);function HistoricalScheduler(initialClock,comparer){var clock=initialClock==null?0:initialClock;var cmp=comparer||defaultSubComparer;__super__.call(this,clock,cmp)}var HistoricalSchedulerProto=HistoricalScheduler.prototype;HistoricalSchedulerProto.add=function(absolute,relative){return absolute+relative};HistoricalSchedulerProto.toAbsoluteTime=function(absolute){return new Date(absolute).getTime()};HistoricalSchedulerProto.toRelativeTime=function(timeSpan){return timeSpan};return HistoricalScheduler}(Rx.VirtualTimeScheduler);function OnNextPredicate(predicate){this.predicate=predicate}OnNextPredicate.prototype.equals=function(other){if(other===this){return true}if(other==null){return false}if(other.kind!=="N"){return false}return this.predicate(other.value)};function OnErrorPredicate(predicate){this.predicate=predicate}OnErrorPredicate.prototype.equals=function(other){if(other===this){return true}if(other==null){return false}if(other.kind!=="E"){return false}return this.predicate(other.error)};var ReactiveTest=Rx.ReactiveTest={created:100,subscribed:200,disposed:1e3,onNext:function(ticks,value){return typeof value==="function"?new Recorded(ticks,new OnNextPredicate(value)):new Recorded(ticks,Notification.createOnNext(value))},onError:function(ticks,error){return typeof error==="function"?new Recorded(ticks,new OnErrorPredicate(error)):new Recorded(ticks,Notification.createOnError(error))},onCompleted:function(ticks){return new Recorded(ticks,Notification.createOnCompleted())},subscribe:function(start,end){return new Subscription(start,end)}};var Recorded=Rx.Recorded=function(time,value,comparer){this.time=time;this.value=value;this.comparer=comparer||defaultComparer};Recorded.prototype.equals=function(other){return this.time===other.time&&this.comparer(this.value,other.value)};Recorded.prototype.toString=function(){return this.value.toString()+"@"+this.time};var Subscription=Rx.Subscription=function(start,end){this.subscribe=start;this.unsubscribe=end||Number.MAX_VALUE};Subscription.prototype.equals=function(other){return this.subscribe===other.subscribe&&this.unsubscribe===other.unsubscribe};Subscription.prototype.toString=function(){return"("+this.subscribe+", "+(this.unsubscribe===Number.MAX_VALUE?"Infinite":this.unsubscribe)+")"};var MockDisposable=Rx.MockDisposable=function(scheduler){this.scheduler=scheduler;this.disposes=[];this.disposes.push(this.scheduler.clock)};MockDisposable.prototype.dispose=function(){this.disposes.push(this.scheduler.clock)};var MockObserver=function(__super__){inherits(MockObserver,__super__);function MockObserver(scheduler){__super__.call(this);this.scheduler=scheduler;this.messages=[]}var MockObserverPrototype=MockObserver.prototype;MockObserverPrototype.onNext=function(value){this.messages.push(new Recorded(this.scheduler.clock,Notification.createOnNext(value)))};MockObserverPrototype.onError=function(e){this.messages.push(new Recorded(this.scheduler.clock,Notification.createOnError(e)))};MockObserverPrototype.onCompleted=function(){this.messages.push(new Recorded(this.scheduler.clock,Notification.createOnCompleted()))};return MockObserver}(Observer);function MockPromise(scheduler,messages){var self=this;this.scheduler=scheduler;this.messages=messages;this.subscriptions=[];this.observers=[];for(var i=0,len=this.messages.length;iy?1:x0},onCompleted:function(){checkDisposed(this);if(!this.isStopped){this.isStopped=true;for(var i=0,os=cloneArray(this.observers),len=os.length;i0},onCompleted:function(){var i,len;checkDisposed(this);if(!this.isStopped){this.isStopped=true;var os=cloneArray(this.observers),len=os.length;if(this.hasValue){for(i=0;i0},onCompleted:function(){checkDisposed(this);if(this.isStopped){return}this.isStopped=true;for(var i=0,os=cloneArray(this.observers),len=os.length;i0},_trim:function(now){while(this.q.length>this.bufferSize){this.q.shift()}while(this.q.length>0&&now-this.q[0].interval>this.windowSize){this.q.shift()}},onNext:function(value){checkDisposed(this);if(this.isStopped){return}var now=this.scheduler.now();this.q.push({interval:now,value:value});this._trim(now);for(var i=0,os=cloneArray(this.observers),len=os.length;i=0;i--){index=bottom+(top-bottom>>1);pointerId=todosList[index].id;if(pointerId===todoid){return index}else if(pointerIdtodoid){top=index}}return null}function makeModification$(actions){var clearInputMod$=actions.clearInput$.map(function(){return function(todosData){return todosData}});var insertTodoMod$=actions.insertTodo$.map(function(todoTitle){return function(todosData){var lastId=todosData.list.length>0?todosData.list[todosData.list.length-1].id:0;todosData.list.push({id:lastId+1,title:todoTitle,completed:false});return todosData}});var editTodoMod$=actions.editTodo$.map(function(action){return function(todosData){var todoIndex=searchTodoIndex(todosData.list,action.id);todosData.list[todoIndex].title=action.title;return todosData}});var toggleTodoMod$=actions.toggleTodo$.map(function(action){return function(todosData){var todoIndex=searchTodoIndex(todosData.list,action.id);var previousCompleted=todosData.list[todoIndex].completed;todosData.list[todoIndex].completed=!previousCompleted;return todosData}});var toggleAllMod$=actions.toggleAll$.map(function(){return function(todosData){var allAreCompleted=todosData.list.reduce(function(x,y){return x&&y.completed},true);todosData.list.forEach(function(todoData){todoData.completed=allAreCompleted?false:true});return todosData}});var deleteTodoMod$=actions.deleteTodo$.map(function(action){return function(todosData){var todoIndex=searchTodoIndex(todosData.list,action.id);todosData.list.splice(todoIndex,1);return todosData}});var deleteCompletedsMod$=actions.deleteCompleteds$.map(function(){return function(todosData){todosData.list=todosData.list.filter(function(todoData){return todoData.completed===false});return todosData}});var changeRouteMod$=actions.changeRoute$.startWith("/").map(function(route){var filterFn=getFilterFn(route);return function(todosData){todosData.filter=route.replace("/","").trim();todosData.filterFn=filterFn;return todosData}});return _rx.Observable.merge(insertTodoMod$,deleteTodoMod$,toggleTodoMod$,toggleAllMod$,clearInputMod$,deleteCompletedsMod$,editTodoMod$,changeRouteMod$)}function model(actions,sourceTodosData$){var modification$=makeModification$(actions);return sourceTodosData$.concat(modification$).scan(function(todosData,modFn){return modFn(todosData)}).shareReplay(1)}exports["default"]=model;module.exports=exports["default"]},{rx:66}],72:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=serialize;function serialize(todos$){return todos$.map(function(todosData){return JSON.stringify({list:todosData.list.map(function(todoData){return{title:todoData.title,completed:todoData.completed,id:todoData.id}})})})}module.exports=exports["default"]},{}],73:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=deserialize;function merge(){var result={};for(var i=0;i0?(0,_cycleDom.button)(".clear-completed","Clear completed ("+amountCompleted+")"):null])}function view(todos$){return todos$.map(function(todos){return(0,_cycleDom.div)([renderHeader(),renderMainSection(todos),renderFooter(todos)])})}module.exports=exports["default"]},{"@cycle/dom":2}],75:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});var _extends=Object.assign||function(target){for(var i=1;i=0;i--){index=bottom+(top-bottom>>1);pointerId=todosList[index].id;if(pointerId===todoid){return index}else if(pointerIdtodoid){top=index}}return null}function makeModification$(actions){var clearInputMod$=actions.clearInput$.map(function(){return function(todosData){return todosData}});var insertTodoMod$=actions.insertTodo$.map(function(todoTitle){return function(todosData){var lastId=todosData.list.length>0?todosData.list[todosData.list.length-1].id:0;todosData.list.push({id:lastId+1,title:todoTitle,completed:false});return todosData}});var editTodoMod$=actions.editTodo$.map(function(action){return function(todosData){var todoIndex=searchTodoIndex(todosData.list,action.id);todosData.list[todoIndex].title=action.title;return todosData}});var toggleTodoMod$=actions.toggleTodo$.map(function(action){return function(todosData){var todoIndex=searchTodoIndex(todosData.list,action.id);var previousCompleted=todosData.list[todoIndex].completed;todosData.list[todoIndex].completed=!previousCompleted;return todosData}});var toggleAllMod$=actions.toggleAll$.map(function(){return function(todosData){var allAreCompleted=todosData.list.reduce(function(x,y){return x&&y.completed},true);todosData.list.forEach(function(todoData){todoData.completed=allAreCompleted?false:true});return todosData}});var deleteTodoMod$=actions.deleteTodo$.map(function(action){return function(todosData){var todoIndex=searchTodoIndex(todosData.list,action.id);todosData.list.splice(todoIndex,1);return todosData}});var deleteCompletedsMod$=actions.deleteCompleteds$.map(function(){return function(todosData){todosData.list=todosData.list.filter(function(todoData){return todoData.completed===false});return todosData}});var changeRouteMod$=actions.changeRoute$.startWith("/").map(function(route){var filterFn=getFilterFn(route);return function(todosData){todosData.filter=route.replace("/","").trim();todosData.filterFn=filterFn;return todosData}});return _rx.Observable.merge(insertTodoMod$,deleteTodoMod$,toggleTodoMod$,toggleAllMod$,clearInputMod$,deleteCompletedsMod$,editTodoMod$,changeRouteMod$)}function model(actions,sourceTodosData$){var modification$=makeModification$(actions);return sourceTodosData$.concat(modification$).scan(function(todosData,modFn){return modFn(todosData)}).shareReplay(1)}exports["default"]=model;module.exports=exports["default"]},{rx:66}],78:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=serialize;function serialize(todos$){return todos$.map(function(todosData){return JSON.stringify({list:todosData.list.map(function(todoData){return{title:todoData.title,completed:todoData.completed,id:todoData.id}})})})}module.exports=exports["default"]},{}],79:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=deserialize;function merge(){var result={};for(var i=0;i0?(0,_cycleDom.button)(".clear-completed","Clear completed ("+amountCompleted+")"):null])}function view(todos$){return todos$.map(function(todos){return(0,_cycleDom.div)([renderHeader(),renderMainSection(todos),renderFooter(todos)])})}module.exports=exports["default"]},{"@cycle/dom":2}],81:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});var _createClass=function(){function defineProperties(target,props){for(var i=0;i'); +} + +.todo-list li .toggle:checked:after { + content: url('data:image/svg+xml;utf8,'); +} + +.todo-list li label { + white-space: pre-line; + word-break: break-all; + padding: 15px 60px 15px 15px; + margin-left: 45px; + display: block; + line-height: 1.2; + transition: color 0.4s; +} + +.todo-list li.completed label { + color: #d9d9d9; + text-decoration: line-through; +} + +.todo-list li .destroy { + display: none; + position: absolute; + top: 0; + right: 10px; + bottom: 0; + width: 40px; + height: 40px; + margin: auto 0; + font-size: 30px; + color: #cc9a9a; + margin-bottom: 11px; + transition: color 0.2s ease-out; +} + +.todo-list li .destroy:hover { + color: #af5b5e; +} + +.todo-list li .destroy:after { + content: '×'; +} + +.todo-list li:hover .destroy { + display: block; +} + +.todo-list li .edit { + display: none; +} + +.todo-list li.editing:last-child { + margin-bottom: -1px; +} + +.footer { + color: #777; + padding: 10px 15px; + height: 20px; + text-align: center; + border-top: 1px solid #e6e6e6; +} + +.footer:before { + content: ''; + position: absolute; + right: 0; + bottom: 0; + left: 0; + height: 50px; + overflow: hidden; + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2), + 0 8px 0 -3px #f6f6f6, + 0 9px 1px -3px rgba(0, 0, 0, 0.2), + 0 16px 0 -6px #f6f6f6, + 0 17px 2px -6px rgba(0, 0, 0, 0.2); +} + +.todo-count { + float: left; + text-align: left; +} + +.todo-count strong { + font-weight: 300; +} + +.filters { + margin: 0; + padding: 0; + list-style: none; + position: absolute; + right: 0; + left: 0; +} + +.filters li { + display: inline; +} + +.filters li a { + color: inherit; + margin: 3px; + padding: 3px 7px; + text-decoration: none; + border: 1px solid transparent; + border-radius: 3px; +} + +.filters li a.selected, +.filters li a:hover { + border-color: rgba(175, 47, 47, 0.1); +} + +.filters li a.selected { + border-color: rgba(175, 47, 47, 0.2); +} + +.clear-completed, +html .clear-completed:active { + float: right; + position: relative; + line-height: 20px; + text-decoration: none; + cursor: pointer; +} + +.clear-completed:hover { + text-decoration: underline; +} + +.info { + margin: 65px auto 0; + color: #bfbfbf; + font-size: 10px; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); + text-align: center; +} + +.info p { + line-height: 1; +} + +.info a { + color: inherit; + text-decoration: none; + font-weight: 400; +} + +.info a:hover { + text-decoration: underline; +} + +/* + Hack to remove background from Mobile Safari. + Can't use it globally since it destroys checkboxes in Firefox +*/ +@media screen and (-webkit-min-device-pixel-ratio:0) { + .toggle-all, + .todo-list li .toggle { + background: none; + } + + .todo-list li .toggle { + height: 40px; + } + + .toggle-all { + -webkit-transform: rotate(90deg); + transform: rotate(90deg); + -webkit-appearance: none; + appearance: none; + } +} + +@media (max-width: 430px) { + .footer { + height: 50px; + } + + .filters { + bottom: 10px; + } +} diff --git a/examples/cyclejs/node_modules/todomvc-app-css/package.json b/examples/cyclejs/node_modules/todomvc-app-css/package.json new file mode 100644 index 0000000000..8fb2379517 --- /dev/null +++ b/examples/cyclejs/node_modules/todomvc-app-css/package.json @@ -0,0 +1,96 @@ +{ + "_args": [ + [ + "todomvc-app-css@2.0.3", + "/Users/staltz/oss/cycle/todomvc-cycle" + ] + ], + "_from": "todomvc-app-css@2.0.3", + "_id": "todomvc-app-css@2.0.3", + "_inCache": true, + "_installable": true, + "_location": "/todomvc-app-css", + "_nodeVersion": "4.2.1", + "_npmUser": { + "email": "sindresorhus@gmail.com", + "name": "sindresorhus" + }, + "_npmVersion": "2.14.7", + "_phantomChildren": {}, + "_requested": { + "name": "todomvc-app-css", + "raw": "todomvc-app-css@2.0.3", + "rawSpec": "2.0.3", + "scope": null, + "spec": "2.0.3", + "type": "version" + }, + "_requiredBy": [ + "/" + ], + "_resolved": "https://registry.npmjs.org/todomvc-app-css/-/todomvc-app-css-2.0.3.tgz", + "_shasum": "3f6a9e5a9e6303d90f0f4e4b3d4363676d5c1936", + "_shrinkwrap": null, + "_spec": "todomvc-app-css@2.0.3", + "_where": "/Users/staltz/oss/cycle/todomvc-cycle", + "author": { + "email": "sindresorhus@gmail.com", + "name": "Sindre Sorhus", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/tastejs/todomvc-app-css/issues" + }, + "dependencies": {}, + "description": "CSS for TodoMVC apps", + "devDependencies": {}, + "directories": {}, + "dist": { + "shasum": "3f6a9e5a9e6303d90f0f4e4b3d4363676d5c1936", + "tarball": "https://registry.npmjs.org/todomvc-app-css/-/todomvc-app-css-2.0.3.tgz" + }, + "files": [ + "index.css" + ], + "gitHead": "18b796505e44bd7fcf1c92d2a5a7a754d2f23e7f", + "homepage": "https://github.com/tastejs/todomvc-app-css", + "keywords": [ + "todomvc", + "tastejs", + "app", + "todo", + "template", + "css", + "style", + "stylesheet" + ], + "license": "CC-BY-4.0", + "maintainers": [ + { + "email": "sindresorhus@gmail.com", + "name": "sindresorhus" + }, + { + "email": "addyosmani@gmail.com", + "name": "addyosmani" + }, + { + "email": "phartig@rdrei.net", + "name": "passy" + }, + { + "email": "sawchuk@gmail.com", + "name": "stephenplusplus" + } + ], + "name": "todomvc-app-css", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/tastejs/todomvc-app-css.git" + }, + "scripts": {}, + "style": "index.css", + "version": "2.0.3" +} diff --git a/examples/cyclejs/node_modules/todomvc-app-css/readme.md b/examples/cyclejs/node_modules/todomvc-app-css/readme.md new file mode 100644 index 0000000000..6ddbebf024 --- /dev/null +++ b/examples/cyclejs/node_modules/todomvc-app-css/readme.md @@ -0,0 +1,28 @@ +# todomvc-app-css + +> CSS for TodoMVC apps + +![](screenshot.png) + + +## Install + + +``` +$ npm install --save todomvc-app-css +``` + + +## Getting started + +```html + +``` + +See the [TodoMVC app template](https://github.com/tastejs/todomvc-app-template). + + + +## License + +Creative Commons License
This work by Sindre Sorhus is licensed under a Creative Commons Attribution 4.0 International License. diff --git a/examples/cyclejs/node_modules/todomvc-common/base.css b/examples/cyclejs/node_modules/todomvc-common/base.css new file mode 100644 index 0000000000..da65968a73 --- /dev/null +++ b/examples/cyclejs/node_modules/todomvc-common/base.css @@ -0,0 +1,141 @@ +hr { + margin: 20px 0; + border: 0; + border-top: 1px dashed #c5c5c5; + border-bottom: 1px dashed #f7f7f7; +} + +.learn a { + font-weight: normal; + text-decoration: none; + color: #b83f45; +} + +.learn a:hover { + text-decoration: underline; + color: #787e7e; +} + +.learn h3, +.learn h4, +.learn h5 { + margin: 10px 0; + font-weight: 500; + line-height: 1.2; + color: #000; +} + +.learn h3 { + font-size: 24px; +} + +.learn h4 { + font-size: 18px; +} + +.learn h5 { + margin-bottom: 0; + font-size: 14px; +} + +.learn ul { + padding: 0; + margin: 0 0 30px 25px; +} + +.learn li { + line-height: 20px; +} + +.learn p { + font-size: 15px; + font-weight: 300; + line-height: 1.3; + margin-top: 0; + margin-bottom: 0; +} + +#issue-count { + display: none; +} + +.quote { + border: none; + margin: 20px 0 60px 0; +} + +.quote p { + font-style: italic; +} + +.quote p:before { + content: '“'; + font-size: 50px; + opacity: .15; + position: absolute; + top: -20px; + left: 3px; +} + +.quote p:after { + content: '”'; + font-size: 50px; + opacity: .15; + position: absolute; + bottom: -42px; + right: 3px; +} + +.quote footer { + position: absolute; + bottom: -40px; + right: 0; +} + +.quote footer img { + border-radius: 3px; +} + +.quote footer a { + margin-left: 5px; + vertical-align: middle; +} + +.speech-bubble { + position: relative; + padding: 10px; + background: rgba(0, 0, 0, .04); + border-radius: 5px; +} + +.speech-bubble:after { + content: ''; + position: absolute; + top: 100%; + right: 30px; + border: 13px solid transparent; + border-top-color: rgba(0, 0, 0, .04); +} + +.learn-bar > .learn { + position: absolute; + width: 272px; + top: 8px; + left: -300px; + padding: 10px; + border-radius: 5px; + background-color: rgba(255, 255, 255, .6); + transition-property: left; + transition-duration: 500ms; +} + +@media (min-width: 899px) { + .learn-bar { + width: auto; + padding-left: 300px; + } + + .learn-bar > .learn { + left: 8px; + } +} diff --git a/examples/cyclejs/node_modules/todomvc-common/base.js b/examples/cyclejs/node_modules/todomvc-common/base.js new file mode 100644 index 0000000000..44fb50c613 --- /dev/null +++ b/examples/cyclejs/node_modules/todomvc-common/base.js @@ -0,0 +1,244 @@ +/* global _ */ +(function () { + 'use strict'; + + /* jshint ignore:start */ + // Underscore's Template Module + // Courtesy of underscorejs.org + var _ = (function (_) { + _.defaults = function (object) { + if (!object) { + return object; + } + for (var argsIndex = 1, argsLength = arguments.length; argsIndex < argsLength; argsIndex++) { + var iterable = arguments[argsIndex]; + if (iterable) { + for (var key in iterable) { + if (object[key] == null) { + object[key] = iterable[key]; + } + } + } + } + return object; + } + + // By default, Underscore uses ERB-style template delimiters, change the + // following template settings to use alternative delimiters. + _.templateSettings = { + evaluate : /<%([\s\S]+?)%>/g, + interpolate : /<%=([\s\S]+?)%>/g, + escape : /<%-([\s\S]+?)%>/g + }; + + // When customizing `templateSettings`, if you don't want to define an + // interpolation, evaluation or escaping regex, we need one that is + // guaranteed not to match. + var noMatch = /(.)^/; + + // Certain characters need to be escaped so that they can be put into a + // string literal. + var escapes = { + "'": "'", + '\\': '\\', + '\r': 'r', + '\n': 'n', + '\t': 't', + '\u2028': 'u2028', + '\u2029': 'u2029' + }; + + var escaper = /\\|'|\r|\n|\t|\u2028|\u2029/g; + + // JavaScript micro-templating, similar to John Resig's implementation. + // Underscore templating handles arbitrary delimiters, preserves whitespace, + // and correctly escapes quotes within interpolated code. + _.template = function(text, data, settings) { + var render; + settings = _.defaults({}, settings, _.templateSettings); + + // Combine delimiters into one regular expression via alternation. + var matcher = new RegExp([ + (settings.escape || noMatch).source, + (settings.interpolate || noMatch).source, + (settings.evaluate || noMatch).source + ].join('|') + '|$', 'g'); + + // Compile the template source, escaping string literals appropriately. + var index = 0; + var source = "__p+='"; + text.replace(matcher, function(match, escape, interpolate, evaluate, offset) { + source += text.slice(index, offset) + .replace(escaper, function(match) { return '\\' + escapes[match]; }); + + if (escape) { + source += "'+\n((__t=(" + escape + "))==null?'':_.escape(__t))+\n'"; + } + if (interpolate) { + source += "'+\n((__t=(" + interpolate + "))==null?'':__t)+\n'"; + } + if (evaluate) { + source += "';\n" + evaluate + "\n__p+='"; + } + index = offset + match.length; + return match; + }); + source += "';\n"; + + // If a variable is not specified, place data values in local scope. + if (!settings.variable) source = 'with(obj||{}){\n' + source + '}\n'; + + source = "var __t,__p='',__j=Array.prototype.join," + + "print=function(){__p+=__j.call(arguments,'');};\n" + + source + "return __p;\n"; + + try { + render = new Function(settings.variable || 'obj', '_', source); + } catch (e) { + e.source = source; + throw e; + } + + if (data) return render(data, _); + var template = function(data) { + return render.call(this, data, _); + }; + + // Provide the compiled function source as a convenience for precompilation. + template.source = 'function(' + (settings.variable || 'obj') + '){\n' + source + '}'; + + return template; + }; + + return _; + })({}); + + if (location.hostname === 'todomvc.com') { + window._gaq = [['_setAccount','UA-31081062-1'],['_trackPageview']];(function(d,t){var g=d.createElement(t),s=d.getElementsByTagName(t)[0];g.src='//www.google-analytics.com/ga.js';s.parentNode.insertBefore(g,s)}(document,'script')); + } + /* jshint ignore:end */ + + function redirect() { + if (location.hostname === 'tastejs.github.io') { + location.href = location.href.replace('tastejs.github.io/todomvc', 'todomvc.com'); + } + } + + function findRoot() { + var base = location.href.indexOf('examples/'); + return location.href.substr(0, base); + } + + function getFile(file, callback) { + if (!location.host) { + return console.info('Miss the info bar? Run TodoMVC from a server to avoid a cross-origin error.'); + } + + var xhr = new XMLHttpRequest(); + + xhr.open('GET', findRoot() + file, true); + xhr.send(); + + xhr.onload = function () { + if (xhr.status === 200 && callback) { + callback(xhr.responseText); + } + }; + } + + function Learn(learnJSON, config) { + if (!(this instanceof Learn)) { + return new Learn(learnJSON, config); + } + + var template, framework; + + if (typeof learnJSON !== 'object') { + try { + learnJSON = JSON.parse(learnJSON); + } catch (e) { + return; + } + } + + if (config) { + template = config.template; + framework = config.framework; + } + + if (!template && learnJSON.templates) { + template = learnJSON.templates.todomvc; + } + + if (!framework && document.querySelector('[data-framework]')) { + framework = document.querySelector('[data-framework]').dataset.framework; + } + + this.template = template; + + if (learnJSON.backend) { + this.frameworkJSON = learnJSON.backend; + this.frameworkJSON.issueLabel = framework; + this.append({ + backend: true + }); + } else if (learnJSON[framework]) { + this.frameworkJSON = learnJSON[framework]; + this.frameworkJSON.issueLabel = framework; + this.append(); + } + + this.fetchIssueCount(); + } + + Learn.prototype.append = function (opts) { + var aside = document.createElement('aside'); + aside.innerHTML = _.template(this.template, this.frameworkJSON); + aside.className = 'learn'; + + if (opts && opts.backend) { + // Remove demo link + var sourceLinks = aside.querySelector('.source-links'); + var heading = sourceLinks.firstElementChild; + var sourceLink = sourceLinks.lastElementChild; + // Correct link path + var href = sourceLink.getAttribute('href'); + sourceLink.setAttribute('href', href.substr(href.lastIndexOf('http'))); + sourceLinks.innerHTML = heading.outerHTML + sourceLink.outerHTML; + } else { + // Localize demo links + var demoLinks = aside.querySelectorAll('.demo-link'); + Array.prototype.forEach.call(demoLinks, function (demoLink) { + if (demoLink.getAttribute('href').substr(0, 4) !== 'http') { + demoLink.setAttribute('href', findRoot() + demoLink.getAttribute('href')); + } + }); + } + + document.body.className = (document.body.className + ' learn-bar').trim(); + document.body.insertAdjacentHTML('afterBegin', aside.outerHTML); + }; + + Learn.prototype.fetchIssueCount = function () { + var issueLink = document.getElementById('issue-count-link'); + if (issueLink) { + var url = issueLink.href.replace('https://github.com', 'https://api.github.com/repos'); + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, true); + xhr.onload = function (e) { + var parsedResponse = JSON.parse(e.target.responseText); + if (parsedResponse instanceof Array) { + var count = parsedResponse.length + if (count !== 0) { + issueLink.innerHTML = 'This app has ' + count + ' open issues'; + document.getElementById('issue-count').style.display = 'inline'; + } + } + }; + xhr.send(); + } + }; + + redirect(); + getFile('learn.json', Learn); +})(); diff --git a/examples/cyclejs/node_modules/todomvc-common/package.json b/examples/cyclejs/node_modules/todomvc-common/package.json new file mode 100644 index 0000000000..7296c94b3c --- /dev/null +++ b/examples/cyclejs/node_modules/todomvc-common/package.json @@ -0,0 +1,90 @@ +{ + "_args": [ + [ + "todomvc-common@1.0.1", + "/Users/staltz/oss/cycle/todomvc-cycle" + ] + ], + "_from": "todomvc-common@1.0.1", + "_id": "todomvc-common@1.0.1", + "_inCache": true, + "_installable": true, + "_location": "/todomvc-common", + "_npmUser": { + "email": "sindresorhus@gmail.com", + "name": "sindresorhus" + }, + "_npmVersion": "1.4.28", + "_phantomChildren": {}, + "_requested": { + "name": "todomvc-common", + "raw": "todomvc-common@1.0.1", + "rawSpec": "1.0.1", + "scope": null, + "spec": "1.0.1", + "type": "version" + }, + "_requiredBy": [ + "/" + ], + "_resolved": "https://registry.npmjs.org/todomvc-common/-/todomvc-common-1.0.1.tgz", + "_shasum": "547af687c3152bb57eb2d3f7c527a0ef44e3c831", + "_shrinkwrap": null, + "_spec": "todomvc-common@1.0.1", + "_where": "/Users/staltz/oss/cycle/todomvc-cycle", + "author": { + "name": "TasteJS" + }, + "bugs": { + "url": "https://github.com/tastejs/todomvc-common/issues" + }, + "dependencies": {}, + "description": "Common TodoMVC utilities used by our apps", + "devDependencies": {}, + "directories": {}, + "dist": { + "shasum": "547af687c3152bb57eb2d3f7c527a0ef44e3c831", + "tarball": "https://registry.npmjs.org/todomvc-common/-/todomvc-common-1.0.1.tgz" + }, + "files": [ + "base.js", + "base.css" + ], + "gitHead": "a5e821ea0bd6974a827834eeae0e5e6e05538abd", + "homepage": "https://github.com/tastejs/todomvc-common", + "keywords": [ + "todomvc", + "tastejs", + "util", + "utilities" + ], + "license": "MIT", + "main": "base.js", + "maintainers": [ + { + "email": "sindresorhus@gmail.com", + "name": "sindresorhus" + }, + { + "email": "addyosmani@gmail.com", + "name": "addyosmani" + }, + { + "email": "phartig@rdrei.net", + "name": "passy" + }, + { + "email": "sawchuk@gmail.com", + "name": "stephenplusplus" + } + ], + "name": "todomvc-common", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/tastejs/todomvc-common.git" + }, + "scripts": {}, + "version": "1.0.1" +} diff --git a/examples/cyclejs/node_modules/todomvc-common/readme.md b/examples/cyclejs/node_modules/todomvc-common/readme.md new file mode 100644 index 0000000000..7a5de5118f --- /dev/null +++ b/examples/cyclejs/node_modules/todomvc-common/readme.md @@ -0,0 +1,15 @@ +# todomvc-common + +> Common TodoMVC utilities used by our apps + + +## Install + +``` +$ npm install --save todomvc-common +``` + + +## License + +MIT © [TasteJS](http://tastejs.com) diff --git a/examples/cyclejs/package.json b/examples/cyclejs/package.json new file mode 100644 index 0000000000..78d9cdec0f --- /dev/null +++ b/examples/cyclejs/package.json @@ -0,0 +1,52 @@ +{ + "name": "todomvc-cycle", + "version": "0.0.0", + "author": "Andre Staltz", + "repository": { + "type": "git", + "url": "git@github.com:staltz/todomvc-cycle.git" + }, + "license": "MIT", + "private": true, + "contributors": [ + { + "name": "Frederik Krautwald" + }, + { + "name": "Kahlil Lechelt", + "email": "hello@kahlil.info" + } + ], + "dependencies": { + "@cycle/collection": "^0.3.0", + "@cycle/dom": "10.0.0-rc33", + "@cycle/history": "^4.0.0", + "@cycle/isolate": "1.4.x", + "@cycle/storage": "3.0.0-rc2", + "@cycle/xstream-run": "3.0.0", + "history": "^3.0.0", + "todomvc-app-css": "2.0.3", + "todomvc-common": "1.0.1", + "xstream": "^5.0.5" + }, + "devDependencies": { + "babel-plugin-transform-object-rest-spread": "^6.6.5", + "babel-preset-es2015": "^6.3.13", + "babel-register": "^6.4.3", + "babelify": "^7.2.0", + "browserify": "12.0.1", + "live-server": "^0.9.0", + "mkdirp": "^0.5.1", + "npm-run-all": "^1.4.0", + "uglify-js": "2.6.1", + "watchify": "^3.6.1" + }, + "scripts": { + "build-debug": "mkdirp js && browserify src/app.js -t babelify --outfile js/app.js", + "watch:js": "mkdirp js && watchify src/app.js -t babelify --outfile js/app.js -dv", + "serve": "live-server ./", + "uglify": "uglifyjs js/app.js -o js/app.min.js", + "build": "npm run build-debug && npm run uglify", + "start": "npm-run-all --parallel watch:js serve" + } +} diff --git a/examples/cyclejs/src/app.js b/examples/cyclejs/src/app.js new file mode 100644 index 0000000000..e725549619 --- /dev/null +++ b/examples/cyclejs/src/app.js @@ -0,0 +1,28 @@ +import {run} from '@cycle/xstream-run'; +import {makeDOMDriver} from '@cycle/dom'; +import {makeHistoryDriver} from '@cycle/history' +import {createHistory} from 'history'; +import storageDriver from '@cycle/storage'; +// THE MAIN FUNCTION +// This is the todo list component. +import TaskList from './components/TaskList/index'; + +const main = TaskList; + +// THE ENTRY POINT +// This is where the whole story starts. +// `run` receives a main function and an object +// with the drivers. +run(main, { + // THE DOM DRIVER + // `makeDOMDriver(container)` from Cycle DOM returns a + // driver function to interact with the DOM. + DOM: makeDOMDriver('.todoapp', {transposition: true}), + // THE HISTORY DRIVER + // A driver to interact with browser history + History: makeHistoryDriver(createHistory(), {capture: true}), + // THE STORAGE DRIVER + // The storage driver which can be used to access values for + // local- and sessionStorage keys as streams. + storage: storageDriver +}); diff --git a/examples/cyclejs/src/components/Task/index.js b/examples/cyclejs/src/components/Task/index.js new file mode 100644 index 0000000000..64613a8a20 --- /dev/null +++ b/examples/cyclejs/src/components/Task/index.js @@ -0,0 +1,20 @@ +import intent from './intent'; +import model from './model'; +import view from './view'; + +// THE TODO ITEM FUNCTION +// This is a simple todo item component, +// structured with the MVI-pattern. +function Task(sources) { + let action$ = intent(sources); + let state$ = model(sources.props$, action$); + let vtree$ = view(state$); + + return { + DOM: vtree$, + action$, + state$ + }; +} + +export default Task; diff --git a/examples/cyclejs/src/components/Task/intent.js b/examples/cyclejs/src/components/Task/intent.js new file mode 100644 index 0000000000..30c662a1a5 --- /dev/null +++ b/examples/cyclejs/src/components/Task/intent.js @@ -0,0 +1,40 @@ +import xs from 'xstream'; +import {ENTER_KEY, ESC_KEY} from '../../utils'; + +// THE TODO ITEM INTENT +// This intent function returns a stream of all the different, +// actions that can be taken on a todo. +function intent(sources) { + // THE INTENT MERGE + // Merge all actions into one stream. + return xs.merge( + // THE DESTROY ACTION STREAM + sources.DOM.select('.destroy').events('click') + .mapTo({type: 'destroy'}), + + // THE TOGGLE ACTION STREAM + sources.DOM.select('.toggle').events('change') + .map(ev => ev.target.checked) + .map(payload => ({type: 'toggle', payload})), + sources.action$ + .filter(action => action.type === 'toggleAll') + .map(action => ({...action, type: 'toggle'})), + + // THE START EDIT ACTION STREAM + sources.DOM.select('label').events('dblclick') + .mapTo({type: 'startEdit'}), + + // THE ESC KEY ACTION STREAM + sources.DOM.select('.edit').events('keyup') + .filter(ev => ev.keyCode === ESC_KEY) + .mapTo({type: 'cancelEdit'}), + + // THE ENTER KEY ACTION STREAM + sources.DOM.select('.edit').events('keyup') + .filter(ev => ev.keyCode === ENTER_KEY) + .compose(s => xs.merge(s, sources.DOM.select('.edit').events('blur', true))) + .map(ev => ({title: ev.target.value, type: 'doneEdit'})) + ); +} + +export default intent; diff --git a/examples/cyclejs/src/components/Task/model.js b/examples/cyclejs/src/components/Task/model.js new file mode 100644 index 0000000000..474f16141e --- /dev/null +++ b/examples/cyclejs/src/components/Task/model.js @@ -0,0 +1,60 @@ +import xs from 'xstream'; + +function makeReducer$(action$) { + let startEditReducer$ = action$ + .filter(action => action.type === 'startEdit') + .mapTo(function startEditReducer(data) { + return { + ...data, + editing: true + }; + }); + + let doneEditReducer$ = action$ + .filter(action => action.type === 'doneEdit') + .map(action => function doneEditReducer(data) { + return { + ...data, + title: action.payload, + editing: false + }; + }); + + let cancelEditReducer$ = action$ + .filter(action => action.type === 'cancelEdit') + .mapTo(function cancelEditReducer(data) { + return { + ...data, + editing: false + }; + }); + + let toggleReducer$ = action$ + .filter(action => action.type === 'toggle') + .map(action => function toggleReducer(data) { + return { + ...data, + completed: action.payload + }; + }); + + return xs.merge( + startEditReducer$, + doneEditReducer$, + cancelEditReducer$, + toggleReducer$ + ); +} + +function model(props$, action$) { + // THE SANITIZED PROPERTIES + // If the list item has no data set it as empty and not completed. + let sanitizedProps$ = props$.startWith({title: '', completed: false}); + let reducer$ = makeReducer$(action$); + + return sanitizedProps$.map(props => + reducer$.fold((data, reducer) => reducer(data), props) + ).flatten().remember(); +} + +export default model; diff --git a/examples/cyclejs/src/components/Task/view.js b/examples/cyclejs/src/components/Task/view.js new file mode 100644 index 0000000000..3f60c5450e --- /dev/null +++ b/examples/cyclejs/src/components/Task/view.js @@ -0,0 +1,34 @@ +import {button, div, input, label, li} from '@cycle/dom'; + +function view(state$) { + return state$.map(({title, completed, editing}) => { + let todoRootClasses = { + completed, + editing, + }; + + return li('.todoRoot', {class: todoRootClasses}, [ + div('.view', [ + input('.toggle', { + props: {type: 'checkbox', checked: completed}, + }), + label(title), + button('.destroy') + ]), + input('.edit', { + props: {type: 'text'}, + hook: { + update: (oldVNode, {elm}) => { + elm.value = title; + if (editing) { + elm.focus(); + elm.selectionStart = elm.value.length; + } + } + } + }) + ]); + }); +} + +export default view; diff --git a/examples/cyclejs/src/components/TaskList/index.js b/examples/cyclejs/src/components/TaskList/index.js new file mode 100644 index 0000000000..c261c32f70 --- /dev/null +++ b/examples/cyclejs/src/components/TaskList/index.js @@ -0,0 +1,106 @@ +import xs from 'xstream'; +import isolate from '@cycle/isolate' +import intent from './intent'; +import model from './model'; +import view from './view'; +import deserialize from './storage-source'; +import serialize from './storage-sink'; +import Task from '../Task/index'; +import Collection from '@cycle/collection'; + +// THE TASKLIST COMPONENT +// This is the TaskList component which is being exported below. +function TaskList(sources) { + // THE LOCALSTORAGE STREAM + // Here we create a localStorage stream that only streams + // the first value read from localStorage in order to + // supply the application with initial state. + let localStorage$ = sources.storage.local.getItem('todos-cycle').take(1); + // THE INITIAL TODO DATA + // The `deserialize` function takes the serialized JSON stored in localStorage + // and turns it into a stream sending a JSON object. + let sourceTodosData$ = deserialize(localStorage$); + // THE INTENT (MVI PATTERN) + // Pass relevant sources to the intent function, which set up + // streams that model the users actions. + let action$ = intent(sources.DOM, sources.History); + // THE MODEL (MVI PATTERN) + // Actions get passed to the model function which transforms the data + // coming through and prepares the data for the view. + let state$ = model(action$, sourceTodosData$); + // THE ITEM ADDITION STREAM + // Emits objects of sources specific to each item. + // Merges stored items with new items + let add$ = xs.merge( + sourceTodosData$ + .map(data => data.list.map(props => ({props$: xs.of(props)}))), + action$ + .filter(action => action.type === 'insertTodo') + .map(action => ({ + props$: xs.of({ + title: action.payload, + completed: false + }) + })) + ); + // THE ITEM REMOVAL SELECTOR FUNCTION + // This function takes item's sinks and returns a stream representing + // its removal. Merges internal removals and `deleteCompleteds` actions + function removeSelector(itemSinks) { + let deleteCompleteds$ = action$ + .filter(action => action.type === 'deleteCompleteds'); + return xs.merge( + // Consider deleteCompleteds$ only if the task is completed. + // analogue of rx pausable + itemSinks.state$ + .map(state => deleteCompleteds$.filter(() => state.completed)) + .flatten(), + itemSinks.action$ + .filter(action => action.type === 'destroy') + ); + } + // THE COLLECTION STREAM + // Collection function takes a component function, a common sources object, + // a stream of item additions, and a selector function from item sinks to + // a stream of removals + let list$ = Collection( + Task, + { + DOM: sources.DOM, + action$: action$ + .filter(action => action.type === 'toggleAll') + }, + add$, + removeSelector + ); + // THE COMBINED CHILDREN VTREE AND STATE STREAMS + let todoVtrees$ = Collection.pluck(list$, itemSinks => itemSinks.DOM); + let todoStates$ = Collection.pluck(list$, itemSinks => itemSinks.state$); + + let amendedState$ = xs.combine(state$, todoVtrees$, todoStates$) + .map(([parentState, todoVtrees, todoStates]) => ({ + ...parentState, + list: todoStates.map((state, i) => ({ + ...state, + todoItem: {DOM: todoVtrees[i]} + })) + })); + // THE VIEW (MVI PATTERN) + // We render state as markup for the DOM. + let vdom$ = view(amendedState$); + // WRITE TO LOCALSTORAGE + // The latest state is written to localStorage. + let storage$ = serialize(todoStates$).map((state) => ({ + key: 'todos-cycle', value: state + })); + // COMPLETE THE CYCLE + // Write the virtual dom stream to the DOM and write the + // storage stream to localStorage. + let sinks = { + DOM: vdom$, + storage: storage$, + }; + return sinks; +} + +export default TaskList; diff --git a/examples/cyclejs/src/components/TaskList/intent.js b/examples/cyclejs/src/components/TaskList/intent.js new file mode 100644 index 0000000000..6a65c70fa9 --- /dev/null +++ b/examples/cyclejs/src/components/TaskList/intent.js @@ -0,0 +1,52 @@ +import xs from 'xstream'; +import dropRepeats from 'xstream/extra/dropRepeats'; +import {ENTER_KEY, ESC_KEY} from '../../utils'; + +// THE INTENT FOR THE LIST +export default function intent(DOMSource, History) { + return xs.merge( + // THE ROUTE STREAM + // A stream that provides the path whenever the route changes. + History + .startWith({pathname: '/'}) + .map(location => location.pathname) + .compose(dropRepeats()) + .map(payload => ({type: 'changeRoute', payload})), + + // THE URL STREAM + // A stream of URL clicks in the app + DOMSource.select('a').events('click') + .map(event => event.target.hash.replace('#', '')) + .map(payload => ({type: 'url', payload})), + + // CLEAR INPUT STREAM + // A stream of ESC key strokes in the `.new-todo` field. + DOMSource.select('.new-todo').events('keydown') + .filter(ev => ev.keyCode === ESC_KEY) + .map(payload => ({type: 'clearInput', payload})), + + // ENTER KEY STREAM + // A stream of ENTER key strokes in the `.new-todo` field. + DOMSource.select('.new-todo').events('keydown') + // Trim value and only let the data through when there + // is anything but whitespace in the field and the ENTER key was hit. + .filter(ev => { + let trimmedVal = String(ev.target.value).trim(); + return ev.keyCode === ENTER_KEY && trimmedVal; + }) + // Return the trimmed value. + .map(ev => String(ev.target.value).trim()) + .map(payload => ({type: 'insertTodo', payload})), + + // TOGGLE ALL STREAM + // Create a stream out of the clicks on the `.toggle-all` button. + DOMSource.select('.toggle-all').events('click') + .map(ev => ev.target.checked) + .map(payload => ({type: 'toggleAll', payload})), + + // DELETE COMPLETED TODOS STREAM + // A stream of click events on the `.clear-completed` element. + DOMSource.select('.clear-completed').events('click') + .mapTo({type: 'deleteCompleteds'}) + ); +}; diff --git a/examples/cyclejs/src/components/TaskList/model.js b/examples/cyclejs/src/components/TaskList/model.js new file mode 100644 index 0000000000..1df793bba9 --- /dev/null +++ b/examples/cyclejs/src/components/TaskList/model.js @@ -0,0 +1,62 @@ +import xs from 'xstream'; +import concat from 'xstream/extra/concat'; + +// A helper function that provides filter functions +// depending on the route value. +function getFilterFn(route) { + switch (route) { + case '/active': return (task => task.completed === false); + case '/completed': return (task => task.completed === true); + default: return () => true; // allow anything + } +} + +// MAKE REDUCER STREAM +// A function that takes the actions on the todo list +// and returns a stream of "reducers": functions that expect the current +// todosData (the state) and return a new version of todosData. +function makeReducer$(action$) { + let clearInputReducer$ = action$ + .filter(a => a.type === 'clearInput') + .mapTo(function clearInputReducer(todosData) { + return todosData; + }); + + let changeRouteReducer$ = action$ + .filter(a => a.type === 'changeRoute') + .map(a => a.payload) + .startWith('/') + .map(path => { + let filterFn = getFilterFn(path); + return function changeRouteReducer(todosData) { + todosData.filter = path.replace('/', '').trim(); + todosData.filterFn = filterFn; + return todosData; + }; + }); + + return xs.merge( + clearInputReducer$, + changeRouteReducer$ + ); +} + +// THIS IS THE MODEL FUNCTION +// It expects the actions coming in from the sources +function model(action$, sourceTodosData$) { + // THE BUSINESS LOGIC + // Actions are passed to the `makeReducer$` function + // which creates a stream of reducer functions that needs + // to be applied on the todoData when an action happens. + let reducer$ = makeReducer$(action$); + + // RETURN THE MODEL DATA + return sourceTodosData$.map(sourceTodosData => + reducer$.fold((todosData, reducer) => reducer(todosData), sourceTodosData) + ).flatten() + // Make this remember its latest event, so late listeners + // will be updated with the latest state. + .remember(); +} + +export default model; diff --git a/examples/cyclejs/src/components/TaskList/storage-sink.js b/examples/cyclejs/src/components/TaskList/storage-sink.js new file mode 100644 index 0000000000..eaa75c64e2 --- /dev/null +++ b/examples/cyclejs/src/components/TaskList/storage-sink.js @@ -0,0 +1,14 @@ +// Turn the data object that contains +// the todos into a string for localStorage. +export default function serialize(todos$) { + return todos$.map(todosData => JSON.stringify( + { + list: todosData.map(todoData => + ({ + title: todoData.title, + completed: todoData.completed + }) + ) + } + )); +}; diff --git a/examples/cyclejs/src/components/TaskList/storage-source.js b/examples/cyclejs/src/components/TaskList/storage-source.js new file mode 100644 index 0000000000..6743553642 --- /dev/null +++ b/examples/cyclejs/src/components/TaskList/storage-source.js @@ -0,0 +1,30 @@ +function merge() { + let result = {}; + for (let i = 0; i < arguments.length; i++) { + let object = arguments[i]; + for (let key in object) { + if (object.hasOwnProperty(key)) { + result[key] = object[key]; + } + } + } + return result; +} + +let safeJSONParse = str => JSON.parse(str) || {}; + +let mergeWithDefaultTodosData = todosData => { + return merge({ + list: [], + filter: '', + filterFn: () => true, // allow anything + }, todosData); +} + +// Take localStorage todoData stream and transform into +// a JavaScript object. Set default data. +export default function deserialize(localStorageValue$) { + return localStorageValue$ + .map(safeJSONParse) + .map(mergeWithDefaultTodosData); +}; diff --git a/examples/cyclejs/src/components/TaskList/view.js b/examples/cyclejs/src/components/TaskList/view.js new file mode 100644 index 0000000000..a359e95c82 --- /dev/null +++ b/examples/cyclejs/src/components/TaskList/view.js @@ -0,0 +1,84 @@ +import {a, button, div, footer, h1, header, input, li, + section, span, strong, ul} from '@cycle/dom'; + +function renderHeader() { + return header('.header', [ + h1('todos'), + input('.new-todo', { + props: { + type: 'text', + placeholder: 'What needs to be done?', + autofocus: true, + name: 'newTodo' + }, + hook: { + update: (oldVNode, {elm}) => { + elm.value = ''; + }, + }, + }) + ]); +} + +function renderMainSection(todosData) { + let allCompleted = todosData.list.reduce((x, y) => x && y.completed, true); + let sectionStyle = {'display': todosData.list.length ? '' : 'none'}; + + return section('.main', {style: sectionStyle}, [ + input('.toggle-all', { + props: {type: 'checkbox', checked: allCompleted}, + }), + ul('.todo-list', todosData.list + .filter(todosData.filterFn) + .map(data => data.todoItem.DOM) + ) + ]); +} + +function renderFilterButton(todosData, filterTag, path, label) { + return li([ + a({ + props: {href: path}, + class: {selected: todosData.filter === filterTag} + }, label) + ]); +} + +function renderFooter(todosData) { + let amountCompleted = todosData.list + .filter(todoData => todoData.completed) + .length; + let amountActive = todosData.list.length - amountCompleted; + let footerStyle = {'display': todosData.list.length ? '' : 'none'}; + + return footer('.footer', {style: footerStyle}, [ + span('.todo-count', [ + strong(String(amountActive)), + ' item' + (amountActive !== 1 ? 's' : '') + ' left' + ]), + ul('.filters', [ + renderFilterButton(todosData, '', '/', 'All'), + renderFilterButton(todosData, 'active', '/active', 'Active'), + renderFilterButton(todosData, 'completed', '/completed', 'Completed'), + ]), + (amountCompleted > 0 ? + button('.clear-completed', 'Clear completed (' + amountCompleted + ')') + : null + ) + ]) +} + +// THE VIEW +// This function expects the stream of todosData +// from the model function and turns it into a +// virtual DOM stream that is then ultimately returned into +// the DOM sink in the index.js. +export default function view(todos$) { + return todos$.map(todos => + div([ + renderHeader(), + renderMainSection(todos), + renderFooter(todos) + ]) + ); +}; diff --git a/examples/cyclejs/src/utils.js b/examples/cyclejs/src/utils.js new file mode 100644 index 0000000000..68033e65ed --- /dev/null +++ b/examples/cyclejs/src/utils.js @@ -0,0 +1,4 @@ +const ENTER_KEY = 13; +const ESC_KEY = 27; + +export {ENTER_KEY, ESC_KEY}; diff --git a/examples/effector/.editorconfig b/examples/effector/.editorconfig new file mode 100644 index 0000000000..86c8f59f7d --- /dev/null +++ b/examples/effector/.editorconfig @@ -0,0 +1,15 @@ +root = true + +[*] +indent_style = tab +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[package.json] +indent_style = space +indent_size = 2 + +[*.md] +trim_trailing_whitespace = false diff --git a/examples/effector/.gitattributes b/examples/effector/.gitattributes new file mode 100644 index 0000000000..176a458f94 --- /dev/null +++ b/examples/effector/.gitattributes @@ -0,0 +1 @@ +* text=auto diff --git a/examples/effector/.gitignore b/examples/effector/.gitignore new file mode 100644 index 0000000000..3c3629e647 --- /dev/null +++ b/examples/effector/.gitignore @@ -0,0 +1 @@ +node_modules diff --git a/examples/effector/dist/index.092052ec.css b/examples/effector/dist/index.092052ec.css new file mode 100644 index 0000000000..78672a14b2 --- /dev/null +++ b/examples/effector/dist/index.092052ec.css @@ -0,0 +1,394 @@ +html, +body { + margin: 0; + padding: 0; +} + +button { + margin: 0; + padding: 0; + border: 0; + background: none; + font-size: 100%; + vertical-align: baseline; + font-family: inherit; + font-weight: inherit; + color: inherit; + -webkit-appearance: none; + appearance: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +body { + font: 14px 'Helvetica Neue', Helvetica, Arial, sans-serif; + line-height: 1.4em; + background: #f5f5f5; + color: #111111; + min-width: 230px; + max-width: 550px; + margin: 0 auto; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + font-weight: 300; +} + +.hidden { + display: none; +} + +.todoapp { + background: #fff; + margin: 130px 0 40px 0; + position: relative; + box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.2), + 0 25px 50px 0 rgba(0, 0, 0, 0.1); +} + +.todoapp input::-webkit-input-placeholder { + font-style: italic; + font-weight: 400; + color: rgba(0, 0, 0, 0.4); +} + +.todoapp input::-moz-placeholder { + font-style: italic; + font-weight: 400; + color: rgba(0, 0, 0, 0.4); +} + +.todoapp input::input-placeholder { + font-style: italic; + font-weight: 400; + color: rgba(0, 0, 0, 0.4); +} + +.todoapp h1 { + position: absolute; + top: -140px; + width: 100%; + font-size: 80px; + font-weight: 200; + text-align: center; + color: #b83f45; + -webkit-text-rendering: optimizeLegibility; + -moz-text-rendering: optimizeLegibility; + text-rendering: optimizeLegibility; +} + +.new-todo, +.edit { + position: relative; + margin: 0; + width: 100%; + font-size: 24px; + font-family: inherit; + font-weight: inherit; + line-height: 1.4em; + color: inherit; + padding: 6px; + border: 1px solid #999; + box-shadow: inset 0 -1px 5px 0 rgba(0, 0, 0, 0.2); + box-sizing: border-box; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.new-todo { + padding: 16px 16px 16px 60px; + height: 65px; + border: none; + background: rgba(0, 0, 0, 0.003); + box-shadow: inset 0 -2px 1px rgba(0,0,0,0.03); +} + +.main { + position: relative; + z-index: 2; + border-top: 1px solid #e6e6e6; +} + +.toggle-all { + width: 1px; + height: 1px; + border: none; /* Mobile Safari */ + opacity: 0; + position: absolute; + right: 100%; + bottom: 100%; +} + +.toggle-all + label { + display: flex; + align-items: center; + justify-content: center; + width: 45px; + height: 65px; + font-size: 0; + position: absolute; + top: -65px; + left: -0; +} + +.toggle-all + label:before { + content: '❯'; + display: inline-block; + font-size: 22px; + color: #949494; + padding: 10px 27px 10px 27px; + -webkit-transform: rotate(90deg); + transform: rotate(90deg); +} + +.toggle-all:checked + label:before { + color: #484848; +} + +.todo-list { + margin: 0; + padding: 0; + list-style: none; +} + +.todo-list li { + position: relative; + font-size: 24px; + border-bottom: 1px solid #ededed; +} + +.todo-list li:last-child { + border-bottom: none; +} + +.todo-list li.editing { + border-bottom: none; + padding: 0; +} + +.todo-list li.editing .edit { + display: block; + width: calc(100% - 43px); + padding: 12px 16px; + margin: 0 0 0 43px; +} + +.todo-list li.editing .view { + display: none; +} + +.todo-list li .toggle { + text-align: center; + width: 40px; + /* auto, since non-WebKit browsers doesn't support input styling */ + height: auto; + position: absolute; + top: 0; + bottom: 0; + margin: auto 0; + border: none; /* Mobile Safari */ + -webkit-appearance: none; + appearance: none; +} + +.todo-list li .toggle { + opacity: 0; +} + +.todo-list li .toggle + label { + /* + Firefox requires `#` to be escaped - https://bugzilla.mozilla.org/show_bug.cgi?id=922433 + IE and Edge requires *everything* to be escaped to render, so we do that instead of just the `#` - https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/7157459/ + */ + background-image: url('data:image/svg+xml;utf8,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2240%22%20height%3D%2240%22%20viewBox%3D%22-10%20-18%20100%20135%22%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%2250%22%20fill%3D%22none%22%20stroke%3D%22%23949494%22%20stroke-width%3D%223%22/%3E%3C/svg%3E'); + background-repeat: no-repeat; + background-position: center left; +} + +.todo-list li .toggle:checked + label { + background-image: url('data:image/svg+xml;utf8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2240%22%20height%3D%2240%22%20viewBox%3D%22-10%20-18%20100%20135%22%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%2250%22%20fill%3D%22none%22%20stroke%3D%22%2359A193%22%20stroke-width%3D%223%22%2F%3E%3Cpath%20fill%3D%22%233EA390%22%20d%3D%22M72%2025L42%2071%2027%2056l-4%204%2020%2020%2034-52z%22%2F%3E%3C%2Fsvg%3E'); +} + +.todo-list li label { + word-break: break-all; + padding: 15px 15px 15px 60px; + display: block; + line-height: 1.2; + transition: color 0.4s; + font-weight: 400; + color: #484848; +} + +.todo-list li.completed label { + color: #949494; + text-decoration: line-through; +} + +.todo-list li .destroy { + display: none; + position: absolute; + top: 0; + right: 10px; + bottom: 0; + width: 40px; + height: 40px; + margin: auto 0; + font-size: 30px; + color: #949494; + transition: color 0.2s ease-out; +} + +.todo-list li .destroy:hover, +.todo-list li .destroy:focus { + color: #C18585; +} + +.todo-list li .destroy:after { + content: '×'; + display: block; + height: 100%; + line-height: 1.1; +} + +.todo-list li:hover .destroy { + display: block; +} + +.todo-list li .edit { + display: none; +} + +.todo-list li.editing:last-child { + margin-bottom: -1px; +} + +.footer { + padding: 10px 15px; + height: 20px; + text-align: center; + font-size: 15px; + border-top: 1px solid #e6e6e6; +} + +.footer:before { + content: ''; + position: absolute; + right: 0; + bottom: 0; + left: 0; + height: 50px; + overflow: hidden; + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2), + 0 8px 0 -3px #f6f6f6, + 0 9px 1px -3px rgba(0, 0, 0, 0.2), + 0 16px 0 -6px #f6f6f6, + 0 17px 2px -6px rgba(0, 0, 0, 0.2); +} + +.todo-count { + float: left; + text-align: left; +} + +.todo-count strong { + font-weight: 300; +} + +.filters { + margin: 0; + padding: 0; + list-style: none; + position: absolute; + right: 0; + left: 0; +} + +.filters li { + display: inline; +} + +.filters li a { + color: inherit; + margin: 3px; + padding: 3px 7px; + text-decoration: none; + border: 1px solid transparent; + border-radius: 3px; +} + +.filters li a:hover { + border-color: #DB7676; +} + +.filters li a.selected { + border-color: #CE4646; +} + +.clear-completed, +html .clear-completed:active { + float: right; + position: relative; + line-height: 19px; + text-decoration: none; + cursor: pointer; +} + +.clear-completed:hover { + text-decoration: underline; +} + +.info { + margin: 65px auto 0; + color: #4d4d4d; + font-size: 11px; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); + text-align: center; +} + +.info p { + line-height: 1; +} + +.info a { + color: inherit; + text-decoration: none; + font-weight: 400; +} + +.info a:hover { + text-decoration: underline; +} + +/* + Hack to remove background from Mobile Safari. + Can't use it globally since it destroys checkboxes in Firefox +*/ + +@media screen and (-webkit-min-device-pixel-ratio:0) { + .toggle-all, + .todo-list li .toggle { + background: none; + } + + .todo-list li .toggle { + height: 40px; + } +} + +@media (max-width: 430px) { + .footer { + height: 50px; + } + + .filters { + bottom: 10px; + } +} + +:focus, +.toggle:focus + label, +.toggle-all:focus + label { + box-shadow: 0 0 2px 2px #CF7D7D; + outline: 0; +} + +/*# sourceMappingURL=index.092052ec.css.map */ diff --git a/examples/effector/dist/index.092052ec.css.map b/examples/effector/dist/index.092052ec.css.map new file mode 100644 index 0000000000..17ea08f6b1 --- /dev/null +++ b/examples/effector/dist/index.092052ec.css.map @@ -0,0 +1 @@ +{"mappings":"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","sources":["node_modules/todomvc-app-css/index.css"],"sourcesContent":[null],"names":[],"version":3,"file":"index.092052ec.css.map","sourceRoot":"/__parcel_source_root/"} \ No newline at end of file diff --git a/examples/effector/dist/index.5780389f.css b/examples/effector/dist/index.5780389f.css new file mode 100644 index 0000000000..976fa24762 --- /dev/null +++ b/examples/effector/dist/index.5780389f.css @@ -0,0 +1,10 @@ +/* + +app-template.css overrides + +remove this comment if used +remove this file if not + +*/ + +/*# sourceMappingURL=index.5780389f.css.map */ diff --git a/examples/effector/dist/index.5780389f.css.map b/examples/effector/dist/index.5780389f.css.map new file mode 100644 index 0000000000..2c15e674a0 --- /dev/null +++ b/examples/effector/dist/index.5780389f.css.map @@ -0,0 +1 @@ +{"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","sources":["css/app.css"],"sourcesContent":["/*\n\napp-template.css overrides\n\nremove this comment if used\nremove this file if not\n\n*/\n"],"names":[],"version":3,"file":"index.5780389f.css.map","sourceRoot":"/__parcel_source_root/"} \ No newline at end of file diff --git a/examples/effector/dist/index.69062844.js b/examples/effector/dist/index.69062844.js new file mode 100644 index 0000000000..8b1672e471 --- /dev/null +++ b/examples/effector/dist/index.69062844.js @@ -0,0 +1,3879 @@ +// modules are defined as an array +// [ module function, map of requires ] +// +// map of requires is short require name -> numeric require +// +// anything defined in a previous bundle is accessed via the +// orig method which is the require for previous bundles + +(function (modules, entry, mainEntry, parcelRequireName, globalName) { + /* eslint-disable no-undef */ + var globalObject = + typeof globalThis !== 'undefined' + ? globalThis + : typeof self !== 'undefined' + ? self + : typeof window !== 'undefined' + ? window + : typeof global !== 'undefined' + ? global + : {}; + /* eslint-enable no-undef */ + + // Save the require from previous bundle to this closure if any + var previousRequire = + typeof globalObject[parcelRequireName] === 'function' && + globalObject[parcelRequireName]; + + var cache = previousRequire.cache || {}; + // Do not use `require` to prevent Webpack from trying to bundle this call + var nodeRequire = + typeof module !== 'undefined' && + typeof module.require === 'function' && + module.require.bind(module); + + function newRequire(name, jumped) { + if (!cache[name]) { + if (!modules[name]) { + // if we cannot find the module within our internal map or + // cache jump to the current global require ie. the last bundle + // that was added to the page. + var currentRequire = + typeof globalObject[parcelRequireName] === 'function' && + globalObject[parcelRequireName]; + if (!jumped && currentRequire) { + return currentRequire(name, true); + } + + // If there are other bundles on this page the require from the + // previous one is saved to 'previousRequire'. Repeat this as + // many times as there are bundles until the module is found or + // we exhaust the require chain. + if (previousRequire) { + return previousRequire(name, true); + } + + // Try the node require function if it exists. + if (nodeRequire && typeof name === 'string') { + return nodeRequire(name); + } + + var err = new Error("Cannot find module '" + name + "'"); + err.code = 'MODULE_NOT_FOUND'; + throw err; + } + + localRequire.resolve = resolve; + localRequire.cache = {}; + + var module = (cache[name] = new newRequire.Module(name)); + + modules[name][0].call( + module.exports, + localRequire, + module, + module.exports, + this + ); + } + + return cache[name].exports; + + function localRequire(x) { + return newRequire(localRequire.resolve(x)); + } + + function resolve(x) { + return modules[name][1][x] || x; + } + } + + function Module(moduleName) { + this.id = moduleName; + this.bundle = newRequire; + this.exports = {}; + } + + newRequire.isParcelRequire = true; + newRequire.Module = Module; + newRequire.modules = modules; + newRequire.cache = cache; + newRequire.parent = previousRequire; + newRequire.register = function (id, exports) { + modules[id] = [ + function (require, module) { + module.exports = exports; + }, + {}, + ]; + }; + + Object.defineProperty(newRequire, 'root', { + get: function () { + return globalObject[parcelRequireName]; + }, + }); + + globalObject[parcelRequireName] = newRequire; + + for (var i = 0; i < entry.length; i++) { + newRequire(entry[i]); + } + + if (mainEntry) { + // Expose entry point to Node, AMD or browser globals + // Based on https://github.com/ForbesLindesay/umd/blob/master/template.js + var mainExports = newRequire(mainEntry); + + // CommonJS + if (typeof exports === 'object' && typeof module !== 'undefined') { + module.exports = mainExports; + + // RequireJS + } else if (typeof define === 'function' && define.amd) { + define(function () { + return mainExports; + }); + + // + + + diff --git a/examples/effector/index.html b/examples/effector/index.html new file mode 100644 index 0000000000..f46055bdb7 --- /dev/null +++ b/examples/effector/index.html @@ -0,0 +1,17 @@ + + + + + + Template • TodoMVC + + + + + + + + + + + diff --git a/examples/effector/js/app.js b/examples/effector/js/app.js new file mode 100644 index 0000000000..d85c87a793 --- /dev/null +++ b/examples/effector/js/app.js @@ -0,0 +1,21 @@ +import {h, spec, using} from 'effector-dom'; +import {Header} from './header'; +import {Main} from './main'; +import {Footer} from './footer'; + +export const App = () => { + // создадим section элемент + h('section', () => { + // и укажем ему класс + spec({attr: {class: 'todoapp'}}); + + // также выведем остальные части приложения + Header(); + Main(); + Footer(); + }); +}; + +using(document.body, () => { + App(); +}); diff --git a/examples/effector/js/footer.js b/examples/effector/js/footer.js new file mode 100644 index 0000000000..a8a603589c --- /dev/null +++ b/examples/effector/js/footer.js @@ -0,0 +1,65 @@ +import {h, spec} from 'effector-dom'; +import {$todos, $activeFilter, filtered, completedRemoved} from './model'; + +export const Footer = () => { + h('footer', () => { + spec({attr: {class: 'footer'}}); + + h('span', () => { // Каунтер активных задач + spec({attr: {class: 'todo-count'}}); + + const $activeCount = $todos.map( + todos => todos.filter(todo => !todo.completed).length + ); + + h('strong', {text: $activeCount}); + h('span', {text: $activeCount.map(count => count === 1 + ? ' item left' + : ' items left' + )}); + }); + + h('ul', () => { // кнопки фильтров, ничего нового + spec({attr: {class: 'filters'}}); + + h('li', () => { + h('a', { + attr: {class: $activeFilter.map(active => active === null + ? 'selected' + : false + )}, + text: 'All', + handler: {click: filtered.prepend(() => null)}, + }); + }); + + h('li', () => { + h('a', { + attr: {class: $activeFilter.map(completed => completed === false + ? 'selected' + : false + )}, + text: 'Active', + handler: {click: filtered.prepend(() => false)}, + }); + }); + + h('li', () => { + h('a', { + attr: {class: $activeFilter.map(completed => completed === true + ? 'selected' + : false + )}, + text: 'Completed', + handler: {click: filtered.prepend(() => true)}, + }); + }); + }); + + h('button', { + attr: {class: 'clear-completed'}, + text: 'Clear completed', + handler: {click: completedRemoved}, + }); + }); +}; diff --git a/examples/effector/js/header.js b/examples/effector/js/header.js new file mode 100644 index 0000000000..cfbe60cd27 --- /dev/null +++ b/examples/effector/js/header.js @@ -0,0 +1,40 @@ +import {h, spec} from 'effector-dom'; +import {createEvent, createStore, forward, sample} from 'effector'; +import {Title} from './title'; +import {appended} from './model'; + +export const Header = () => { + h('header', () => { + Title(); + + h('input', () => { + const keypress = createEvent(); + const input = createEvent(); + + // создадим фильтруемое событие, + const submit = keypress.filter({fn: e => e.key === 'Enter'}); + + // стор с текущим значением инпута + const $value = createStore('') + .on(input, (_, e) => e.target.value) + .reset(appended); // заодно очистим при отправке + + // для перенаправления события в другое в эффекторе есть forward({from, to}) + forward({ + // возьмем текущее значение $value по триггеру submit, + // и сразу сделаем фильтрацию для проверки значения + from: sample($value, submit).filter({fn: Boolean}), + to: appended, + }); + + spec({ + attr: { + class: "new-todo", + placeholder: 'What needs to be done?', + value: $value + }, + handler: {keypress, input}, + }) + }); + }); +}; diff --git a/examples/effector/js/main.js b/examples/effector/js/main.js new file mode 100644 index 0000000000..87adc12fdb --- /dev/null +++ b/examples/effector/js/main.js @@ -0,0 +1,28 @@ +// src/view/main.js +import {h, spec, list} from 'effector-dom'; +import {TodoItem} from './todoItem'; +import {$filteredTodos, allCompleted, $isAllCompleted} from './model'; + +export const Main = (a) => { + h('section', () => { + spec({attr: {class: 'main'}}); + + // выбор всех задач + h('input', { + attr: {id: 'toggle-all', class: 'toggle-all', type: 'checkbox', checked: $isAllCompleted}, + handler: {change: allCompleted} + }); + h('label', {attr: {for: 'toggle-all'}}); + + // список задач + h('ul', () => { + spec({attr: {class: "todo-list"}}); + list({ + source: $filteredTodos, + key: 'title', + fields: ['title', 'completed'] + // в fields окажутся сторы с их значениям + }, ({fields: [title, completed], key}) => TodoItem({title, completed, key})); + }); + }); +}; diff --git a/examples/effector/js/model.js b/examples/effector/js/model.js new file mode 100644 index 0000000000..4cd11944b0 --- /dev/null +++ b/examples/effector/js/model.js @@ -0,0 +1,68 @@ +// src/model.js +import {createStore, createEvent, combine} from 'effector'; +import connectLocalStorage from "effector-localstorage/sync"; + +// сторы + +const $todosLocalStorage = connectLocalStorage("todos") + .onError((err) => console.log(err)) // setup error callback +// .onChange(setCounter) // call event on external storage change + +// все задачи +export const $todos = createStore($todosLocalStorage.init([])); +$todos.watch($todosLocalStorage) + +// текущий фильтр, для простоты будет null/true/false +export const $activeFilter = createStore(null); + +// отфильтрованные задачи +export const $filteredTodos = combine( + $todos, + $activeFilter, + (todos, filter) => filter === null + ? todos + : todos.filter(todo => todo.completed === filter) +); + +// все ли завершены +export const $isAllCompleted = $todos.map((todos) => todos.every(todo => todo.completed )); + +// события + +// добавление новой задачи +export const appended = createEvent(); + +// выполнение/снятие выполнения задачи +export const toggled = createEvent(); + +// удаление задачи +export const removed = createEvent(); + +// выполнение всех задач +export const allCompleted = createEvent(); + +// удаление выполненных задач +export const completedRemoved = createEvent(); + +// фильтрация задач +export const filtered = createEvent(); +$todos + // добавление новой задачи + .on(appended, (state, title) => [...state, {title, completed: false}]) + // удаление задачи. Для простоты будем проверять title + .on(removed, (state, title) => state.filter(item => item.title !== title)) + // выполнение/снятие выполнения + .on(toggled, (state, title) => state.map(item => item.title === title + ? ({...item, completed: !item.completed}) + : item)) + // выполнение всех задач + .on(allCompleted, (state) => { const val = !$isAllCompleted.getState(); return state.map(item => item.completed === val + ? item + : ({...item, completed: val})) + }) + // удаление выполненных задач + .on(completedRemoved, state => state.filter(item => !item.completed)); + +$activeFilter + // фильтрация + .on(filtered, (_, filter) => filter); diff --git a/examples/effector/js/title.js b/examples/effector/js/title.js new file mode 100644 index 0000000000..50a811aa3d --- /dev/null +++ b/examples/effector/js/title.js @@ -0,0 +1,5 @@ +import {h} from 'effector-dom'; + +export const Title = () => { + h('h1', {text: 'todos'}); +}; diff --git a/examples/effector/js/todoItem.js b/examples/effector/js/todoItem.js new file mode 100644 index 0000000000..be80b78786 --- /dev/null +++ b/examples/effector/js/todoItem.js @@ -0,0 +1,28 @@ +import {h, spec} from 'effector-dom'; +import {toggled, removed} from './model'; + +// title и completed - сторы с конкретными значениями +export const TodoItem = ({title, completed, key}) => { + h('li', () => { + // новый наследуемый стор с классом по флагу + spec({attr: {class: completed.map(flag => flag ? 'completed' : false)}}); + + h('div', () => { + spec({attr: {class: 'view'}}); + + h('input', { + attr: {class: 'toggle', type: 'checkbox', checked: completed}, + // новое событие с предустановкой параметров + handler: {click: toggled.prepend(() => key)}, + }); + + h('label', {text: title}); + + h('button', { + attr: {class: 'destroy'}, + // новое событие с предустановкой параметров + handler: {click: removed.prepend(() => key)}, + }); + }); + }); +}; diff --git a/examples/effector/package.json b/examples/effector/package.json new file mode 100644 index 0000000000..a4de803411 --- /dev/null +++ b/examples/effector/package.json @@ -0,0 +1,12 @@ +{ + "private": true, + "dependencies": { + "effector": "^22.1.2", + "effector-dom": "0.0.15", + "effector-localstorage": "^0.5.3", + "parcel": "^2.0.1", + "serve": "^13.0.2", + "todomvc-app-css": "^2.4.1", + "todomvc-common": "^1.0.5" + } +} diff --git a/examples/flavour/.gitignore b/examples/flavour/.gitignore new file mode 100644 index 0000000000..821c38d11b --- /dev/null +++ b/examples/flavour/.gitignore @@ -0,0 +1,4 @@ +.idea +*.iml +target/ +node_modules/ \ No newline at end of file diff --git a/examples/flavour/README.md b/examples/flavour/README.md new file mode 100644 index 0000000000..e6bd010515 --- /dev/null +++ b/examples/flavour/README.md @@ -0,0 +1,7 @@ +A [TodoMVC](http://todomvc.com/) implementation in +[TeaVM](https://github.com/konsoletyper/teavm) / +[Flavour](https://github.com/konsoletyper/teavm-flavour) / +[Kotlin](http://kotlinlang.org/). + +See running example at +http://teavm.org/live-examples/todomvc/ \ No newline at end of file diff --git a/examples/flavour/index.html b/examples/flavour/index.html new file mode 100644 index 0000000000..ac96d7ffec --- /dev/null +++ b/examples/flavour/index.html @@ -0,0 +1,16 @@ + + + + + TeaVM Flavour/Kotlin • TodoMVC + + + + + + + + + diff --git a/examples/flavour/index_files/base.css b/examples/flavour/index_files/base.css new file mode 100644 index 0000000000..da65968a73 --- /dev/null +++ b/examples/flavour/index_files/base.css @@ -0,0 +1,141 @@ +hr { + margin: 20px 0; + border: 0; + border-top: 1px dashed #c5c5c5; + border-bottom: 1px dashed #f7f7f7; +} + +.learn a { + font-weight: normal; + text-decoration: none; + color: #b83f45; +} + +.learn a:hover { + text-decoration: underline; + color: #787e7e; +} + +.learn h3, +.learn h4, +.learn h5 { + margin: 10px 0; + font-weight: 500; + line-height: 1.2; + color: #000; +} + +.learn h3 { + font-size: 24px; +} + +.learn h4 { + font-size: 18px; +} + +.learn h5 { + margin-bottom: 0; + font-size: 14px; +} + +.learn ul { + padding: 0; + margin: 0 0 30px 25px; +} + +.learn li { + line-height: 20px; +} + +.learn p { + font-size: 15px; + font-weight: 300; + line-height: 1.3; + margin-top: 0; + margin-bottom: 0; +} + +#issue-count { + display: none; +} + +.quote { + border: none; + margin: 20px 0 60px 0; +} + +.quote p { + font-style: italic; +} + +.quote p:before { + content: '“'; + font-size: 50px; + opacity: .15; + position: absolute; + top: -20px; + left: 3px; +} + +.quote p:after { + content: '”'; + font-size: 50px; + opacity: .15; + position: absolute; + bottom: -42px; + right: 3px; +} + +.quote footer { + position: absolute; + bottom: -40px; + right: 0; +} + +.quote footer img { + border-radius: 3px; +} + +.quote footer a { + margin-left: 5px; + vertical-align: middle; +} + +.speech-bubble { + position: relative; + padding: 10px; + background: rgba(0, 0, 0, .04); + border-radius: 5px; +} + +.speech-bubble:after { + content: ''; + position: absolute; + top: 100%; + right: 30px; + border: 13px solid transparent; + border-top-color: rgba(0, 0, 0, .04); +} + +.learn-bar > .learn { + position: absolute; + width: 272px; + top: 8px; + left: -300px; + padding: 10px; + border-radius: 5px; + background-color: rgba(255, 255, 255, .6); + transition-property: left; + transition-duration: 500ms; +} + +@media (min-width: 899px) { + .learn-bar { + width: auto; + padding-left: 300px; + } + + .learn-bar > .learn { + left: 8px; + } +} diff --git a/examples/flavour/index_files/classes.js b/examples/flavour/index_files/classes.js new file mode 100644 index 0000000000..812e6e8095 --- /dev/null +++ b/examples/flavour/index_files/classes.js @@ -0,0 +1,1541 @@ +"use strict"; +function $rt_cls(cls){return A(cls);} +function $rt_str(str) {if (str === null) {return null;}var characters = $rt_createCharArray(str.length);var charsBuffer = characters.data;for (var i = 0; i < str.length; i = (i + 1) | 0) {charsBuffer[i] = str.charCodeAt(i) & 0xFFFF;}return B(characters);} +function $rt_ustr(str) {if (str === null) {return null;}var result = "";var sz = C(str);var array = $rt_createCharArray(sz);D(str, 0, sz, array, 0);for (var i = 0; i < sz; i = (i + 1) | 0) {result += String.fromCharCode(array.data[i]);}return result;} +function $rt_objcls() { return E; } +function $rt_nullCheck(val) {if (val === null) {$rt_throw(F());}return val;} +function $rt_intern(str) {return G(str);} +function $rt_getThread(){return H();} +function $rt_setThread(t){return I(t);} +var WQ=$rt_throw;var XQ=$rt_compare;var YQ=$rt_nullCheck;var ZQ=$rt_cls;var AR=$rt_createArray;var BR=$rt_isInstance;var CR=$rt_nativeThread;var DR=$rt_suspending;var ER=$rt_resuming;var FR=$rt_invalidPointer;var GR=$rt_s; +function E(){this.$id$=0;} +function HR(){var $r=new E();KC($r);return $r;} +function KC($t){return;} +function Ev($t){var a,b;a=$t.constructor;if(a===null){b=null;}else{b=a.classObject;if(b===null){b=new Sl;b.Xh=a;a.classObject=b;}}return b;} +function Sz($t){return Xo($t);} +function Jp($t,a){return $t!==a?0:1;} +function Dx($t){var a,b,c,d,e,f,g,h,i,j,k;a=new Sg;S_$callClinit();a.ke=$rt_createCharArray(16);b=$t.constructor;if(b===null){c=null;}else{c=b.classObject;if(c===null){c=new Sl;c.Xh=b;b.classObject=c;}}if(c.bh===null){b=$rt_str(c.Xh.$meta.name);Vc_$callClinit();c.bh=b;}b=c.bh;WA(a,a.Ii,b);b=GR(0);WA(a,a.Ii,b);d=Xo($t);Dd_$callClinit();e=16;b=new S;b.ke=$rt_createCharArray(20);f=RI(b,b.Ii,d,e);b=new Vc;g=f.ke;e=0;h=f.Ii;Vc_$callClinit();b.pb=$rt_createCharArray(h);i=0;while(i=2&&b<=36)){b=10;}c=new S;d=20;S_$callClinit();c.ke=$rt_createCharArray(d);e=RI(c,c.Ii,a,b);c=new Vc;f=e.ke;a=0;b=e.Ii;Vc_$callClinit();c.pb=$rt_createCharArray(b);d=0;while(d= -128&&a<=127){Vt();return WR.data[a+128|0];}b=new Dd;b.Wj=a;return b;} +function Vt(){var a,b,c,d;Dd_$callClinit();if(WR===null){WR=AR(Dd,256);a=0;while(ad){a=new Pc;a.Ce=1;a.gl=1;WQ(a);}a=BS(b.pb,c,d-c|0);}return FH($t,a);} +function FH($t,a){var b,c,d,e,f,g,h,i,j;b=$t.constructor;if(b===null){c=null;}else{c=b.classObject;if(c===null){c=new Sl;c.Xh=b;b.classObject=c;}}if(c.bh===null){b=$rt_str(c.Xh.$meta.name);Vc_$callClinit();c.bh=b;}a:{b:{c:{d=c.bh;switch(Nt(d)){case 1344771639:break;case -1064886025:break c;default:break b;}if(XG(d,GR(2))==0){break b;}b=IP(ZQ(Xc));break a;}if(XG(d,GR(3))!=0){b=IP(ZQ(Xc));break a;}}b=null;}if(b!==null){return HI(b,a,$t);}a=new Fd;b=new Sg;S_$callClinit();e=16;b.ke=$rt_createCharArray(e);WA(b, +b.Ii,GR(4));d=$t.constructor;if(d===null){f=null;}else{f=d.classObject;if(f===null){f=new Sl;f.Xh=d;d.classObject=f;}}if(f.bh===null){f.bh=$rt_str(f.Xh.$meta.name);}d=f.bh;WA(b,b.Ii,d);d=new Vc;g=b.ke;e=0;h=b.Ii;d.pb=$rt_createCharArray(h);i=0;while(i=e){f= -1;break a;}if(f<0){break;}if(f>=b.lj){break;}c:{g=b.gk.data[f];if(a===null){if(g!==null){break c;}else{break b;}}if((a!==g?0:1)!=0){break b;}}f=f+1|0;}a=new Pc;KF(a);WQ(a);}}if(f>=0){Zz(b,f);}Ny($t,c);} +function MK($t){var a,b,c,d,e,f,g,h;a=$t.pl;if(a===null){a=new Sm;b=new Pi;c=10;b.gk=AR(E,c);a.qj=b;$t.pl=a;}d=a.qj;Jf_$callClinit();b=QS;e=GR(8);if(d===null){AP(e);}e=GR(9);if(b===null){AP(e);}KQ(d,b,1);b=$t.uc;f=MS;e=new Cm;d=new Jn;c=16;g=0.75;KC(d);c=CQ(c);d.qd=0;d.Ae=AR(Ah,c);d.ql=g;d.Pj=d.Ae.data.length*d.ql|0;e.Qg=d;d=new Xk;h=new Jn;c=16;g=0.75;VA(h);c=CQ(c);h.qd=0;h.Ae=YF(h,c);h.ql=g;By(h);KC(d);d.ci=h;e.Ag=d;e=OQ(e,a);d=$rt_str(JSON.stringify(e));b.setItem($rt_ustr(f),$rt_ustr(d));} +function ZA($t){var a,b,c;a=$t.pl;if(a===null){a=new Sm;b=new Pi;c=10;b.gk=AR(E,c);a.qj=b;$t.pl=a;}return a;} +function Ny($t,a){var b,c,d,e,f,g,h;b=$t.uc;c=MS;d=new Cm;e=new Jn;f=16;g=0.75;f=CQ(f);e.qd=0;e.Ae=AR(Ah,f);e.ql=g;e.Pj=e.Ae.data.length*e.ql|0;d.Qg=e;e=new Xk;h=new Jn;f=16;g=0.75;KC(h);f=CQ(f);h.qd=0;h.Ae=AR(Ah,f);h.ql=g;h.Pj=h.Ae.data.length*h.ql|0;e.ci=h;d.Ag=e;a=OQ(d,a);d=$rt_str(JSON.stringify(a));b.setItem($rt_ustr(c),$rt_ustr(d));} +function Ak($t){Nc_$callClinit();$t.uc=window.localStorage;} +function FD(){var a;a=new Ej;NS=a;MS=GR(6);} +function Sw(){Nc_$callClinit();return MS;} +function Nd(){E.call(this);} +function Od(){Sb.call(this);} +function RS(b){var $r=new Od();QA($r,b);return $r;} +function QA($t,a){$t.Ce=1;$t.gl=1;$t.Xf=a;} +function Tb(){Od.call(this);} +function SS(b){var $r=new Tb();Kq($r,b);return $r;} +function Kq($t,a){$t.Ce=1;$t.gl=1;$t.Xf=a;} +function He(){E.call(this);} +function R(){E.call(this);} +function CP(a){return JP(a)?1:0;} +function BQ(a){return VQ(a)?1:0;} +function DP(a){return typeof a=='string'?1:0;} +function XP(a){return a===null?1:0;} +function PP(a){return typeof a=='boolean'?1:0;} +function PN(a){return $rt_str(JSON.stringify(a));} +function JP(a){return typeof a=='object'&&a instanceof Array;} +function VQ(a){return typeof a=='object'&&!(a instanceof Array);} +function Sk(){R.call(this);} +function MO(a){return a.length;} +function Fn(){Pc.call(this);} +function TS(){var $r=new Fn();QD($r);return $r;} +function QD($t){$t.Ce=1;$t.gl=1;} +function Ci(){E.call(this);this.Bc=null;} +function US(){var $r=new Ci();Or($r);return $r;} +function Or($t){var a,b,c;a=new Jn;b=16;c=0.75;b=CQ(b);a.qd=0;a.Ae=AR(Ah,b);a.ql=c;a.Pj=a.Ae.data.length*a.ql|0;$t.Bc=a;} +function Zb(){E.call(this);} +function Dc(){E.call(this);} +function VS(){var $r=new Dc();MB($r);return $r;} +function MB($t){} +function S(){var a=this;E.call(a);a.ke=null;a.Ii=0;} +var WS=null;var XS=null;var YS=null;var ZS=null;var AT=null;var BT=null;var CT=null;function S_$callClinit(){S_$callClinit=function(){}; +Xv();} +function DT(){var $r=new S();Ti($r);return $r;} +function ET(b){var $r=new S();Ih($r,b);return $r;} +function FT(b){var $r=new S();Hn($r,b);return $r;} +function GT(b){var $r=new S();Fk($r,b);return $r;} +function Ti($t){var a;S_$callClinit();a=16;$t.ke=$rt_createCharArray(a);} +function Ih($t,a){S_$callClinit();$t.ke=$rt_createCharArray(a);} +function Hn($t,a){var b;S_$callClinit();$t.ke=$rt_createCharArray(a.pb.data.length);b=0;while(b<$t.ke.data.length){$t.ke.data[b]=Wt(a,b);b=b+1|0;}$t.Ii=a.pb.data.length;} +function Fk($t,a){var b;S_$callClinit();$t.ke=$rt_createCharArray(a.pb.data.length);b=0;while(b<$t.ke.data.length){$t.ke.data[b]=Wt(a,b);b=b+1|0;}$t.Ii=a.pb.data.length;} +function Ou($t,a){WA($t,$t.Ii,a);return $t;} +function WA($t,a,b){var c,d,e;if(a>=0&&a<=$t.Ii){if(b===null){b=GR(10);Vc_$callClinit();b=b;}else if((b.pb.data.length!=0?0:1)!=0){return $t;}Lv($t,$t.Ii+b.pb.data.length|0);c=$t.Ii-1|0;while(c>=a){$t.ke.data[c+b.pb.data.length|0]=$t.ke.data[c];c=c+ -1|0;}$t.Ii=$t.Ii+b.pb.data.length|0;c=0;while(cb){j=g;break a;}h=h+1|0;if(j>i){break;}g=j;}}if(d==0){h=h+1|0;}Qs($t,a,a+h|0);if(d!=0){d=a;}else{e=$t.ke.data;d=a+1|0;e[a]=45;}while(j>0){e=$t.ke.data;a=d+1|0;e[d]=JL(b/j|0,c);b=b%j|0;j=j/c|0;d=a;}}return $t;} +function QI($t,a){var b,c,d,e,f,g,h,i;b=$t.Ii;if(a===null){a=GR(10);}else{c=new Sg;d=16;KC(c);c.ke=$rt_createCharArray(d);e=a.constructor;if(e===null){f=null;}else{f=e.classObject;if(f===null){f=new Sl;KC(f);f.Xh=e;e.classObject=f;}}if(f.bh===null){e=$rt_str(f.Xh.$meta.name);Vc_$callClinit();f.bh=e;}LL(c,c.Ii,f.bh);LL(c,c.Ii,GR(0));d=Xo(a);Dd_$callClinit();g=16;a=new S;h=20;KC(a);a.ke=$rt_createCharArray(h);e=RI(a,a.Ii,d,g);LL(c,c.Ii,BS(e.ke,0,e.Ii));a=new Vc;i=c.ke;d=0;g=c.Ii;KC(a);a.pb=$rt_createCharArray(g);h +=0;while(h=a){return;}if($t.ke.data.length>=1073741823){b=2147483647;}else{c=$t.ke.data.length*2|0;b=5;if(c>b){b=c;}if(a>b){b=a;}}$t.ke=DO($t.ke,b);} +function Br($t){var a,b,c,d,e,f;a=new Vc;b=$t.ke;c=0;d=$t.Ii;Vc_$callClinit();a.pb=$rt_createCharArray(d);e=0;while(e=0){$t.ke.data[b+d|0]=$t.ke.data[a+d|0];d=d+ -1|0;}$t.Ii=$t.Ii+(b-a|0)|0;} +function Xv(){var a,b,c,d,e,f,g,h;a=$rt_createFloatArray(6);b=a.data;b[0]=10.0;b[1]=100.0;b[2]=10000.0;b[3]=1.0E8;b[4]=1.00000003E16;b[5]=1.0E32;WS=a;c=$rt_createDoubleArray(9);d=c.data;d[0]=10.0;d[1]=100.0;d[2]=10000.0;d[3]=1.0E8;d[4]=1.0E16;d[5]=1.0E32;d[6]=1.0E64;d[7]=1.0E128;d[8]=1.0E256;XS=c;a=$rt_createFloatArray(6);b=a.data;b[0]=0.1;b[1]=0.01;b[2]=1.0E-4;b[3]=1.0E-8;b[4]=1.0E-16;b[5]=1.0E-32;YS=a;c=$rt_createDoubleArray(9);d=c.data;d[0]=0.1;d[1]=0.01;d[2]=1.0E-4;d[3]=1.0E-8;d[4]=1.0E-16;d[5]=1.0E-32;d[6] +=1.0E-64;d[7]=1.0E-128;d[8]=1.0E-256;ZS=c;e=$rt_createIntArray(10);f=e.data;f[0]=1;f[1]=10;f[2]=100;f[3]=1000;f[4]=10000;f[5]=100000;f[6]=1000000;f[7]=10000000;f[8]=100000000;f[9]=1000000000;AT=e;g=$rt_createLongArray(19);h=g.data;h[0]=Long_fromInt(1);h[1]=Long_fromInt(10);h[2]=Long_fromInt(100);h[3]=Long_fromInt(1000);h[4]=Long_fromInt(10000);h[5]=Long_fromInt(100000);h[6]=Long_fromInt(1000000);h[7]=Long_fromInt(10000000);h[8]=Long_fromInt(100000000);h[9]=Long_fromInt(1000000000);h[10]=new Long(1410065408, 2);h[11] +=new Long(1215752192, 23);h[12]=new Long(3567587328, 232);h[13]=new Long(1316134912, 2328);h[14]=new Long(276447232, 23283);h[15]=new Long(2764472320, 232830);h[16]=new Long(1874919424, 2328306);h[17]=new Long(1569325056, 23283064);h[18]=new Long(2808348672, 232830643);BT=g;g=$rt_createLongArray(6);h=g.data;h[0]=Long_fromInt(1);h[1]=Long_fromInt(10);h[2]=Long_fromInt(100);h[3]=Long_fromInt(10000);h[4]=Long_fromInt(100000000);h[5]=new Long(1874919424, 2328306);CT=g;} +function Af(){E.call(this);} +function Sg(){S.call(this);} +function HT(){var $r=new Sg();RJ($r);return $r;} +function IT(b){var $r=new Sg();Fq($r,b);return $r;} +function RJ($t){var a;S_$callClinit();a=16;$t.ke=$rt_createCharArray(a);} +function Fq($t,a){var b;S_$callClinit();$t.ke=$rt_createCharArray(a.pb.data.length);b=0;while(b<$t.ke.data.length){$t.ke.data[b]=Wt(a,b);b=b+1|0;}$t.Ii=a.pb.data.length;} +function Cq($t,a){WA($t,$t.Ii,a);return $t;} +function Mq($t,a){var b,c,d,e,f;b=$t.Ii;if(a===null){a=GR(10);}else{c=new Sg;S_$callClinit();Ih(c,16);d=a.constructor;if(d===null){e=null;}else{e=d.classObject;if(e===null){e=JT(d);}}if(e.bh===null){d=$rt_str(e.Xh.$meta.name);Vc_$callClinit();e.bh=d;}OM(c,c.Ii,e.bh);OM(c,c.Ii,GR(0));f=Xo(a);Dd_$callClinit();OM(c,c.Ii,Br(Ts(ET(20),f,16)));a=BS(c.ke,0,c.Ii);}Vc_$callClinit();WA($t,b,a);return $t;} +function YK($t,a,b){var c,d,e,f,g,h,i;if(b===null){b=GR(10);}else{c=new Sg;S_$callClinit();d=16;c.ke=$rt_createCharArray(d);e=b.constructor;if(e===null){f=null;}else{f=e.classObject;if(f===null){f=new Sl;f.Xh=e;e.classObject=f;}}if(f.bh===null){e=$rt_str(f.Xh.$meta.name);Vc_$callClinit();f.bh=e;}WA(c,c.Ii,f.bh);WA(c,c.Ii,GR(0));d=Xo(b);Dd_$callClinit();g=16;b=new S;b.ke=$rt_createCharArray(20);e=RI(b,b.Ii,d,g);b=new Vc;h=e.ke;d=0;g=e.Ii;Vc_$callClinit();b.pb=$rt_createCharArray(g);i=0;while(i=i?0:1)==0){break a;}if(h=f.lj){break;}e.push(MN(b.lf,a,f.gk.data[g]));g=j;}a=new Pc;Kx(a);WQ(a);}}a=e;}b=c;a=a;b["data"]=a;return c;} +function Vs($t){} +function Xm(){E.call(this);} +function RT(){var $r=new Xm();BG($r);return $r;} +function Cr($t,a,b){var c,d;a=a;c={};LD(a,b);a=!!(!!b.Rk);d=c;a=a;d["completed"]=a;a=$rt_ustr(b.Ok);d["title"]=a;return c;} +function BG($t){} +function Of(){var a=this;E.call(a);a.Tj=null;a.vc=null;a.zh=null;a.mg=null;a.bl=null;a.sk=null;} +function ST(){var $r=new Of();UB($r);return $r;} +function TT(b){var $r=new Of();Eq($r,b);return $r;} +function UB($t){var a,b,c;a=window;b=new Pi;c=10;b.gk=AR(E,c);$t.vc=b;b=new Dj;b.cc=$t;$t.sk=b;if($t.Tj===null){$t.Tj=a;VP(a,$t.sk);return;}b=new Fh;a=GR(11);b.Ce=1;b.gl=1;b.Xf=a;WQ(b);} +function Eq($t,a){var b,c;b=new Pi;c=10;b.gk=AR(E,c);$t.vc=b;b=new Dj;b.cc=$t;$t.sk=b;if($t.Tj===null){$t.Tj=a;VP(a,$t.sk);return;}b=new Fh;a=GR(11);b.Ce=1;b.gl=1;b.Xf=a;WQ(b);} +function NE($t,a){var b;if($t.Tj===null){$t.Tj=a;VP(a,$t.sk);return;}b=new Fh;a=GR(11);b.Ce=1;b.gl=1;b.Xf=a;WQ(b);} +function Ty($t,a){var b,c,d,e,f,g;b=$t.vc;c=0;d=b.ch;e=b.lj;a:{b:{while(true){if((c>=e?0:1)==0){e=0;break a;}if(d=b.lj){break;}c:{g=b.gk.data[c];if(g!==null){if(g.I(a)==0){break c;}else{break b;}}if(a===null){break b;}}c=f;}a=new Pc;KF(a);WQ(a);}e=1;}if(e==0){b=$t.vc;TJ(b,b.lj,a);}return $t;} +function Wy($t){var a,b,c,d,e,f,g,h,i;a=$rt_str($t.Tj.location.hash).pb.data.length!=0?0:1;if(a==0&&XG($rt_str($t.Tj.location.hash),GR(1))==0){b=$t.vc;c=0;d=b.ch;e=b.lj;a:{while(true){if((c>=e?0:1)==0){if($t.zh!==null){$t.zh.kb();}return;}if(d=b.lj){break a;}if(Rr(b.gk.data[c],$t.Tj)!=0){break;}c=f;}TL();return;}b=new Pc;b.Ce=1;b.gl=1;HD(b);WQ(b);}g=$t.mg.gi;b=new Sg;h=GR(12);S_$callClinit();b.ke=$rt_createCharArray(h.pb.data.length);a=0;while +(a=f?0:1)!=0){if(e=b.lj){break a;}c.push(MN($t.lf,a,b.gk.data[d]));d=g;}return c;}a=new Pc;KF(a);WQ(a);} +function Tk(){Wd.call(this);this.lf=null;} +function VT(b){var $r=new Tk();ZD($r,b);return $r;} +function ZD($t,a){$t.lf=a;} +function IN($t,a,b){var c,d,e,f,g,h;c=[];d=b;e=0;f=d.ch;g=d.lj;a:{while((e>=g?0:1)!=0){if(f=d.lj){break a;}c.push(MN($t.lf,a,d.gk.data[e]));e=h;}return c;}a=new Pc;a.Ce=1;a.gl=1;HD(a);WQ(a);} +function Vn(){E.call(this);} +function Df(){E.call(this);} +function Gs($t,a){return Zo($t,a,0,a.pb.data.length,0);} +function U(){E.call(this);} +function WT(){var $r=new U();Bt($r);return $r;} +function Bt($t){} +function Oe(){E.call(this);} +function Mf(){var a=this;E.call(a);a.oe=0;a.sh=null;a.Lh=null;} +function XT(b,c,d){var $r=new Mf();Iv($r,b,c,d);return $r;} +function Iv($t,a,b,c){$t.oe=a;$t.sh=b;$t.Lh=c;} +function UF($t){return $t.oe;} +function Ej(){E.call(this);} +function YT(){var $r=new Ej();SL($r);return $r;} +function ZT(b){var $r=new Ej();EL($r,b);return $r;} +function FC($t){Nc_$callClinit();return MS;} +function SL($t){} +function EL($t,a){} +function Wc(){Hd.call(this);} +function Zc(){Wc.call(this);} +function Ld(){Zc.call(this);} +function Id(){Ld.call(this);} +function EP(a){var b,c,d,e,f;b=GR(8);if(a===null){AP(b);}a:{if(a.pb.data.length!=0){b=GR(8);if(a===null){AP(b);}b:{c=0;b=new Kc;d=a.pb.data.length-1|0;Kc_$callClinit();e=1;Ac_$callClinit();b.vf=c;b.Vb=FP(c,d,e);b.oj=e;b=b;if(BR(b,Kb)!=0&&b.H()!=0){d=1;}else{f=AU(b.vf,b.Vb,b.oj);while(f.zi!=0){c:{d=Wt(a,Rv(f));Mb_$callClinit();switch(d){case 9:case 10:case 11:case 12:case 13:case 28:case 29:case 30:case 31:break;case 160:case 8199:case 8239:c=0;break c;default:d:{switch(Gv(d)){case 12:case 13:case 14:break;default:c +=0;break d;}c=1;}break c;}c=1;}e:{if(c==0){f:{switch(Gv(d)){case 12:case 13:case 14:break;default:d=0;break f;}d=1;}if(d==0){d=0;break e;}}d=1;}if(d==0){d=0;break b;}}d=1;}}if(d==0){d=0;break a;}}d=1;}return d;} +function Xd(){Id.call(this);} +function IO(a){var b,c,d,e,f,g,h;b=GR(8);if(a===null){AP(b);}c=0;d=a.pb.data.length-1|0;e=0;a:{while(true){if(c>d){break a;}f=e!=0?d:c;b:{g=Wt(a,f);Mb_$callClinit();switch(g){case 9:case 10:case 11:case 12:case 13:case 28:case 29:case 30:case 31:break;case 160:case 8199:case 8239:h=0;break b;default:c:{switch(Gv(g)){case 12:case 13:case 14:break;default:h=0;break c;}h=1;}break b;}h=1;}d:{if(h==0){e:{switch(Gv(g)){case 12:case 13:case 14:break;default:h=0;break e;}h=1;}if(h==0){h=0;break d;}}h=1;}if(e==0){if +(h==0){e=1;}else{c=c+1|0;}}else{if(h==0){break;}d=d-1|0;}}}e=d+1|0;if(c<=e){return BS(a.pb,c,e-c|0);}a=new Pc;a.Ce=1;a.gl=1;WQ(a);} +function TQ(a){var b,c,d,e;b=GR(8);if(a===null){AP(b);}c=0;b=new Kc;d=a.pb.data.length-1|0;Kc_$callClinit();e=1;Ac_$callClinit();b.vf=c;b.Vb=FP(c,d,e);b.oj=e;return b;} +function Qd(){Xd.call(this);} +function Am(){Qd.call(this);} +function O(){E.call(this);this.fd=0;} +function BU(b){var $r=new O();FJ($r,b);return $r;} +function FJ($t,a){$t.fd=a;} +function Fb(){E.call(this);} +function We(){O.call(this);} +var CU=null;function We_$callClinit(){We_$callClinit=function(){}; +Dp();} +function DU(){var $r=new We();Ug($r);return $r;} +function TD($t,a){var b,c;a=a;b=GR(13);if(a===null){AP(b);}c=a.Rk!=0?0:1;Bc_$callClinit();return c==0?EU:FU;} +function Pw($t,a){var b;b=GR(13);if(a===null){AP(b);}return a.Rk!=0?0:1;} +function Ug($t){var a;We_$callClinit();a=1;$t.fd=a;} +function Dp(){var a,b;a=new We;b=1;a.fd=b;CU=a;} +function Qb(){Tb.call(this);} +function GU(b){var $r=new Qb();QF($r,b);return $r;} +function QF($t,a){$t.Ce=1;$t.gl=1;$t.Xf=a;} +function Zl(){Qb.call(this);} +function HU(b){var $r=new Zl();Ky($r,b);return $r;} +function Ky($t,a){$t.Ce=1;$t.gl=1;$t.Xf=a;} +function Me(){E.call(this);} +function Qn(){E.call(this);this.Sc=null;} +function IU(b){var $r=new Qn();TC($r,b);return $r;} +function HI($t,a,b){var c,d,e;c=$t.Sc;a=a;b=b;d=KB(c,a).oe;e=0;if((d!=0?0:1)!=0){Je_$callClinit();b.nk=JU;Lb_$callClinit();b.he=KU;e=1;}else if((d!=1?0:1)!=0){We_$callClinit();b.nk=CU;Lb_$callClinit();b.he=LU;e=1;}else if((d!=2?0:1)!=0){Xe_$callClinit();b.nk=MU;Lb_$callClinit();b.he=NU;e=1;}return e;} +function NB($t,a){var b;a=a;b=new Nh;b.gi=a;return b;} +function TC($t,a){$t.Sc=a;} +function Ok(){M.call(this);this.Yj=null;} +function OU(b,c){var $r=new Ok();Zn($r,b,c);return $r;} +function Zn($t,a,b){$t.Wk=a;$t.Yj=b;KD(a,b.Wk,null);} +function PM($t){Sr($t.Yj);} +function Mv($t){var a,b,c,d,e,f;a:{a=$t.Yj;if(a.Le!==null){b=a.Le;c=0;d=b.ch;e=b.lj;while(true){if((c>=e?0:1)==0){a.Le=null;break a;}if(d=b.lj){break;}b.gk.data[c].e();c=f;}a=new Pc;KF(a);WQ(a);}}Qv(a.Wk);Qv($t.Wk);Ic_$callClinit();b=PU;f=b.lj;d=0;b:{c:{while(true){if(d>=f){d= -1;break b;}if(d<0){break;}if(d>=b.lj){break;}d:{a=b.gk.data[d];if($t===null){if(a!==null){break d;}else{break c;}}if(($t!==a?0:1)!=0){break c;}}d=d+1|0;}a=new Pc;KF(a);WQ(a);}}if +(d>=0){Zz(b,d);}} +function Lc(){E.call(this);} +function QU(){var $r=new Lc();EI($r);return $r;} +function EI($t){} +function UH($t,a){var b,c,$$je;Ic_$callClinit();b=$t.constructor;if(b!==null&&b.classObject===null){c=new Sl;c.Xh=b;b.classObject=c;}b=new Wg;b.kk=$t;c=new Dh;c.nf=b;c=c;b=new Zk;b.Lf=a;a=new Ok;c=RC(c);a.Wk=b;a.Yj=c;KD(b,c.Wk,null);b=PU;TJ(b,b.lj,a);RU=1;a:{try{PM(a);break a;}catch($$e){$$je=$$e.$javaException;if($$je){a=$$je;}else {throw $$e;}}RU=0;WQ(a);}RU=0;} +function Ze(){var a=this;Lc.call(a);a.Tc=null;a.nk=null;a.wb=null;a.kl=null;a.Pl=null;a.Hl=false;a.he=null;a.He=null;} +var SU=null;function Ze_$callClinit(){Ze_$callClinit=function(){}; +Ow();} +function TU(b){var $r=new Ze();Nf($r,b);return $r;} +function FB($t){return $t.Tc;} +function UD($t){var a,b,c,d,e,f,g,h;a=$t.Tc;b=$t.nk;c=new Pi;d=10;c.gk=AR(E,d);c=c;e=0;d=a.ch;f=a.lj;a:{while((e>=f?0:1)!=0){if(d=a.lj){break a;}h=a.gk.data[e];if(b.z(h).Kj!=0){TJ(c,c.lj,h);}e=g;}return c;}a=new Pc;a.Ce=1;a.gl=1;HD(a);WQ(a);} +function LF($t){return $t.wb;} +function Uw($t,a){var b;b=GR(14);if(a===null){AP(b);}$t.wb=a;} +function Uv($t){return $t.kl;} +function XJ($t){return $t.Hl;} +function Rs($t){return $t.he;} +function Ds($t){var a,b,c,d,e,f;a:{a=$t.Tc;if(BR(a,Kb)!=0&&(a.lj!=0?0:1)!=0){b=0;}else{b=0;c=0;d=a.ch;e=a.lj;while((c>=e?0:1)!=0){if(d=a.lj){break a;}if((a.gk.data[c].Rk!=0?0:1)!=0){b=b+1|0;}c=f;}}return b;}a=new Pc;a.Ce=1;a.gl=1;HD(a);WQ(a);} +function ZB($t){var a,b,c,d,e,f;a:{a=$t.Tc;if(BR(a,Kb)!=0&&(a.lj!=0?0:1)!=0){b=0;}else{b=0;c=0;d=a.ch;e=a.lj;while((c>=e?0:1)!=0){if(d=a.lj){break a;}if(a.gk.data[c].Rk!=0){b=b+1|0;}c=f;}}return b;}a=new Pc;a.Ce=1;a.gl=1;HD(a);WQ(a);} +function VI($t){var a,b,c,d,e,f;a:{b:{a=$t.Tc;if(BR(a,Kb)!=0&&(a.lj!=0?0:1)!=0){b=1;}else{c=0;d=a.ch;e=a.lj;while((c>=e?0:1)!=0){if(d=a.lj){break a;}if(a.gk.data[c].Rk==0){b=0;break b;}c=f;}b=1;}}return b;}a=new Pc;a.Ce=1;a.gl=1;HD(a);WQ(a);} +function Iu($t,a){var b,c,d,e,f;b=$t.Tc;c=0;d=b.ch;e=b.lj;a:{while((c>=e?0:1)!=0){if(d=b.lj){break a;}b.gk.data[c].Rk=a;c=f;}return;}b=new Pc;b.Ce=1;b.gl=1;HD(b);WQ(b);} +function Hr($t){var a,b,c,d,e,f,g,h,i;if(EP($t.wb)!=0){return;}a=$t.He;b=new Cl;b.Ok=GR(15);c=$t.wb;d=GR(14);if(c===null){AP(d);}b.Ok=c;FN(a,b);$t.wb=GR(15);b=$t.Tc;e=b.gk;f=0;g=b.lj;a=null;if(f>g){b=new Fd;b.Ce=1;b.gl=1;HD(b);WQ(b);}while(ff){a=new Fd;a.Ce=1;a.gl=1;HD(a);WQ(a);}while(e=g){f= -1;break a;}if(f<0){break;}if(f>=c.lj){break;}c:{d=c.gk.data[f];if(a===null){if(d!==null){break c;} +else{break b;}}if((a!==d?0:1)!=0){break b;}}f=f+1|0;}a=new Pc;Kx(a);WQ(a);}}if(f>=0){Zz(c,f);}Ny(b,e);}a=$t.Tc;h=a.gk;f=0;g=a.lj;b=null;if(f>g){a=new Fd;a.Ce=1;a.gl=1;HD(a);WQ(a);}while(f=f){e= -1;break a;}if(e<0){break;}if(e>=c.lj){break;}c:{g=c.gk.data[e];if(a===null){if(g!==null){break c;}else{break b;}}if((a!==g?0:1)!=0){break b;}}e=e+1|0;}a=new Pc;Kx(a);WQ(a);}}if(e>=0){Zz(c,e);}Ny(b,d);a=$t.Tc;h=a.gk;e=0;f=a.lj;b=null;if(e>f){a=new Fd;a.Ce=1;a.gl=1;HD(a);WQ(a);}while +(ej){a=new Fd;a.Ce=1;a.gl= +1;HD(a);WQ(a);}while(dd){a=new Fd;a.Ce=1;a.gl=1;WQ(a);}while(ce){a=new Fd;a.Ce=1;a.gl=1;HD(a);WQ(a);}while(c0){k=AR(Df,h).data;l=0;c=k.length;while(l=h){break a;}n=k[c].km(a,d[c]);if(n== -1){o=c+ -1|0;k[c].lm();} +else{d[c]=n;if((c+1|0)=$t.ej?0:1;} +function BF($t){var a,b,c;a=$t.Wi;b=$t.ue;if(a=0&&c=b.ch){return;}b=new Tl;b.Ce=1;b.gl=1;WQ(b);} +function Dm(){var a=this;E.call(a);a.ih=0;a.Vj=0;a.Rd=0;} +function ZU(){var $r=new Dm();Bx($r);return $r;} +function Bx($t){$t.ih=0;$t.Vj= -1;$t.Rd=0;} +function Kt($t){return $t.Vj;} +function SK($t){var a,b;a:{b:{switch($t.ih){case 0:break b;case 1:break;case 2:break b;case 3:break b;case 4:break b;case 5:break b;case 6:break b;case 7:break b;case 8:break b;case 9:break b;case 10:a=11;b=2;break a;case 11:break b;case 12:break b;case 13:break b;case 14:break b;case 15:break b;case 16:break b;case 17:a=18;b=1;break a;case 18:break b;case 19:break b;default:break b;}a=19;b=0;break a;}a= -1;b= -1;}$t.ih=a;$t.Vj=b;return $t;} +function Zo($t,a,b,c,d){var e,f,g,h,i;e=$t.ih;f=12;g=19;h=1;a:{b:{c:{d:{e:{f:{g:{h:{i:{j:{k:{l:{m:{n:{o:{p:{q:{r:{while((c-b|0)>0){s:{i=Wt(a,b);switch(e){case 0:switch(i){case 47:break;default:break b;}b=b+1|0;if((c-b|0)<=0){g=h;break a;}i=Wt(a,b);break s;case 12:switch(i){case 99:g=13;b=b+1|0;if((c-b|0)<=0){break a;}i=Wt(a,b);break r;default:}break b;case 19:break b;case 1:break;case 2:break l;case 3:break k;case 4:break j;case 5:break i;case 6:break h;case 7:break g;case 8:break f;case 9:break e;case 10:break d;case 11:break c;case 13:break r;case 14:break q;case 15:break p;case 16:break o;case 17:break n;case 18:break m;default:break b;}}t: +{switch(i){case -1:$t.Vj=0;if(d!=0){b=b+1|0;break a;}e=g;break t;case 97:break;case 99:g=2;b=b+1|0;if((c-b|0)<=0){break a;}i=Wt(a,b);break l;default:break b;}e=f;}b=b+1|0;}g=e;break a;}switch(i){case 116:g=14;b=b+1|0;if((c-b|0)<=0){break a;}i=Wt(a,b);break q;default:}break b;}switch(i){case 105:g=15;b=b+1|0;if((c-b|0)<=0){break a;}i=Wt(a,b);break p;default:}break b;}switch(i){case 118:g=16;b=b+1|0;if((c-b|0)<=0){break a;}i=Wt(a,b);break o;default:}break b;}switch(i){case 101:g=17;b=b+1|0;if((c-b|0)<=0){break a;}i +=Wt(a,b);break n;default:}break b;}switch(i){case -1:g=18;$t.Vj=1;if(d!=0){b=b+1|0;break a;}b=b+1|0;if((c-b|0)<=0){break a;}Wt(a,b);break m;default:}break b;}break b;}switch(i){case 111:g=3;b=b+1|0;if((c-b|0)<=0){break a;}i=Wt(a,b);break k;default:}break b;}switch(i){case 109:g=4;b=b+1|0;if((c-b|0)<=0){break a;}i=Wt(a,b);break j;default:}break b;}switch(i){case 112:g=5;b=b+1|0;if((c-b|0)<=0){break a;}i=Wt(a,b);break i;default:}break b;}switch(i){case 108:g=6;b=b+1|0;if((c-b|0)<=0){break a;}i=Wt(a,b);break h;default:}break b;}switch +(i){case 101:g=7;b=b+1|0;if((c-b|0)<=0){break a;}i=Wt(a,b);break g;default:}break b;}switch(i){case 116:g=8;b=b+1|0;if((c-b|0)<=0){break a;}i=Wt(a,b);break f;default:}break b;}switch(i){case 101:g=9;b=b+1|0;if((c-b|0)<=0){break a;}i=Wt(a,b);break e;default:}break b;}switch(i){case 100:g=10;b=b+1|0;if((c-b|0)<=0){break a;}i=Wt(a,b);break d;default:}break b;}switch(i){case -1:g=11;$t.Vj=2;if(d!=0){b=b+1|0;break a;}b=b+1|0;if((c-b|0)<=0){break a;}Wt(a,b);break c;default:}break b;}}g= -1;}$t.ih=g;$t.Rd=b;return $t;} +function Ab(){E.call(this);} +function Dj(){E.call(this);this.cc=null;} +function AV(b){var $r=new Dj();VD($r,b);return $r;} +function VD($t,a){$t.cc=a;} +function Ro($t,a){Wy($t.cc);} +function QE($t,a){Wy($t.cc);} +function Bp($t,a){Wy($t.cc);} +function Ai(){var a=this;E.call(a);a.be=null;a.Zd=null;} +function BV(b,c){var $r=new Ai();GM($r,b,c);return $r;} +function Tv($t){var a,b,c;a=$t.be;b=$t.Zd;c=AR(E,1);b=b;b=b.aj;c=c.data;c[0]=b;UK(a,c[0]);TL();} +function GM($t,a,b){$t.be=a;$t.Zd=b;} +function Vj(){E.call(this);} +function QP(a){var b,c,d,e,f;b=new Cm;c=new Jn;d=16;e=0.75;d=CQ(d);c.qd=0;c.Ae=AR(Ah,d);c.ql=e;c.Pj=c.Ae.data.length*c.ql|0;b.Qg=c;c=new Xk;f=new Jn;d=16;e=0.75;d=CQ(d);f.qd=0;f.Ae=AR(Ah,d);f.ql=e;f.Pj=f.Ae.data.length*f.ql|0;c.ci=f;b.Ag=c;return OQ(b,a);} +function OQ(a,b){var c,d,e,f,g,h,i,j;if(b===null){return null;}c=b.constructor;if(c===null){d=null;}else{d=c.classObject;if(d===null){d=new Sl;d.Xh=c;c.classObject=d;}}if(d.bh===null){c=$rt_str(d.Xh.$meta.name);Vc_$callClinit();d.bh=c;}a:{b:{c:{e=d.bh;switch(Nt(e)){case -725394638:break;case -1065183504:break c;default:break b;}if(XG(e,GR(20))==0){break b;}c=new Xm;c=c;break a;}if(XG(e,GR(21))!=0){c=new Vm;c=c;break a;}}c=null;}if(c!==null){return c.A(a,b);}a=new Fd;c=new Sg;S_$callClinit();f=16;c.ke=$rt_createCharArray(f);WA(c, +c.Ii,GR(22));b=b.constructor;if(b===null){d=null;}else{d=b.classObject;if(d===null){d=new Sl;d.Xh=b;b.classObject=d;}}if(d.bh===null){d.bh=$rt_str(d.Xh.$meta.name);}b=d.bh;WA(c,c.Ii,b);b=new Vc;g=c.ke;f=0;h=c.Ii;b.pb=$rt_createCharArray(h);i=0;while(i=0){return EQ(a.Xh,b);}a=new Wn;a.Ce=1;a.gl=1;WQ(a);} +function EQ(a,b){if (a.$meta.primitive) {if (a == $rt_bytecls()) {return $rt_createByteArray(b);}if (a == $rt_shortcls()) {return $rt_createShortArray(b);}if (a == $rt_charcls()) {return $rt_createCharArray(b);}if (a == $rt_intcls()) {return $rt_createIntArray(b);}if (a == $rt_longcls()) {return $rt_createLongArray(b);}if (a == $rt_floatcls()) {return $rt_createFloatArray(b);}if (a == $rt_doublecls()) {return $rt_createDoubleArray(b);}if (a == $rt_booleancls()) {return $rt_createBooleanArray(b);}} else {return $rt_createArray(a, b)}} +function Ob(){E.call(this);} +function J(){E.call(this);} +function Jl(){E.call(this);this.mf=null;} +function EV(b){var $r=new Jl();Et($r,b);return $r;} +function Xr($t,a){var b,c;b=$t.mf;a=a;c=new Ig;a=a;c.Eg=a;a=c;c=new Hk;c.cf=b;a.Kg=c;return a;} +function Et($t,a){$t.mf=a;} +function Ml(){E.call(this);this.Gd=null;} +function FV(b){var $r=new Ml();OA($r,b);return $r;} +function JM($t,a){var b,c;b=$t.Gd;a=a;c=new Sj;a=a;c.ec=1;c.Vk=a.hh;a=c;c=new Lm;c.Od=b;a.Ze=c;return a;} +function OA($t,a){$t.Gd=a;} +function Il(){E.call(this);this.Il=null;} +function GV(b){var $r=new Il();Dz($r,b);return $r;} +function Aw($t,a){var b,c,d;b=$t.Il;a=a;c=new Xn;a=a;d=new Yl;d.hk=c;c.ri=d;c.ii=a.hh;a=c;c=new Bi;c.Bh=b;c=c;b=c.constructor;if(b!==null&&b.classObject===null){d=new Sl;d.Xh=b;b.classObject=d;}b=new Kn;b.Ad=c;a.fc=b;a.Wd=GR(26);return a;} +function Dz($t,a){$t.Il=a;} +function Kl(){E.call(this);this.Hd=null;} +function HV(b){var $r=new Kl();Sy($r,b);return $r;} +function GF($t,a){var b,c;b=$t.Hd;a=a;c=new Im;a=a;c.mj=a.hh;a=c;c=new Pm;c.zj=b;a.Qb=c;return a;} +function Sy($t,a){$t.Hd=a;} +function Dk(){E.call(this);} +function Gk(){U.call(this);this.Vc=null;} +function IV(b){var $r=new Gk();Bv($r,b);return $r;} +function Bv($t,a){$t.Vc=a;} +function SJ($t,a,b){var c,d,e,f;if((b===null?1:0)!=0){return null;}if((JP(b)?1:0)==0){a=new Fd;b=GR(27);a.Ce=1;a.gl=1;a.Xf=b;WQ(a);}c=b;d=new Pi;e=c.length;d.gk=AR(E,e);f=0;while(f=d?0:1)!=0){if(c<$t.ch){a=new Tl;a.Ce=1;a.gl=1;WQ(a);}e=b+1|0;if(b<0){break a;}if(b>=$t.lj){break a;}c:{f=$t.gk.data[b];if(f!==null){if(f.I(a)==0){break c;}else{break b;}}if(a===null){break b;}}b=e;}return 0;}return 1;}a=new Pc;a.Ce=1;a.gl=1;HD(a);WQ(a);} +function DC($t,a){var b,c,d,e,f,g,h;if($t.ch!=$t.Jb.ch){b=new Tl;b.Ce=1;b.gl=1;WQ(b);}c=a.data;d=$t.bf;e=c.length;if(e>=d){while(d=f.wf?0:1)!=0){h=e+1|0;if(f.Hi.Ff>=f.wf){b=new Rn;b.Ce=1;b.gl=1;WQ(b);}a.data[e]=GE(f.Hi);e=h;}return a;} +function Xu($t,a){var b,c;b=0;c=a.B();while(c.s()!=0){a=c.y();TJ($t,$t.lj,a);b=1;}return b;} +function Pl(){E.call(this);this.bc=null;} +function MV(b){var $r=new Pl();WK($r,b);return $r;} +function Rw($t,a){var b,c,d;b=$t.bc;a=a;c=new Yi;a=a;d=new Xl;d.ah=c;c.ml=d;c.ik=a.hh;a=c;c=new Jk;c.qc=b;a.fh=c;return a;} +function WK($t,a){$t.bc=a;} +function Rl(){var a=this;E.call(a);a.Wb=null;a.Xb=null;} +function NV(b,c){var $r=new Rl();MD($r,b,c);return $r;} +function Ur($t,a){var b,c,d,e;b=$t.Wb;c=$t.Xb;a=a;d=new Vk;a=a;e=new Yl;e.hk=d;d.ri=e;d.ii=a.hh;a=d;d=new Ei;d.vh=b;d.wh=c;b=d;c=b.constructor;if(c!==null&&c.classObject===null){d=new Sl;d.Xh=c;c.classObject=d;}c=new Kn;c.Ad=b;a.fc=c;a.Wd=GR(29);return a;} +function MD($t,a,b){$t.Wb=a;$t.Xb=b;} +function Nl(){var a=this;E.call(a);a.Sb=null;a.Tb=null;} +function OV(b,c){var $r=new Nl();Pt($r,b,c);return $r;} +function Mx($t,a){var b,c,d;b=$t.Sb;c=$t.Tb;a=a;d=new Jj;a=a;d.ce=a.hh;a=d;d=new Zm;d.Mf=b;d.Of=c;a.Ie=d;a.zg=GR(30);return a;} +function Pt($t,a,b){$t.Sb=a;$t.Tb=b;} +function Vf(){var a=this;E.call(a);a.Fg=null;a.Gg=null;} +function PV(b,c){var $r=new Vf();ML($r,b,c);return $r;} +function Op($t,a){var b,c,d;b=$t.Fg;c=$t.Gg;a=QV(a);d=new Ai;d.be=b;d.Zd=c;b=d;c=GR(14);if(b===null){AP(c);}a.Nf=b;return a;} +function ML($t,a,b){$t.Fg=a;$t.Gg=b;} +function Ql(){E.call(this);this.rb=null;} +function RV(b){var $r=new Ql();Pr($r,b);return $r;} +function Vu($t,a){var b,c;b=$t.rb;a=a;c=new Ln;a=a;c.hc=a.hh;a=c;c=new An;c.bi=b;a.oi=c;return a;} +function Pr($t,a){$t.rb=a;} +function Wf(){E.call(this);this.Wh=null;} +function SV(b){var $r=new Wf();Ry($r,b);return $r;} +function Ey($t,a){var b,c;b=$t.Wh;a=a;c=new Ig;a=a;c.Eg=a;a=c;c=new Ik;c.nc=b;a.Kg=c;return a;} +function Ry($t,a){$t.Wh=a;} +function Ce(){E.call(this);} +var TV=null;function Ce_$callClinit(){Ce_$callClinit=function(){}; +DK();} +function UV(){var $r=new Ce();Ph($r);return $r;} +function BN($t,a){var b,c,d,e,f,g,h;b=a.gi;a=new Sg;c=GR(12);S_$callClinit();a.ke=$rt_createCharArray(c.pb.data.length);d=0;while(d92){return ((a-32|0)-2|0)<<24>>24;}if(a<=34){return (a-32|0)<<24>>24;}return ((a-32|0)-1|0)<<24>>24;} +function UQ(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p;b=AR(Lh,16384);c=b.data;d=$rt_createByteArray(16384);e=d.data;f=0;g=0;h=0;i=0;while(i>24;i=i+1|0;k=JQ(Wt(a,i));}if(j==0&&k>=128){if(f>0){l=g+1|0;n=new Lh;m=h+f|0;o=YP(d,f);n.qi=h;n.dc=m;n.Bi=o;c[g]=n;g=l;}h=h+(f+k|0)|0;f=0;}else{p=f+k|0;if(p=i){break a;}k=Lu(g);AK(g);k.e();Lu(c);AK(c);i +=i+ -1|0;}}if(b.s()!=0&&b.M()=e?0:1)!=0){if(d=a.lj){break a;}g=a.gk.data[c];h=b.md;if(h<0){a=new Pc;a.Ce=1;a.gl=1;WQ(a);}ZG(Hy(b,h),g);c=f;}}return b;}a=new Pc;a.Ce=1;a.gl=1;HD(a);WQ(a);} +function Hp($t,a,b,c){a:{while(true){if((a.hi===null?0:1)==0){break a;}if(b.W()==0){break a;}$t.mk=b.lb();$t.oh=b.ob();if($t.oh!==Qp(a)){break;}Qp(c).d();}Lu(a);b.y();}} +function Up($t){var a,b,c,d;Qv($t.Wk);a=$t.tb.md-1|0;while(a>=0){b=$t.tb;if(a<0){b=new Pc;b.Ce=1;b.gl=1;WQ(b);}b=Hy(b,a);c=b.ic;d=b.Df;if(c=b.ej?0:1)!=0){if(b.Wi=a.lj){break a;}a=a.gk.data[e];f=GR(13);if(a===null){AP(f);}g=a.Rk;Bc_$callClinit();if((g==0?EU:FU).Kj==c){DH(b);d=1;}}return d;}a=new Pc;a.Ce=1;a.gl=1;HD(a);WQ(a);} +function QO(a,b){var c;c=GR(8);if(a===null){AP(c);}c=GR(9);if(b===null){AP(c);}return KQ(a,b,1);} +function KQ(a,b,c){var d,e,f,g,h,i,$$je;if(BR(a,Xb)==0){if(a===null){b=new Qf;a=GR(34);b.Ce=1;b.gl=1;b.Xf=a;WQ(b);}if(BR(a,Eb)!=0&&BR(a,Qi)==0){HP(a,GR(35));}a:{try{a=a;}catch($$e){$$je=$$e.$javaException;if($$je&&$$je instanceof Sd){a=$$je;break a;}else {throw $$e;}}return FO(a,b,c);}b=ZQ(En);if(b.bh===null){d=b.Xh;d=$rt_str(d.$meta.name);Vc_$callClinit();b.bh=d;}WQ(BP(a,b.bh));}e=0;f=0;b=GR(8);if(a===null){AP(b);}b:{g=a.lj-1|0;if(f<=g){c:{while(true){if(f<0){break c;}if(f>=a.lj){break c;}h=a.gk.data[f];b= +h;d=GR(13);if(b===null){AP(d);}i=b.Rk;Bc_$callClinit();if((i==0?EU:FU).Kj!=c){if(e!=f){if(e<0){break;}if(e>=a.lj){break;}a.gk.data[e]=h;}e=e+1|0;}if(f==g){break b;}f=f+1|0;}a=new Pc;a.Ce=1;a.gl=1;WQ(a);}a=new Pc;a.Ce=1;a.gl=1;WQ(a);}}if(e>=a.lj){return 0;}b=GR(8);if(a===null){AP(b);}i=a.lj-1|0;if(i>=e){while(true){Zz(a,i);if(i==e){break;}i=i+ -1|0;}}return 1;} +function Pd(){Jc.call(this);} +function Md(){Pd.call(this);} +function Mn(){Md.call(this);} +function Um(){var a=this;Dc.call(a);a.sf=0;a.zi=false;a.jf=0;a.xc=0;} +function AU(b,c,d){var $r=new Um();Wp($r,b,c,d);return $r;} +function Ks($t){return $t.zi;} +function Rv($t){var a,b;a=$t.jf;if(a!=$t.sf){$t.jf=$t.jf+$t.xc|0;}else{if($t.zi==0){b=new Rn;b.Ce=1;b.gl=1;WQ(b);}$t.zi=0;}return a;} +function Wp($t,a,b,c){$t.xc=c;$t.sf=b;$t.zi=$t.xc<=0?(ab?0:1;if($t.zi==0){a=$t.sf;}$t.jf=a;} +function De(){E.call(this);} +function Yl(){E.call(this);this.hk=null;} +function LW(b){var $r=new Yl();TB($r,b);return $r;} +function TB($t,a){$t.hk=a;} +function Sx($t,a){var b;b=$t.hk;b.fc.handleEvent(a);if(XG(b.Wd,GR(26))!=0){a.preventDefault();}} +function RK($t,a){var b;a=a;b=$t.hk;b.fc.handleEvent(a);if(XG(b.Wd,GR(26))!=0){a.preventDefault();}} +function Pj(){var a=this;E.call(a);a.pk=0;a.ul=null;} +function MW(){var $r=new Pj();Yz($r);return $r;} +function Yz($t){} +function Pf(){R.call(this);} +function Le(){E.call(this);} +function Re(){E.call(this);} +function Cd(){X.call(this);} +function NW(){var $r=new Cd();Wx($r);return $r;} +function Wx($t){} +function Xk(){Cd.call(this);this.ci=null;} +function OW(){var $r=new Xk();EE($r);return $r;} +function PW(b){var $r=new Xk();NF($r,b);return $r;} +function EE($t){var a,b,c;a=new Jn;b=16;c=0.75;b=CQ(b);a.qd=0;a.Ae=AR(Ah,b);a.ql=c;a.Pj=a.Ae.data.length*a.ql|0;$t.ci=a;} +function NF($t,a){$t.ci=a;} +function FK($t,a){return HF($t.ci,a,$t)!==null?0:1;} +function Cj(){E.call(this);} +function UN(a){var copy=new a.constructor();for(var field in a){if(!a.hasOwnProperty(field)){continue;}copy[field]=a[field];}return copy;} +function HQ(a){return a.$meta.item;} +function MP(a){return $rt_str(a.$meta.name);} +function Vb(){var a=this;E.call(a);a.Ub=null;a.ti=null;} +var QW=null;function Vb_$callClinit(){Vb_$callClinit=function(){}; +Jr();} +function RW(b,c){var $r=new Vb();Rj($r,b,c);return $r;} +function Rj($t,a,b){var c,d,e;Vb_$callClinit();c=b.data;Oz(a);d=c.length;e=0;while(e=48&&a<=57)&&!(a>=97&&a<=122)&&a<65&&a>90?0:1;} +function Jr(){var a,b,c,d,e,f,g,h,i;a=new Jn;b=16;c=0.75;b=CQ(b);a.qd=0;a.Ae=AR(Ah,b);a.ql=c;a.Pj=a.Ae.data.length*a.ql|0;QW=a;d=QW;e=GR(36);a=new Pn;f=GR(36);g=AR(Vc,0);h=g.data;Oz(f);b=h.length;i=0;while(i=$t.lj){break a;}c:{d=$t.gk.data[c];if(a===null){if(d!==null){break c;}else{break b;}}if((a!==d?0:1)!=0){break b;}}c=c+1|0;}return -1;}return c;}a=new Pc;a.Ce=1;a.gl=1;WQ(a);} +function Yo($t){return $t.K(0);} +function XA($t,a){var b,c,d;b=new Hg;c=$t.ch;d=$t.w();b.Ik=$t;b.Ff=a;b.Ef=a;b.qf=c;b.Bf=d;return b;} +function HB($t,a,b){var c;if(a>b){c=new Fd;c.Ce=1;c.gl=1;WQ(c);}if(a>=0&&b<=$t.xk.data.length){if(BR($t,Xb)==0){c=new Mc;c.Jb=$t;c.ch=c.Jb.ch;c.Qd=a;c.bf=b-a|0;return c;}c=new Hj;c.Jb=$t;c.ch=c.Jb.ch;c.Qd=a;c.bf=b-a|0;return c;}c=new Pc;c.Ce=1;c.gl=1;WQ(c);} +function Jd(){T.call(this);} +function FX(){var $r=new Jd();LC($r);return $r;} +function LC($t){} +function DB($t,a){var b,c;if(a<0){b=new Pc;b.Ce=1;b.gl=1;WQ(b);}b=Hy($t,a);a=b.ic;c=b.Df;if(a=0){ZG(Hy($t,a),b);return;}b=new Pc;b.Ce=1;b.gl=1;WQ(b);} +function Ud(){E.call(this);} +function Ij(){var a=this;Jd.call(a);a.jj=null;a.Kb=null;a.md=0;} +function GX(){var $r=new Ij();KN($r);return $r;} +function KW(b){var $r=new Ij();Nw($r,b);return $r;} +function KN($t){} +function Nw($t,a){var b,c,d,e,f,g;b=0;c=a.ch;d=a.lj;e=null;a:{while((b>=d?0:1)!=0){f=new Vi;if(c=a.lj){break a;}f.Qe=a.gk.data[b];f.wg=e;if(e!==null){e.ve=f;}else{$t.jj=f;}$t.md=$t.md+1|0;e=f;b=g;}$t.Kb=e;return;}a=new Pc;a.Ce=1;a.gl=1;HD(a);WQ(a);} +function Xy($t){return $t.md;} +function Hv($t){var a,b,c,d,e;a=new Uf;b=$t.jj;c=null;d=0;a.Df=$t;e=a.Df;a.ic=e.ch;a.vi=b;a.hi=c;a.ug=d;return a;} +function Hy($t,a){var b,c,d,e,f;if(a<0){b=new Pc;b.Ce=1;b.gl=1;WQ(b);}if(a<=($t.md/2|0)){c=$t.jj;d=0;while(d$t.md){b=new Pc;b.Ce=1;b.gl=1;WQ(b);}b=$t.Kb;d=a;while(d<$t.md){b=b.wg;d=d+1|0;}c=new Uf;if(b===null){e=null;}else{e=b.ve;}c.Df=$t;f=c.Df;c.ic=f.ch;c.vi=e;c.hi=b;c.ug=a;return c;} +function Cv($t,a){if(a.wg===null){$t.jj=a.ve;}else{a.wg.ve=a.ve;}if(a.ve===null){$t.Kb=a.wg;}else{a.ve.wg=a.wg;}$t.md=$t.md-1|0;$t.ch=$t.ch+1|0;} +function XO(a,b){Cv(a,b);} +function SP(a,b){a.jj=b;return b;} +function KP(a,b){a.Kb=b;return b;} +function PO(a){var b;b=a.md+1|0;a.md=b;return b;} +function Hf(){E.call(this);} +function Gc(){E.call(this);} +function Cb(){E.call(this);} +function HX(){var $r=new Cb();Yn($r);return $r;} +function Yn($t){} +function Hc(){Cb.call(this);this.Gl=null;} +function IX(b){var $r=new Hc();Tq($r,b);return $r;} +function Tq($t,a){$t.Gl=a;} +function Wl(){var a=this;Hc.call(a);a.we=false;a.uj=null;a.Cg=null;a.Zf=null;} +function JX(b,c){var $r=new Wl();SF($r,b,c);return $r;} +function SF($t,a,b){var c,d,e,f,g;$t.Gl=a;a=new Sg;S_$callClinit();a.ke=$rt_createCharArray(16);$t.uj=a;$t.Cg=$rt_createCharArray(32);$t.we=b;a=new Pn;c=GR(36);d=AR(Vc,0);e=d.data;Vb_$callClinit();Oz(c);f=e.length;g=0;while(g=$t.Bf?0:1;} +function GE($t){var a,b,c;a=$t.qf;b=$t.Ik;if(a=0){b=$t.Ik;c=$t.Ff;$t.Ff=c-1|0;return b.G(c-1|0);}b=new Rn;b.Ce=1;b.gl=1;WQ(b);} +function JF($t){return $t.Ff;} +function PH($t){return $t.Ff-1|0;} +function Ls($t){var a,b;a=$t.qf;b=$t.Ik;if(a>=b.ch){return;}b=new Tl;b.Ce=1;b.gl=1;WQ(b);} +function Om(){E.call(this);this.Ai=null;} +function PX(b){var $r=new Om();QJ($r,b);return $r;} +function Xx($t){return UD($t.Ai);} +function QJ($t,a){$t.Ai=a;} +function Zm(){var a=this;E.call(a);a.Mf=null;a.Of=null;} +function QX(b,c){var $r=new Zm();OB($r,b,c);return $r;} +function Tw($t){var a,b,c,d,e,f,g,h,i,j;a=$t.Mf;b=$t.Of;c=AR(E,1);a=a;d=a.aj;c=c;d=(d!==b.kl?0:1)==0?GR(15):GR(40);c=c.data;c[0]=d;e=AR(E,1);a=a.aj.Rk==0?GR(15):GR(41);e=e.data;e[0]=a;a=new Sg;S_$callClinit();f=16;a.ke=$rt_createCharArray(f);d=e[0];WA(a,a.Ii,d);d=c[0];WA(a,a.Ii,d);d=new Vc;g=a.ke;f=0;h=a.Ii;Vc_$callClinit();d.pb=$rt_createCharArray(h);i=0;while(i0&&a<=65535?1:0;} +function Ct(a){Mb_$callClinit();return (a&64512)!=55296?0:1;} +function Bs(a){Mb_$callClinit();return (a&64512)!=56320?0:1;} +function LI(a){var b;Mb_$callClinit();b=(a&64512)!=55296?0:1;return b==0&&((a&64512)!=56320?0:1)==0?0:1;} +function JL(a,b){Mb_$callClinit();if(b>=2&&b<=36&&a0&&a<=65535?1:0)!=0){b=a&65535;c=(b&64512)!=55296?0:1;if((c==0&&((b&64512)!=56320?0:1)==0?0:1)!=0){return 19;}}d=QH().data;c=0;b=d.length-1|0;while(c<=b){e=(c+b|0)/2|0;f=d[e];if(a>=f.dc){c=e+1|0;}else{if(a>=f.qi){return f.Bi.data[a-f.qi|0];}b=e-1|0;}}return 0;} +function CJ(a){Mb_$callClinit();a:{switch(Gv(a)){case 12:case 13:case 14:break;default:a=0;break a;}a=1;}return a;} +function IA(a){Mb_$callClinit();switch(Gv(a)){case 12:case 13:case 14:break;default:return 0;}return 1;} +function Zx(a){Mb_$callClinit();a:{switch(a){case 9:case 10:case 11:case 12:case 13:case 28:case 29:case 30:case 31:break;case 160:case 8199:case 8239:a=0;break a;default:b:{switch(Gv(a)){case 12:case 13:case 14:break;default:a=0;break b;}a=1;}break a;}a=1;}return a;} +function VH(a){Mb_$callClinit();switch(a){case 9:case 10:case 11:case 12:case 13:case 28:case 29:case 30:case 31:break;case 160:case 8199:case 8239:return 0;default:a:{switch(Gv(a)){case 12:case 13:case 14:break;default:a=0;break a;}a=1;}return a;}return 1;} +function Js(){RY=ZQ($rt_charcls());TY=AR(Mb,128);} +function DM(){return {"value":"PA-Y$;Y$679:95Y#J+Y#Z$Y#B;697<8:1=<=:L#<#Y#<,&?L$9B8:B(C9:C)!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!C#!#!#!#!#!#!#!#!C#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#B##!#!C$B##!#B##B$C#B%#B##B$C$B##B##!#!#B##!C#!#B##B$#!#B#C#&!C$F%!$#!$#!$#!#!#!#!#!#!#!#!C#!#!#!#!#!#!#!#!#!C#!$#!#B$#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!C(B##B#C#!#B%#!#!#!#!Cg&C?6_#?6>Y)./Q&-Y*>?Y%X#Y$:67Y,:98Y+-Q& Q+,%A#L'Z$67%L+Z$67 E.A$[AA1G.H%'H$G-A0^#!^%!^##B$C#B$#=!^#:B&^'!=!=!=B%=#B%#F%#^#C#B#Z&!C%=:^##=L1KD!#K%,^#A%Z&^&Z#^%:^#:^#:^(:^@Z#^#:=:^@b:-% ^)6767^5Z#^(67b=2! :^?Z:^IZ'^gA:^,A6L^^pL7b=X# :^*:^WZ)b=P! :b=Y$ 67676767676767L?^MZ&67Z@6767676767Z1b= % b:$# 6767676767676767676767Za6767ZA67b:#% ^QZ6^#Z'^HA#^AA#^CA$^- ^*A:^%A1BP CP !#B$C#!#!#!#B%#!C#!C'E#B$#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!C#^'!#!#G$!#A&Y%,Y#CG #A&#A#FYA(%9A/'F8A*F( F( F( F( F( F( F( F( GAY#>?>?Y$>?9>?Y*5Y#59>?Y#>?67676767Y&%Y+U#Y%596Y(AW^; b=:! A-b=7$ A;^-A%-Y$=%&+6767676767^#6767676756W#=K*G%I#5E&^#K$%&9^# b&7! A#G#]#E#&5b&;! 9E$&A&FKA#b&?! ^#L%^+FA$G$)FP'I#G%I#'I%Y. %J+A%Y#F&'%F*J+F& FJG'I#G#I#G#A*F$'F)')A#J+A#Y%F1%F'^$&)')FS'&G$F#G#F&G#&'&A9F#%Y#F,)G#I#Y#&E#)'A+F'A#F'A#F'A*F( F( CLA$FRA0'LL#9F>L$AAF)=F=G#A%L&Y(A*FWA$Y(F7A#L)F4A&L)F3A(Y%A-L(b 1! FkAXBTA.CTA(L'b A& L@b !' )')FVG0Y(A%L5J+A0G$)FNI$G%I#G#Y#1Y%A/F:A(J+A'G$FEG&)G) J+Y%A-FD'Y#&A*G#)FQI$G*I#F%Y&G$9A#J+&9&Y$ L5A,F3 F:I$G$I#')G#Y''AcF( & F% F0 F+9A'FP'I$G)A&J+A'G#I# F)A#F#A#F7 F( F# F&A#'&I#'I%A#I#A#I$A#&A')A&F&I#A#G(A$G&b ,# FVI$G)I#G$)'F%Y&J+ 9 9ACFQI$G')'I%G#)G#F#9&A)J+b G# FPI$G%A#I%G#)G#Y8F%G#ACFQI$G)I#')G#Y$&A,J+A'Y.A4FL')'I#G')'A)J+AWF;A$G$I#G%)G&A%J+L#Y$=b A& BACAJ+L*A-&b % &G'I#G#FIG')&G%Y)'A)&G'I#G$FIA#F%G.)G#Y$ Y&A>FZb (% F* FF)G( G')'&Y&A+J+L4A$Y#F?A#G7 )G()G#)G#AkF( F# FGG'A$' G# G(&'A)J+b G+ b&;/ b G! b+P! Y&A,b&%$ b ^K b&P1 b 2a b&(* b Z'#b&Z) A(F@ J+A%Y#b A! F?A#G&9A+FQG(Y&^%E%9=A+J+ L( F6A&F4b Q. FgA,&IOA1G%E.AbE#A?&b L@!&A4b&T, b .5#b&@% b 2! b&-' b %E b&L! A&F.A$F*A(F+A#=G#9Q%b =.!b=W$ A+^HA#^^I#G$^$I'Q)G)^#G(^?G%^]A8^dG$=b [# b=8! A*L3b /# B;C;B;C( C3B;C;! B#A#!A#B#A#B% B)C% # C( C,B;C;B# B%A#B) B( C;B# B% B& !A$B( C;B;C;B;C;B;C;B;C;B;C;B;C=A#B::C::C'B::C::C'B::C::C'B::C::C'B::C::C'!#A#JSb= ) GX^%GS^)'^/'^#Y&A0G& G0b 16 G( G2A#G( G# G&b 6@ b&&$ A#L*G(AJBCCCG(A&J+A%Y#b A3 F% F< F# &A#& F+ F% & &A'&A%& & & F$ F# &A#& & & & & F# &A#F% F( F% F% & F+ F2A&F$ F& F2AUZ#b /% ^MA%b=E! A-^0A#^0 ^0 ^FA+L.A$^@ ^^A%^_AZ^>A.^MA%^*A(^#A/^'b ;# b=]$ ]&b=6, A,^.A$^*A(b=U! A-b=6! AL^-A%^YA)^+A'^IA)^?b 3! ^-A%^P ^.A$^=A5^9AI=A0^8b :9 &b %b %b 6<#&AJ&b T !&A,&b =$ &A#&b ;!&A/&b PU!&b @Q b&?) b %b %b %b %b %b %b %b %b %b %b %b %b %b %b %b %b %b %b %b %b %b %b %b %b %b %b %b %b %b %b %b %b %b %b %b %b %b %b %b %b %b %b %b %b D8 1A?b1A! b # b'Q$ b %b %b %b 1Y$3b %b %b %b ^a$3A#3b %b %b %b ^a$3"} +;} +function Yf(){E.call(this);this.Xi=null;} +function VY(b){var $r=new Yf();IG($r,b);return $r;} +function PI($t){return Ds($t.Xi)!=1?0:1;} +function IG($t,a){$t.Xi=a;} +function Kd(){E.call(this);} +function Lk(){var a=this;E.call(a);a.fk=null;a.ek=null;} +function WY(b,c){var $r=new Lk();ZH($r,b,c);return $r;} +function KA($t){var a,b,c,d;a=$t.fk;b=$t.ek;c=AR(E,1);a=a;a=a.aj;c=c;d=a!==b.kl?0:1;Bc_$callClinit();a=d==0?EU:FU;c=c.data;c[0]=a;return c[0].Kj==0?EU:FU;} +function ZH($t,a,b){$t.fk=a;$t.ek=b;} +function Vg(){var a=this;M.call(a);a.Zb=null;a.Le=null;} +function XY(b){var $r=new Vg();Vw($r,b);return $r;} +function Vw($t,a){var b;b=new Al;$t.Wk=b;$t.Zb=a;} +function Sr($t){var a,b,c,d,e,f,g;$t.Zb.m();if($t.Le===null){a=new Te;b=$t.Wk;Te_$callClinit();c=new Zi;c.ph=AR(E,9);a.Lb=c;c=new Pi;d=10;c.gk=AR(E,d);a.vk=c;a.ji=b;$t.Zb.o(a);$t.Le=a.vk;}a=$t.Le;e=0;f=a.ch;g=a.lj;a:{while((e>=g?0:1)!=0){if(f=a.lj){break a;}a.gk.data[e].d();e=d;}return;}a=new Pc;a.Ce=1;a.gl=1;HD(a);WQ(a);} +function CK($t){var a,b,c,d,e;a:{if($t.Le!==null){a=$t.Le;b=0;c=a.ch;d=a.lj;while((b>=d?0:1)!=0){if(c=a.lj){break a;}a.gk.data[b].e();b=e;}$t.Le=null;}Qv($t.Wk);return;}a=new Pc;a.Ce=1;a.gl=1;HD(a);WQ(a);} +function Hl(){E.call(this);} +function YY(){var $r=new Hl();Uz($r);return $r;} +function ZY(b){var $r=new Hl();Xp($r,b);return $r;} +function DJ($t,a){var b,c,d,e,f,g,h,i,j,k,l,$$je;b=GR(19);if(a===null){AP(b);}c=new Ze;b=new Nc;Nc_$callClinit();b.uc=window.localStorage;Nf(c,b);b=new Of;d=window;e=new Pi;f=10;e.gk=AR(E,f);b.vc=e;e=new Dj;e.cc=b;b.sk=e;if(b.Tj!==null){c=new Fh;b=GR(11);c.Ce=1;c.gl=1;c.Xf=b;WQ(c);}b.Tj=d;VP(d,b.sk);d=ZQ(Xc);Ce_$callClinit();e=TV;g=window;h=new Hh;h.pf=g;if(d.bh===null){g=d.Xh;g=$rt_str(g.$meta.name);Vc_$callClinit();d.bh=g;}a:{b:{c:{g=d.bh;switch(Nt(g)){case 1344771639:break;case -1064886025:break c;default:break b;}if +(XG(g,GR(2))==0){break b;}IP(ZQ(Xc));break a;}if(XG(g,GR(3))!=0){IP(ZQ(Xc));break a;}}}d=h;g=new Nh;g.gi=d;b.mg=g;b.bl=e;d=c;e=b.vc;i=0;j=e.ch;k=e.lj;d:{e:{while(true){if((i>=k?0:1)==0){f=0;break d;}if(j=e.lj){break;}f:{g=e.gk.data[i];if(g!==null){if(g.I(d)==0){break f;}else{break e;}}if(d===null){break e;}}i=l;}b=new Pc;Kx(b);WQ(b);}f=1;}if(f==0){e=b.vc;TJ(e,e.lj,d);}Wy(b);b=window.document.body;Ic_$callClinit();d=c.constructor;if(d!==null&&d.classObject +===null){e=new Sl;e.Xh=d;d.classObject=e;}d=new Wg;d.kk=c;c=new Dh;c.nf=d;c=c;e=new Zk;e.Lf=b;b=new Ok;c=RC(c);b.Wk=e;b.Yj=c;KD(e,c.Wk,null);c=PU;TJ(c,c.lj,b);RU=1;g:{try{PM(b);break g;}catch($$e){$$je=$$e.$javaException;if($$je){b=$$je;}else {throw $$e;}}RU=0;WQ(b);}RU=0;} +function Uz($t){} +function Xp($t,a){} +function Gj(){var a=this;M.call(a);a.dh=null;a.Lj=null;a.Sk=null;a.Xc=false;} +function AZ(b){var $r=new Gj();KK($r,b);return $r;} +function KK($t,a){$t.Wk=a;} +function Yr($t,a){$t.dh=a;} +function AF($t){var a,b,c;a=$t.dh.g();if($t.Xc!=0&&HO($t.Sk,a)!=0){return;}$t.Xc=1;$t.Sk=a;if($t.Lj!==null){Qv($t.Lj);$t.Lj=null;}b=new Fj;c=window.document;Vc_$callClinit();a=c.createTextNode($rt_ustr(a===null?GR(10):a.v()));b.Kc=a;$t.Lj=b;KD($t.Wk,$t.Lj,null);} +function Jf(){O.call(this);} +var QS=null;function Jf_$callClinit(){Jf_$callClinit=function(){}; +Dv();} +function BZ(){var $r=new Jf();Tj($r);return $r;} +function CG($t,a){var b,c;a=a;b=GR(13);if(a===null){AP(b);}c=a.Rk;Bc_$callClinit();return c==0?EU:FU;} +function Su($t,a){var b;b=GR(13);if(a===null){AP(b);}return a.Rk;} +function Tj($t){var a;Jf_$callClinit();a=1;$t.fd=a;} +function Dv(){var a,b;a=new Jf;b=1;a.fd=b;QS=a;} +function Nn(){E.call(this);} +function SQ(a,b){if(a===null){AP(b);}} +function AP(a){var b,c,d,e,f,g,h,i,j,k;Jb_$callClinit();b=AR(Vn,0).data[3];c=b.Dm();d=b.Em();e=new Fd;b=new Sg;S_$callClinit();f=16;b.ke=$rt_createCharArray(f);g=GR(70);WA(b,b.Ii,g);WA(b,b.Ii,c);c=GR(71);WA(b,b.Ii,c);WA(b,b.Ii,d);c=GR(72);WA(b,b.Ii,c);WA(b,b.Ii,a);a=new Vc;h=b.ke;f=0;i=b.Ii;Vc_$callClinit();a.pb=$rt_createCharArray(i);j=0;while(j=$t.wf?0:1;} +function WH($t){var a;if($t.Hi.Ff<$t.wf){return GE($t.Hi);}a=new Rn;a.Ce=1;a.gl=1;WQ(a);} +function Ng(){U.call(this);} +function IZ(){var $r=new Ng();SM($r);return $r;} +function FA($t,a,b){var c,d,e,f,g,h,i;a=a;b=b;c=b;if((c===null?1:0)!=0){c=null;}else{if((JP(c)?1:0)==0&&(VQ(c)?1:0)==0){a=new Fd;b=new Sg;S_$callClinit();d=16;b.ke=$rt_createCharArray(d);WA(b,b.Ii,GR(73));WA(b,b.Ii,$rt_str(JSON.stringify(c)));WA(b,b.Ii,GR(74));WA(b,b.Ii,GR(21));c=new Vc;e=b.ke;d=0;f=b.Ii;Vc_$callClinit();c.pb=$rt_createCharArray(f);g=0;while(g=e?0:1)!=0){if(d=b.lj){break a;}b.gk.data[c].C(a);c=f;}}return;}a=new Pc;a.Ce=1;a.gl=1;HD(a);WQ(a);} +function Fo($t,a){var b,c,d;if($t.Jd===null){$t.Jd=a;b=$t.hh;a=new Uj;a.Dg=$t;$t.Ng=a;b.addEventListener("change",TN($t.Ng,"handleEvent"));}else if(BR($t.Jd,Ec)!=0){c=$t.Jd;TJ(c,c.lj,a);}else{c=new Pi;d=2;c.gk=AR(E,d);TJ(c,c.lj,$t.Jd);TJ(c,c.lj,a);$t.Jd=c;}} +function RA($t,a){var b,c,d,e;if($t.Jd!==null){if($t.Jd===a){$t.hh.removeEventListener("change",TN($t.Ng,"handleEvent"));$t.Ng=null;$t.Jd=null;}else if(BR($t.Jd,Ec)!=0){b=$t.Jd;c=b.lj;d=0;a:{b:{while(true){if(d>=c){d= -1;break a;}if(d<0){break;}if(d>=b.lj){break;}c:{e=b.gk.data[d];if(a===null){if(e!==null){break c;}else{break b;}}if((a!==e?0:1)!=0){break b;}}d=d+1|0;}a=new Pc;KF(a);WQ(a);}}if(d>=0){Zz(b,d);}if(b.lj==1){d=0;if(d>=b.lj){a=new Pc;a.Ce=1;a.gl=1;WQ(a);}$t.Jd=b.gk.data[d];}}}} +function KJ($t){var a;a=new Uj;a.Dg=$t;$t.Ng=a;} +function BE($t){return $rt_str($t.hh.value);} +function Cu($t,a){Ft($t,$rt_str($t.hh.value));} +function Ue(){E.call(this);} +function Ff(){E.call(this);} +function Ef(){E.call(this);} +function Qe(){E.call(this);} +function VP(a,b){var c;c=GR(75);a.addEventListener($rt_ustr(c),TN(b,"handleEvent"));} +function Cm(){var a=this;E.call(a);a.Qg=null;a.Ag=null;} +function NZ(){var $r=new Cm();LA($r);return $r;} +function LA($t){var a,b,c,d,e;a=new Jn;b=16;c=0.75;b=CQ(b);a.qd=0;a.Ae=AR(Ah,b);a.ql=c;a.Pj=a.Ae.data.length*a.ql|0;$t.Qg=a;a=new Xk;d=new Jn;b=16;c=0.75;e=CQ(b);d.qd=0;d.Ae=AR(Ah,e);d.ql=c;d.Pj=d.Ae.data.length*d.ql|0;a.ci=d;$t.Ag=a;} +function LD($t,a){var b,c,d,e,f,g,h,i,j;b=$t.Ag;if((HF(b.ci,a,b)!==null?0:1)!=0){return;}c=new Fd;b=new Sg;S_$callClinit();d=16;b.ke=$rt_createCharArray(d);WA(b,b.Ii,GR(76));d=b.Ii;if(a===null){a=GR(10);}else{e=new Sg;Ti(e);f=A(a.constructor);if(f.bh===null){f.bh=IK(MP(f.Xh));}Ou(e,f.bh);Ou(e,GR(0));g=Xo(a);Dd_$callClinit();Ou(e,Mz(g,16));a=Br(e);}Vc_$callClinit();WA(b,d,a);a=new Vc;h=b.ke;d=0;g=b.Ii;a.pb=$rt_createCharArray(g);i=0;while(i=1073741823){b=2147483647;}else{c=$t.gk.data.length*2|0;b=5;if(c>b){b=c;}if(a>b){b=a;}}$t.gk=FQ($t.gk,b);}} +function Hz($t,a){var b;if(a>=0&&a<$t.lj){return $t.gk.data[a];}b=new Pc;b.Ce=1;b.gl=1;WQ(b);} +function Yu($t){return $t.lj;} +function Xq($t,a,b){var c;if(a>=0&&a<$t.lj){c=$t.gk.data[a];$t.gk.data[a]=b;return c;}b=new Pc;b.Ce=1;b.gl=1;WQ(b);} +function TJ($t,a,b){var c;if(a>=0&&a<=$t.lj){Hs($t,$t.lj+1|0);c=$t.lj;while(c>a){$t.gk.data[c]=$t.gk.data[c-1|0];c=c+ -1|0;}$t.gk.data[a]=b;$t.lj=$t.lj+1|0;$t.ch=$t.ch+1|0;return;}b=new Pc;b.Ce=1;b.gl=1;WQ(b);} +function Zz($t,a){var b;if(a>=0&&a<$t.lj){b=$t.gk.data[a];$t.lj=$t.lj-1|0;while(a<$t.lj){$t.gk.data[a]=$t.gk.data[a+1|0];a=a+1|0;}$t.gk.data[$t.lj]=null;$t.ch=$t.ch+1|0;return b;}b=new Pc;b.Ce=1;b.gl=1;WQ(b);} +function NC($t,a){var b,c,d;b=$t.lj;c=0;a:{b:{c:{while(c=$t.lj){break a;}d:{d=$t.gk.data[c];if(a===null){if(d!==null){break d;}else{break c;}}if((a!==d?0:1)!=0){break c;}}c=c+1|0;}c= -1;break b;}}if(c<0){return 0;}Zz($t,c);return 1;}a=new Pc;a.Ce=1;a.gl=1;HD(a);WQ(a);} +function Nv($t){var a,b,c,d,e,f;a=$t.gk;b=0;c=$t.lj;d=null;if(b<=c){while(b=0&&a<$t.lj){return;}b=new Pc;b.Ce=1;b.gl=1;WQ(b);} +function AA($t,a){var b;if(a>=0&&a<=$t.lj){return;}b=new Pc;b.Ce=1;b.gl=1;WQ(b);} +function Ne(){E.call(this);} +function Qh(){E.call(this);} +function XD($t,a,b){QZ($t,$rt_str(a),GO(b,"handleEvent"));} +function JK($t,a,b,c){RZ($t,$rt_str(a),GO(b,"handleEvent"),c?1:0);} +function OD($t,a){return !!SZ($t,a);} +function IF($t,a,b){TZ($t,$rt_str(a),GO(b,"handleEvent"));} +function EJ($t,a){return KS($t,a);} +function Vx($t){return LS($t);} +function Np($t,a,b,c){UZ($t,$rt_str(a),GO(b,"handleEvent"),c?1:0);} +function Uf(){var a=this;E.call(a);a.vi=null;a.hi=null;a.Oe=null;a.ug=0;a.ic=0;a.Df=null;} +function VZ(b,c,d,e){var $r=new Uf();Ax($r,b,c,d,e);return $r;} +function Ax($t,a,b,c,d){$t.Df=a;a=$t.Df;$t.ic=a.ch;$t.vi=b;$t.hi=c;$t.ug=d;} +function QK($t){return $t.vi===null?0:1;} +function Lu($t){var a,b;a=$t.ic;b=$t.Df;if(a=b.ch){return;}b=new Tl;b.Ce=1;b.gl=1;WQ(b);} +function Bd(){var a=this;E.call(a);a.Nf=null;a.Hc=null;a.ac=null;} +var OY=27;var WZ=null;function Bd_$callClinit(){Bd_$callClinit=function(){}; +RL();} +function QV(b){var $r=new Bd();Eh($r,b);return $r;} +function My($t){return $t.Nf;} +function BI($t,a){var b;b=GR(14);if(a===null){AP(b);}$t.Nf=a;} +function Os($t){var a,b,c;a=$t.ac.hh;b=GR(77);c=$t.Hc;a.addEventListener($rt_ustr(b),TN(c,"handleEvent"));} +function SI($t){var a,b,c;a=$t.ac.hh;b=GR(77);c=$t.Hc;a.removeEventListener($rt_ustr(b),TN(c,"handleEvent"));} +function Eh($t,a){var b;Bd_$callClinit();b=GR(31);if(a===null){AP(b);}$t.ac=a;Ve_$callClinit();$t.Nf=XZ;a=new Sh;a.xh=$t;$t.Hc=a;} +function RL(){var a;a=new Sn;WZ=a;OY=27;} +function WF(){Bd_$callClinit();return OY;} +function Mc(){var a=this;T.call(a);a.Jb=null;a.Qd=0;a.bf=0;} +function YZ(b,c,d){var $r=new Mc();UJ($r,b,c,d);return $r;} +function UJ($t,a,b,c){$t.Jb=a;$t.ch=$t.Jb.ch;$t.Qd=b;$t.bf=c-b|0;} +function Cw($t){return Gz($t,0);} +function Gz($t,a){var b,c,d,e,f;if($t.ch!=$t.Jb.ch){b=new Tl;b.Ce=1;b.gl=1;WQ(b);}if(0<=a&&a<=$t.bf){b=new Bm;c=$t.Jb;a=a+$t.Qd|0;d=new Hg;e=c.ch;f=c.xk.data.length;d.Ik=c;d.Ff=a;d.Ef=a;d.qf=e;d.Bf=f;a=$t.Qd;e=$t.bf;b.Hi=d;b.Pg=$t;b.de=a;b.wf=b.de+e|0;return b;}b=new Pc;b.Ce=1;b.gl=1;WQ(b);} +function Sp($t){var a;if($t.ch==$t.Jb.ch){return $t.bf;}a=new Tl;a.Ce=1;a.gl=1;WQ(a);} +function Hj(){Mc.call(this);} +function ZZ(b,c,d){var $r=new Hj();AC($r,b,c,d);return $r;} +function AC($t,a,b,c){$t.Jb=a;$t.ch=$t.Jb.ch;$t.Qd=b;$t.bf=c-b|0;} +function Vc(){var a=this;E.call(a);a.pb=null;a.Nb=0;} +var A0=null;var B0=null;function Vc_$callClinit(){Vc_$callClinit=function(){}; +PF();} +function B(b){var $r=new Vc();Gh($r,b);return $r;} +function BS(b,c,d){var $r=new Vc();Un($r,b,c,d);return $r;} +function Gh($t,a){var b,c;Vc_$callClinit();a=a.data;b=a.length;$t.pb=$rt_createCharArray(b);c=0;while(c=0&&a<$t.pb.data.length){return $t.pb.data[a];}b=new Fn;b.Ce=1;b.gl=1;WQ(b);} +function C($t){return $t.pb.data.length;} +function HK($t){return $t.pb.data.length!=0?0:1;} +function D($t,a,b,c,d){var e,f,g;if(a>=0&&a<=b&&b<=$t.Uh()&&d>=0){c=c.data;if((d+(b-a|0)|0)<=c.length){while(a$t.pb.data.length){return 0;}c=0;while(c=$t.ph.data.length){$t.Nh=0;}$t.jc=$t.jc+1|0;return a;} +function AL($t){return ($t.Nh!=$t.Bb?0:1)!=0?null:$t.ph.data[$t.Nh];} +function Rx($t){return ($t.Nh!=$t.Bb?0:1)!=0?null:$t.ph.data[$t.Nh];} +function HM($t,a){DG($t,a);} +function Lz($t){var a;a=IL($t);if(a!==null){return a;}a=new Rn;a.Ce=1;a.gl=1;WQ(a);} +function Is($t){return $t.Bb>=$t.Nh?$t.Bb-$t.Nh|0:($t.ph.data.length-$t.Nh|0)+$t.Bb|0;} +function Fu($t){return $t.Nh!=$t.Bb?0:1;} +function HJ($t,a){var b,c,d,e,f;if(a<$t.ph.data.length){return;}b=$t.ph.data.length*2|0;c=((a*3|0)/2|0)+1|0;if(b>c){c=b;}if(c<1){c=2147483647;}d=AR(E,c);b=0;if($t.Nh<=$t.Bb){e=d.data;f=$t.Nh;while(f<$t.Bb){a=b+1|0;e[b]=$t.ph.data[f];f=f+1|0;b=a;}}else{e=d.data;f=$t.Nh;while(f<$t.ph.data.length){a=b+1|0;e[b]=$t.ph.data[f];f=f+1|0;b=a;}f=0;while(f<$t.Bb){a=b+1|0;e[b]=$t.ph.data[f];f=f+1|0;b=a;}}$t.Nh=0;$t.Bb=b;$t.ph=d;} +function Ve(){E.call(this);} +var XZ=null;function Ve_$callClinit(){Ve_$callClinit=function(){}; +MF();} +function P0(){var $r=new Ve();Jm($r);return $r;} +function DE($t){return;} +function Jm($t){Ve_$callClinit();} +function MF(){var a;a=new Ve;XZ=a;} +function Fh(){Z.call(this);} +function Q0(){var $r=new Fh();CC($r);return $r;} +function R0(b){var $r=new Fh();Zu($r,b);return $r;} +function CC($t){$t.Ce=1;$t.gl=1;} +function Zu($t,a){$t.Ce=1;$t.gl=1;$t.Xf=a;} +function Ui(){var a=this;E.call(a);a.Hk=null;a.Cf=null;a.bd=null;a.Ri=null;} +function S0(b){var $r=new Ui();TI($r,b);return $r;} +function TI($t,a){var b;b=new Uh;b.Wc=$t;$t.Ri=b;$t.Hk=a.hh;} +function LM($t,a){$t.bd=a;} +function Gp($t){$t.bd.h($t.Ri);} +function GL($t){return;} +function TM($t,a){$t.Cf=a;$t.Hk.href='#'+$rt_ustr($t.Cf);} +function Rg(){L.call(this);} +function F(){var $r=new Rg();Iy($r);return $r;} +function Iy($t){$t.Ce=1;$t.gl=1;} +function En(){E.call(this);} +function NQ(a){var b,c;b=ZQ(En);if(b.bh===null){c=b.Xh;c=$rt_str(c.$meta.name);Vc_$callClinit();b.bh=c;}return BP(a,b.bh);} +function HP(a,b){var c,d,e,f,g,h,i;if(a===null){c=GR(10);}else{a=a.constructor;if(a===null){d=null;}else{d=a.classObject;if(d===null){d=new Sl;d.Xh=a;a.classObject=d;}}if(d.bh===null){a=$rt_str(d.Xh.$meta.name);Vc_$callClinit();d.bh=a;}c=d.bh;}a=new Sg;S_$callClinit();e=16;a.ke=$rt_createCharArray(e);WA(a,a.Ii,c);c=GR(79);WA(a,a.Ii,c);WA(a,a.Ii,b);b=new Vc;f=a.ke;e=0;g=a.Ii;Vc_$callClinit();b.pb=$rt_createCharArray(g);h=0;while(hb){b=a;}return b;} +function Yi(){var a=this;E.call(a);a.ik=null;a.fh=null;a.nj=false;a.ml=null;} +function T0(b){var $r=new Yi();Hq($r,b);return $r;} +function Hq($t,a){var b;b=new Xl;b.ah=$t;$t.ml=b;$t.ik=a.hh;} +function Nu($t,a){$t.fh=a;} +function NG($t){if($t.nj==0){$t.nj=1;$t.ik.addEventListener("change",TN($t.ml,"handleEvent"));}} +function Gt($t){if($t.nj!=0){$t.nj=0;$t.ik.removeEventListener("change",TN($t.ml,"handleEvent"));}} +function LO(a){return a.ik;} +function VN(a){return a.fh;} +function Hm(){E.call(this);this.te=null;} +function U0(b){var $r=new Hm();NH($r,b);return $r;} +function IB($t){var a;a=$t.te.he;Lb_$callClinit();return (a!==KU?0:1)==0?GR(15):GR(80);} +function NH($t,a){$t.te=a;} +function Em(){E.call(this);this.eg=null;} +function V0(b){var $r=new Em();Ay($r,b);return $r;} +function Ss($t){var a,b,c;a=$t.eg;b=AR(E,1);c=ZB(a)<=0?0:1;Bc_$callClinit();a=c==0?EU:FU;b=b.data;b[0]=a;return b[0].Kj==0?EU:FU;} +function Ay($t,a){$t.eg=a;} +function Gm(){E.call(this);this.rj=null;} +function W0(b){var $r=new Gm();YC($r,b);return $r;} +function Yp($t){var a;a=$t.rj.he;Lb_$callClinit();return (a!==LU?0:1)==0?GR(15):GR(80);} +function YC($t,a){$t.rj=a;} +function Xj(){var a=this;M.call(a);a.rf=null;a.Rf=null;a.Ye=null;a.We=false;} +function X0(b){var $r=new Xj();QM($r,b);return $r;} +function QM($t,a){$t.Wk=a;} +function Jo($t,a){$t.rf=a;} +function Vq($t,a){$t.Rf=a;} +function YE($t){var a;a=$t.rf.g().Kj;if($t.We!=a){if(a==0){Qv($t.Ye.Wk);}else{if($t.Ye===null){$t.Ye=$t.Rf.l();}KD($t.Wk,$t.Ye.Wk,null);}}$t.We=a;if($t.We!=0){Sr($t.Ye);}} +function MA($t){var a,b,c,d,e,f;if($t.Ye!==null){a:{a=$t.Ye;if(a.Le!==null){b=a.Le;c=0;d=b.ch;e=b.lj;while(true){if((c>=e?0:1)==0){a.Le=null;break a;}if(d=b.lj){break;}b.gk.data[c].e();c=f;}a=new Pc;KF(a);WQ(a);}}Qv(a.Wk);}Qv($t.Wk);} +function Fm(){E.call(this);this.td=null;} +function Y0(b){var $r=new Fm();Hu($r,b);return $r;} +function GG($t){var a;a=$t.td.he;Lb_$callClinit();return (a!==NU?0:1)==0?GR(15):GR(80);} +function Hu($t,a){$t.td=a;} +function Ac(){var a=this;E.call(a);a.vf=0;a.Vb=0;a.oj=0;} +var Z0=null;function Ac_$callClinit(){Ac_$callClinit=function(){}; +Px();} +function A1(b,c,d){var $r=new Ac();Bl($r,b,c,d);return $r;} +function Yw($t){return AU($t.vf,$t.Vb,$t.oj);} +function Ws($t){return AU($t.vf,$t.Vb,$t.oj);} +function Bl($t,a,b,c){var d,e;Ac_$callClinit();if(c!=0){$t.vf=a;$t.Vb=FP(a,b,c);$t.oj=c;return;}d=new Fd;e=GR(81);d.Ce=1;d.gl=1;d.Xf=e;WQ(d);} +function Px(){var a;a=new Rh;Z0=a;} +function Kc(){Ac.call(this);} +var B1=null;var C1=null;function Kc_$callClinit(){Kc_$callClinit=function(){}; +RB();} +function D1(b,c){var $r=new Kc();Ni($r,b,c);return $r;} +function Ni($t,a,b){var c;Kc_$callClinit();c=1;Ac_$callClinit();$t.vf=a;$t.Vb=FP(a,b,c);$t.oj=c;} +function RB(){var a,b,c,d;a=new Ck;C1=a;a=new Kc;b=1;c=0;d=1;Ac_$callClinit();a.vf=b;a.Vb=FP(b,c,d);a.oj=d;B1=a;} +function Mk(){Fc.call(this);} +function Gb(){E.call(this);} +function Kk(){E.call(this);this.Fk=null;} +function E1(b){var $r=new Kk();Gr($r,b);return $r;} +function Du($t,a){var b,c,d;b=$t.Fk;c=AR(E,1);d=a.Kj;Bc_$callClinit();a=d==0?EU:FU;c=c.data;c[0]=a;Iu(b,c[0].Kj);TL();} +function Gr($t,a){$t.Fk=a;} +function Hk(){E.call(this);this.cf=null;} +function F1(b){var $r=new Hk();EG($r,b);return $r;} +function DN($t,a){var b,c,d;b=$t.cf;c=AR(E,1).data;c[0]=a;a=c[0];d=GR(14);if(a===null){AP(d);}b.wb=a;TL();} +function EG($t,a){$t.cf=a;} +function Ik(){E.call(this);this.nc=null;} +function G1(b){var $r=new Ik();UC($r,b);return $r;} +function UE($t,a){var b,c,d;b=$t.nc;b=b.aj;c=AR(E,1).data;c[0]=a;a=c[0];d=GR(14);if(a===null){AP(d);}b.Ok=a;TL();} +function UC($t,a){$t.nc=a;} +function Jk(){E.call(this);this.qc=null;} +function H1(b){var $r=new Jk();Kw($r,b);return $r;} +function Kv($t,a){var b,c;b=$t.qc;b=b.aj;c=AR(E,1).data;c[0]=a;b.Rk=c[0].Kj;TL();} +function Kw($t,a){$t.qc=a;} +function Oj(){E.call(this);} +function WP(a){a=new Ng;return a;} +function Pb(){var a=this;Hb.call(a);a.qb=null;a.Ph=null;} +function I1(){var $r=new Pb();GI($r);return $r;} +function GI($t){} +function LH($t,a){KD($t,a,null);} +function KD($t,a,b){var c,d,e,f;if(a.pd!==null){a=new Fd;b=GR(82);a.Ce=1;a.gl=1;a.Xf=b;WQ(a);}if(b!==null&&b.pd!==$t){a=new Fd;b=GR(83);a.Ce=1;a.gl=1;a.Xf=b;WQ(a);}a.pd=$t;if(b===null){a.yj=$t.Ph;if($t.Ph===null){$t.qb=a;}else{$t.Ph.ei=a;}$t.Ph=a;}else{a.ei=b;a.yj=b.yj;if(a.ei===null){$t.Ph=a;}else{a.ei.yj=a;}if(a.yj===null){$t.qb=a;}else{a.yj.ei=a;}}c=$t;while(c.pd!==null){c=c.pd;}d=c instanceof Zk==0?null:c;if(d===null){return;}e=new Array();a.N(e);if(e.length==0){return;}a:{if(b===null){c=null;while($t!== +null){if($t.ei!==null){c=$t.ei.eb();break a;}$t=$t.pd;}}else{a=b.qb;b:{while(true){if(a===null){c=null;break b;}c=a.eb();if(c!==null){break;}a=a.ei;}}}}f=0;while(f=1073741824){return 1073741824;}if(a==0){return 16;}b=a-1|0;a=b|b>>1;a=a|a>>2;a=a|a>>4;a=a|a>>8;return (a|a>>16)+1|0;} +function XI($t,a,b){var c;if(a>=0&&b>0.0){a=CQ(a);$t.qd=0;$t.Ae=AR(Ah,a);$t.ql=b;$t.Pj=$t.Ae.data.length*$t.ql|0;return;}c=new Fd;c.Ce=1;c.gl=1;WQ(c);} +function By($t){$t.Pj=$t.Ae.data.length*$t.ql|0;} +function HG($t,a){var b,c;if(a===null){b=MM($t);}else{c=Nt(a);b=WD($t,a,c&($t.Ae.data.length-1|0),c);}if(b===null){return null;}return b.pi;} +function Kr($t,a){var b,c;if(a===null){b=MM($t);}else{c=Nt(a);b=WD($t,a,c&($t.Ae.data.length-1|0),c);}return b;} +function WD($t,a,b,c){var d,e;d=$t.Ae.data[b];while(d!==null){if(d.Rc==c){e=d.gg;if((a!==e&&a.I(e)==0?0:1)!=0){break;}}d=d.cg;}return d;} +function MM($t){var a;a=$t.Ae.data[0];while(a!==null){if(a.gg===null){break;}a=a.cg;}return a;} +function Qr($t,a,b){return HF($t,a,b);} +function HF($t,a,b){var c,d,e,f;if(a===null){c=MM($t);if(c===null){$t.Lk=$t.Lk+1|0;d=null;e=0;f=0;c=new Ah;a=null;c.gg=d;c.pi=a;c.Rc=f;c.cg=$t.Ae.data[e];$t.Ae.data[e]=c;e=$t.qd+1|0;$t.qd=e;if(e>$t.Pj){WE($t,$t.Ae.data.length);}}}else{e=a.Y();f=e&($t.Ae.data.length-1|0);c=WD($t,a,f,e);if(c===null){$t.Lk=$t.Lk+1|0;c=new Ah;d=null;c.gg=a;c.pi=d;c.Rc=e;c.cg=$t.Ae.data[f];$t.Ae.data[f]=c;e=$t.qd+1|0;$t.qd=e;if(e>$t.Pj){WE($t,$t.Ae.data.length);}}}d=c.pi;c.pi=b;return d;} +function Nx($t,a,b,c){var d,e;d=new Ah;e=null;d.gg=a;d.pi=e;d.Rc=c;d.cg=$t.Ae.data[b];$t.Ae.data[b]=d;return d;} +function WE($t,a){var b,c,d,e,f,g,h;b=CQ(a==0?1:a<<1);c=AR(Ah,b);d=c.data;e=0;b=b-1|0;while(e<$t.Ae.data.length){f=$t.Ae.data[e];$t.Ae.data[e]=null;while(f!==null){g=f.Rc&b;h=f.cg;f.cg=d[g];d[g]=f;f=h;}e=e+1|0;}$t.Ae=c;$t.Pj=$t.Ae.data.length*$t.ql|0;} +function Uy($t){WE($t,$t.Ae.data.length);} +function RO(a){return a.Y();} +function EO(a,b){return a!==b&&a.I(b)==0?0:1;} +function Sj(){var a=this;E.call(a);a.Vk=null;a.Ze=null;a.ec=false;} +function S1(b){var $r=new Sj();UM($r,b);return $r;} +function UM($t,a){$t.ec=1;$t.Vk=a.hh;} +function Ux($t,a){$t.Ze=a;} +function Wu($t){var a;a=Pq($t.Ze).Kj;if(a!=$t.ec){$t.ec=a;$t.Vk.disabled=!!(a!=0?0:1);}} +function Jy($t){return;} +function Je(){O.call(this);} +var JU=null;function Je_$callClinit(){Je_$callClinit=function(){}; +Bz();} +function T1(){var $r=new Je();Qj($r);return $r;} +function KG($t,a){var b;a=a;b=GR(13);if(a===null){AP(b);}Bc_$callClinit();return FU;} +function Fx($t,a){var b;b=GR(13);if(a===null){AP(b);}return 1;} +function Qj($t){var a;Je_$callClinit();a=1;$t.fd=a;} +function Bz(){var a,b;a=new Je;b=1;a.fd=b;JU=a;} +function Xe(){O.call(this);} +var MU=null;function Xe_$callClinit(){Xe_$callClinit=function(){}; +Lp();} +function U1(){var $r=new Xe();On($r);return $r;} +function Do($t,a){var b,c;a=a;b=GR(13);if(a===null){AP(b);}c=a.Rk;Bc_$callClinit();return c==0?EU:FU;} +function SB($t,a){var b;b=GR(13);if(a===null){AP(b);}return a.Rk;} +function On($t){var a;Xe_$callClinit();a=1;$t.fd=a;} +function Lp(){var a,b;a=new Xe;b=1;a.fd=b;MU=a;} +function Lh(){var a=this;E.call(a);a.qi=0;a.dc=0;a.Bi=null;} +function V1(b,c,d){var $r=new Lh();ZC($r,b,c,d);return $r;} +function ZC($t,a,b,c){$t.qi=a;$t.dc=b;$t.Bi=c;} +function Ei(){var a=this;E.call(a);a.vh=null;a.wh=null;} +function W1(b,c){var $r=new Ei();Jz($r,b,c);return $r;} +function Zr($t,a){var b,c,d;a=$t.vh;b=$t.wh;c=AR(E,1);b=b;b=b.aj;c=c.data;c[0]=b;b=c[0];d=GR(7);if(b===null){AP(d);}a.kl=b;a.Pl=b.Ok;TL();} +function Jz($t,a,b){$t.vh=a;$t.wh=b;} +function Bi(){E.call(this);this.Bh=null;} +function X1(b){var $r=new Bi();VK($r,b);return $r;} +function Es($t,a){Hr($t.Bh);TL();} +function VK($t,a){$t.Bh=a;} +function Km(){Tb.call(this);} +function Ii(){E.call(this);this.gf=null;} +function Y1(b){var $r=new Ii();FE($r,b);return $r;} +function PJ($t,a){var b,c,d;b=AR(E,1).data;b[0]=a;a=b[0];c=GR(17);if(a===null){AP(c);}c=ZQ(Xc);if(c.bh===null){d=c.Xh;d=$rt_str(d.$meta.name);Vc_$callClinit();c.bh=d;}a:{b:{c:{d=c.bh;switch(Nt(d)){case 1344771639:break;case -1064886025:break c;default:break b;}if(XG(d,GR(2))==0){break b;}IP(ZQ(Xc));break a;}if(XG(d,GR(3))!=0){IP(ZQ(Xc));break a;}}}a=a;c=new Nh;c.gi=a;CB(c);TL();} +function FE($t,a){$t.gf=a;} +function Fi(){var a=this;E.call(a);a.Ue=null;a.Te=null;} +function Z1(b,c){var $r=new Fi();Ys($r,b,c);return $r;} +function Yt($t,a){var b,c;a=$t.Ue;b=$t.Te;c=AR(E,1);b=b;b=b.aj;c=c.data;c[0]=b;GB(a,c[0]);TL();} +function Ys($t,a,b){$t.Ue=a;$t.Te=b;} +function Gi(){var a=this;E.call(a);a.Dk=null;a.Ak=null;} +function A2(b,c){var $r=new Gi();YL($r,b,c);return $r;} +function Ru($t,a){var b,c;a=$t.Dk;b=$t.Ak;c=AR(E,1);b=b;b=b.aj;c=c.data;c[0]=b;GB(a,c[0]);TL();} +function YL($t,a,b){$t.Dk=a;$t.Ak=b;} +function Di(){var a=this;E.call(a);a.Qh=null;a.Rh=null;} +function B2(b,c){var $r=new Di();Us($r,b,c);return $r;} +function Rz($t,a){var b,c,d,e,f,g,h,i,j,k;a=$t.Qh;b=$t.Rh;c=AR(E,1);b=b;b=b.aj;c=c.data;c[0]=b;b=c[0];d=GR(7);if(b===null){AP(d);}d=a.He;e=GR(7);if(b===null){AP(e);}f=d.pl;if(f===null){f=new Sm;e=new Pi;g=10;VG(e);e.gk=AR(E,g);f.qj=e;d.pl=f;}e=f.qj;h=e.lj;g=0;a:{b:{while(true){if(g>=h){g= -1;break a;}if(g<0){break;}if(g>=e.lj){break;}c:{i=e.gk.data[g];if(b===null){if(i!==null){break c;}else{break b;}}if((b!==i?0:1)!=0){break b;}}g=g+1|0;}a=new Pc;Fr(a);WQ(a);}}if(g>=0){Zz(e,g);}Ny(d,f);b=a.Tc;c=b.gk;g=0;h=b.lj;d +=null;if(g>h){a=new Fd;KF(a);WQ(a);}while(gj){a=new Fd;KF(a);WQ(a);}while(e0){d=b%c|0;if(d<0){d=d+c|0;}a=a%c|0;if(a<0){a=a+c|0;}a=(d-a|0)%c|0;if(a<0){a=a+c|0;}return b-a|0;}if(c>=0){e=new Fd;f=GR(84);e.Ce=1;e.gl=1;e.Xf=f;WQ(e);}c= -c;d=a%c|0;if(d<0){d=d+c|0;}a=b%c|0;if(a<0){a=a+c|0;}a=(d-a|0)%c|0;if(a<0){a=a+c|0;}return b+a|0;} +function Hi(){E.call(this);this.jk=null;} +function E2(b){var $r=new Hi();IJ($r,b);return $r;} +function VM($t,a){var b,c,d;b=AR(E,1).data;b[0]=a;a=b[0];c=GR(17);if(a===null){AP(c);}c=ZQ(Xc);if(c.bh===null){d=c.Xh;d=$rt_str(d.$meta.name);Vc_$callClinit();c.bh=d;}a:{b:{c:{d=c.bh;switch(Nt(d)){case 1344771639:break;case -1064886025:break c;default:break b;}if(XG(d,GR(2))==0){break b;}IP(ZQ(Xc));break a;}if(XG(d,GR(3))!=0){IP(ZQ(Xc));break a;}}}a=a;c=new Nh;c.gi=a;Vr(c);TL();} +function IJ($t,a){$t.jk=a;} +function Ig(){var a=this;E.call(a);a.Eg=null;a.Kg=null;a.Si=false;} +function F2(b){var $r=new Ig();Vv($r,b);return $r;} +function Vv($t,a){$t.Eg=a;} +function Nz($t,a){$t.Kg=a;} +function Ix($t){if($t.Si==0){$t.Si=1;Fo($t.Eg,$t.Kg);}} +function PB($t){if($t.Si!=0){$t.Si=0;RA($t.Eg,$t.Kg);}} +function Bk(){Cb.call(this);} +function G2(){var $r=new Bk();JJ($r);return $r;} +function JJ($t){} +function Cl(){var a=this;E.call(a);a.Ok=null;a.Rk=false;} +function H2(){var $r=new Cl();Uq($r);return $r;} +function Ms($t){return $t.Ok;} +function Fp($t,a){var b;b=GR(14);if(a===null){AP(b);}$t.Ok=a;} +function Nr($t){return $t.Rk;} +function CL($t,a){$t.Rk=a;} +function Uq($t){$t.Ok=GR(15);} +function Sn(){E.call(this);} +function I2(){var $r=new Sn();Yx($r);return $r;} +function J2(b){var $r=new Sn();Pp($r,b);return $r;} +function Xz($t){Bd_$callClinit();return OY;} +function Yx($t){} +function Pp($t,a){} +function Zk(){Pb.call(this);this.Lf=null;} +function K2(b){var $r=new Zk();Ex($r,b);return $r;} +function Ex($t,a){$t.Lf=a;} +function In(){var a=this;M.call(a);a.cl=null;a.yd=null;a.Hg=null;a.Cb=null;a.qh=false;} +function L2(b){var $r=new In();WM($r,b);return $r;} +function WM($t,a){$t.Wk=a;$t.qh=1;} +function YI($t,a){$t.cl=a;} +function Ku($t,a){$t.yd=a;} +function PL($t){var a,b,c,d,e,f,g;a=null;b=$t.cl;c=0;d=b.ch;e=b.lj;a:{while(true){if((c>=e?0:1)==0){f=a;break a;}if(d=b.lj){break;}f=b.gk.data[c];if(PI(f.ng)!=0){break a;}c=g;}a=new Pc;a.Ce=1;a.gl=1;HD(a);WQ(a);}if(!($t.qh==0&&$t.Cb===f)){if($t.Hg!==null){CK($t.Hg);$t.Hg=null;}$t.Cb=f;if($t.Cb!==null){a=new Og;b=new Vg;a=a;f=new Al;b.Wk=f;b.Zb=a;$t.Hg=b;}else if($t.yd!==null){a=new Mg;b=new Vg;a=a;f=new Al;b.Wk=f;b.Zb=a;$t.Hg=b;}KD($t.Wk,$t.Hg.Wk, +null);$t.qh=0;}if($t.Hg!==null){Sr($t.Hg);}} +function Tt($t){var a,b,c,d,e,f;Qv($t.Wk);if($t.Hg!==null){a:{a=$t.Hg;if(a.Le!==null){b=a.Le;c=0;d=b.ch;e=b.lj;while(true){if((c>=e?0:1)==0){a.Le=null;break a;}if(d=b.lj){break;}b.gk.data[c].e();c=f;}a=new Pc;KF(a);WQ(a);}}Qv(a.Wk);$t.Hg=null;}} +function Kh(){T.call(this);this.xk=null;} +function M2(b){var $r=new Kh();Cx($r,b);return $r;} +function Cx($t,a){$t.xk=a;} +function Ao($t,a){return $t.xk.data[a];} +function Xt($t){return $t.xk.data.length;} +$rt_metadata([E,"java.lang.Object",0,[],0,0,["a",function(){KC(this);},"ai",function(){return Ev(this);},"Y",function(){return Sz(this);},"I",function(b){return Jp(this,b);},"v",function(){return Dx(this);},"xb",function(){return Xo(this);},"ll",function(){return ZL(this);}],V,"org.teavm.flavour.templates.Fragment",E,[],0,0,[],Dh,"org.teavm.flavour.templates.Fragment$proxy6",E,[V],0,0,["l",function(){return RC(this);},"ae",function(b){AE(this,b);}],Sb,"java.lang.Throwable",E,[],0,0,["a",function(){KF(this); +},"f",function(b){LJ(this,b);},"di",function(){return HD(this);},"T",function(){return Sq(this);},"Sh",function(b){TF(this,b);}],Z,"java.lang.Exception",Sb,[],0,0,["a",function(){Kx(this);},"f",function(b){Mp(this,b);}],L,"java.lang.RuntimeException",Z,[],0,0,["a",function(){Fr(this);},"f",function(b){OH(this,b);}],Pc,"java.lang.IndexOutOfBoundsException",L,[],0,0,["a",function(){Ox(this);}],Ch,"org.teavm.flavour.templates.Fragment$proxy5",E,[V],0,0,["l",function(){return HA(this);},"b",function(b){Jv(this, +b);}],Wg,"org.teavm.flavour.templates.Fragment$proxy0",E,[V],0,0,["l",function(){return NA(this);},"b",function(b){EH(this,b);}],Eb,"kotlin.jvm.internal.markers.KMappedMarker",E,[],0,0,[],Yg,"org.teavm.flavour.templates.Fragment$proxy2",E,[V],0,0,["l",function(){return Mt(this);},"Nc",function(b,c){Oo(this,b,c);}],P,"org.teavm.flavour.templates.Renderable",E,[],0,0,[],Ke,"org.teavm.flavour.templates.Component",E,[P],0,0,[],Xg,"org.teavm.flavour.templates.Fragment$proxy1",E,[V],0,0,["l",function(){return OJ(this); +},"b",function(b){HC(this,b);}],Q,"java.io.Serializable",E,[],0,0,[],Tc,"java.lang.Number",E,[Q],0,0,["a",function(){NI(this);}],Db,"java.lang.Comparable",E,[],0,0,[],Dd,"java.lang.Integer",Tc,[Db],0,Dd_$callClinit,["r",function(b){Nk(this,b);},"Nk",function(){return Ht(this);},"v",function(){return SH(this);},"I",function(b){return LK(this,b);}],Bf,"kotlin.ranges.ClosedRange",E,[],0,0,[],Uk,"java.lang.CloneNotSupportedException",Z,[],0,0,["a",function(){ZI(this);}],Ub,"kotlin.Function",E,[],0,0,[],Cf,"kotlin.jvm.internal.FunctionBase", +E,[Ub,Q],0,0,[],Bh,"org.teavm.flavour.templates.Fragment$proxy4",E,[V],0,0,["l",function(){return ZK(this);},"a",function(){Go(this);}],Zg,"org.teavm.flavour.templates.Fragment$proxy3",E,[V],0,0,["l",function(){return XB(this);},"a",function(){Jx(this);}],Qc,"org.teavm.flavour.routing.Route",E,[],0,0,["Rb",function(b){return Rr(this,b);},"Gb",function(b){return FH(this,b);}],Xc,"org.teavm.flavour.example.todomvc.TodoRoute",E,[Qc],0,0,["Rb",function(b){return Rr(this,b);},"Gb",function(b){return FH(this,b);}],Hb, +"org.teavm.flavour.templates.Space",E,[],0,0,["a",function(){Ez(this);},"zc",function(){return Zs(this);},"Db",function(){return VL(this);},"rk",function(){Qv(this);},"gj",function(){return OC(this);}],Fj,"org.teavm.flavour.templates.NodeHolder",Hb,[],0,0,["hb",function(b){UL(this,b);},"eb",function(){return ZM(this);},"N",function(b){RH(this,b);},"db",function(){Co(this);}],W,"org.teavm.jso.JSObject",E,[],0,0,[],Zd,"org.teavm.jso.dom.xml.Node",E,[W],0,0,[],Be,"org.teavm.jso.dom.xml.Document",E,[Zd],0,0,[],Y, +"org.teavm.jso.dom.events.EventTarget",E,[W],0,0,[],El,"org.teavm.jso.dom.html.HTMLDocument",E,[Be,Y],0,0,[],Wb,"java.lang.Runnable",E,[],0,0,[],Jb,"java.lang.Thread",E,[Wb],0,Jb_$callClinit,["f",function(b){Wi(this,b);},"lc",function(b,c){Yj(this,b,c);},"T",function(){return GJ(this);}],Ee,"java.util.Map",E,[],0,0,[],Sc,"org.teavm.jso.core.JSArrayReader",E,[W],0,0,[],Gl,"org.teavm.jso.core.JSArray",E,[Sc],0,0,["ij",function(b){return QL(this,b);},"ui",function(){return Tx(this);}],Gd,"kotlin.text.CharsKt__CharJVMKt", +E,[],0,0,[],Se,"org.teavm.flavour.example.todomvc.TodoDataSource",E,[],0,0,[],Nc,"org.teavm.flavour.example.todomvc.LocalStorageTodoDataSource",E,[Se],0,Nc_$callClinit,["Gi",function(){return GD(this);},"Sf",function(b){FN(this,b);},"Kl",function(b){AI(this,b);},"Ge",function(){MK(this);},"sl",function(){return ZA(this);},"yh",function(b){Ny(this,b);},"a",function(){Ak(this);}],Nd,"java.lang.CharSequence",E,[],0,0,[],Od,"java.lang.Error",Sb,[],0,0,["f",function(b){QA(this,b);}],Tb,"java.lang.LinkageError",Od, +[],0,0,["f",function(b){Kq(this,b);}],He,"org.teavm.jso.dom.events.LoadEventTarget",E,[Y],0,0,[],R,"org.teavm.flavour.json.tree.Node",E,[W],0,0,[],Sk,"org.teavm.flavour.json.tree.ArrayNode",R,[],0,0,[],Fn,"java.lang.StringIndexOutOfBoundsException",Pc,[],0,0,["a",function(){QD(this);}],Ci,"org.teavm.flavour.json.deserializer.JsonDeserializerContext",E,[],0,0,["a",function(){Or(this);}],Zb,"java.util.Iterator",E,[],0,0,[],Dc,"kotlin.collections.IntIterator",E,[Zb,Eb],0,0,["a",function(){MB(this);}],S,"java.lang.AbstractStringBuilder", +E,[Q,Nd],0,S_$callClinit,["a",function(){Ti(this);},"r",function(b){Ih(this,b);},"f",function(b){Hn(this,b);},"Ck",function(b){Fk(this,b);},"Ll",function(b){return Ou(this,b);},"ab",function(b,c){return WA(this,b,c);},"wd",function(b,c){return Ts(this,b,c);},"Ic",function(b,c,d){return RI(this,b,c,d);},"Rj",function(b){return QI(this,b);},"Z",function(b,c){return QC(this,b,c);},"E",function(b){Lv(this,b);},"v",function(){return Br(this);},"Ih",function(b,c){Qs(this,b,c);}],Af,"java.lang.Appendable",E,[],0,0, +[],Sg,"java.lang.StringBuilder",S,[Af],0,0,["a",function(){RJ(this);},"f",function(b){Fq(this,b);},"Fe",function(b){return Cq(this,b);},"wi",function(b){return Mq(this,b);},"pe",function(b,c){return YK(this,b,c);},"Xd",function(b,c){return LL(this,b,c);},"v",function(){return Mw(this);},"E",function(b){XL(this,b);},"Z",function(b,c){return Iq(this,b,c);},"ab",function(b,c){return OM(this,b,c);}],M,"org.teavm.flavour.templates.AbstractComponent",E,[Ke],0,0,["n",function(b){IH(this,b);},"e",function(){FG(this); +},"kd",function(){return Fz(this);}],N,"java.util.function.Consumer",E,[],0,0,[],Hh,"$$LAMBDA2$$",E,[N],0,0,["S",function(b){YM(this,b);},"h",function(b){Xs(this,b);},"fb",function(b){Ut(this,b);}],Tl,"java.util.ConcurrentModificationException",L,[],0,0,["a",function(){NL(this);}],Cc,"kotlin.text.StringsKt__IndentKt",E,[],0,0,[],Hd,"kotlin.text.StringsKt__RegexExtensionsKt",Cc,[],0,0,[],Rk,"org.teavm.flavour.routing.parsing.PathParser$PathParserElement",E,[],0,0,[],Sd,"java.lang.ClassCastException",L,[],0,0, +["f",function(b){Xw(this,b);}],Qf,"kotlin.TypeCastException",Sd,[],0,0,["f",function(b){KE(this,b);}],Ib,"org.teavm.flavour.json.serializer.JsonSerializer",E,[],0,0,[],Wm,"org.teavm.flavour.json.serializer.JsonSerializer$proxy1",E,[Ib],0,0,["A",function(b,c){return MN(this,b,c);},"a",function(){OF(this);}],K,"java.util.function.Supplier",E,[],0,0,[],Vm,"org.teavm.flavour.json.serializer.JsonSerializer$proxy0",E,[Ib],0,0,["A",function(b,c){return PA(this,b,c);},"a",function(){Vs(this);}],Xm,"org.teavm.flavour.json.serializer.JsonSerializer$proxy2", +E,[Ib],0,0,["A",function(b,c){return Cr(this,b,c);},"a",function(){BG(this);}],Of,"org.teavm.flavour.widgets.RouteBinder",E,[],0,0,["a",function(){UB(this);},"S",function(b){Eq(this,b);},"ye",function(b){NE(this,b);},"Ob",function(b){return Ty(this,b);},"m",function(){Wy(this);},"Pd",function(b,c){return So(this,b,c);},"Cj",function(b){AH(this,b);}],Wd,"org.teavm.flavour.json.serializer.NullableSerializer",E,[Ib],0,0,["a",function(){HH(this);},"A",function(b,c){return Ps(this,b,c);}],Tk,"org.teavm.flavour.json.serializer.ListSerializer", +Wd,[],0,0,["yb",function(b){ZD(this,b);},"Yg",function(b,c){return IN(this,b,c);}],Vn,"java.lang.StackTraceElement",E,[Q],0,0,[],Df,"org.teavm.flavour.regex.Matcher",E,[],0,0,["Mj",function(b){return Gs(this,b);}],U,"org.teavm.flavour.json.deserializer.JsonDeserializer",E,[],0,0,["a",function(){Bt(this);}],Oe,"java.io.Flushable",E,[],0,0,[],Mf,"org.teavm.flavour.routing.parsing.PathParserResult",E,[],0,0,["Zk",function(b,c,d){Iv(this,b,c,d);},"Pk",function(){return UF(this);}],Ej,"org.teavm.flavour.example.todomvc.LocalStorageTodoDataSource$Companion", +E,[],0,0,["Aj",function(){return FC(this);},"a",function(){SL(this);},"x",function(b){EL(this,b);}],Wc,"kotlin.text.StringsKt__StringBuilderJVMKt",Hd,[],0,0,[],Zc,"kotlin.text.StringsKt__StringBuilderKt",Wc,[],0,0,[],Ld,"kotlin.text.StringsKt__StringNumberConversionsKt",Zc,[],0,0,[],Id,"kotlin.text.StringsKt__StringsJVMKt",Ld,[],0,0,[],Xd,"kotlin.text.StringsKt__StringsKt",Id,[],0,0,[],Qd,"kotlin.text.StringsKt___StringsKt",Xd,[],0,0,[],Am,"kotlin.text.StringsKt",Qd,[],0,0,[],O,"kotlin.jvm.internal.Lambda", +E,[Cf],0,0,["r",function(b){FJ(this,b);}],Fb,"kotlin.jvm.functions.Function1",E,[Ub],0,0,[],We,"org.teavm.flavour.example.todomvc.TodoView$active$1",O,[Fb],0,We_$callClinit,["z",function(b){return TD(this,b);},"u",function(b){return Pw(this,b);},"a",function(){Ug(this);}],Qb,"java.lang.IncompatibleClassChangeError",Tb,[],0,0,["f",function(b){QF(this,b);}],Zl,"java.lang.NoSuchMethodError",Qb,[],0,0,["f",function(b){Ky(this,b);}],Me,"org.teavm.flavour.routing.emit.PathImplementor",E,[],0,0,[],Qn,"org.teavm.flavour.routing.emit.PathImplementor$proxy0", +E,[Me],0,0,["tl",function(b,c){return HI(this,b,c);},"Ec",function(b){return NB(this,b);},"Cl",function(b){TC(this,b);}],Ok,"org.teavm.flavour.templates.Templates$RootComponent",M,[],0,0,["Eh",function(b,c){Zn(this,b,c);},"d",function(){PM(this);},"e",function(){Mv(this);}],Lc,"org.teavm.flavour.widgets.ApplicationTemplate",E,[Qc],0,0,["a",function(){EI(this);},"Ab",function(b){UH(this,b);},"Rb",function(b){return Rr(this,b);},"Gb",function(b){return FH(this,b);}],Ze,"org.teavm.flavour.example.todomvc.TodoView", +Lc,[Xc],0,Ze_$callClinit,["ki",function(){return FB(this);},"ub",function(){return UD(this);},"Yc",function(){return LF(this);},"Ji",function(b){Uw(this,b);},"sj",function(){return Uv(this);},"Ac",function(){return XJ(this);},"dd",function(){return Rs(this);},"Xk",function(){return Ds(this);},"Mk",function(){return ZB(this);},"Ke",function(){return VI(this);},"wj",function(b){Iu(this,b);},"rg",function(){Hr(this);},"ne",function(b){Kp(this,b);},"Fb",function(b){UK(this,b);},"Jf",function(b){GB(this,b);},"Qj", +function(b){LN(this,b);},"Td",function(){Wz(this);},"L",function(){Sv(this);},"O",function(){YB(this);},"bb",function(){Wr(this);},"Ui",function(b){return ID(this,b);},"al",function(){Dt(this);},"lg",function(b){Nf(this,b);},"Rb",function(b){return Rr(this,b);},"Gb",function(b){return FH(this,b);}],Vh,"org.teavm.flavour.routing.emit.RoutingImpl",E,[],0,0,[],Mi,"org.teavm.flavour.routing.parsing.PathParser",E,[],0,0,["Al",function(b,c){Qo(this,b,c);},"gh",function(b){return KB(this,b);}],Sm,"org.teavm.flavour.example.todomvc.TodoList", +E,[],0,0,["Mb",function(){return Aq(this);},"a",function(){NK(this);}],Th,"java.util.AbstractList$1",E,[Zb],0,0,["Uf",function(b){Yv(this,b);},"s",function(){return Lr(this);},"y",function(){return BF(this);},"jb",function(){DH(this);},"J",function(){Yy(this);}],Dm,"org.teavm.flavour.routing.internal.Matcher0",E,[Df],0,0,["a",function(){Bx(this);},"yg",function(){return Kt(this);},"zb",function(){return SK(this);},"Nl",function(b,c,d,e){return Zo(this,b,c,d,e);},"Mj",function(b){return Gs(this,b);}],Ab,"org.teavm.jso.dom.events.EventListener", +E,[W],0,0,[],Dj,"$$LAMBDA1$$",E,[Ab],0,0,["hl",function(b){VD(this,b);},"q",function(b){Ro(this,b);},"wc",function(b){QE(this,b);},"p",function(b){return Bp(this,b);}],Ai,"java.lang.Runnable$proxy0",E,[Wb],0,0,["kb",function(){Tv(this);},"j",function(b,c){GM(this,b,c);}],Vj,"org.teavm.flavour.json.JSON",E,[],0,0,[],Rh,"kotlin.ranges.IntProgression$Companion",E,[],0,0,["a",function(){RE(this);},"x",function(b){Ko(this,b);}],Jh,"java.lang.reflect.Array",E,[],0,0,[],Ob,"java.util.ListIterator",E,[Zb],0,0,[],J, +"org.teavm.flavour.templates.Modifier",E,[],0,0,[],Jl,"org.teavm.flavour.templates.Modifier$proxy2",E,[J],0,0,["c",function(b){return Xr(this,b);},"b",function(b){Et(this,b);}],Ml,"org.teavm.flavour.templates.Modifier$proxy3",E,[J],0,0,["c",function(b){return JM(this,b);},"b",function(b){OA(this,b);}],Il,"org.teavm.flavour.templates.Modifier$proxy0",E,[J],0,0,["c",function(b){return Aw(this,b);},"b",function(b){Dz(this,b);}],Kl,"org.teavm.flavour.templates.Modifier$proxy1",E,[J],0,0,["c",function(b){return GF(this, +b);},"b",function(b){Sy(this,b);}],Dk,"org.teavm.platform.plugin.ResourceAccessor",E,[],0,0,[],Gk,"org.teavm.flavour.json.deserializer.ListDeserializer",U,[],0,0,["Tk",function(b){Bv(this,b);},"F",function(b,c){return SJ(this,b,c);}],Li,"java.lang.NoSuchFieldError",Qb,[],0,0,["f",function(b){Lx(this,b);}],Yc,"kotlin.collections.CollectionsKt__CollectionsKt",E,[],0,0,[],Sf,"org.teavm.flavour.templates.Modifier$proxy10",E,[J],0,0,["c",function(b){return HL(this,b);},"j",function(b,c){KM(this,b,c);}],Ed,"java.lang.Iterable", +E,[],0,0,[],Kb,"java.util.Collection",E,[Ed],0,0,[],X,"java.util.AbstractCollection",E,[Kb],0,0,["a",function(){VG(this);},"H",function(){return VB(this);},"Ig",function(b){return Vp(this,b);},"Yb",function(b){return DC(this,b);},"Pi",function(b){return Xu(this,b);}],Pl,"org.teavm.flavour.templates.Modifier$proxy8",E,[J],0,0,["c",function(b){return Rw(this,b);},"k",function(b){WK(this,b);}],Rl,"org.teavm.flavour.templates.Modifier$proxy9",E,[J],0,0,["c",function(b){return Ur(this,b);},"j",function(b,c){MD(this, +b,c);}],Nl,"org.teavm.flavour.templates.Modifier$proxy6",E,[J],0,0,["c",function(b){return Mx(this,b);},"D",function(b,c){Pt(this,b,c);}],Vf,"org.teavm.flavour.templates.Modifier$proxy14",E,[J],0,0,["c",function(b){return Op(this,b);},"j",function(b,c){ML(this,b,c);}],Ql,"org.teavm.flavour.templates.Modifier$proxy7",E,[J],0,0,["c",function(b){return Vu(this,b);},"k",function(b){Pr(this,b);}],Wf,"org.teavm.flavour.templates.Modifier$proxy13",E,[J],0,0,["c",function(b){return Ey(this,b);},"k",function(b){Ry(this, +b);}],Ce,"org.teavm.flavour.example.todomvc.TodoView$Companion$main$1",E,[N],0,Ce_$callClinit,["h",function(b){BN(this,b);},"rc",function(b){Ly(this,b);},"a",function(){Ph(this);}],Ll,"org.teavm.flavour.templates.Modifier$proxy4",E,[J],0,0,["c",function(b){return Qq(this,b);},"b",function(b){EM(this,b);}],Xf,"org.teavm.flavour.templates.Modifier$proxy12",E,[J],0,0,["c",function(b){return Jw(this,b);},"k",function(b){FF(this,b);}],Ol,"org.teavm.flavour.templates.Modifier$proxy5",E,[J],0,0,["c",function(b){return RG(this, +b);},"b",function(b){Zq(this,b);}],Rf,"org.teavm.flavour.templates.Modifier$proxy11",E,[J],0,0,["c",function(b){return XH(this,b);},"j",function(b,c){Lt(this,b,c);}],Eg,"org.teavm.flavour.templates.Modifier$proxy18",E,[J],0,0,["c",function(b){return KH(this,b);},"b",function(b){VC(this,b);}],Fg,"org.teavm.flavour.templates.Modifier$proxy17",E,[J],0,0,["c",function(b){return RM(this,b);},"b",function(b){YH(this,b);}],Gg,"org.teavm.flavour.templates.Modifier$proxy16",E,[J],0,0,["c",function(b){return Rq(this, +b);},"D",function(b,c){JG(this,b,c);}],Tf,"org.teavm.flavour.templates.Modifier$proxy15",E,[J],0,0,["c",function(b){return OG(this,b);},"j",function(b,c){Fs(this,b,c);}],Dg,"org.teavm.flavour.templates.Modifier$proxy19",E,[J],0,0,["c",function(b){return At(this,b);},"b",function(b){Gy(this,b);}],Xl,"org.teavm.flavour.components.html.CheckedChangeBinder$1",E,[Ab],0,0,["ge",function(b){Ho(this,b);},"q",function(b){GK(this,b);},"p",function(b){return DL(this,b);}],Yd,"org.teavm.flavour.example.todomvc.TodoView$todoFilter$1", +O,[Fb],0,Yd_$callClinit,["z",function(b){return Lo(this,b);},"u",function(b){return II(this,b);},"a",function(){Pk(this);}],Yh,"org.teavm.flavour.routing.emit.RoutingImpl$PROXY$6",E,[],0,0,[],Wj,"org.teavm.jso.impl.JS",E,[],0,0,[],Zh,"org.teavm.flavour.routing.emit.RoutingImpl$PROXY$3",E,[],0,0,[],Wh,"org.teavm.flavour.routing.emit.RoutingImpl$PROXY$1",E,[],0,0,[],Fc,"kotlin.text.CharsKt__CharKt",Gd,[],0,0,[],Bj,"org.teavm.classlib.impl.unicode.UnicodeHelper",E,[],0,0,[],Fl,"java.util.Objects",E,[],0,0,[],Ic, +"org.teavm.flavour.templates.Templates",E,[],0,Ic_$callClinit,[],Ae,"java.util.Map$Entry",E,[],0,0,[],Nb,"java.lang.Cloneable",E,[],0,0,[],Td,"java.util.MapEntry",E,[Ae,Nb],0,0,["nl",function(b,c){BM(this,b,c);}],Ah,"java.util.HashMap$HashEntry",Td,[],0,0,["Be",function(b,c){Qw(this,b,c);}],Wk,"org.teavm.flavour.components.standard.ForEachComponent",M,[],0,0,["n",function(b){UG(this,b);},"Zc",function(b){BH(this,b);},"ni",function(){return LG(this);},"V",function(b){WC(this,b);},"d",function(){XC(this);},"ed", +function(){return Po(this);},"Zi",function(b,c,d){Hp(this,b,c,d);},"e",function(){Up(this);}],Rd,"kotlin.collections.CollectionsKt__IterablesKt",Yc,[],0,0,[],Ad,"kotlin.collections.CollectionsKt__IteratorsKt",Rd,[],0,0,[],Jc,"kotlin.collections.CollectionsKt__MutableCollectionsKt",Ad,[],0,0,[],Pd,"kotlin.collections.CollectionsKt__ReversedViewsKt",Jc,[],0,0,[],Md,"kotlin.collections.CollectionsKt___CollectionsKt",Pd,[],0,0,[],Mn,"kotlin.collections.CollectionsKt",Md,[],0,0,[],Um,"kotlin.ranges.IntProgressionIterator", +Dc,[],0,0,["s",function(){return Ks(this);},"lk",function(){return Rv(this);},"U",function(b,c,d){Wp(this,b,c,d);}],De,"java.util.Queue",E,[Kb],0,0,[],Yl,"$$LAMBDA4$$",E,[Ab],0,0,["wk",function(b){TB(this,b);},"q",function(b){Sx(this,b);},"p",function(b){return RK(this,b);}],Pj,"org.teavm.flavour.routing.parsing.PathParser$PathParserCase",E,[],0,0,["a",function(){Yz(this);}],Pf,"org.teavm.flavour.json.tree.NullNode",R,[],0,0,[],Le,"org.teavm.flavour.templates.ModifierTarget",E,[],0,0,[],Re,"java.util.Set",E, +[Kb],0,0,[],Cd,"java.util.AbstractSet",X,[Re],0,0,["a",function(){Wx(this);}],Xk,"java.util.HashSet",Cd,[Nb,Q],0,0,["a",function(){EE(this);},"dl",function(b){NF(this,b);},"P",function(b){return FK(this,b);}],Cj,"org.teavm.platform.Platform",E,[],0,0,[],Vb,"java.nio.charset.Charset",E,[Db],0,Vb_$callClinit,["Ei",function(b,c){Rj(this,b,c);}],Rb,"org.teavm.flavour.components.events.BaseEventBinder",E,[P],0,0,["i",function(b){Mr(this,b);},"Fd",function(b){TA(this,b);},"Bg",function(b){ZE(this,b);},"d",function() +{Ep(this);},"e",function(){Zv(this);},"Sg",function(b){RD(this,b);}],Xn,"org.teavm.flavour.components.events.EventBinder",Rb,[],0,0,["i",function(b){IC(this,b);}],Bc,"java.lang.Boolean",E,[Q,Db],0,Bc_$callClinit,["Ni",function(b){Aj(this,b);},"Ch",function(){return XF(this);}],Fd,"java.lang.IllegalArgumentException",L,[],0,0,["a",function(){Gw(this);},"f",function(b){AN(this,b);}],Ek,"java.nio.charset.IllegalCharsetNameException",Fd,[],0,0,["f",function(b){CE(this,b);}],Ye,"org.teavm.flavour.regex.Pattern", +E,[],0,0,[],Ul,"org.teavm.flavour.regex.Pattern$proxy0",E,[Ye],0,0,["Oi",function(){return Gx(this);},"a",function(){GN(this);}],Vd,"java.lang.Enum",E,[Db,Q],0,0,["Q",function(b,c){SG(this,b,c);}],Lb,"org.teavm.flavour.example.todomvc.TodoFilterType",Vd,[],1,Lb_$callClinit,["Q",function(b,c){Lf(this,b,c);}],Rn,"java.util.NoSuchElementException",L,[],0,0,["a",function(){Wq(this);}],Ec,"java.util.List",E,[Kb],0,0,[],T,"java.util.AbstractList",X,[Ec],0,0,["a",function(){AJ(this);},"P",function(b){return Iz(this, +b);},"B",function(){return PC(this);},"fg",function(b){return CF(this,b);},"R",function(){return Yo(this);},"K",function(b){return XA(this,b);},"Tg",function(b,c){return HB(this,b,c);}],Jd,"java.util.AbstractSequentialList",T,[],0,0,["a",function(){LC(this);},"G",function(b){return DB(this,b);},"mb",function(b,c){Fy(this,b,c);}],Ud,"java.util.Deque",E,[De],0,0,[],Ij,"java.util.LinkedList",Jd,[Ud],0,0,["a",function(){KN(this);},"Dl",function(b){Nw(this,b);},"w",function(){return Xy(this);},"R",function(){return Hv(this); +},"K",function(b){return Hy(this,b);},"Jl",function(b){Cv(this,b);}],Hf,"java.lang.AutoCloseable",E,[],0,0,[],Gc,"java.io.Closeable",E,[Hf],0,0,[],Cb,"java.io.OutputStream",E,[Gc,Oe],0,0,["a",function(){Yn(this);}],Hc,"java.io.FilterOutputStream",Cb,[],0,0,["Ki",function(b){Tq(this,b);}],Wl,"java.io.PrintStream",Hc,[],0,0,["Yi",function(b,c){SF(this,b,c);}],Cn,"java.util.function.Supplier$proxy8",E,[K],0,0,["g",function(){return BK(this);},"k",function(b){DF(this,b);}],Ym,"java.util.function.Supplier$proxy9", +E,[K],0,0,["g",function(){return PK(this);},"b",function(b){Jt(this,b);}],An,"java.util.function.Supplier$proxy6",E,[K],0,0,["g",function(){return MG(this);},"k",function(b){WI(this,b);}],Bn,"java.util.function.Supplier$proxy7",E,[K],0,0,["g",function(){return TH(this);},"k",function(b){FL(this,b);}],Hg,"java.util.AbstractList$TListIteratorImpl",E,[Ob],0,0,["dj",function(b,c,d,e){Bu(this,b,c,d,e);},"s",function(){return Cz(this);},"y",function(){return GE(this);},"W",function(){return EA(this);},"ob",function() +{return JC(this);},"M",function(){return JF(this);},"lb",function(){return PH(this);},"J",function(){Ls(this);}],Om,"java.util.function.Supplier$proxy4",E,[K],0,0,["g",function(){return Xx(this);},"b",function(b){QJ(this,b);}],Zm,"java.util.function.Supplier$proxy5",E,[K],0,0,["g",function(){return Tw(this);},"D",function(b,c){OB(this,b,c);}],Mm,"java.util.function.Supplier$proxy2",E,[K],0,0,["g",function(){return BC(this);},"b",function(b){OI(this,b);}],Nm,"java.util.function.Supplier$proxy3",E,[K],0,0,["g", +function(){return GA(this);},"b",function(b){Eo(this,b);}],Qi,"kotlin.jvm.internal.markers.KMutableIterable",E,[Eb],0,0,[],Pm,"java.util.function.Supplier$proxy0",E,[K],0,0,["g",function(){return VF(this);},"b",function(b){Az(this,b);}],Lm,"java.util.function.Supplier$proxy1",E,[K],0,0,["g",function(){return Pq(this);},"b",function(b){XE(this,b);}],Xb,"java.util.RandomAccess",E,[],0,0,[],If,"kotlin.collections.EmptyList",E,[Ec,Q,Xb,Eb],0,If_$callClinit,["B",function(){return EK(this);},"a",function(){Si(this); +}],Qm,"org.teavm.flavour.json.tree.ObjectNode",R,[],0,0,[],Rc,"java.util.AbstractMap",E,[Ee],0,0,["a",function(){VA(this);}],Te,"org.teavm.flavour.templates.DomBuilder",E,[],0,Te_$callClinit,["n",function(b){Kf(this,b);},"rl",function(b){return ZF(this,b);},"Ld",function(b){return FI(this,b);},"eh",function(b,c){return UA(this,b,c);},"lh",function(){return It(this);},"el",function(b){return TG(this,b);},"Md",function(b,c){return Rt(this,b,c);},"De",function(b){return RF(this,b);},"pj",function(b){return BJ(this, +b);},"Di",function(b){JH(this,b);},"Yd",function(){return Bo(this);}],Bb,"org.teavm.flavour.templates.DomComponentHandler",E,[],0,0,[],Kg,"org.teavm.flavour.templates.DomComponentHandler$proxy2",E,[Bb],0,0,["m",function(){CN(this);},"o",function(b){MJ(this,b);},"Qc",function(b,c,d){Oy(this,b,c,d);}],Og,"org.teavm.flavour.templates.DomComponentHandler$proxy3",E,[Bb],0,0,["m",function(){Tz(this);},"o",function(b){FM(this,b);},"a",function(){QB(this);}],Fe,"java.lang.reflect.AnnotatedElement",E,[],0,0,[],Sl,"java.lang.Class", +E,[Fe],0,0,["ze",function(b){BD(this,b);},"Zj",function(){return Av(this);},"yi",function(){return OL(this);},"El",function(){return Cp(this);}],Kn,"$$LAMBDA3$$",E,[Ab],0,0,["cb",function(b){CM(this,b);},"q",function(b){ED(this,b);},"p",function(b){return AM(this,b);}],Mg,"org.teavm.flavour.templates.DomComponentHandler$proxy4",E,[Bb],0,0,["m",function(){WL(this);},"o",function(b){NM(this,b);},"a",function(){LE(this);}],Pg,"org.teavm.flavour.templates.DomComponentHandler$proxy5",E,[Bb],0,0,["m",function(){Rp(this); +},"o",function(b){JD(this,b);},"b",function(b){JE(this,b);}],Gf,"java.util.Comparator",E,[],0,0,[],Ck,"kotlin.ranges.IntRange$Companion",E,[],0,0,["a",function(){JN(this);},"x",function(b){HN(this,b);}],Jg,"org.teavm.flavour.templates.DomComponentHandler$proxy0",E,[Bb],0,0,["m",function(){BL(this);},"o",function(b){Mu(this,b);},"b",function(b){TK(this,b);}],Lg,"org.teavm.flavour.templates.DomComponentHandler$proxy1",E,[Bb],0,0,["m",function(){BA(this);},"o",function(b){BB(this,b);},"b",function(b){TE(this,b); +}],Oi,"java.util.Arrays",E,[],0,0,[],Dn,"java.lang.ConsoleOutputStreamStdout",Cb,[],0,0,["a",function(){Oq(this);}],Yb,"java.lang.System",E,[],0,Yb_$callClinit,[],Sh,"org.teavm.flavour.example.todomvc.EscapeComponent$eventListener$1",E,[Ab],0,0,["q",function(b){Cy(this,b);},"ol",function(b){Zy(this,b);},"Ed",function(b){Zt(this,b);},"p",function(b){return Tr(this,b);}],Ge,"java.util.function.BooleanSupplier",E,[],0,0,[],Vi,"java.util.LinkedList$Entry",E,[],0,0,["a",function(){DD(this);}],Nh,"org.teavm.flavour.example.todomvc.TodoRoute$proxy0", +E,[Xc],0,0,["L",function(){CB(this);},"O",function(){Vr(this);},"bb",function(){Lw(this);},"cb",function(b){St(this,b);},"Rb",function(b){return Rr(this,b);},"Gb",function(b){return FH(this,b);}],Mb,"java.lang.Character",E,[Db],0,Mb_$callClinit,[],Yf,"java.util.function.BooleanSupplier$proxy0",E,[Ge],0,0,["Me",function(){return PI(this);},"b",function(b){IG(this,b);}],Kd,"kotlin.jvm.functions.Function0",E,[Ub],0,0,[],Lk,"kotlin.jvm.functions.Function0$proxy0",E,[Kd],0,0,["nb",function(){return KA(this);},"D", +function(b,c){ZH(this,b,c);}],Vg,"org.teavm.flavour.templates.DomComponentTemplate",M,[],0,0,["Hf",function(b){Vw(this,b);},"d",function(){Sr(this);},"e",function(){CK(this);}],Hl,"org.teavm.flavour.example.todomvc.TodoView$Companion",E,[],0,0,["ef",function(b){DJ(this,b);},"a",function(){Uz(this);},"x",function(b){Xp(this,b);}],Gj,"org.teavm.flavour.components.html.TextComponent",M,[],0,0,["n",function(b){KK(this,b);},"t",function(b){Yr(this,b);},"d",function(){AF(this);}],Jf,"org.teavm.flavour.example.todomvc.LocalStorageTodoDataSource$clearCompleted$1", +O,[Fb],0,Jf_$callClinit,["z",function(b){return CG(this,b);},"u",function(b){return Su(this,b);},"a",function(){Tj(this);}],Nn,"kotlin.jvm.internal.Intrinsics",E,[],0,0,[],Vl,"org.teavm.flavour.example.todomvc.FocusComponent",E,[P],0,0,["Mg",function(b){PE(this,b);},"d",function(){QG(this);},"e",function(){Lq(this);},"i",function(b){YA(this,b);}],Gn,"org.teavm.flavour.components.standard.ChooseClause",E,[],0,0,["a",function(){Zp(this);},"Tf",function(b){Ar(this,b);},"X",function(b){DA(this,b);}],Qk,"org.teavm.flavour.templates.emitting.VariableImpl", +E,[],0,0,["a",function(){ND(this);}],Ln,"org.teavm.flavour.components.html.CheckedBinder",E,[P],0,0,["i",function(b){IE(this,b);},"t",function(b){Kz(this,b);},"d",function(){KI(this);},"e",function(){Ew(this);}],Uh,"$$LAMBDA6$$",E,[N],0,0,["rd",function(b){Uu(this,b);},"h",function(b){Jq(this,b);},"fb",function(b){Bw(this,b);}],Bm,"java.util.AbstractList$SubAbstractList$SubAbstractListIterator",E,[Ob],0,0,["ag",function(b,c,d,e){Qy(this,b,c,d,e);},"s",function(){return Hw(this);},"y",function(){return WH(this); +}],Ng,"org.teavm.flavour.json.deserializer.JsonDeserializer$proxy0",U,[],0,0,["F",function(b,c){return FA(this,b,c);},"a",function(){SM(this);}],Qg,"org.teavm.flavour.json.deserializer.JsonDeserializer$proxy1",U,[],0,0,["F",function(b,c){return CD(this,b,c);},"a",function(){JA(this);}],Uc,"org.teavm.flavour.json.tree.BooleanNode",R,[],0,Uc_$callClinit,[],Yk,"org.teavm.flavour.templates.DomBuilder$Item",E,[Le],0,0,["a",function(){Dr(this);},"Xj",function(){return Qt(this);},"zf",function(b){Ft(this,b);},"bj", +function(b){Fo(this,b);},"Pb",function(b){RA(this,b);},"Vh",function(){KJ(this);},"Mh",function(){return BE(this);},"tk",function(b){Cu(this,b);}],Ue,"org.teavm.jso.dom.events.FocusEventTarget",E,[Y],0,0,[],Ff,"org.teavm.jso.dom.events.MouseEventTarget",E,[Y],0,0,[],Ef,"org.teavm.jso.dom.events.KeyboardEventTarget",E,[Y],0,0,[],Qe,"org.teavm.jso.browser.WindowEventTarget",E,[Y,Ue,Ff,Ef,He],0,0,[],Cm,"org.teavm.flavour.json.serializer.JsonSerializerContext",E,[],0,0,["a",function(){LA(this);},"Og",function(b) +{LD(this,b);}],Pi,"java.util.ArrayList",T,[Nb,Q],0,0,["a",function(){HE(this);},"r",function(b){Ip(this,b);},"E",function(b){Hs(this,b);},"G",function(b){return Hz(this,b);},"w",function(){return Yu(this);},"Cd",function(b,c){return Xq(this,b,c);},"mb",function(b,c){TJ(this,b,c);},"Dj",function(b){return Zz(this,b);},"ld",function(b){return NC(this,b);},"zd",function(){Nv(this);},"kf",function(b){Tp(this,b);},"hd",function(b){AA(this,b);}],Ne,"org.teavm.jso.browser.StorageProvider",E,[],0,0,[],Qh,"org.teavm.jso.browser.Window", +E,[W,Qe,Ne,Sc],0,0,["Oc",function(b,c){return XD(this,b,c);},"mc",function(b,c,d){return JK(this,b,c,d);},"tc",function(b){return OD(this,b);},"Mc",function(b,c){return IF(this,b,c);},"Ne",function(b){return EJ(this,b);},"Li",function(){return Vx(this);},"Se",function(b,c,d){return Np(this,b,c,d);}],Uf,"java.util.LinkedList$SequentialListIterator",E,[Ob],0,0,["il",function(b,c,d,e){Ax(this,b,c,d,e);},"s",function(){return QK(this);},"y",function(){return Lu(this);},"jb",function(){AK(this);},"W",function(){ +return Py(this);},"ob",function(){return Qp(this);},"M",function(){return NJ(this);},"lb",function(){return CI(this);},"sd",function(b){ZG(this,b);},"J",function(){Ot(this);}],Bd,"org.teavm.flavour.example.todomvc.EscapeComponent",E,[P],0,Bd_$callClinit,["Ol",function(){return My(this);},"Nj",function(b){BI(this,b);},"d",function(){Os(this);},"e",function(){SI(this);},"i",function(b){Eh(this,b);}],Mc,"java.util.AbstractList$SubAbstractList",T,[],0,0,["ib",function(b,c,d){UJ(this,b,c,d);},"B",function(){return Cw(this); +},"K",function(b){return Gz(this,b);},"w",function(){return Sp(this);}],Hj,"java.util.AbstractList$SubAbstractListRandomAccess",Mc,[Xb],0,0,["ib",function(b,c,d){AC(this,b,c,d);}],Vc,"java.lang.String",E,[Q,Db,Nd],0,Vc_$callClinit,["Ij",function(b){Gh(this,b);},"ak",function(b,c,d){Un(this,b,c,d);},"Gf",function(b){return Wt(this,b);},"Uh",function(){return C(this);},"H",function(){return HK(this);},"Id",function(b,c,d,e){D(this,b,c,d,e);},"cj",function(b,c){return Iw(this,b,c);},"tj",function(b){return OK(this, +b);},"Jc",function(b,c){return Nq(this,b,c);},"fe",function(b){return UI(this,b);},"kg",function(b,c){return MC(this,b,c);},"v",function(){return Zw(this);},"I",function(b){return XG(this,b);},"Y",function(){return Nt(this);},"hj",function(){return G(this);}],Wn,"java.lang.NegativeArraySizeException",L,[],0,0,["a",function(){Pv(this);}],Zj,"org.teavm.flavour.components.standard.OtherwiseClause",E,[],0,0,["a",function(){EN(this);},"X",function(b){Mo(this,b);}],Ag,"org.teavm.flavour.templates.Modifier$proxy21", +E,[J],0,0,["c",function(b){return Vo(this,b);},"b",function(b){Qx(this,b);}],Bg,"org.teavm.flavour.templates.Modifier$proxy20",E,[J],0,0,["c",function(b){return OE(this,b);},"b",function(b){AB(this,b);}],Pn,"java.nio.charset.impl.UTF8Charset",Vb,[],0,0,["a",function(){MI(this);}],Cg,"org.teavm.flavour.templates.Modifier$proxy23",E,[J],0,0,["c",function(b){return Ir(this,b);},"b",function(b){AD(this,b);}],Xi,"org.teavm.flavour.json.tree.StringNode",R,[],0,0,[],Zf,"org.teavm.flavour.templates.Modifier$proxy22", +E,[J],0,0,["c",function(b){return WB(this,b);},"b",function(b){Eu(this,b);}],Uj,"$$LAMBDA5$$",E,[Ab],0,0,["od",function(b){Er(this,b);},"q",function(b){YJ(this,b);},"p",function(b){return KL(this,b);}],Ie,"kotlin.collections.EmptyIterator",E,[Ob,Eb],0,Ie_$callClinit,["s",function(){return SD(this);},"Gj",function(){return Dq(this);},"y",function(){return Ns(this);},"a",function(){Mh(this);}],Oh,"org.teavm.flavour.templates.Templates$PROXY$2",E,[],0,0,[],Ri,"org.teavm.flavour.json.deserializer.StringDeserializer", +U,[],0,0,["a",function(){SA(this);},"F",function(b,c){return Io(this,b,c);}],Pe,"org.teavm.flavour.example.todomvc.FocusComponent$isFocused$1",O,[Kd],0,Pe_$callClinit,["nb",function(){return GH(this);},"vb",function(){return Wo(this);},"a",function(){Xh(this);}],Tn,"org.teavm.flavour.routing.Routing",E,[],0,0,[],Zi,"java.util.ArrayDeque",X,[Ud],0,0,["a",function(){Ap(this);},"r",function(b){EF(this,b);},"le",function(b){DG(this,b);},"nd",function(){return AG(this);},"sc",function(){return IL(this);},"qg",function() +{return AL(this);},"Nd",function(){return Rx(this);},"ud",function(b){HM(this,b);},"Qk",function(){return Lz(this);},"w",function(){return Is(this);},"H",function(){return Fu(this);},"E",function(b){HJ(this,b);}],Ve,"org.teavm.flavour.example.todomvc.EscapeComponent$action$1",E,[Wb],0,Ve_$callClinit,["kb",function(){DE(this);},"a",function(){Jm(this);}],Fh,"java.lang.IllegalStateException",Z,[],0,0,["a",function(){CC(this);},"f",function(b){Zu(this,b);}],Ui,"org.teavm.flavour.components.html.LinkComponent", +E,[P],0,0,["i",function(b){TI(this,b);},"Ci",function(b){LM(this,b);},"d",function(){Gp(this);},"e",function(){GL(this);},"uh",function(b){TM(this,b);}],Rg,"java.lang.NullPointerException",L,[],0,0,["a",function(){Iy(this);}],En,"kotlin.jvm.internal.TypeIntrinsics",E,[],0,0,[],Tm,"java.lang.Math",E,[],0,0,[],Yi,"org.teavm.flavour.components.html.CheckedChangeBinder",E,[P],0,0,["i",function(b){Hq(this,b);},"gb",function(b){Nu(this,b);},"d",function(){NG(this);},"e",function(){Gt(this);}],Hm,"java.util.function.Supplier$proxy10", +E,[K],0,0,["g",function(){return IB(this);},"b",function(b){NH(this,b);}],Em,"java.util.function.Supplier$proxy13",E,[K],0,0,["g",function(){return Ss(this);},"b",function(b){Ay(this,b);}],Gm,"java.util.function.Supplier$proxy11",E,[K],0,0,["g",function(){return Yp(this);},"b",function(b){YC(this,b);}],Xj,"org.teavm.flavour.components.standard.IfComponent",M,[],0,0,["n",function(b){QM(this,b);},"Wf",function(b){Jo(this,b);},"V",function(b){Vq(this,b);},"d",function(){YE(this);},"e",function(){MA(this);}],Fm, +"java.util.function.Supplier$proxy12",E,[K],0,0,["g",function(){return GG(this);},"b",function(b){Hu(this,b);}],Ac,"kotlin.ranges.IntProgression",E,[Ed,Eb],0,Ac_$callClinit,["Lc",function(){return Yw(this);},"B",function(){return Ws(this);},"U",function(b,c,d){Bl(this,b,c,d);}],Kc,"kotlin.ranges.IntRange",Ac,[Bf],0,Kc_$callClinit,["df",function(b,c){Ni(this,b,c);}],Mk,"kotlin.text.CharsKt",Fc,[],0,0,[],Gb,"org.teavm.flavour.templates.ValueChangeListener",E,[],0,0,[],Kk,"org.teavm.flavour.templates.ValueChangeListener$proxy1", +E,[Gb],0,0,["C",function(b){Du(this,b);},"b",function(b){Gr(this,b);}],Hk,"org.teavm.flavour.templates.ValueChangeListener$proxy0",E,[Gb],0,0,["C",function(b){DN(this,b);},"b",function(b){EG(this,b);}],Ik,"org.teavm.flavour.templates.ValueChangeListener$proxy3",E,[Gb],0,0,["C",function(b){UE(this,b);},"k",function(b){UC(this,b);}],Jk,"org.teavm.flavour.templates.ValueChangeListener$proxy2",E,[Gb],0,0,["C",function(b){Kv(this,b);},"k",function(b){Kw(this,b);}],Oj,"org.teavm.flavour.json.JSON$PROXY$0",E,[],0, +0,[],Pb,"org.teavm.flavour.templates.Slot",Hb,[],0,0,["a",function(){GI(this);},"ig",function(b){LH(this,b);},"Zh",function(b,c){KD(this,b,c);},"eb",function(){return WG(this);},"N",function(b){Fw(this,b);},"db",function(){Gu(this);}],Al,"org.teavm.flavour.templates.ContainerSlot",Pb,[],0,0,["a",function(){ZJ(this);}],Kj,"org.teavm.flavour.json.JSON$PROXY$4",E,[],0,0,[],Nj,"org.teavm.flavour.json.JSON$PROXY$5",E,[],0,0,[],Jj,"org.teavm.flavour.components.attributes.ComputedAttribute",E,[P],0,0,["i",function(b) +{Vy(this,b);},"t",function(b){PG(this,b);},"xf",function(b){PD(this,b);},"d",function(){Wv(this);},"e",function(){Fv(this);}],Lj,"org.teavm.flavour.json.JSON$PROXY$7",E,[],0,0,[],Oc,"java.io.InputStream",E,[Gc],0,0,["a",function(){GC(this);}],Rm,"java.lang.ConsoleInputStream",Oc,[],0,0,["a",function(){MH(this);}],Mj,"org.teavm.flavour.json.JSON$PROXY$8",E,[],0,0,[],Dl,"$$LAMBDA0$$",E,[Gf],0,0,["a",function(){SE(this);}],Im,"org.teavm.flavour.components.html.ValueBinder",E,[P],0,0,["i",function(b){VJ(this,b); +},"t",function(b){EB(this,b);},"d",function(){Yq(this);},"e",function(){Tu(this);}],Vk,"org.teavm.flavour.components.events.MouseBinder",Rb,[],0,0,["i",function(b){CH(this,b);}],Jn,"java.util.HashMap",Rc,[Nb,Q],0,0,["Je",function(b){return YF(this,b);},"a",function(){JB(this);},"r",function(b){No(this,b);},"Vg",function(b,c){XI(this,b,c);},"Uj",function(){By(this);},"Ml",function(b){return HG(this,b);},"Vi",function(b){return Kr(this,b);},"xj",function(b,c,d){return WD(this,b,c,d);},"zk",function(){return MM(this); +},"og",function(b,c){return Qr(this,b,c);},"Sj",function(b,c){return HF(this,b,c);},"jg",function(b,c,d){return Nx(this,b,c,d);},"of",function(b){WE(this,b);},"hg",function(){Uy(this);}],Sj,"org.teavm.flavour.components.html.EnabledBinder",E,[P],0,0,["i",function(b){UM(this,b);},"t",function(b){Ux(this,b);},"d",function(){Wu(this);},"e",function(){Jy(this);}],Je,"org.teavm.flavour.example.todomvc.TodoView$all$1",O,[Fb],0,Je_$callClinit,["z",function(b){return KG(this,b);},"u",function(b){return Fx(this,b);}, +"a",function(){Qj(this);}],Xe,"org.teavm.flavour.example.todomvc.TodoView$completed$1",O,[Fb],0,Xe_$callClinit,["z",function(b){return Do(this,b);},"u",function(b){return SB(this,b);},"a",function(){On(this);}],Lh,"org.teavm.classlib.impl.unicode.UnicodeHelper$Range",E,[],0,0,["rh",function(b,c,d){ZC(this,b,c,d);}],Ei,"java.util.function.Consumer$proxy1",E,[N],0,0,["h",function(b){Zr(this,b);},"j",function(b,c){Jz(this,b,c);}],Bi,"java.util.function.Consumer$proxy0",E,[N],0,0,["h",function(b){Es(this,b);},"b", +function(b){VK(this,b);}],Km,"java.lang.NoClassDefFoundError",Tb,[],0,0,[],Ii,"java.util.function.Consumer$proxy5",E,[N],0,0,["h",function(b){PJ(this,b);},"b",function(b){FE(this,b);}],Fi,"java.util.function.Consumer$proxy4",E,[N],0,0,["h",function(b){Yt(this,b);},"j",function(b,c){Ys(this,b,c);}],Gi,"java.util.function.Consumer$proxy3",E,[N],0,0,["h",function(b){Ru(this,b);},"j",function(b,c){YL(this,b,c);}],Di,"java.util.function.Consumer$proxy2",E,[N],0,0,["h",function(b){Rz(this,b);},"j",function(b,c){Us(this, +b,c);}],Ji,"java.util.function.Consumer$proxy8",E,[N],0,0,["h",function(b){Ju(this,b);},"b",function(b){DI(this,b);}],Ki,"java.util.function.Consumer$proxy7",E,[N],0,0,["h",function(b){Gq(this,b);},"b",function(b){Uo(this,b);}],Tg,"kotlin.internal.ProgressionUtilKt",E,[],0,0,[],Hi,"java.util.function.Consumer$proxy6",E,[N],0,0,["h",function(b){VM(this,b);},"b",function(b){IJ(this,b);}],Ig,"org.teavm.flavour.components.html.ValueChangeBinder",E,[P],0,0,["i",function(b){Vv(this,b);},"gb",function(b){Nz(this,b); +},"d",function(){Ix(this);},"e",function(){PB(this);}],Bk,"java.lang.ConsoleOutputStreamStderr",Cb,[],0,0,["a",function(){JJ(this);}],Cl,"org.teavm.flavour.example.todomvc.Todo",E,[],0,0,["wl",function(){return Ms(this);},"Xg",function(b){Fp(this,b);},"zl",function(){return Nr(this);},"Ee",function(b){CL(this,b);},"a",function(){Uq(this);}],Sn,"org.teavm.flavour.example.todomvc.EscapeComponent$Companion",E,[],0,0,["ad",function(){return Xz(this);},"a",function(){Yx(this);},"x",function(b){Pp(this,b);}],Zk,"org.teavm.flavour.templates.RootSlot", +Pb,[],0,0,["hb",function(b){Ex(this,b);}],In,"org.teavm.flavour.components.standard.ChooseComponent",M,[],0,0,["n",function(b){WM(this,b);},"pg",function(b){YI(this,b);},"Jg",function(b){Ku(this,b);},"d",function(){PL(this);},"e",function(){Tt(this);}],Kh,"java.util.Arrays$ArrayAsList",T,[Xb],0,0,["Eb",function(b){Cx(this,b);},"G",function(b){return Ao(this,b);},"w",function(){return Xt(this);}]]); +$rt_stringPool(["@","#","org.teavm.flavour.example.todomvc.TodoRoute","org.teavm.flavour.example.todomvc.TodoView","Wrong route interface: ","main","todos","todo","$receiver","predicate","null","This dispatcher is already attached to a window","/","it","","","null cannot be cast to non-null type kotlin.CharSequence","c","dataSource","args","org.teavm.flavour.example.todomvc.Todo","org.teavm.flavour.example.todomvc.TodoList","Can\'t serialize object of type ","Don\'t know how to deserialize ","java.lang.String", +"Can\'t deserialize non-boolean not as a boolean primitive","submit","Can\'t deserialize non-array node as a list","click","dblclick","class","target","blur","elements","null cannot be cast to non-null type kotlin.collections.MutableIterable","kotlin.collections.MutableIterable","UTF-8","ALL","ACTIVE","COMPLETED"," editing","completed","Can\'t set attribute to root node","Can\'t apply modifier to root node","view","toggle","type","checkbox","destroy","edit","id","clear-completed","todoapp","header","todo-form", +"new-todo","placeholder","What needs to be done?","autofocus","info","href","http://todomvc.com","toggle-all","for","todo-list","footer","todo-count","filters","/active","/completed","Parameter specified as non-null is null: method ",".",", parameter ","Can\'t deserialize node "," to an instance of ","hashchange","Object has already been serialzied: ","keydown","Can\'t deserialize non-string node as a string"," cannot be cast to ","selected","Step must be non-zero","The given space is already hosted by a slot", +"Successor does not belong to this slot","Step is zero."]); +MS=GR(6);var main=CA; +(function(){var c;c=Gl.prototype;c.get=c.ij;c.getLength=c.ui;c=Dj.prototype;c.handleEvent=c.p;c=Xl.prototype;c.handleEvent=c.p;c=Yl.prototype;c.handleEvent=c.p;c=Kn.prototype;c.handleEvent=c.p;c=Sh.prototype;c.handleEvent=c.p;c=Qh.prototype;c.removeEventListener=c.Oc;c.removeEventListener=c.mc;c.dispatchEvent=c.tc;c.getLength=c.Li;c.addEventListener=c.Mc;c.get=c.Ne;c.addEventListener=c.Se;c=Uj.prototype;c.handleEvent=c.p;})(); +main = $rt_mainStarter(main); + +//# sourceMappingURL=classes.js.map \ No newline at end of file diff --git a/examples/flavour/index_files/index.css b/examples/flavour/index_files/index.css new file mode 100644 index 0000000000..54d89abda7 --- /dev/null +++ b/examples/flavour/index_files/index.css @@ -0,0 +1,378 @@ +html, +body { + margin: 0; + padding: 0; +} + +button { + margin: 0; + padding: 0; + border: 0; + background: none; + font-size: 100%; + vertical-align: baseline; + font-family: inherit; + font-weight: inherit; + color: inherit; + -webkit-appearance: none; + appearance: none; + -webkit-font-smoothing: antialiased; + -moz-font-smoothing: antialiased; + font-smoothing: antialiased; +} + +body { + font: 14px 'Helvetica Neue', Helvetica, Arial, sans-serif; + line-height: 1.4em; + background: #f5f5f5; + color: #4d4d4d; + min-width: 230px; + max-width: 550px; + margin: 0 auto; + -webkit-font-smoothing: antialiased; + -moz-font-smoothing: antialiased; + font-smoothing: antialiased; + font-weight: 300; +} + +button, +input[type="checkbox"] { + outline: none; +} + +.hidden { + display: none; +} + +#todoapp { + background: #fff; + margin: 130px 0 40px 0; + position: relative; + box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.2), + 0 25px 50px 0 rgba(0, 0, 0, 0.1); +} + +#todoapp input::-webkit-input-placeholder { + font-style: italic; + font-weight: 300; + color: #e6e6e6; +} + +#todoapp input::-moz-placeholder { + font-style: italic; + font-weight: 300; + color: #e6e6e6; +} + +#todoapp input::input-placeholder { + font-style: italic; + font-weight: 300; + color: #e6e6e6; +} + +#todoapp h1 { + position: absolute; + top: -155px; + width: 100%; + font-size: 100px; + font-weight: 100; + text-align: center; + color: rgba(175, 47, 47, 0.15); + -webkit-text-rendering: optimizeLegibility; + -moz-text-rendering: optimizeLegibility; + text-rendering: optimizeLegibility; +} + +#new-todo, +.edit { + position: relative; + margin: 0; + width: 100%; + font-size: 24px; + font-family: inherit; + font-weight: inherit; + line-height: 1.4em; + border: 0; + outline: none; + color: inherit; + padding: 6px; + border: 1px solid #999; + box-shadow: inset 0 -1px 5px 0 rgba(0, 0, 0, 0.2); + box-sizing: border-box; + -webkit-font-smoothing: antialiased; + -moz-font-smoothing: antialiased; + font-smoothing: antialiased; +} + +#new-todo { + padding: 16px 16px 16px 60px; + border: none; + background: rgba(0, 0, 0, 0.003); + box-shadow: inset 0 -2px 1px rgba(0,0,0,0.03); +} + +#main { + position: relative; + z-index: 2; + border-top: 1px solid #e6e6e6; +} + +label[for='toggle-all'] { + display: none; +} + +#toggle-all { + position: absolute; + top: -55px; + left: -12px; + width: 60px; + height: 34px; + text-align: center; + border: none; /* Mobile Safari */ +} + +#toggle-all:before { + content: '❯'; + font-size: 22px; + color: #e6e6e6; + padding: 10px 27px 10px 27px; +} + +#toggle-all:checked:before { + color: #737373; +} + +#todo-list { + margin: 0; + padding: 0; + list-style: none; +} + +#todo-list li { + position: relative; + font-size: 24px; + border-bottom: 1px solid #ededed; +} + +#todo-list li:last-child { + border-bottom: none; +} + +#todo-list li.editing { + border-bottom: none; + padding: 0; +} + +#todo-list li.editing .edit { + display: block; + width: 506px; + padding: 13px 17px 12px 17px; + margin: 0 0 0 43px; +} + +#todo-list li.editing .view { + display: none; +} + +#todo-list li .toggle { + text-align: center; + width: 40px; + /* auto, since non-WebKit browsers doesn't support input styling */ + height: auto; + position: absolute; + top: 0; + bottom: 0; + margin: auto 0; + border: none; /* Mobile Safari */ + -webkit-appearance: none; + appearance: none; +} + +#todo-list li .toggle:after { + content: url('data:image/svg+xml;utf8,'); +} + +#todo-list li .toggle:checked:after { + content: url('data:image/svg+xml;utf8,'); +} + +#todo-list li label { + white-space: pre; + word-break: break-word; + padding: 15px 60px 15px 15px; + margin-left: 45px; + display: block; + line-height: 1.2; + transition: color 0.4s; +} + +#todo-list li.completed label { + color: #d9d9d9; + text-decoration: line-through; +} + +#todo-list li .destroy { + display: none; + position: absolute; + top: 0; + right: 10px; + bottom: 0; + width: 40px; + height: 40px; + margin: auto 0; + font-size: 30px; + color: #cc9a9a; + margin-bottom: 11px; + transition: color 0.2s ease-out; +} + +#todo-list li .destroy:hover { + color: #af5b5e; +} + +#todo-list li .destroy:after { + content: '×'; +} + +#todo-list li:hover .destroy { + display: block; +} + +#todo-list li .edit { + display: none; +} + +#todo-list li.editing:last-child { + margin-bottom: -1px; +} + +#footer { + color: #777; + padding: 10px 15px; + height: 20px; + text-align: center; + border-top: 1px solid #e6e6e6; +} + +#footer:before { + content: ''; + position: absolute; + right: 0; + bottom: 0; + left: 0; + height: 50px; + overflow: hidden; + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2), + 0 8px 0 -3px #f6f6f6, + 0 9px 1px -3px rgba(0, 0, 0, 0.2), + 0 16px 0 -6px #f6f6f6, + 0 17px 2px -6px rgba(0, 0, 0, 0.2); +} + +#todo-count { + float: left; + text-align: left; +} + +#todo-count strong { + font-weight: 300; +} + +#filters { + margin: 0; + padding: 0; + list-style: none; + position: absolute; + right: 0; + left: 0; +} + +#filters li { + display: inline; +} + +#filters li a { + color: inherit; + margin: 3px; + padding: 3px 7px; + text-decoration: none; + border: 1px solid transparent; + border-radius: 3px; +} + +#filters li a.selected, +#filters li a:hover { + border-color: rgba(175, 47, 47, 0.1); +} + +#filters li a.selected { + border-color: rgba(175, 47, 47, 0.2); +} + +#clear-completed, +html #clear-completed:active { + float: right; + position: relative; + line-height: 20px; + text-decoration: none; + cursor: pointer; + position: relative; +} + +#clear-completed:hover { + text-decoration: underline; +} + +#info { + margin: 65px auto 0; + color: #bfbfbf; + font-size: 10px; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); + text-align: center; +} + +#info p { + line-height: 1; +} + +#info a { + color: inherit; + text-decoration: none; + font-weight: 400; +} + +#info a:hover { + text-decoration: underline; +} + +/* + Hack to remove background from Mobile Safari. + Can't use it globally since it destroys checkboxes in Firefox +*/ +@media screen and (-webkit-min-device-pixel-ratio:0) { + #toggle-all, + #todo-list li .toggle { + background: none; + } + + #todo-list li .toggle { + height: 40px; + } + + #toggle-all { + -webkit-transform: rotate(90deg); + transform: rotate(90deg); + -webkit-appearance: none; + appearance: none; + } +} + +@media (max-width: 430px) { + #footer { + height: 50px; + } + + #filters { + bottom: 10px; + } +} diff --git a/examples/flavour/index_files/runtime.js b/examples/flavour/index_files/runtime.js new file mode 100644 index 0000000000..470db3011c --- /dev/null +++ b/examples/flavour/index_files/runtime.js @@ -0,0 +1,1124 @@ +/* + * Copyright 2013 Alexey Andreev. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +"use strict"; +var $rt_global = this; +var $rt_lastObjectId = 1; +function $rt_nextId() { + var current = $rt_lastObjectId; + var next = (current + 1) | 0; + if (next === 0) { + next = (next + 1) | 0; + } + $rt_lastObjectId = next; + return current; +} +function $rt_compare(a, b) { + return a > b ? 1 : a < b ? -1 : 0; +} +function $rt_isInstance(obj, cls) { + return obj !== null && !!obj.constructor.$meta && $rt_isAssignable(obj.constructor, cls); +} +function $rt_isAssignable(from, to) { + if (from === to) { + return true; + } + var supertypes = from.$meta.supertypes; + for (var i = 0; i < supertypes.length; i = (i + 1) | 0) { + if ($rt_isAssignable(supertypes[i], to)) { + return true; + } + } + return false; +} +function $rt_createArray(cls, sz) { + var data = new Array(sz); + var arr = new ($rt_arraycls(cls))(data); + if (sz > 0) { + var i = 0; + do { + data[i] = null; + i = (i + 1) | 0; + } while (i < sz); + } + return arr; +} +function $rt_wrapArray(cls, data) { + return new ($rt_arraycls(cls))(data); +} +function $rt_createUnfilledArray(cls, sz) { + return new ($rt_arraycls(cls))(new Array(sz)); +} +function $rt_createLongArray(sz) { + var data = new Array(sz); + var arr = new ($rt_arraycls($rt_longcls()))(data); + for (var i = 0; i < sz; i = (i + 1) | 0) { + data[i] = Long_ZERO; + } + return arr; +} +var $rt_createNumericArray; +var $rt_createCharArray; +var $rt_createByteArray; +var $rt_createShortArray; +var $rt_createIntArray; +var $rt_createBooleanArray; +var $rt_createFloatArray; +var $rt_createDoubleArray; +if (typeof 'ArrayBuffer' !== 'undefined') { + $rt_createNumericArray = function(cls, nativeArray) { + return new ($rt_arraycls(cls))(nativeArray); + }; + $rt_createCharArray = function(sz) { + return $rt_createNumericArray($rt_charcls(), new Uint16Array(sz)); + }; + $rt_createByteArray = function(sz) { + return $rt_createNumericArray($rt_bytecls(), new Int8Array(sz)); + }; + $rt_createShortArray = function(sz) { + return $rt_createNumericArray($rt_shortcls(), new Int16Array(sz)); + }; + $rt_createIntArray = function(sz) { + return $rt_createNumericArray($rt_intcls(), new Int32Array(sz)); + }; + $rt_createBooleanArray = function(sz) { + return $rt_createNumericArray($rt_booleancls(), new Int8Array(sz)); + }; + $rt_createFloatArray = function(sz) { + return $rt_createNumericArray($rt_floatcls(), new Float32Array(sz)); + }; + $rt_createDoubleArray = function(sz) { + return $rt_createNumericArray($rt_doublecls(), new Float64Array(sz)); + }; +} else { + $rt_createNumericArray = function(cls, sz) { + var data = new Array(sz); + var arr = new ($rt_arraycls(cls))(data); + for (var i = 0; i < sz; i = (i + 1) | 0) { + data[i] = 0; + } + return arr; + }; + $rt_createByteArray = function(sz) { return $rt_createNumericArray($rt_bytecls(), sz); }; + $rt_createShortArray = function(sz) { return $rt_createNumericArray($rt_shortcls(), sz); }; + $rt_createIntArray = function(sz) { return $rt_createNumericArray($rt_intcls(), sz); }; + $rt_createBooleanArray = function(sz) { return $rt_createNumericArray($rt_booleancls(), sz); }; + $rt_createFloatArray = function(sz) { return $rt_createNumericArray($rt_floatcls(), sz); }; + $rt_createDoubleArray = function(sz) { return $rt_createNumericArray($rt_doublecls(), sz); }; + $rt_createCharArray = function(sz) { return $rt_createNumericArray($rt_charcls(), sz); } +} +function $rt_arraycls(cls) { + var result = cls.$array; + if (result === null) { + var arraycls = function(data) { + this.data = data; + this.$id$ = 0; + }; + arraycls.prototype = new ($rt_objcls())(); + arraycls.prototype.constructor = arraycls; + arraycls.prototype.toString = function() { + var str = "["; + for (var i = 0; i < this.data.length; ++i) { + if (i > 0) { + str += ", "; + } + str += this.data[i].toString(); + } + str += "]"; + return str; + }; + var name = "[" + cls.$meta.binaryName; + arraycls.$meta = { item : cls, supertypes : [$rt_objcls()], primitive : false, superclass : $rt_objcls(), + name : name, binaryName : name, enum : false }; + arraycls.classObject = null; + arraycls.$array = null; + result = arraycls; + cls.$array = arraycls; + } + return result; +} +function $rt_createcls() { + return { + $array : null, + classObject : null, + $meta : { + supertypes : [], + superclass : null + } + }; +} +function $rt_createPrimitiveCls(name, binaryName) { + var cls = $rt_createcls(); + cls.$meta.primitive = true; + cls.$meta.name = name; + cls.$meta.binaryName = binaryName; + cls.$meta.enum = false; + cls.$meta.item = null; + return cls; +} +var $rt_booleanclsCache = null; +function $rt_booleancls() { + if ($rt_booleanclsCache === null) { + $rt_booleanclsCache = $rt_createPrimitiveCls("boolean", "Z"); + } + return $rt_booleanclsCache; +} +var $rt_charclsCache = null; +function $rt_charcls() { + if ($rt_charclsCache === null) { + $rt_charclsCache = $rt_createPrimitiveCls("char", "C"); + } + return $rt_charclsCache; +} +var $rt_byteclsCache = null; +function $rt_bytecls() { + if ($rt_byteclsCache === null) { + $rt_byteclsCache = $rt_createPrimitiveCls("byte", "B"); + } + return $rt_byteclsCache; +} +var $rt_shortclsCache = null; +function $rt_shortcls() { + if ($rt_shortclsCache === null) { + $rt_shortclsCache = $rt_createPrimitiveCls("short", "S"); + } + return $rt_shortclsCache; +} +var $rt_intclsCache = null; +function $rt_intcls() { + if ($rt_intclsCache === null) { + $rt_intclsCache = $rt_createPrimitiveCls("int", "I"); + } + return $rt_intclsCache; +} +var $rt_longclsCache = null; +function $rt_longcls() { + if ($rt_longclsCache === null) { + $rt_longclsCache = $rt_createPrimitiveCls("long", "J"); + } + return $rt_longclsCache; +} +var $rt_floatclsCache = null; +function $rt_floatcls() { + if ($rt_floatclsCache === null) { + $rt_floatclsCache = $rt_createPrimitiveCls("float", "F"); + } + return $rt_floatclsCache; +} +var $rt_doubleclsCache = null; +function $rt_doublecls() { + if ($rt_doubleclsCache === null) { + $rt_doubleclsCache = $rt_createPrimitiveCls("double", "D"); + } + return $rt_doubleclsCache; +} +var $rt_voidclsCache = null; +function $rt_voidcls() { + if ($rt_voidclsCache === null) { + $rt_voidclsCache = $rt_createPrimitiveCls("void", "V"); + } + return $rt_voidclsCache; +} +function $rt_init(cls, constructor, args) { + var obj = new cls(); + cls.prototype[constructor].apply(obj, args); + return obj; +} +function $rt_throw(ex) { + throw $rt_exception(ex); +} +function $rt_exception(ex) { + var err = ex.$jsException; + if (!err) { + err = new Error("Java exception thrown"); + err.$javaException = ex; + ex.$jsException = err; + } + return err; +} +function $rt_createMultiArray(cls, dimensions) { + var first = 0; + for (var i = dimensions.length - 1; i >= 0; i = (i - 1) | 0) { + if (dimensions[i] == 0) { + first = i; + break; + } + } + if (first > 0) { + for (i = 0; i < first; i = (i + 1) | 0) { + cls = $rt_arraycls(cls); + } + if (first == dimensions.length - 1) { + return $rt_createArray(cls, dimensions[first]); + } + } + var arrays = new Array($rt_primitiveArrayCount(dimensions, first)); + var firstDim = dimensions[first] | 0; + for (i = 0; i < arrays.length; i = (i + 1) | 0) { + arrays[i] = $rt_createArray(cls, firstDim); + } + return $rt_createMultiArrayImpl(cls, arrays, dimensions, first); +} +function $rt_createByteMultiArray(dimensions) { + var arrays = new Array($rt_primitiveArrayCount(dimensions, 0)); + if (arrays.length == 0) { + return $rt_createMultiArray($rt_bytecls(), dimensions); + } + var firstDim = dimensions[0] | 0; + for (var i = 0; i < arrays.length; i = (i + 1) | 0) { + arrays[i] = $rt_createByteArray(firstDim); + } + return $rt_createMultiArrayImpl($rt_bytecls(), arrays, dimensions); +} +function $rt_createCharMultiArray(dimensions) { + var arrays = new Array($rt_primitiveArrayCount(dimensions, 0)); + if (arrays.length == 0) { + return $rt_createMultiArray($rt_charcls(), dimensions); + } + var firstDim = dimensions[0] | 0; + for (var i = 0; i < arrays.length; i = (i + 1) | 0) { + arrays[i] = $rt_createCharArray(firstDim); + } + return $rt_createMultiArrayImpl($rt_charcls(), arrays, dimensions, 0); +} +function $rt_createBooleanMultiArray(dimensions) { + var arrays = new Array($rt_primitiveArrayCount(dimensions, 0)); + if (arrays.length == 0) { + return $rt_createMultiArray($rt_booleancls(), dimensions); + } + var firstDim = dimensions[0] | 0; + for (var i = 0; i < arrays.length; i = (i + 1) | 0) { + arrays[i] = $rt_createBooleanArray(firstDim); + } + return $rt_createMultiArrayImpl($rt_booleancls(), arrays, dimensions, 0); +} +function $rt_createShortMultiArray(dimensions) { + var arrays = new Array($rt_primitiveArrayCount(dimensions, 0)); + if (arrays.length == 0) { + return $rt_createMultiArray($rt_shortcls(), dimensions); + } + var firstDim = dimensions[0] | 0; + for (var i = 0; i < arrays.length; i = (i + 1) | 0) { + arrays[i] = $rt_createShortArray(firstDim); + } + return $rt_createMultiArrayImpl($rt_shortcls(), arrays, dimensions, 0); +} +function $rt_createIntMultiArray(dimensions) { + var arrays = new Array($rt_primitiveArrayCount(dimensions, 0)); + if (arrays.length == 0) { + return $rt_createMultiArray($rt_intcls(), dimensions); + } + var firstDim = dimensions[0] | 0; + for (var i = 0; i < arrays.length; i = (i + 1) | 0) { + arrays[i] = $rt_createIntArray(firstDim); + } + return $rt_createMultiArrayImpl($rt_intcls(), arrays, dimensions, 0); +} +function $rt_createLongMultiArray(dimensions) { + var arrays = new Array($rt_primitiveArrayCount(dimensions, 0)); + if (arrays.length == 0) { + return $rt_createMultiArray($rt_longcls(), dimensions); + } + var firstDim = dimensions[0] | 0; + for (var i = 0; i < arrays.length; i = (i + 1) | 0) { + arrays[i] = $rt_createLongArray(firstDim); + } + return $rt_createMultiArrayImpl($rt_longcls(), arrays, dimensions, 0); +} +function $rt_createFloatMultiArray(dimensions) { + var arrays = new Array($rt_primitiveArrayCount(dimensions, 0)); + if (arrays.length == 0) { + return $rt_createMultiArray($rt_floatcls(), dimensions); + } + var firstDim = dimensions[0] | 0; + for (var i = 0; i < arrays.length; i = (i + 1) | 0) { + arrays[i] = $rt_createFloatArray(firstDim); + } + return $rt_createMultiArrayImpl($rt_floatcls(), arrays, dimensions, 0); +} +function $rt_createDoubleMultiArray(dimensions) { + var arrays = new Array($rt_primitiveArrayCount(dimensions, 0)); + if (arrays.length == 0) { + return $rt_createMultiArray($rt_doublecls(), dimensions); + } + var firstDim = dimensions[0] | 0; + for (var i = 0; i < arrays.length; i = (i + 1) | 0) { + arrays[i] = $rt_createDoubleArray(firstDim); + } + return $rt_createMultiArrayImpl($rt_doublecls(), arrays, dimensions, 0); +} +function $rt_primitiveArrayCount(dimensions, start) { + var val = dimensions[start + 1] | 0; + for (var i = start + 2; i < dimensions.length; i = (i + 1) | 0) { + val = (val * (dimensions[i] | 0)) | 0; + if (val == 0) { + break; + } + } + return val; +} +function $rt_createMultiArrayImpl(cls, arrays, dimensions, start) { + var limit = arrays.length; + for (var i = (start + 1) | 0; i < dimensions.length; i = (i + 1) | 0) { + cls = $rt_arraycls(cls); + var dim = dimensions[i]; + var index = 0; + var packedIndex = 0; + while (index < limit) { + var arr = $rt_createUnfilledArray(cls, dim); + for (var j = 0; j < dim; j = (j + 1) | 0) { + arr.data[j] = arrays[index]; + index = (index + 1) | 0; + } + arrays[packedIndex] = arr; + packedIndex = (packedIndex + 1) | 0; + } + limit = packedIndex; + } + return arrays[0]; +} +function $rt_assertNotNaN(value) { + if (typeof value === 'number' && isNaN(value)) { + throw "NaN"; + } + return value; +} +var $rt_stdoutBuffer = ""; +function $rt_putStdout(ch) { + if (ch == 0xA) { + if (console) { + console.info($rt_stdoutBuffer); + } + $rt_stdoutBuffer = ""; + } else { + $rt_stdoutBuffer += String.fromCharCode(ch); + } +} +var $rt_stderrBuffer = ""; +function $rt_putStderr(ch) { + if (ch == 0xA) { + if (console) { + console.info($rt_stderrBuffer); + } + $rt_stderrBuffer = ""; + } else { + $rt_stderrBuffer += String.fromCharCode(ch); + } +} +function $rt_metadata(data) { + for (var i = 0; i < data.length; i += 7) { + var cls = data[i]; + cls.$meta = {}; + var m = cls.$meta; + m.name = data[i + 1]; + m.binaryName = "L" + m.name + ";"; + var superclass = data[i + 2]; + m.superclass = superclass !== 0 ? superclass : null; + m.supertypes = data[i + 3]; + if (m.superclass) { + m.supertypes.push(m.superclass); + cls.prototype = new m.superclass(); + } else { + cls.prototype = {}; + } + var flags = data[i + 4]; + m.enum = (flags & 1) != 0; + m.primitive = false; + m.item = null; + cls.prototype.constructor = cls; + cls.classObject = null; + var clinit = data[i + 5]; + cls.$clinit = clinit !== 0 ? clinit : function() {}; + + var virtualMethods = data[i + 6]; + for (var j = 0; j < virtualMethods.length; j += 2) { + var name = virtualMethods[j]; + var func = virtualMethods[j + 1]; + if (typeof name === 'string') { + name = [name]; + } + for (var k = 0; k < name.length; ++k) { + cls.prototype[name[k]] = func; + } + } + + cls.$array = null; + } +} +function $rt_threadStarter(f) { + return function() { + var args = Array.prototype.slice.apply(arguments); + $rt_startThread(function() { + f.apply(this, args); + }); + } +} +function $rt_mainStarter(f) { + return function(args) { + if (!args) { + args = []; + } + var javaArgs = $rt_createArray($rt_objcls(), args.length); + for (var i = 0; i < args.length; ++i) { + javaArgs.data[i] = $rt_str(args[i]); + } + $rt_threadStarter(f)(javaArgs); + }; +} +var $rt_stringPool_instance; +function $rt_stringPool(strings) { + $rt_stringPool_instance = new Array(strings.length); + for (var i = 0; i < strings.length; ++i) { + $rt_stringPool_instance[i] = $rt_intern($rt_str(strings[i])); + } +} +function $rt_s(index) { + return $rt_stringPool_instance[index]; +} +function TeaVMThread(runner) { + this.status = 3; + this.stack = []; + this.suspendCallback = null; + this.runner = runner; + this.attribute = null; + this.completeCallback = null; +} +TeaVMThread.prototype.push = function() { + for (var i = 0; i < arguments.length; ++i) { + this.stack.push(arguments[i]); + } + return this; +}; +TeaVMThread.prototype.s = TeaVMThread.prototype.push; +TeaVMThread.prototype.pop = function() { + return this.stack.pop(); +}; +TeaVMThread.prototype.l = TeaVMThread.prototype.pop; +TeaVMThread.prototype.isResuming = function() { + return this.status == 2; +}; +TeaVMThread.prototype.isSuspending = function() { + return this.status == 1; +}; +TeaVMThread.prototype.suspend = function(callback) { + this.suspendCallback = callback; + this.status = 1; +}; +TeaVMThread.prototype.start = function(callback) { + if (this.status != 3) { + throw new Error("Thread already started"); + } + if ($rt_currentNativeThread !== null) { + throw new Error("Another thread is running"); + } + this.status = 0; + this.completeCallback = callback ? callback : function(result) { + if (result instanceof Error) { + throw result; + } + }; + this.run(); +}; +TeaVMThread.prototype.resume = function() { + if ($rt_currentNativeThread !== null) { + throw new Error("Another thread is running"); + } + this.status = 2; + this.run(); +}; +TeaVMThread.prototype.run = function() { + $rt_currentNativeThread = this; + var result; + try { + result = this.runner(); + } catch (e) { + result = e; + } finally { + $rt_currentNativeThread = null; + } + if (this.suspendCallback !== null) { + var self = this; + var callback = this.suspendCallback; + this.suspendCallback = null; + callback(function() { + self.resume(); + }); + } else if (this.status === 0) { + this.completeCallback(result); + } +}; +function $rt_suspending() { + var thread = $rt_nativeThread(); + return thread != null && thread.isSuspending(); +} +function $rt_resuming() { + var thread = $rt_nativeThread(); + return thread != null && thread.isResuming(); +} +function $rt_suspend(callback) { + return $rt_nativeThread().suspend(callback); +} +function $rt_startThread(runner, callback) { + new TeaVMThread(runner).start(callback); +} +var $rt_currentNativeThread = null; +function $rt_nativeThread() { + return $rt_currentNativeThread; +} +function $rt_invalidPointer() { + throw new Error("Invalid recorded state"); +} + +function $dbg_repr(obj) { + return obj.toString ? obj.toString() : ""; +} +function $dbg_class(obj) { + if (obj instanceof Long) { + return "long"; + } + var cls = obj.constructor; + var arrayDegree = 0; + while (cls.$meta && cls.$meta.item) { + ++arrayDegree; + cls = cls.$meta.item; + } + var clsName = ""; + if (cls === $rt_booleancls()) { + clsName = "boolean"; + } else if (cls === $rt_bytecls()) { + clsName = "byte"; + } else if (cls === $rt_shortcls()) { + clsName = "short"; + } else if (cls === $rt_charcls()) { + clsName = "char"; + } else if (cls === $rt_intcls()) { + clsName = "int"; + } else if (cls === $rt_longcls()) { + clsName = "long"; + } else if (cls === $rt_floatcls()) { + clsName = "float"; + } else if (cls === $rt_doublecls()) { + clsName = "double"; + } else { + clsName = cls.$meta ? cls.$meta.name : "@" + cls.name; + } + while (arrayDegree-- > 0) { + clsName += "[]"; + } + return clsName; +} + +function Long(lo, hi) { + this.lo = lo | 0; + this.hi = hi | 0; +} +Long.prototype.toString = function() { + var result = []; + var n = this; + var positive = Long_isPositive(n); + if (!positive) { + n = Long_neg(n); + } + var radix = new Long(10, 0); + do { + var divRem = Long_divRem(n, radix); + result.push(String.fromCharCode(48 + divRem[1].lo)); + n = divRem[0]; + } while (n.lo != 0 || n.hi != 0); + result = result.reverse().join(''); + return positive ? result : "-" + result; +}; +var Long_ZERO = new Long(0, 0); +var Long_MAX_NORMAL = 1 << 18; +function Long_fromInt(val) { + return val >= 0 ? new Long(val, 0) : new Long(val, -1); +} +function Long_fromNumber(val) { + if (val >= 0) { + return new Long(val | 0, (val / 0x100000000) | 0); + } else { + return Long_neg(new Long(-val | 0, (-val / 0x100000000) | 0)); + } +} +function Long_toNumber(val) { + var lo = val.lo; + var hi = val.hi; + if (lo < 0) { + lo += 0x100000000; + } + return 0x100000000 * hi + lo; +} +function Long_eq(a, b) { + return a.hi === b.hi && a.lo === b.lo; +} +function Long_ne(a, b) { + return a.hi !== b.hi || a.lo !== b.lo; +} +function Long_gt(a, b) { + if (a.hi < b.hi) { + return false; + } + if (a.hi > b.hi) { + return true; + } + var x = a.lo >>> 1; + var y = b.lo >>> 1; + if (x != y) { + return x > y; + } + return (a.lo & 1) > (b.lo & 1); +} +function Long_ge(a, b) { + if (a.hi < b.hi) { + return false; + } + if (a.hi > b.hi) { + return true; + } + var x = a.lo >>> 1; + var y = b.lo >>> 1; + if (x != y) { + return x >= y; + } + return (a.lo & 1) >= (b.lo & 1); +} +function Long_lt(a, b) { + if (a.hi > b.hi) { + return false; + } + if (a.hi < b.hi) { + return true; + } + var x = a.lo >>> 1; + var y = b.lo >>> 1; + if (x != y) { + return x < y; + } + return (a.lo & 1) < (b.lo & 1); +} +function Long_le(a, b) { + if (a.hi > b.hi) { + return false; + } + if (a.hi < b.hi) { + return true; + } + var x = a.lo >>> 1; + var y = b.lo >>> 1; + if (x != y) { + return x <= y; + } + return (a.lo & 1) <= (b.lo & 1); +} + +function Long_add(a, b) { + if (a.hi === (a.lo >> 31) && b.hi === (b.lo >> 31)) { + return Long_fromNumber(a.lo + b.lo); + } else if (Math.abs(a.hi) < Long_MAX_NORMAL && Math.abs(b.hi) < Long_MAX_NORMAL) { + return Long_fromNumber(Long_toNumber(a) + Long_toNumber(b)); + } + var a_lolo = a.lo & 0xFFFF; + var a_lohi = a.lo >>> 16; + var a_hilo = a.hi & 0xFFFF; + var a_hihi = a.hi >>> 16; + var b_lolo = b.lo & 0xFFFF; + var b_lohi = b.lo >>> 16; + var b_hilo = b.hi & 0xFFFF; + var b_hihi = b.hi >>> 16; + + var lolo = (a_lolo + b_lolo) | 0; + var lohi = (a_lohi + b_lohi + (lolo >> 16)) | 0; + var hilo = (a_hilo + b_hilo + (lohi >> 16)) | 0; + var hihi = (a_hihi + b_hihi + (hilo >> 16)) | 0; + return new Long((lolo & 0xFFFF) | ((lohi & 0xFFFF) << 16), (hilo & 0xFFFF) | ((hihi & 0xFFFF) << 16)); +} +function Long_inc(a) { + var lo = (a.lo + 1) | 0; + var hi = a.hi; + if (lo === 0) { + hi = (hi + 1) | 0; + } + return new Long(lo, hi); +} +function Long_dec(a) { + var lo = (a.lo - 1) | 0; + var hi = a.hi; + if (lo === -1) { + hi = (hi - 1) | 0; + } + return new Long(lo, hi); +} +function Long_neg(a) { + return Long_inc(new Long(a.lo ^ 0xFFFFFFFF, a.hi ^ 0xFFFFFFFF)); +} +function Long_sub(a, b) { + if (a.hi === (a.lo >> 31) && b.hi === (b.lo >> 31)) { + return Long_fromNumber(a.lo - b.lo); + } + var a_lolo = a.lo & 0xFFFF; + var a_lohi = a.lo >>> 16; + var a_hilo = a.hi & 0xFFFF; + var a_hihi = a.hi >>> 16; + var b_lolo = b.lo & 0xFFFF; + var b_lohi = b.lo >>> 16; + var b_hilo = b.hi & 0xFFFF; + var b_hihi = b.hi >>> 16; + + var lolo = (a_lolo - b_lolo) | 0; + var lohi = (a_lohi - b_lohi + (lolo >> 16)) | 0; + var hilo = (a_hilo - b_hilo + (lohi >> 16)) | 0; + var hihi = (a_hihi - b_hihi + (hilo >> 16)) | 0; + return new Long((lolo & 0xFFFF) | ((lohi & 0xFFFF) << 16), (hilo & 0xFFFF) | ((hihi & 0xFFFF) << 16)); +} +function Long_compare(a, b) { + var r = a.hi - b.hi; + if (r !== 0) { + return r; + } + r = (a.lo >>> 1) - (b.lo >>> 1); + if (r !== 0) { + return r; + } + return (a.lo & 1) - (b.lo & 1); +} +function Long_isPositive(a) { + return (a.hi & 0x80000000) === 0; +} +function Long_isNegative(a) { + return (a.hi & 0x80000000) !== 0; +} +function Long_mul(a, b) { + var positive = Long_isNegative(a) === Long_isNegative(b); + if (Long_isNegative(a)) { + a = Long_neg(a); + } + if (Long_isNegative(b)) { + b = Long_neg(b); + } + var a_lolo = a.lo & 0xFFFF; + var a_lohi = a.lo >>> 16; + var a_hilo = a.hi & 0xFFFF; + var a_hihi = a.hi >>> 16; + var b_lolo = b.lo & 0xFFFF; + var b_lohi = b.lo >>> 16; + var b_hilo = b.hi & 0xFFFF; + var b_hihi = b.hi >>> 16; + + var lolo = 0; + var lohi = 0; + var hilo = 0; + var hihi = 0; + lolo = (a_lolo * b_lolo) | 0; + lohi = lolo >>> 16; + lohi = ((lohi & 0xFFFF) + a_lohi * b_lolo) | 0; + hilo = (hilo + (lohi >>> 16)) | 0; + lohi = ((lohi & 0xFFFF) + a_lolo * b_lohi) | 0; + hilo = (hilo + (lohi >>> 16)) | 0; + hihi = hilo >>> 16; + hilo = ((hilo & 0xFFFF) + a_hilo * b_lolo) | 0; + hihi = (hihi + (hilo >>> 16)) | 0; + hilo = ((hilo & 0xFFFF) + a_lohi * b_lohi) | 0; + hihi = (hihi + (hilo >>> 16)) | 0; + hilo = ((hilo & 0xFFFF) + a_lolo * b_hilo) | 0; + hihi = (hihi + (hilo >>> 16)) | 0; + hihi = (hihi + a_hihi * b_lolo + a_hilo * b_lohi + a_lohi * b_hilo + a_lolo * b_hihi) | 0; + var result = new Long((lolo & 0xFFFF) | (lohi << 16), (hilo & 0xFFFF) | (hihi << 16)); + return positive ? result : Long_neg(result); +} +function Long_div(a, b) { + if (Math.abs(a.hi) < Long_MAX_NORMAL && Math.abs(b.hi) < Long_MAX_NORMAL) { + return Long_fromNumber(Long_toNumber(a) / Long_toNumber(b)); + } + return Long_divRem(a, b)[0]; +} +function Long_rem(a, b) { + if (Math.abs(a.hi) < Long_MAX_NORMAL && Math.abs(b.hi) < Long_MAX_NORMAL) { + return Long_fromNumber(Long_toNumber(a) % Long_toNumber(b)); + } + return Long_divRem(a, b)[1]; +} +function Long_divRem(a, b) { + if (b.lo == 0 && b.hi == 0) { + throw new Error("Division by zero"); + } + var positive = Long_isNegative(a) === Long_isNegative(b); + if (Long_isNegative(a)) { + a = Long_neg(a); + } + if (Long_isNegative(b)) { + b = Long_neg(b); + } + a = new LongInt(a.lo, a.hi, 0); + b = new LongInt(b.lo, b.hi, 0); + var q = LongInt_div(a, b); + a = new Long(a.lo, a.hi); + q = new Long(q.lo, q.hi); + return positive ? [q, a] : [Long_neg(q), Long_neg(a)]; +} +function Long_shiftLeft16(a) { + return new Long(a.lo << 16, (a.lo >>> 16) | (a.hi << 16)); +} +function Long_shiftRight16(a) { + return new Long((a.lo >>> 16) | (a.hi << 16), a.hi >>> 16); +} +function Long_and(a, b) { + return new Long(a.lo & b.lo, a.hi & b.hi); +} +function Long_or(a, b) { + return new Long(a.lo | b.lo, a.hi | b.hi); +} +function Long_xor(a, b) { + return new Long(a.lo ^ b.lo, a.hi ^ b.hi); +} +function Long_shl(a, b) { + b &= 63; + if (b == 0) { + return a; + } else if (b < 32) { + return new Long(a.lo << b, (a.lo >>> (32 - b)) | (a.hi << b)); + } else if (b == 32) { + return new Long(0, a.lo); + } else { + return new Long(0, a.lo << (b - 32)); + } +} +function Long_shr(a, b) { + b &= 63; + if (b == 0) { + return a; + } else if (b < 32) { + return new Long((a.lo >>> b) | (a.hi << (32 - b)), a.hi >> b); + } else if (b == 32) { + return new Long(a.hi, a.hi >> 31); + } else { + return new Long((a.hi >> (b - 32)), a.hi >> 31); + } +} +function Long_shru(a, b) { + b &= 63; + if (b == 0) { + return a; + } else if (b < 32) { + return new Long((a.lo >>> b) | (a.hi << (32 - b)), a.hi >>> b); + } else if (b == 32) { + return new Long(a.hi, 0); + } else { + return new Long((a.hi >>> (b - 32)), 0); + } +} + +// Represents a mutable 80-bit unsigned integer +function LongInt(lo, hi, sup) { + this.lo = lo; + this.hi = hi; + this.sup = sup; +} +function LongInt_mul(a, b) { + var a_lolo = ((a.lo & 0xFFFF) * b) | 0; + var a_lohi = ((a.lo >>> 16) * b) | 0; + var a_hilo = ((a.hi & 0xFFFF) * b) | 0; + var a_hihi = ((a.hi >>> 16) * b) | 0; + var sup = (a.sup * b) | 0; + + a_lohi = (a_lohi + (a_lolo >>> 16)) | 0; + a_hilo = (a_hilo + (a_lohi >>> 16)) | 0; + a_hihi = (a_hihi + (a_hilo >>> 16)) | 0; + sup = (sup + (a_hihi >>> 16)) | 0; + a.lo = (a_lolo & 0xFFFF) | (a_lohi << 16); + a.hi = (a_hilo & 0xFFFF) | (a_hihi << 16); + a.sup = sup & 0xFFFF; +} +function LongInt_sub(a, b) { + var a_lolo = a.lo & 0xFFFF; + var a_lohi = a.lo >>> 16; + var a_hilo = a.hi & 0xFFFF; + var a_hihi = a.hi >>> 16; + var b_lolo = b.lo & 0xFFFF; + var b_lohi = b.lo >>> 16; + var b_hilo = b.hi & 0xFFFF; + var b_hihi = b.hi >>> 16; + + a_lolo = (a_lolo - b_lolo) | 0; + a_lohi = (a_lohi - b_lohi + (a_lolo >> 16)) | 0; + a_hilo = (a_hilo - b_hilo + (a_lohi >> 16)) | 0; + a_hihi = (a_hihi - b_hihi + (a_hilo >> 16)) | 0; + var sup = (a.sup - b.sup + (a_hihi >> 16)) | 0; + a.lo = (a_lolo & 0xFFFF) | (a_lohi << 16); + a.hi = (a_hilo & 0xFFFF) | (a_hihi << 16); + a.sup = sup; +} +function LongInt_add(a, b) { + var a_lolo = a.lo & 0xFFFF; + var a_lohi = a.lo >>> 16; + var a_hilo = a.hi & 0xFFFF; + var a_hihi = a.hi >>> 16; + var b_lolo = b.lo & 0xFFFF; + var b_lohi = b.lo >>> 16; + var b_hilo = b.hi & 0xFFFF; + var b_hihi = b.hi >>> 16; + + a_lolo = (a_lolo + b_lolo) | 0; + a_lohi = (a_lohi + b_lohi + (a_lolo >> 16)) | 0; + a_hilo = (a_hilo + b_hilo + (a_lohi >> 16)) | 0; + a_hihi = (a_hihi + b_hihi + (a_hilo >> 16)) | 0; + var sup = (a.sup + b.sup + (a_hihi >> 16)) | 0; + a.lo = (a_lolo & 0xFFFF) | (a_lohi << 16); + a.hi = (a_hilo & 0xFFFF) | (a_hihi << 16); + a.sup = sup; +} +function LongInt_inc(a) { + a.lo = (a.lo + 1) | 0; + if (a.lo == 0) { + a.hi = (a.hi + 1) | 0; + if (a.hi == 0) { + a.sup = (a.sup + 1) & 0xFFFF; + } + } +} +function LongInt_dec(a) { + a.lo = (a.lo - 1) | 0; + if (a.lo == -1) { + a.hi = (a.hi - 1) | 0; + if (a.hi == -1) { + a.sup = (a.sup - 1) & 0xFFFF; + } + } +} +function LongInt_ucompare(a, b) { + var r = (a.sup - b.sup); + if (r != 0) { + return r; + } + r = (a.hi >>> 1) - (b.hi >>> 1); + if (r != 0) { + return r; + } + r = (a.hi & 1) - (b.hi & 1); + if (r != 0) { + return r; + } + r = (a.lo >>> 1) - (b.lo >>> 1); + if (r != 0) { + return r; + } + return (a.lo & 1) - (b.lo & 1); +} +function LongInt_numOfLeadingZeroBits(a) { + var n = 0; + var d = 16; + while (d > 0) { + if ((a >>> d) !== 0) { + a >>>= d; + n = (n + d) | 0; + } + d = (d / 2) | 0; + } + return 31 - n; +} +function LongInt_shl(a, b) { + if (b == 0) { + return; + } + if (b < 32) { + a.sup = ((a.hi >>> (32 - b)) | (a.sup << b)) & 0xFFFF; + a.hi = (a.lo >>> (32 - b)) | (a.hi << b); + a.lo <<= b; + } else if (b == 32) { + a.sup = a.hi & 0xFFFF; + a.hi = a.lo; + a.lo = 0; + } else if (b < 64) { + a.sup = ((a.lo >>> (64 - b)) | (a.hi << (b - 32))) & 0xFFFF; + a.hi = a.lo << b; + a.lo = 0; + } else if (b == 64) { + a.sup = a.lo & 0xFFFF; + a.hi = 0; + a.lo = 0; + } else { + a.sup = (a.lo << (b - 64)) & 0xFFFF; + a.hi = 0; + a.lo = 0; + } +} +function LongInt_shr(a, b) { + if (b == 0) { + return; + } + if (b == 32) { + a.lo = a.hi; + a.hi = a.sup; + a.sup = 0; + } else if (b < 32) { + a.lo = (a.lo >>> b) | (a.hi << (32 - b)); + a.hi = (a.hi >>> b) | (a.sup << (32 - b)); + a.sup >>>= b; + } else if (b == 64) { + a.lo = a.sup; + a.hi = 0; + a.sup = 0; + } else if (b < 64) { + a.lo = (a.hi >>> (b - 32)) | (a.sup << (64 - b)); + a.hi = a.sup >>> (b - 32); + a.sup = 0; + } else { + a.lo = a.sup >>> (b - 64); + a.hi = 0; + a.sup = 0; + } +} +function LongInt_copy(a) { + return new LongInt(a.lo, a.hi, a.sup); +} +function LongInt_div(a, b) { + // Normalize divisor + var bits = b.hi !== 0 ? LongInt_numOfLeadingZeroBits(b.hi) : LongInt_numOfLeadingZeroBits(b.lo) + 32; + var sz = 1 + ((bits / 16) | 0); + var dividentBits = bits % 16; + LongInt_shl(b, bits); + LongInt_shl(a, dividentBits); + var q = new LongInt(0, 0, 0); + while (sz-- > 0) { + LongInt_shl(q, 16); + // Calculate approximate q + var digitA = (a.hi >>> 16) + (0x10000 * a.sup); + var digitB = b.hi >>> 16; + var digit = (digitA / digitB) | 0; + var t = LongInt_copy(b); + LongInt_mul(t, digit); + // Adjust q either down or up + if (LongInt_ucompare(t, a) >= 0) { + while (LongInt_ucompare(t, a) > 0) { + LongInt_sub(t, b); + --digit; + } + } else { + while (true) { + var nextT = LongInt_copy(t); + LongInt_add(nextT, b); + if (LongInt_ucompare(nextT, a) > 0) { + break; + } + t = nextT; + ++digit; + } + } + LongInt_sub(a, t); + q.lo |= digit; + LongInt_shl(a, 16); + } + LongInt_shr(a, bits + 16); + return q; +} diff --git a/examples/flavour/package.json b/examples/flavour/package.json new file mode 100644 index 0000000000..1fcaf360d8 --- /dev/null +++ b/examples/flavour/package.json @@ -0,0 +1,6 @@ +{ + "dependencies": { + "todomvc-common": "^1.0.0", + "todomvc-app-css": "^1.0.1" + } +} \ No newline at end of file diff --git a/examples/flavour/pom.xml b/examples/flavour/pom.xml new file mode 100644 index 0000000000..d441bcdda0 --- /dev/null +++ b/examples/flavour/pom.xml @@ -0,0 +1,149 @@ + + + 4.0.0 + + org.teavm.flavour + flavour-example-todomvc + 1.0-SNAPSHOT + + war + + + 1.1.50 + 0.1.0 + 0.5.1 + + + + + org.teavm + teavm-classlib + ${teavm.version} + + + org.teavm + teavm-metaprogramming-impl + ${teavm.version} + + + + org.teavm.flavour + teavm-flavour-widgets + ${flavour.version} + + + org.teavm.flavour + teavm-flavour-json + ${flavour.version} + + + + com.fasterxml.jackson.core + jackson-annotations + 2.5.4 + + + + org.jetbrains.kotlin + kotlin-stdlib + ${kotlin.version} + + + + + ${project.basedir}/src/main/kotlin + ${project.basedir}/src/test/kotlin + + + + org.codehaus.mojo + exec-maven-plugin + + + exec-npm-install + generate-sources + + npm + + install + + + + exec + + + + + + + kotlin-maven-plugin + org.jetbrains.kotlin + ${kotlin.version} + + 1.8 + + + + compile + + compile + + + + + test-compile + + test-compile + + + + + + + maven-war-plugin + 2.4 + + + + ${project.build.directory}/generated/js + + + ${project.basedir}/node_modules/ + + **/base.css + **/index.css + + + + + + + + org.teavm + teavm-maven-plugin + ${teavm.version} + + + web-client + prepare-package + + compile + + + ${project.build.directory}/generated/js/teavm + org.teavm.flavour.example.todomvc.TodoView + true + true + true + true + ADVANCED + + + + + + + + \ No newline at end of file diff --git a/examples/flavour/src/main/kotlin/org/teavm/flavour/example/todomvc/components.kt b/examples/flavour/src/main/kotlin/org/teavm/flavour/example/todomvc/components.kt new file mode 100644 index 0000000000..fa2e44bcc5 --- /dev/null +++ b/examples/flavour/src/main/kotlin/org/teavm/flavour/example/todomvc/components.kt @@ -0,0 +1,46 @@ +package org.teavm.flavour.example.todomvc + +import org.teavm.flavour.templates.BindAttributeComponent +import org.teavm.flavour.templates.BindContent +import org.teavm.flavour.templates.ModifierTarget +import org.teavm.flavour.templates.Renderable +import org.teavm.jso.dom.events.EventListener +import org.teavm.jso.dom.events.KeyboardEvent + +@BindAttributeComponent(name = arrayOf("escape")) +class EscapeComponent(private val target: ModifierTarget) : Renderable { + @set:BindContent + var action: Runnable = Runnable {} + + override fun render() { + target.element.addEventListener("keydown", eventListener) + } + + override fun destroy() { + target.element.removeEventListener("keydown", eventListener) + } + + private val eventListener = EventListener { + if (it.keyCode == ESCAPE_KEY) { + action.run() + } + } + + companion object { + val ESCAPE_KEY = 27 + } +} + +@BindAttributeComponent(name = arrayOf("focus")) +class FocusComponent(private val target: ModifierTarget) : Renderable { + @set:BindContent + var isFocused: () -> Boolean = { false } + + override fun render() { + if (isFocused()) { + target.element.focus() + } + } + + override fun destroy() { } +} diff --git a/examples/flavour/src/main/kotlin/org/teavm/flavour/example/todomvc/model.kt b/examples/flavour/src/main/kotlin/org/teavm/flavour/example/todomvc/model.kt new file mode 100644 index 0000000000..0d7bc9fbc7 --- /dev/null +++ b/examples/flavour/src/main/kotlin/org/teavm/flavour/example/todomvc/model.kt @@ -0,0 +1,22 @@ +package org.teavm.flavour.example.todomvc + +class Todo { + var title = "" + var completed = false +} + +enum class TodoFilterType { + ALL, + ACTIVE, + COMPLETED +} + +interface TodoDataSource { + fun fetch(): List + + fun save(todo: Todo) + + fun delete(todo: Todo) + + fun clearCompleted() +} \ No newline at end of file diff --git a/examples/flavour/src/main/kotlin/org/teavm/flavour/example/todomvc/store.kt b/examples/flavour/src/main/kotlin/org/teavm/flavour/example/todomvc/store.kt new file mode 100644 index 0000000000..3153069606 --- /dev/null +++ b/examples/flavour/src/main/kotlin/org/teavm/flavour/example/todomvc/store.kt @@ -0,0 +1,53 @@ +package org.teavm.flavour.example.todomvc + +import org.teavm.flavour.json.JSON +import org.teavm.flavour.json.tree.Node +import org.teavm.jso.browser.Window + +class LocalStorageTodoDataSource : TodoDataSource { + private val localStorage = Window.current().localStorage + private var list: TodoList? = null + + override fun fetch(): List { + val list = this.list ?: let { + val item = localStorage.getItem(ITEM_NAME) ?: return emptyList() + JSON.deserialize(Node.parse(item), TodoList::class.java).also { list = it } + } + return list.data + } + + override fun save(todo: Todo) { + val list = getOrCreateList() + val index = list.data.indexOf(todo) + if (index < 0) { + list.data += todo + } + updateLocalStorage(list) + } + + override fun delete(todo: Todo) { + val list = getOrCreateList() + list.data -= todo + updateLocalStorage(list) + } + + override fun clearCompleted() { + val list = getOrCreateList() + list.data.removeAll { it.completed } + updateLocalStorage(list) + } + + private fun getOrCreateList(): TodoList = list ?: TodoList().also { list = it } + + private fun updateLocalStorage(list: TodoList) { + localStorage.setItem(ITEM_NAME, JSON.serialize(list).stringify()) + } + + companion object { + val ITEM_NAME = "todos" + } +} + +class TodoList { + val data = mutableListOf() +} diff --git a/examples/flavour/src/main/kotlin/org/teavm/flavour/example/todomvc/view.kt b/examples/flavour/src/main/kotlin/org/teavm/flavour/example/todomvc/view.kt new file mode 100644 index 0000000000..531be5b409 --- /dev/null +++ b/examples/flavour/src/main/kotlin/org/teavm/flavour/example/todomvc/view.kt @@ -0,0 +1,137 @@ +package org.teavm.flavour.example.todomvc + +import org.teavm.flavour.routing.Path +import org.teavm.flavour.routing.PathSet +import org.teavm.flavour.routing.Route +import org.teavm.flavour.routing.Routing +import org.teavm.flavour.templates.BindTemplate +import org.teavm.flavour.widgets.ApplicationTemplate +import org.teavm.flavour.widgets.RouteBinder +import org.teavm.jso.dom.html.HTMLDocument +import java.util.function.Consumer + +@BindTemplate("templates/todo.html") +class TodoView(private val dataSource: TodoDataSource) : ApplicationTemplate(), TodoRoute { + private val allTodos = mutableListOf() + private var todoFilter: (Todo) -> Boolean = { true } + + init { + reload() + } + + val todos: List get() = allTodos + + val filteredTodos get() = allTodos.filter(todoFilter) + + var newTodo = "" + + var editedTodo: Todo? = null + get + private set + + private var titleBackup = "" + + var saving = false + get + private set + + var filterType = TodoFilterType.ALL + get + private set + + val remainingCount get() = todos.count { !it.completed } + + val completedCount get() = todos.count { it.completed } + + val allChecked get() = todos.all { it.completed } + + fun markAll(mark: Boolean) = todos.forEach { it.completed = mark } + + fun addTodo() { + if (newTodo.isBlank()) return + dataSource.save(Todo().apply { title = newTodo }) + newTodo = "" + reload() + } + + fun editTodo(todo: Todo) { + editedTodo = todo + titleBackup = todo.title + } + + fun revertEdits(todo: Todo) { + if (editedTodo == null) return + todo.title = titleBackup + editedTodo = null + reload() + } + + fun saveEdits(todo: Todo) { + val editedTodo = this.editedTodo ?: return + todo.title = editedTodo.title.trim() + this.editedTodo = null + if (editedTodo.title.isNotBlank()) { + dataSource.save(todo) + } + else { + dataSource.delete(todo) + } + reload() + } + + fun removeTodo(todo: Todo) { + dataSource.delete(todo) + reload() + } + + fun clearCompletedTodos() { + dataSource.clearCompleted() + reload() + } + + override fun all() { + todoFilter = { true } + filterType = TodoFilterType.ALL + } + + override fun active() { + todoFilter = { !it.completed } + filterType = TodoFilterType.ACTIVE + } + + override fun completed() { + todoFilter = { it.completed } + filterType = TodoFilterType.COMPLETED + } + + fun route(c: Consumer) = Routing.build(TodoRoute::class.java, c) + + private fun reload() { + allTodos.clear() + allTodos += dataSource.fetch() + } + + companion object { + @JvmStatic + fun main(args: Array) { + val view = TodoView(LocalStorageTodoDataSource()) + RouteBinder() + .withDefault(TodoRoute::class.java) { it.all() } + .add(view) + .update() + view.bind(HTMLDocument.current().body) + } + } +} + +@PathSet +interface TodoRoute : Route { + @Path("/") + fun all() + + @Path("/active") + fun active() + + @Path("/completed") + fun completed() +} diff --git a/examples/flavour/src/main/resources/META-INF/flavour/component-packages/org.teavm.flavour.example.todomvc b/examples/flavour/src/main/resources/META-INF/flavour/component-packages/org.teavm.flavour.example.todomvc new file mode 100644 index 0000000000..7007fc4e09 --- /dev/null +++ b/examples/flavour/src/main/resources/META-INF/flavour/component-packages/org.teavm.flavour.example.todomvc @@ -0,0 +1,2 @@ +EscapeComponent +FocusComponent \ No newline at end of file diff --git a/examples/flavour/src/main/resources/templates/todo.html b/examples/flavour/src/main/resources/templates/todo.html new file mode 100644 index 0000000000..b3eaec62f6 --- /dev/null +++ b/examples/flavour/src/main/resources/templates/todo.html @@ -0,0 +1,58 @@ + + +
+ + +
+ + +
    + +
  • +
    + + + +
    +
    + +
    +
  • +
    +
+
+
+ + + item left + items left + + + + + + +
+
+
+
+

Double-click to edit a todo

+

Part of TodoMVC

+
diff --git a/examples/flavour/src/main/webapp/WEB-INF/web.xml b/examples/flavour/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000000..f3c8e4b71f --- /dev/null +++ b/examples/flavour/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/examples/flavour/src/main/webapp/index.html b/examples/flavour/src/main/webapp/index.html new file mode 100644 index 0000000000..8e10659ecc --- /dev/null +++ b/examples/flavour/src/main/webapp/index.html @@ -0,0 +1,13 @@ + + + + + TeaVM Flavour/Kotlin • TodoMVC + + + + + + + + \ No newline at end of file diff --git a/examples/mol/.gitignore b/examples/mol/.gitignore new file mode 100644 index 0000000000..9cd5bfd778 --- /dev/null +++ b/examples/mol/.gitignore @@ -0,0 +1,3 @@ +node_modules/todomvc-common/* +!node_modules/todomvc-common/base.css +!node_modules/todomvc-common/base.js diff --git a/examples/mol/hyoo/todomvc/todomvc_active.svg b/examples/mol/hyoo/todomvc/todomvc_active.svg new file mode 100644 index 0000000000..417859015a --- /dev/null +++ b/examples/mol/hyoo/todomvc/todomvc_active.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/examples/mol/hyoo/todomvc/todomvc_completed.svg b/examples/mol/hyoo/todomvc/todomvc_completed.svg new file mode 100644 index 0000000000..4231bde0ad --- /dev/null +++ b/examples/mol/hyoo/todomvc/todomvc_completed.svg @@ -0,0 +1,4 @@ + + + + diff --git a/examples/mol/index.html b/examples/mol/index.html new file mode 100644 index 0000000000..ba65576b47 --- /dev/null +++ b/examples/mol/index.html @@ -0,0 +1,19 @@ + + + + + + + + +
+ + diff --git a/examples/mol/node_modules/todomvc-common/base.css b/examples/mol/node_modules/todomvc-common/base.css new file mode 100644 index 0000000000..da65968a73 --- /dev/null +++ b/examples/mol/node_modules/todomvc-common/base.css @@ -0,0 +1,141 @@ +hr { + margin: 20px 0; + border: 0; + border-top: 1px dashed #c5c5c5; + border-bottom: 1px dashed #f7f7f7; +} + +.learn a { + font-weight: normal; + text-decoration: none; + color: #b83f45; +} + +.learn a:hover { + text-decoration: underline; + color: #787e7e; +} + +.learn h3, +.learn h4, +.learn h5 { + margin: 10px 0; + font-weight: 500; + line-height: 1.2; + color: #000; +} + +.learn h3 { + font-size: 24px; +} + +.learn h4 { + font-size: 18px; +} + +.learn h5 { + margin-bottom: 0; + font-size: 14px; +} + +.learn ul { + padding: 0; + margin: 0 0 30px 25px; +} + +.learn li { + line-height: 20px; +} + +.learn p { + font-size: 15px; + font-weight: 300; + line-height: 1.3; + margin-top: 0; + margin-bottom: 0; +} + +#issue-count { + display: none; +} + +.quote { + border: none; + margin: 20px 0 60px 0; +} + +.quote p { + font-style: italic; +} + +.quote p:before { + content: '“'; + font-size: 50px; + opacity: .15; + position: absolute; + top: -20px; + left: 3px; +} + +.quote p:after { + content: '”'; + font-size: 50px; + opacity: .15; + position: absolute; + bottom: -42px; + right: 3px; +} + +.quote footer { + position: absolute; + bottom: -40px; + right: 0; +} + +.quote footer img { + border-radius: 3px; +} + +.quote footer a { + margin-left: 5px; + vertical-align: middle; +} + +.speech-bubble { + position: relative; + padding: 10px; + background: rgba(0, 0, 0, .04); + border-radius: 5px; +} + +.speech-bubble:after { + content: ''; + position: absolute; + top: 100%; + right: 30px; + border: 13px solid transparent; + border-top-color: rgba(0, 0, 0, .04); +} + +.learn-bar > .learn { + position: absolute; + width: 272px; + top: 8px; + left: -300px; + padding: 10px; + border-radius: 5px; + background-color: rgba(255, 255, 255, .6); + transition-property: left; + transition-duration: 500ms; +} + +@media (min-width: 899px) { + .learn-bar { + width: auto; + padding-left: 300px; + } + + .learn-bar > .learn { + left: 8px; + } +} diff --git a/examples/mol/node_modules/todomvc-common/base.js b/examples/mol/node_modules/todomvc-common/base.js new file mode 100644 index 0000000000..3c6723f390 --- /dev/null +++ b/examples/mol/node_modules/todomvc-common/base.js @@ -0,0 +1,249 @@ +/* global _ */ +(function () { + 'use strict'; + + /* jshint ignore:start */ + // Underscore's Template Module + // Courtesy of underscorejs.org + var _ = (function (_) { + _.defaults = function (object) { + if (!object) { + return object; + } + for (var argsIndex = 1, argsLength = arguments.length; argsIndex < argsLength; argsIndex++) { + var iterable = arguments[argsIndex]; + if (iterable) { + for (var key in iterable) { + if (object[key] == null) { + object[key] = iterable[key]; + } + } + } + } + return object; + } + + // By default, Underscore uses ERB-style template delimiters, change the + // following template settings to use alternative delimiters. + _.templateSettings = { + evaluate : /<%([\s\S]+?)%>/g, + interpolate : /<%=([\s\S]+?)%>/g, + escape : /<%-([\s\S]+?)%>/g + }; + + // When customizing `templateSettings`, if you don't want to define an + // interpolation, evaluation or escaping regex, we need one that is + // guaranteed not to match. + var noMatch = /(.)^/; + + // Certain characters need to be escaped so that they can be put into a + // string literal. + var escapes = { + "'": "'", + '\\': '\\', + '\r': 'r', + '\n': 'n', + '\t': 't', + '\u2028': 'u2028', + '\u2029': 'u2029' + }; + + var escaper = /\\|'|\r|\n|\t|\u2028|\u2029/g; + + // JavaScript micro-templating, similar to John Resig's implementation. + // Underscore templating handles arbitrary delimiters, preserves whitespace, + // and correctly escapes quotes within interpolated code. + _.template = function(text, data, settings) { + var render; + settings = _.defaults({}, settings, _.templateSettings); + + // Combine delimiters into one regular expression via alternation. + var matcher = new RegExp([ + (settings.escape || noMatch).source, + (settings.interpolate || noMatch).source, + (settings.evaluate || noMatch).source + ].join('|') + '|$', 'g'); + + // Compile the template source, escaping string literals appropriately. + var index = 0; + var source = "__p+='"; + text.replace(matcher, function(match, escape, interpolate, evaluate, offset) { + source += text.slice(index, offset) + .replace(escaper, function(match) { return '\\' + escapes[match]; }); + + if (escape) { + source += "'+\n((__t=(" + escape + "))==null?'':_.escape(__t))+\n'"; + } + if (interpolate) { + source += "'+\n((__t=(" + interpolate + "))==null?'':__t)+\n'"; + } + if (evaluate) { + source += "';\n" + evaluate + "\n__p+='"; + } + index = offset + match.length; + return match; + }); + source += "';\n"; + + // If a variable is not specified, place data values in local scope. + if (!settings.variable) source = 'with(obj||{}){\n' + source + '}\n'; + + source = "var __t,__p='',__j=Array.prototype.join," + + "print=function(){__p+=__j.call(arguments,'');};\n" + + source + "return __p;\n"; + + try { + render = new Function(settings.variable || 'obj', '_', source); + } catch (e) { + e.source = source; + throw e; + } + + if (data) return render(data, _); + var template = function(data) { + return render.call(this, data, _); + }; + + // Provide the compiled function source as a convenience for precompilation. + template.source = 'function(' + (settings.variable || 'obj') + '){\n' + source + '}'; + + return template; + }; + + return _; + })({}); + + if (location.hostname === 'todomvc.com') { + (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ + (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), + m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) + })(window,document,'script','https://www.google-analytics.com/analytics.js','ga'); + ga('create', 'UA-31081062-1', 'auto'); + ga('send', 'pageview'); + } + /* jshint ignore:end */ + + function redirect() { + if (location.hostname === 'tastejs.github.io') { + location.href = location.href.replace('tastejs.github.io/todomvc', 'todomvc.com'); + } + } + + function findRoot() { + var base = location.href.indexOf('examples/'); + return location.href.substr(0, base); + } + + function getFile(file, callback) { + if (!location.host) { + return console.info('Miss the info bar? Run TodoMVC from a server to avoid a cross-origin error.'); + } + + var xhr = new XMLHttpRequest(); + + xhr.open('GET', findRoot() + file, true); + xhr.send(); + + xhr.onload = function () { + if (xhr.status === 200 && callback) { + callback(xhr.responseText); + } + }; + } + + function Learn(learnJSON, config) { + if (!(this instanceof Learn)) { + return new Learn(learnJSON, config); + } + + var template, framework; + + if (typeof learnJSON !== 'object') { + try { + learnJSON = JSON.parse(learnJSON); + } catch (e) { + return; + } + } + + if (config) { + template = config.template; + framework = config.framework; + } + + if (!template && learnJSON.templates) { + template = learnJSON.templates.todomvc; + } + + if (!framework && document.querySelector('[data-framework]')) { + framework = document.querySelector('[data-framework]').dataset.framework; + } + + this.template = template; + + if (learnJSON.backend) { + this.frameworkJSON = learnJSON.backend; + this.frameworkJSON.issueLabel = framework; + this.append({ + backend: true + }); + } else if (learnJSON[framework]) { + this.frameworkJSON = learnJSON[framework]; + this.frameworkJSON.issueLabel = framework; + this.append(); + } + + this.fetchIssueCount(); + } + + Learn.prototype.append = function (opts) { + var aside = document.createElement('aside'); + aside.innerHTML = _.template(this.template, this.frameworkJSON); + aside.className = 'learn'; + + if (opts && opts.backend) { + // Remove demo link + var sourceLinks = aside.querySelector('.source-links'); + var heading = sourceLinks.firstElementChild; + var sourceLink = sourceLinks.lastElementChild; + // Correct link path + var href = sourceLink.getAttribute('href'); + sourceLink.setAttribute('href', href.substr(href.lastIndexOf('http'))); + sourceLinks.innerHTML = heading.outerHTML + sourceLink.outerHTML; + } else { + // Localize demo links + var demoLinks = aside.querySelectorAll('.demo-link'); + Array.prototype.forEach.call(demoLinks, function (demoLink) { + if (demoLink.getAttribute('href').substr(0, 4) !== 'http') { + demoLink.setAttribute('href', findRoot() + demoLink.getAttribute('href')); + } + }); + } + + document.body.className = (document.body.className + ' learn-bar').trim(); + document.body.insertAdjacentHTML('afterBegin', aside.outerHTML); + }; + + Learn.prototype.fetchIssueCount = function () { + var issueLink = document.getElementById('issue-count-link'); + if (issueLink) { + var url = issueLink.href.replace('https://github.com', 'https://api.github.com/repos'); + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, true); + xhr.onload = function (e) { + var parsedResponse = JSON.parse(e.target.responseText); + if (parsedResponse instanceof Array) { + var count = parsedResponse.length; + if (count !== 0) { + issueLink.innerHTML = 'This app has ' + count + ' open issues'; + document.getElementById('issue-count').style.display = 'inline'; + } + } + }; + xhr.send(); + } + }; + + redirect(); + getFile('learn.json', Learn); +})(); diff --git a/examples/mol/src/CNAME b/examples/mol/src/CNAME new file mode 100644 index 0000000000..06c605688c --- /dev/null +++ b/examples/mol/src/CNAME @@ -0,0 +1 @@ +todomvc.hyoo.ru diff --git a/examples/mol/src/LICENSE b/examples/mol/src/LICENSE new file mode 100644 index 0000000000..3968ce6364 --- /dev/null +++ b/examples/mol/src/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2021 hyoo.ru + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/examples/mol/src/index.html b/examples/mol/src/index.html new file mode 100644 index 0000000000..ba65576b47 --- /dev/null +++ b/examples/mol/src/index.html @@ -0,0 +1,19 @@ + + + + + + + + +
+ + diff --git a/examples/mol/src/todomvc.css b/examples/mol/src/todomvc.css new file mode 100644 index 0000000000..8fb17a5057 --- /dev/null +++ b/examples/mol/src/todomvc.css @@ -0,0 +1,163 @@ +[hyoo_todomvc] { + align-self: stretch; + width: 100%; + margin: 0; + transition: none; +} + +[hyoo_todomvc] [mol_string] , +[hyoo_todomvc] [mol_string]:focus , +[hyoo_todomvc] [mol_string]:hover , +[hyoo_todomvc] [mol_button] , +[hyoo_todomvc] [mol_button]:focus , +[hyoo_todomvc] [mol_button]:hover , +[hyoo_todomvc] [mol_link] , +[hyoo_todomvc] [mol_link]:focus , +[hyoo_todomvc] [mol_link]:hover { + box-shadow: none; + background-color: transparent; +} + +[hyoo_todomvc] [mol_link_current] { + color: black; +} + +[hyoo_todomvc] [mol_link]:not([mol_link_current]):hover , +[hyoo_todomvc] [mol_link]:not([mol_link_current]):focus { + text-decoration: underline; +} + +[hyoo_todomvc_head_complete] { + flex: 0 0 4rem; + transform: rotate( 90deg ); + align-items: center; + opacity: .5; + padding: 0; + justify-content: center; +} +[hyoo_todomvc_head_complete]:disabled { + visibility: hidden; +} +[hyoo_todomvc_head_complete][mol_check_checked] { + opacity: 1; +} + +[hyoo_todomvc_add] { + padding: 0; + flex: 1 1 auto; +} + +[hyoo_todomvc_list] { + font-size: 1.5rem; + transition: none; +} + +[hyoo_todomvc_page] { + flex: 1 1 auto; + transition: none; +} + +[hyoo_todomvc_panel] { + box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.2), 0 25px 50px 0 rgba(0, 0, 0, 0.1); + width: 38rem; + --mol_theme_back: white; + --mol_theme_text: black; + background-color: var(--mol_theme_back); + display: flex; + flex-direction: column; + margin: 0 auto 2rem; + transition: none; +} + +[hyoo_todomvc_head] { + font-size: 1.5rem; + padding: 0; + display: flex; + height: 4rem; +} + +[hyoo_todomvc_title] { + word-break: normal; + display: block; + padding: .25rem; + font-size: 7rem; + font-weight: 100; + text-align: center; + color: rgba(275, 147, 147, 0.2); + text-rendering: optimizeLegibility; + text-transform: lowercase; + line-height: 1.5; +} + +[hyoo_todomvc_task_row] { + display: flex; + background-color: white; + box-shadow: 0 -1px 0 0 #ededed; + height: 4rem; +} + +[hyoo_todomvc_task_row_complete] { + flex: 0 0 4rem; + padding: 1rem; + background: no-repeat center center url('hyoo/todomvc/todomvc_active.svg'); +} +[hyoo_todomvc_task_row_complete][mol_check_checked] { + background: no-repeat center center url('hyoo/todomvc/todomvc_completed.svg'); +} + +[hyoo_todomvc_task_row_title] { + padding: 0; + flex: 1 1 auto; +} + +[hyoo_todomvc_task_row_completed] [hyoo_todomvc_task_row_title] { + color: #d9d9d9; + text-decoration: line-through; +} + +[hyoo_todomvc_task_row_drop] { + font-size: 1.25rem; + flex: 0 04rem; + padding: 1.25rem; +} +[hyoo_todomvc_task_row]:not(:hover) [hyoo_todomvc_task_row_drop]:not(:focus) { + opacity: 0; + color: #cc9a9a; +} + +[hyoo_todomvc_foot] { + display: flex; + flex-wrap: wrap; + align-items: baseline; + padding: .5rem 1rem; + color: #777; + font-size: .85rem; + border-top: 1px solid #ededed; + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2), 0 8px 0 -3px #f6f6f6, 0 9px 1px -3px rgba(0, 0, 0, 0.2), 0 16px 0 -6px #f6f6f6, 0 17px 2px -6px rgba(0, 0, 0, 0.2); +} + +[hyoo_todomvc_pending] { + padding: .25rem; + flex: 0 1 6rem; +} + +[hyoo_todomvc_filter] { + flex: 1 100 auto; + display: flex; + justify-content: center; + margin: .25rem; + box-shadow: none; +} + +[hyoo_todomvc_sweep] { + flex: 0 1 auto; + padding: .25rem; +} +[hyoo_todomvc_sweep][disabled] { + visibility: hidden; +} + +[hyoo_todomvc_sweep]:hover , +[hyoo_todomvc_sweep]:focus { + text-decoration: underline; +} diff --git a/examples/mol/src/todomvc.meta.tree b/examples/mol/src/todomvc.meta.tree new file mode 100644 index 0000000000..c783e4b674 --- /dev/null +++ b/examples/mol/src/todomvc.meta.tree @@ -0,0 +1,2 @@ +deploy \/hyoo/todomvc/todomvc_active.svg +deploy \/hyoo/todomvc/todomvc_completed.svg diff --git a/examples/mol/src/todomvc.test.ts b/examples/mol/src/todomvc.test.ts new file mode 100644 index 0000000000..2b637e90ca --- /dev/null +++ b/examples/mol/src/todomvc.test.ts @@ -0,0 +1,153 @@ +namespace $.$$ { + + $mol_test({ + + 'task add'( $ ) { + + const app = $hyoo_todomvc.make({ $ }) + + const rows = app.task_rows() + const title = $mol_guid() + + app.Add().value( title ) + app.Add().done() + + $mol_assert_equal( app.task_rows()[0].title() , title ) + $mol_assert_equal( app.task_rows()[0].completed() , false ) + + $mol_assert_like( app.task_rows().slice(1) , rows ) + + $mol_assert_equal( app.Add().value() , '' ) + + } , + + 'task rename'( $ ) { + + const title = $mol_guid() + + save: { + + const app = $hyoo_todomvc.make({ $ }) + + app.Add().value( 'test title' ) + app.Add().done() + + app.task_rows()[0].Title().value( title ) + + } + + load: { + + const app = $hyoo_todomvc.make({ $ }) + $mol_assert_equal( app.task_rows()[0].Title().value() , title ) + + } + + } , + + 'task toggle'( $ ) { + + save: { + + const app = $hyoo_todomvc.make({ $ }) + + app.Add().value( 'test title' ) + app.Add().done() + + $mol_assert_equal( app.task_rows()[0].Complete().checked() , false ) + + app.task_rows()[0].Complete().click() + + } + + toggle: { + + const app = $hyoo_todomvc.make({ $ }) + $mol_assert_equal( app.task_rows()[0].Complete().checked() , true ) + + app.task_rows()[0].Complete().click() + + } + + load: { + + const app = $hyoo_todomvc.make({ $ }) + $mol_assert_equal( app.task_rows()[0].Complete().checked() , false ) + + } + + } , + + 'task delete'( $ ) { + + const app = $hyoo_todomvc.make({ $ }) + + app.Add().value( 'test title' ) + app.Add().done() + + const top = app.task_rows()[0] + + top.Drop().click() + $mol_assert_not( app.task_rows().includes( top ) ) + + } , + + 'navigation'( $ ) { + + const app = $hyoo_todomvc.make({ $ }) + + app.Add().value( 'test title' ) + app.Add().done() + + const task1 = app.task_rows()[0] + + app.Add().value( 'test title 2' ) + app.Add().done() + + const task2 = app.task_rows()[1] + task2.Complete().click() + + $mol_assert_ok( app.task_rows().includes( task1 ) ) + $mol_assert_ok( app.task_rows().includes( task2 ) ) + + $.$mol_state_arg.href( app.Filter_completed().uri() ) + $mol_assert_not( app.task_rows().includes( task1 ) ) + $mol_assert_ok( app.task_rows().includes( task2 ) ) + + $.$mol_state_arg.href( app.Filter_active().uri() ) + $mol_assert_ok( app.task_rows().includes( task1 ) ) + $mol_assert_not( app.task_rows().includes( task2 ) ) + + $.$mol_state_arg.href( app.Filter_all().uri() ) + $mol_assert_ok( app.task_rows().includes( task1 ) ) + $mol_assert_ok( app.task_rows().includes( task2 ) ) + + } , + + 'clear completed'( $ ) { + + const app = $hyoo_todomvc.make({ $ }) + + app.Add().value( 'test title' ) + app.Add().done() + + const task1 = app.task_rows()[0] + + app.Add().value( 'test title 2' ) + app.Add().done() + + const task2 = app.task_rows()[1] + task2.Complete().click() + + $mol_assert_ok( app.task_rows().includes( task1 ) ) + $mol_assert_ok( app.task_rows().includes( task2 ) ) + + app.Sweep().click() + $mol_assert_ok( app.task_rows().includes( task1 ) ) + $mol_assert_not( app.task_rows().includes( task2 ) ) + + } , + + }) + +} diff --git a/examples/mol/src/todomvc.view.tree b/examples/mol/src/todomvc.view.tree new file mode 100644 index 0000000000..7f0d868521 --- /dev/null +++ b/examples/mol/src/todomvc.view.tree @@ -0,0 +1,66 @@ +$hyoo_todomvc $mol_scroll + title \Todos + attr * + ^ + mol_theme \$mol_theme_light + sub / + <= Page $mol_list rows / + <= Title $mol_paragraph + minimal_height 176 + title <= title + <= Panel $mol_list + rows <= panels / + <= Head $mol_view + minimal_height 64 + sub <= Head_content / + <= Head_complete $mol_check + enabled <= head_complete_enabled false + checked? <=> completed_all? false + title \❯ + <= Add $hyoo_todomvc_add + value? <=> task_title_new? \ + done? <=> add? null + <= List $mol_list rows <= task_rows /$mol_view + <= Task_row*0 $hyoo_todomvc_task_row + completed? <=> task_completed*? false + title? <=> task_title*? \ + drop? <=> task_drop*? null + <= Foot $mol_view sub <= foot_content / + <= Pending $mol_paragraph title <= pending_message \0 items left + <= Filter $mol_bar + sub <= filterOptions / + <= Filter_all $mol_link + title \All + arg * completed null + <= Filter_active $mol_link + title \Active + arg * completed \false + <= Filter_completed $mol_link + title \Completed + arg * completed \true + <= Sweep $mol_button_minor + enabled <= sweep_enabled true + click? <=> sweep? null + sub / <= sweep_label \Clear completed + +$hyoo_todomvc_add $mol_string + hint \What needs to be done? + event * + ^ + keydown? <=> press? null + done? null + +$hyoo_todomvc_task_row $mol_view + minimal_height 64 + attr * + ^ + hyoo_todomvc_task_row_completed <= completed? false + sub / + <= Complete $mol_check + checked? <=> completed? false + <= Title $mol_string + hint <= title_hint \Task title + value? <=> title? \ + <= Drop $mol_button_typed + sub / \✖ + click? <=> drop? null diff --git a/examples/mol/src/todomvc.view.ts b/examples/mol/src/todomvc.view.ts new file mode 100644 index 0000000000..697c7b7c42 --- /dev/null +++ b/examples/mol/src/todomvc.view.ts @@ -0,0 +1,144 @@ +interface $hyoo_todomvc_task { + completed? : boolean + title? : string +} + +namespace $.$$ { + + export class $hyoo_todomvc_add extends $.$hyoo_todomvc_add { + + press( next : KeyboardEvent ) { + switch( next.keyCode ) { + case $mol_keyboard_code.enter : return this.done( next ) + } + } + + } + + export class $hyoo_todomvc extends $.$hyoo_todomvc { + + task_ids( next? : number[] ) : number[] { + return this.$.$mol_state_local.value( this.state_key( 'mol-todos' ) , next ) || [] + } + + arg_completed() { + return this.$.$mol_state_arg.value( this.state_key( 'completed' ) ) + } + + @ $mol_mem + groups_completed() { + var groups : { [ index : string ] : number[] } = { 'true' : [] , 'false' : [] } + for( let id of this.task_ids() ) { + var task = this.task( id )! + groups[ String( task.completed ) ].push( id ) + } + return groups + } + + @ $mol_mem + task_ids_filtered() { + var completed = this.arg_completed() + if( completed ) { + return this.groups_completed()[ completed ] || [] + } else { + return this.task_ids() + } + } + + @ $mol_mem + completed_all( next? : boolean ) { + if( next === void 0 ) return this.groups_completed()[ 'false' ].length === 0 + + for( let id of this.groups_completed()[ String( !next ) ] ) { + var task = this.task( id )! + this.task( id , { title : task.title , completed : next } ) + } + + return next + } + + head_complete_enabled() { + return this.task_ids().length > 0 + } + + @ $mol_mem + pending_message() { + let count = this.groups_completed()[ 'false' ].length + return ( count === 1 ) ? '1 item left' : `${count} items left` + } + + @ $mol_mem + new_id() { + return Math.max( 1 , 1 + Math.max( ... this.task_ids() ) ) + } + + add( next? : Event ) { + var title = this.task_title_new() + if( !title ) return + + var id = this.new_id() + var task = { completed : false , title } + this.task( id , task ) + + this.task_ids([ ... this.task_ids(), id ]) + this.task_title_new( '' ) + } + + @ $mol_mem + task_rows() { + return this.task_ids_filtered().map( id => this.Task_row( id ) ) + } + + task( id : number , next? : $hyoo_todomvc_task | null ) { + const key = this.state_key( `mol-todos-${id}` ) + if( next === void 0 ) { + return this.$.$mol_state_local.value<$hyoo_todomvc_task>( key ) || { title : '' , completed : false } + } + + this.$.$mol_state_local.value( key , next ) + + return next || null + } + + @ $mol_mem_key + task_completed( id : number , next? : boolean ) { + return this.task( id , next === undefined ? undefined : { ... this.task( id ) , completed : next } )!.completed ?? false + } + + @ $mol_mem_key + task_title( id : number , next? : string ) { + return this.task( id , next === undefined ? undefined : { ... this.task( id ) , title : next } )!.title ?? '' + } + + task_drop( id : number , next? : Event ) { + this.task( id , null ) + this.task_ids( this.task_ids().filter( id2 => id !== id2 ) ) + } + + sweep() { + this.task_ids( this.task_ids().filter( id => { + if( !this.task( id )!.completed ) return true + this.task( id , null ) + return false + } ) ) + } + + panels() { + return [ + this.Head() , + this.List() , + ... this.foot_visible() ? [ this.Foot() ] : [] , + ] + } + + foot_visible() { + return this.task_ids().length > 0 + } + + sweep_enabled() { + return this.groups_completed()[ 'true' ].length > 0 + } + + } + +} diff --git a/examples/mol/src/todomvc_active.svg b/examples/mol/src/todomvc_active.svg new file mode 100644 index 0000000000..417859015a --- /dev/null +++ b/examples/mol/src/todomvc_active.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/examples/mol/src/todomvc_completed.svg b/examples/mol/src/todomvc_completed.svg new file mode 100644 index 0000000000..4231bde0ad --- /dev/null +++ b/examples/mol/src/todomvc_completed.svg @@ -0,0 +1,4 @@ + + + + diff --git a/examples/mol/test.html b/examples/mol/test.html new file mode 100644 index 0000000000..05761484db --- /dev/null +++ b/examples/mol/test.html @@ -0,0 +1,36 @@ + + + + + + + + +
+ + + + + + \ No newline at end of file diff --git a/examples/mol/web.audit.js b/examples/mol/web.audit.js new file mode 100644 index 0000000000..cce7fccc9d --- /dev/null +++ b/examples/mol/web.audit.js @@ -0,0 +1 @@ +console.info("Audit passed") \ No newline at end of file diff --git a/examples/mol/web.d.ts b/examples/mol/web.d.ts new file mode 100644 index 0000000000..285899f2bd --- /dev/null +++ b/examples/mol/web.d.ts @@ -0,0 +1,1545 @@ +declare let _$_: { + new (): {}; +} & typeof globalThis; +declare class $ extends _$_ { +} +declare namespace $ { + export type $ = typeof $$; + export class $$ extends $ { + } + namespace $$ { + type $$ = $; + } + export {}; +} + +declare namespace $ { + const $mol_ambient_ref: unique symbol; + type $mol_ambient_context = $; + function $mol_ambient(this: $ | void, overrides: Partial<$>): $; +} + +declare namespace $ { + function $mol_delegate(proto: Value, target: () => Value): Value; +} + +declare namespace $ { + const $mol_owning_map: WeakMap; + function $mol_owning_allow(having: Having): having is Having & { + destructor(): void; + }; + function $mol_owning_get(having: Having, Owner?: { + new (): Owner; + }): Owner | null; + function $mol_owning_check(owner: Owner, having: Having): having is Having & { + destructor(): void; + }; + function $mol_owning_catch(owner: Owner, having: Having): boolean; +} + +declare namespace $ { + function $mol_fail(error: any): never; +} + +declare namespace $ { + function $mol_fail_hidden(error: any): never; +} + +declare namespace $ { + type $mol_type_writable = { + -readonly [P in keyof T]: T[P]; + }; +} + +declare namespace $ { + class $mol_object2 { + static $: typeof $$; + [$mol_ambient_ref]: typeof $$; + get $(): $; + set $(next: $); + static create(this: new (init?: (instance: any) => void) => Instance, init?: (instance: $mol_type_writable) => void): Instance; + static [Symbol.toPrimitive](): any; + static toString(): any; + destructor(): void; + toString(): any; + toJSON(): any; + } +} + +declare namespace $ { + class $mol_after_tick extends $mol_object2 { + task: () => void; + promise: any; + cancelled: boolean; + constructor(task: () => void); + destructor(): void; + } +} + +declare namespace $ { + var $mol_dom_context: typeof globalThis; +} + +declare namespace $ { +} + +declare namespace $ { + function $mol_style_attach(id: string, text: string): HTMLStyleElement | null; +} + +declare namespace $ { + class $mol_decor { + readonly value: Value; + constructor(value: Value); + prefix(): string; + valueOf(): Value; + postfix(): string; + toString(): string; + } +} + +declare namespace $ { + type $mol_style_unit_length = '%' | 'px' | 'cm' | 'mm' | 'Q' | 'in' | 'pc' | 'pt' | 'cap' | 'ch' | 'em' | 'rem' | 'ex' | 'ic' | 'lh' | 'rlh' | 'vh' | 'vw' | 'vi' | 'vb' | 'vmin' | 'vmax'; + type $mol_style_unit_angle = 'deg' | 'rad' | 'grad' | 'turn'; + type $mol_style_unit_time = 's' | 'ms'; + type $mol_style_unit_any = $mol_style_unit_length | $mol_style_unit_angle | $mol_style_unit_time; + class $mol_style_unit extends $mol_decor { + readonly literal: Literal; + constructor(value: number, literal: Literal); + postfix(): Literal; + static per(value: number): $mol_style_unit<"%">; + static px(value: number): $mol_style_unit<"px">; + static mm(value: number): $mol_style_unit<"mm">; + static cm(value: number): $mol_style_unit<"cm">; + static Q(value: number): $mol_style_unit<"Q">; + static in(value: number): $mol_style_unit<"in">; + static pc(value: number): $mol_style_unit<"pc">; + static pt(value: number): $mol_style_unit<"pt">; + static cap(value: number): $mol_style_unit<"cap">; + static ch(value: number): $mol_style_unit<"ch">; + static em(value: number): $mol_style_unit<"em">; + static rem(value: number): $mol_style_unit<"rem">; + static ex(value: number): $mol_style_unit<"ex">; + static ic(value: number): $mol_style_unit<"ic">; + static lh(value: number): $mol_style_unit<"lh">; + static rlh(value: number): $mol_style_unit<"rlh">; + static vh(value: number): $mol_style_unit<"vh">; + static vw(value: number): $mol_style_unit<"vw">; + static vi(value: number): $mol_style_unit<"vi">; + static vb(value: number): $mol_style_unit<"vb">; + static vmin(value: number): $mol_style_unit<"vmin">; + static vmax(value: number): $mol_style_unit<"vmax">; + static deg(value: number): $mol_style_unit<"deg">; + static rad(value: number): $mol_style_unit<"rad">; + static grad(value: number): $mol_style_unit<"grad">; + static turn(value: number): $mol_style_unit<"turn">; + static s(value: number): $mol_style_unit<"s">; + static ms(value: number): $mol_style_unit<"ms">; + } +} + +declare namespace $ { + type $mol_style_func_name = 'calc' | 'hsla' | 'rgba' | 'var' | 'clamp' | 'url' | 'scale'; + class $mol_style_func extends $mol_decor { + readonly name: Name; + constructor(name: Name, value: Value); + prefix(): string; + postfix(): string; + static calc(value: Value): $mol_style_func<"calc", Value>; + static vary(name: Name): $mol_style_func<"var", Name>; + static url(href: Href): $mol_style_func<"url", string>; + static hsla(hue: number, saturation: number, lightness: number, alpha: number): $mol_style_func<"hsla", (number | $mol_style_unit<"%">)[]>; + static clamp(min: $mol_style_unit, mid: $mol_style_unit, max: $mol_style_unit): $mol_style_func<"clamp", $mol_style_unit[]>; + static rgba(red: number, green: number, blue: number, alpha: number): $mol_style_func<"rgba", number[]>; + static scale(zoom: number): $mol_style_func<"scale", number[]>; + } +} + +declare namespace $ { +} + +declare namespace $ { + const $mol_theme: { + back: $mol_style_func<"var", "--mol_theme_back">; + hover: $mol_style_func<"var", "--mol_theme_hover">; + card: $mol_style_func<"var", "--mol_theme_card">; + current: $mol_style_func<"var", "--mol_theme_current">; + special: $mol_style_func<"var", "--mol_theme_special">; + text: $mol_style_func<"var", "--mol_theme_text">; + control: $mol_style_func<"var", "--mol_theme_control">; + shade: $mol_style_func<"var", "--mol_theme_shade">; + line: $mol_style_func<"var", "--mol_theme_line">; + focus: $mol_style_func<"var", "--mol_theme_focus">; + field: $mol_style_func<"var", "--mol_theme_field">; + image: $mol_style_func<"var", "--mol_theme_image">; + }; +} + +declare namespace $ { + namespace $$ { } + const $mol_object_field: unique symbol; + class $mol_object extends $mol_object2 { + static make(this: { + new (): Instance; + }, config: Partial): Instance; + } +} + +declare namespace $ { + enum $mol_wire_cursor { + stale = -1, + doubt = -2, + fresh = -3, + final = -4 + } +} + +declare namespace $ { + class $mol_wire_pub extends Object { + data: unknown[]; + static get [Symbol.species](): ArrayConstructor; + protected sub_from: number; + get sub_list(): readonly $mol_wire_sub[]; + get sub_empty(): boolean; + sub_on(sub: $mol_wire_pub, pub_pos: number): number; + sub_off(sub_pos: number): void; + reap(): void; + promote(): void; + fresh(): void; + complete(): void; + emit(quant?: $mol_wire_cursor): void; + peer_move(from_pos: number, to_pos: number): void; + peer_repos(peer_pos: number, self_pos: number): void; + } +} + +declare namespace $ { + interface $mol_wire_sub extends $mol_wire_pub { + track_on(): $mol_wire_sub | null; + track_next(pub?: $mol_wire_pub): $mol_wire_pub | null; + pub_off(pub_pos: number): void; + track_cut(sub: $mol_wire_pub | null): void; + track_off(sub: $mol_wire_pub | null): void; + absorb(quant: $mol_wire_cursor): void; + destructor(): void; + } +} + +declare namespace $ { + function $mol_wire_auto(next?: $mol_wire_sub | null): $mol_wire_sub | null; + const $mol_wire_affected: (number | $mol_wire_sub)[]; +} + +declare namespace $ { + function $mol_dev_format_register(config: { + header: (val: any, config: any) => any; + hasBody: (val: any, config: any) => false; + } | { + header: (val: any, config: any) => any; + hasBody: (val: any, config: any) => boolean; + body: (val: any, config: any) => any; + }): void; + let $mol_dev_format_head: symbol; + let $mol_dev_format_body: symbol; + function $mol_dev_format_native(obj: any): any; + function $mol_dev_format_auto(obj: any): any; + function $mol_dev_format_element(element: string, style: object, ...content: any[]): any[]; + function $mol_dev_format_span(style: object, ...content: any[]): any[]; + let $mol_dev_format_div: (style: object, ...content: any[]) => any[]; + let $mol_dev_format_ol: (style: object, ...content: any[]) => any[]; + let $mol_dev_format_li: (style: object, ...content: any[]) => any[]; + let $mol_dev_format_table: (style: object, ...content: any[]) => any[]; + let $mol_dev_format_tr: (style: object, ...content: any[]) => any[]; + let $mol_dev_format_td: (style: object, ...content: any[]) => any[]; + let $mol_dev_format_accent: (...args: any[]) => any[]; + let $mol_dev_format_strong: (...args: any[]) => any[]; + let $mol_dev_format_string: (...args: any[]) => any[]; + let $mol_dev_format_shade: (...args: any[]) => any[]; + let $mol_dev_format_indent: (...args: any[]) => any[]; +} + +declare namespace $ { + class $mol_wire_pub_sub extends $mol_wire_pub implements $mol_wire_sub { + protected pub_from: number; + protected cursor: $mol_wire_cursor; + get pub_list(): $mol_wire_pub[]; + track_on(): $mol_wire_sub | null; + promote(): void; + track_next(pub?: $mol_wire_pub): $mol_wire_pub | null; + track_off(sub: $mol_wire_sub | null): void; + pub_off(sub_pos: number): void; + destructor(): void; + track_cut(): void; + complete(): void; + complete_pubs(): void; + absorb(quant?: $mol_wire_cursor): void; + get pub_empty(): boolean; + } +} + +declare namespace $ { + class $mol_after_frame extends $mol_object2 { + task: () => void; + static _promise: Promise | null; + static get promise(): Promise; + cancelled: boolean; + promise: Promise; + constructor(task: () => void); + destructor(): void; + } +} + +declare namespace $ { + abstract class $mol_wire_fiber extends $mol_wire_pub_sub { + readonly task: (this: Host, ...args: Args) => Result; + readonly host?: Host | undefined; + static warm: boolean; + static planning: Set<$mol_wire_fiber>; + static reaping: Set<$mol_wire_fiber>; + static plan_task: $mol_after_frame | null; + static plan(): void; + static sync(): void; + cache: Result | Error | Promise; + get args(): Args; + result(): Result | undefined; + field(): string; + constructor(id: string, task: (this: Host, ...args: Args) => Result, host?: Host | undefined, args?: Args); + plan(): void; + reap(): void; + toString(): any; + toJSON(): any; + get $(): any; + emit(quant?: $mol_wire_cursor): void; + fresh(): void; + refresh(): void; + abstract put(next: Result | Error | Promise): Result | Error | Promise; + sync(): Awaited; + async(): Promise; + } +} + +declare namespace $ { + function $mol_guid(length?: number, exists?: (id: string) => boolean): string; +} + +declare namespace $ { + const $mol_key_store: WeakMap; + function $mol_key(value: Value): string; +} + +declare namespace $ { + let $mol_compare_deep_cache: WeakMap>; + function $mol_compare_deep(left: Value, right: Value): boolean; +} + +declare namespace $ { + class $mol_wire_task extends $mol_wire_fiber { + static getter(task: (this: Host, ...args: Args) => Result): (host: Host, args: Args) => $mol_wire_task; + complete(): void; + put(next: Result | Error | Promise): Error | Result | Promise; + } +} + +declare namespace $ { + function $mol_wire_method(host: Host, field: PropertyKey, descr?: TypedPropertyDescriptor<(...args: Args) => Result>): { + value: (this: Host, ...args: Args) => Result; + enumerable?: boolean | undefined; + configurable?: boolean | undefined; + writable?: boolean | undefined; + get?: (() => (...args: Args) => Result) | undefined; + set?: ((value: (...args: Args) => Result) => void) | undefined; + }; +} + +declare namespace $ { + class $mol_wire_atom extends $mol_wire_fiber { + static getter(task: (this: Host, ...args: Args) => Result, keys: number): (host: Host, args: Args) => $mol_wire_atom; + static watching: Set<$mol_wire_atom>; + static watch(): void; + watch(): void; + resync(args: Args): Error | Result | Promise; + once(): Awaited; + destructor(): void; + put(next: Result | Error | Promise): Error | Result | Promise; + } +} + +declare namespace $ { + function $mol_wire_mem(keys: Keys): any>>(host: Host, field: Field, descr?: TypedPropertyDescriptor | undefined) => { + value: NonNullable; + enumerable?: boolean | undefined; + configurable?: boolean | undefined; + writable?: boolean | undefined; + get?: (() => Prop) | undefined; + set?: ((value: Prop) => void) | undefined; + }; + function $mol_wire_mem_func(keys: Keys): Result>(func: Func) => Func; +} + +declare namespace $ { + let $mol_mem: any>>(host: Host, field: Field, descr?: TypedPropertyDescriptor | undefined) => { + value: NonNullable; + enumerable?: boolean | undefined; + configurable?: boolean | undefined; + writable?: boolean | undefined; + get?: (() => Prop) | undefined; + set?: ((value: Prop) => void) | undefined; + }; + let $mol_mem_key: any>>(host: Host, field: Field, descr?: TypedPropertyDescriptor | undefined) => { + value: NonNullable; + enumerable?: boolean | undefined; + configurable?: boolean | undefined; + writable?: boolean | undefined; + get?: (() => Prop) | undefined; + set?: ((value: Prop) => void) | undefined; + }; + let $mol_mem_key2: any>>(host: Host, field: Field, descr?: TypedPropertyDescriptor | undefined) => { + value: NonNullable; + enumerable?: boolean | undefined; + configurable?: boolean | undefined; + writable?: boolean | undefined; + get?: (() => Prop) | undefined; + set?: ((value: Prop) => void) | undefined; + }; + let $mol_mem_key3: any>>(host: Host, field: Field, descr?: TypedPropertyDescriptor | undefined) => { + value: NonNullable; + enumerable?: boolean | undefined; + configurable?: boolean | undefined; + writable?: boolean | undefined; + get?: (() => Prop) | undefined; + set?: ((value: Prop) => void) | undefined; + }; +} + +declare namespace $ { + class $mol_window extends $mol_object { + static size(): { + width: number; + height: number; + }; + static resizes(next?: Event): Event | undefined; + } +} + +declare namespace $ { + function $mol_fail_catch(error: unknown): boolean; +} + +declare namespace $ { + function $mol_fail_log(error: unknown): boolean; +} + +declare namespace $ { + class $mol_view_selection extends $mol_object { + static focused(next?: Element[]): Element[]; + } +} + +declare namespace $ { + function $mol_maybe(value: Value | null | undefined): Value[]; +} + +declare namespace $ { +} + +declare namespace $ { + class $mol_wrapper extends $mol_object2 { + static wrap: (task: (...ags: any[]) => any) => (...ags: any[]) => any; + static run(task: () => Result): Result; + static func(func: (this: Host, ...args: Args) => Result): (this: Host, ...args: Args) => Result; + static get class(): any>(Class: Class) => Class; + static get method(): (obj: object, name: PropertyKey, descr: PropertyDescriptor) => PropertyDescriptor; + static get field(): (obj: Host, name: Field, descr: TypedPropertyDescriptor) => TypedPropertyDescriptor; + } +} + +declare namespace $ { + class $mol_memo extends $mol_wrapper { + static wrap(task: (this: This, next?: Value) => Value): (this: This, next?: Value | undefined) => Value | undefined; + } +} + +declare namespace $ { + function $mol_dom_qname(name: string): string; +} + +declare namespace $ { + function $mol_wire_watch(): void; +} + +declare namespace $ { + function $mol_const(value: Value): { + (): Value; + '()': Value; + }; +} + +declare namespace $ { + function $mol_dom_render_attributes(el: Element, attrs: { + [key: string]: string | number | boolean | null; + }): void; +} + +declare namespace $ { + function $mol_wire_async(obj: Host): (Host extends (...args: infer Args) => infer Res ? Res extends Promise ? Host : (...args: Args) => Promise : {}) & { [key in keyof Host]: Host[key] extends (...args: infer Args_1) => infer Res_1 ? Res_1 extends Promise ? Host[key] : (...args: Args_1) => Promise : Host[key]; }; +} + +declare namespace $ { + function $mol_dom_render_styles(el: Element, styles: { + [key: string]: string | number; + }): void; +} + +declare namespace $ { + function $mol_dom_render_children(el: Element | DocumentFragment, childNodes: NodeList | Array): void; +} + +declare namespace $ { + function $mol_dom_render_fields(el: Element, fields: { + [key: string]: any; + }): void; +} + +declare namespace $ { + function $mol_func_name(this: $, func: Function): string; + function $mol_func_name_from(target: Target, source: Function): Target; +} + +declare namespace $ { + type $mol_type_keys_extract = { + [Field in keyof Input]: unknown extends Input[Field] ? never : Input[Field] extends never ? never : Input[Field] extends Upper ? Field : never; + }[keyof Input]; +} + +declare namespace $ { + type $mol_type_pick = Pick>; +} + +declare namespace $ { + type $mol_view_content = $mol_view | Node | string | number | boolean; + function $mol_view_visible_width(): number; + function $mol_view_visible_height(): number; + function $mol_view_state_key(suffix: string): string; + class $mol_view extends $mol_object { + static Root(this: This, id: number): InstanceType; + autorun(): void; + static autobind(): void; + title(): string; + focused(next?: boolean): boolean; + state_key(suffix?: string): string; + dom_name(): string; + dom_name_space(): string; + sub(): readonly (string | number | boolean | $mol_view | Node)[]; + sub_visible(): readonly (string | number | boolean | $mol_view | Node)[]; + minimal_width(): number; + maximal_width(): number; + minimal_height(): number; + static watchers: Set<$mol_view>; + view_rect(): { + width: number; + height: number; + left: number; + right: number; + top: number; + bottom: number; + }; + dom_id(): any; + dom_node(next?: Element): Element; + dom_final(): Element | undefined; + dom_tree(next?: Element): Element; + dom_node_actual(): Element; + auto(): any; + render(): void; + static view_classes(): (typeof $mol_view)[]; + view_names_owned(): string[]; + view_names(): string[]; + attr_static(): { + [key: string]: string | number | boolean | null; + }; + attr(): {}; + style_size(): { + [key: string]: string | number; + }; + style(): { + [key: string]: string | number; + }; + field(): { + [key: string]: any; + }; + event(): { + [key: string]: (event: Event) => void; + }; + plugins(): readonly $mol_view[]; + view_find(check: (path: $mol_view, text?: string) => boolean, path?: $mol_view[]): Generator<$mol_view[]>; + force_render(path: Set<$mol_view>): void; + ensure_visible(view: $mol_view, align?: ScrollLogicalPosition): Promise; + } + type $mol_view_all = $mol_type_pick<$, typeof $mol_view>; +} + +declare namespace $ { +} + +interface Window { + cordova: any; +} +declare namespace $ { +} + +declare namespace $ { + class $mol_plugin extends $mol_view { + dom_node(next?: Element): Element; + attr_static(): { + [key: string]: string | number | boolean; + }; + event(): { + [key: string]: (event: Event) => void; + }; + render(): void; + } +} + +declare namespace $ { + class $mol_hotkey extends $mol_plugin { + event(): { + keydown: (event?: any) => any; + }; + key(): {}; + mod_ctrl(): boolean; + mod_alt(): boolean; + mod_shift(): boolean; + keydown(event?: any): any; + } +} + +declare namespace $ { + enum $mol_keyboard_code { + backspace = 8, + tab = 9, + enter = 13, + shift = 16, + ctrl = 17, + alt = 18, + pause = 19, + capsLock = 20, + escape = 27, + space = 32, + pageUp = 33, + pageDown = 34, + end = 35, + home = 36, + left = 37, + up = 38, + right = 39, + down = 40, + insert = 45, + delete = 46, + key0 = 48, + key1 = 49, + key2 = 50, + key3 = 51, + key4 = 52, + key5 = 53, + key6 = 54, + key7 = 55, + key8 = 56, + key9 = 57, + A = 65, + B = 66, + C = 67, + D = 68, + E = 69, + F = 70, + G = 71, + H = 72, + I = 73, + J = 74, + K = 75, + L = 76, + M = 77, + N = 78, + O = 79, + P = 80, + Q = 81, + R = 82, + S = 83, + T = 84, + U = 85, + V = 86, + W = 87, + X = 88, + Y = 89, + Z = 90, + metaLeft = 91, + metaRight = 92, + select = 93, + numpad0 = 96, + numpad1 = 97, + numpad2 = 98, + numpad3 = 99, + numpad4 = 100, + numpad5 = 101, + numpad6 = 102, + numpad7 = 103, + numpad8 = 104, + numpad9 = 105, + multiply = 106, + add = 107, + subtract = 109, + decimal = 110, + divide = 111, + F1 = 112, + F2 = 113, + F3 = 114, + F4 = 115, + F5 = 116, + F6 = 117, + F7 = 118, + F8 = 119, + F9 = 120, + F10 = 121, + F11 = 122, + F12 = 123, + numLock = 144, + scrollLock = 145, + semicolon = 186, + equals = 187, + comma = 188, + dash = 189, + period = 190, + forwardSlash = 191, + graveAccent = 192, + bracketOpen = 219, + slashBack = 220, + slashBackLeft = 226, + bracketClose = 221, + quoteSingle = 222 + } +} + +declare namespace $.$$ { + class $mol_hotkey extends $.$mol_hotkey { + key(): { + [x: number]: ((event: KeyboardEvent) => void) | undefined; + readonly backspace?: ((event: KeyboardEvent) => void) | undefined; + readonly tab?: ((event: KeyboardEvent) => void) | undefined; + readonly enter?: ((event: KeyboardEvent) => void) | undefined; + readonly shift?: ((event: KeyboardEvent) => void) | undefined; + readonly ctrl?: ((event: KeyboardEvent) => void) | undefined; + readonly alt?: ((event: KeyboardEvent) => void) | undefined; + readonly pause?: ((event: KeyboardEvent) => void) | undefined; + readonly capsLock?: ((event: KeyboardEvent) => void) | undefined; + readonly escape?: ((event: KeyboardEvent) => void) | undefined; + readonly space?: ((event: KeyboardEvent) => void) | undefined; + readonly pageUp?: ((event: KeyboardEvent) => void) | undefined; + readonly pageDown?: ((event: KeyboardEvent) => void) | undefined; + readonly end?: ((event: KeyboardEvent) => void) | undefined; + readonly home?: ((event: KeyboardEvent) => void) | undefined; + readonly left?: ((event: KeyboardEvent) => void) | undefined; + readonly up?: ((event: KeyboardEvent) => void) | undefined; + readonly right?: ((event: KeyboardEvent) => void) | undefined; + readonly down?: ((event: KeyboardEvent) => void) | undefined; + readonly insert?: ((event: KeyboardEvent) => void) | undefined; + readonly delete?: ((event: KeyboardEvent) => void) | undefined; + readonly key0?: ((event: KeyboardEvent) => void) | undefined; + readonly key1?: ((event: KeyboardEvent) => void) | undefined; + readonly key2?: ((event: KeyboardEvent) => void) | undefined; + readonly key3?: ((event: KeyboardEvent) => void) | undefined; + readonly key4?: ((event: KeyboardEvent) => void) | undefined; + readonly key5?: ((event: KeyboardEvent) => void) | undefined; + readonly key6?: ((event: KeyboardEvent) => void) | undefined; + readonly key7?: ((event: KeyboardEvent) => void) | undefined; + readonly key8?: ((event: KeyboardEvent) => void) | undefined; + readonly key9?: ((event: KeyboardEvent) => void) | undefined; + readonly A?: ((event: KeyboardEvent) => void) | undefined; + readonly B?: ((event: KeyboardEvent) => void) | undefined; + readonly C?: ((event: KeyboardEvent) => void) | undefined; + readonly D?: ((event: KeyboardEvent) => void) | undefined; + readonly E?: ((event: KeyboardEvent) => void) | undefined; + readonly F?: ((event: KeyboardEvent) => void) | undefined; + readonly G?: ((event: KeyboardEvent) => void) | undefined; + readonly H?: ((event: KeyboardEvent) => void) | undefined; + readonly I?: ((event: KeyboardEvent) => void) | undefined; + readonly J?: ((event: KeyboardEvent) => void) | undefined; + readonly K?: ((event: KeyboardEvent) => void) | undefined; + readonly L?: ((event: KeyboardEvent) => void) | undefined; + readonly M?: ((event: KeyboardEvent) => void) | undefined; + readonly N?: ((event: KeyboardEvent) => void) | undefined; + readonly O?: ((event: KeyboardEvent) => void) | undefined; + readonly P?: ((event: KeyboardEvent) => void) | undefined; + readonly Q?: ((event: KeyboardEvent) => void) | undefined; + readonly R?: ((event: KeyboardEvent) => void) | undefined; + readonly S?: ((event: KeyboardEvent) => void) | undefined; + readonly T?: ((event: KeyboardEvent) => void) | undefined; + readonly U?: ((event: KeyboardEvent) => void) | undefined; + readonly V?: ((event: KeyboardEvent) => void) | undefined; + readonly W?: ((event: KeyboardEvent) => void) | undefined; + readonly X?: ((event: KeyboardEvent) => void) | undefined; + readonly Y?: ((event: KeyboardEvent) => void) | undefined; + readonly Z?: ((event: KeyboardEvent) => void) | undefined; + readonly metaLeft?: ((event: KeyboardEvent) => void) | undefined; + readonly metaRight?: ((event: KeyboardEvent) => void) | undefined; + readonly select?: ((event: KeyboardEvent) => void) | undefined; + readonly numpad0?: ((event: KeyboardEvent) => void) | undefined; + readonly numpad1?: ((event: KeyboardEvent) => void) | undefined; + readonly numpad2?: ((event: KeyboardEvent) => void) | undefined; + readonly numpad3?: ((event: KeyboardEvent) => void) | undefined; + readonly numpad4?: ((event: KeyboardEvent) => void) | undefined; + readonly numpad5?: ((event: KeyboardEvent) => void) | undefined; + readonly numpad6?: ((event: KeyboardEvent) => void) | undefined; + readonly numpad7?: ((event: KeyboardEvent) => void) | undefined; + readonly numpad8?: ((event: KeyboardEvent) => void) | undefined; + readonly numpad9?: ((event: KeyboardEvent) => void) | undefined; + readonly multiply?: ((event: KeyboardEvent) => void) | undefined; + readonly add?: ((event: KeyboardEvent) => void) | undefined; + readonly subtract?: ((event: KeyboardEvent) => void) | undefined; + readonly decimal?: ((event: KeyboardEvent) => void) | undefined; + readonly divide?: ((event: KeyboardEvent) => void) | undefined; + readonly F1?: ((event: KeyboardEvent) => void) | undefined; + readonly F2?: ((event: KeyboardEvent) => void) | undefined; + readonly F3?: ((event: KeyboardEvent) => void) | undefined; + readonly F4?: ((event: KeyboardEvent) => void) | undefined; + readonly F5?: ((event: KeyboardEvent) => void) | undefined; + readonly F6?: ((event: KeyboardEvent) => void) | undefined; + readonly F7?: ((event: KeyboardEvent) => void) | undefined; + readonly F8?: ((event: KeyboardEvent) => void) | undefined; + readonly F9?: ((event: KeyboardEvent) => void) | undefined; + readonly F10?: ((event: KeyboardEvent) => void) | undefined; + readonly F11?: ((event: KeyboardEvent) => void) | undefined; + readonly F12?: ((event: KeyboardEvent) => void) | undefined; + readonly numLock?: ((event: KeyboardEvent) => void) | undefined; + readonly scrollLock?: ((event: KeyboardEvent) => void) | undefined; + readonly semicolon?: ((event: KeyboardEvent) => void) | undefined; + readonly equals?: ((event: KeyboardEvent) => void) | undefined; + readonly comma?: ((event: KeyboardEvent) => void) | undefined; + readonly dash?: ((event: KeyboardEvent) => void) | undefined; + readonly period?: ((event: KeyboardEvent) => void) | undefined; + readonly forwardSlash?: ((event: KeyboardEvent) => void) | undefined; + readonly graveAccent?: ((event: KeyboardEvent) => void) | undefined; + readonly bracketOpen?: ((event: KeyboardEvent) => void) | undefined; + readonly slashBack?: ((event: KeyboardEvent) => void) | undefined; + readonly slashBackLeft?: ((event: KeyboardEvent) => void) | undefined; + readonly bracketClose?: ((event: KeyboardEvent) => void) | undefined; + readonly quoteSingle?: ((event: KeyboardEvent) => void) | undefined; + }; + keydown(event?: KeyboardEvent): void; + } +} + +declare namespace $ { + class $mol_string extends $mol_view { + dom_name(): string; + enabled(): boolean; + minimal_height(): number; + autocomplete(): boolean; + selection(val?: any): readonly number[]; + auto(): readonly any[]; + field(): { + disabled: boolean; + value: string; + placeholder: string; + spellcheck: boolean; + autocomplete: string; + selectionEnd: number; + selectionStart: number; + }; + attr(): { + maxlength: number; + type: string; + }; + event(): { + input: (event?: any) => any; + keydown: (event?: any) => any; + }; + plugins(): readonly any[]; + selection_watcher(): any; + disabled(): boolean; + value(val?: any): string; + value_changed(val?: any): string; + hint(): string; + hint_visible(): string; + spellcheck(): boolean; + autocomplete_native(): string; + selection_end(): number; + selection_start(): number; + length_max(): number; + type(val?: any): string; + event_change(event?: any): any; + event_key_press(event?: any): any; + submit(event?: any): any; + Submit(): $$.$mol_hotkey; + } +} + +declare namespace $ { +} + +declare namespace $ { + let $mol_gap: { + readonly block: $mol_style_func<"var", "--mol_gap_block">; + readonly text: $mol_style_func<"var", "--mol_gap_text">; + readonly round: $mol_style_func<"var", "--mol_gap_round">; + readonly space: $mol_style_func<"var", "--mol_gap_space">; + readonly blur: $mol_style_func<"var", "--mol_gap_blur">; + }; +} + +declare namespace $ { + class $mol_dom_listener extends $mol_object { + _node: any; + _event: string; + _handler: (event: any) => any; + _config: boolean | { + passive: boolean; + }; + constructor(_node: any, _event: string, _handler: (event: any) => any, _config?: boolean | { + passive: boolean; + }); + destructor(): void; + } +} + +declare namespace $ { +} + +declare namespace $.$$ { + class $mol_string extends $.$mol_string { + event_change(next?: Event): void; + hint_visible(): string; + disabled(): boolean; + autocomplete_native(): "on" | "off"; + selection_watcher(): $mol_dom_listener; + selection_change(event: Event): void; + selection_start(): number; + selection_end(): number; + } +} + +declare namespace $ { + class $mol_speck extends $mol_view { + attr(): { + mol_theme: string; + }; + style(): { + minHeight: string; + }; + sub(): readonly any[]; + value(): any; + } +} + +declare namespace $ { +} + +declare namespace $ { + class $mol_button extends $mol_view { + enabled(): boolean; + click(event?: any): any; + event_click(event?: any): any; + event(): { + click: (event?: any) => any; + keydown: (event?: any) => any; + }; + attr(): { + disabled: boolean; + role: string; + tabindex: number; + title: string; + }; + sub(): readonly $mol_view_content[]; + Speck(): $mol_speck; + event_activate(event?: any): any; + event_key_press(event?: any): any; + disabled(): boolean; + tab_index(): number; + hint(): string; + error(): string; + } +} + +declare namespace $ { +} + +declare namespace $.$$ { + class $mol_button extends $.$mol_button { + status(next?: any[]): any[]; + disabled(): boolean; + event_activate(next: Event): void; + event_key_press(event: KeyboardEvent): void; + tab_index(): number; + error(): string; + sub_visible(): ($mol_view_content | $mol_speck)[]; + } +} + +declare namespace $ { + type $mol_type_result = Func extends (...params: any) => infer Result ? Result : Func extends new (...params: any) => infer Result ? Result : never; +} + +declare namespace $ { + type $mol_type_error = Message & { + $mol_type_error: Info; + }; +} + +declare namespace $ { + type $mol_type_override = Omit & Over; +} + +declare namespace $ { + export type $mol_style_properties = Partial<$mol_type_override>; + type Common = 'inherit' | 'initial' | 'unset'; + type Color = 'aliceblue' | 'antiquewhite' | 'aqua' | 'aquamarine' | 'azure' | 'beige' | 'bisque' | 'black' | 'blanchedalmond' | 'blue' | 'blueviolet' | 'brown' | 'burlywood' | 'cadetblue' | 'chartreuse' | 'chocolate' | 'coral' | 'cornflowerblue' | 'cornsilk' | 'crimson' | 'cyan' | 'darkblue' | 'darkcyan' | 'darkgoldenrod' | 'darkgray' | 'darkgreen' | 'darkgrey' | 'darkkhaki' | 'darkmagenta' | 'darkolivegreen' | 'darkorange' | 'darkorchid' | 'darkred' | 'darksalmon' | 'darkseagreen' | 'darkslateblue' | 'darkslategrey' | 'darkturquoise' | 'darkviolet' | 'deeppink' | 'deepskyblue' | 'dimgray' | 'dimgrey' | 'dodgerblue' | 'firebrick' | 'floralwhite' | 'forestgreen' | 'fuchsia' | 'gainsboro' | 'ghostwhite' | 'gold' | 'goldenrod' | 'gray' | 'green' | 'greenyellow' | 'grey' | 'honeydew' | 'hotpink' | 'indianred' | 'indigo' | 'ivory' | 'khaki' | 'lavender' | 'lavenderblush' | 'lawngreen' | 'lemonchiffon' | 'lightblue' | 'lightcoral' | 'lightcyan' | 'lightgoldenrodyellow' | 'lightgray' | 'lightgreen' | 'lightgrey' | 'lightpink' | 'lightsalmon' | 'lightseagreen' | 'lightskyblue' | 'lightslategray' | 'lightslategrey' | 'lightsteelblue' | 'lightyellow' | 'lime' | 'limegreen' | 'linen' | 'magenta' | 'maroon' | 'mediumaquamarine' | 'mediumblue' | 'mediumorchid' | 'mediumpurple' | 'mediumseagreen' | 'mediumslateblue' | 'mediumspringgreen' | 'mediumturquoise' | 'mediumvioletred' | 'midnightblue' | 'mintcream' | 'mistyrose' | 'moccasin' | 'navajowhite' | 'navy' | 'oldlace' | 'olive' | 'olivedrab' | 'orange' | 'orangered' | 'orchid' | 'palegoldenrod' | 'palegreen' | 'paleturquoise' | 'palevioletred' | 'papayawhip' | 'peachpuff' | 'peru' | 'pink' | 'plum' | 'powderblue' | 'purple' | 'rebeccapurple' | 'red' | 'rosybrown' | 'royalblue' | 'saddlebrown' | 'salmon' | 'sandybrown' | 'seagreen' | 'seashell' | 'sienna' | 'silver' | 'skyblue' | 'slateblue' | 'slategray' | 'slategrey' | 'snow' | 'springgreen' | 'steelblue' | 'tan' | 'teal' | 'thistle' | 'tomato' | 'turquoise' | 'violet' | 'wheat' | 'white' | 'whitesmoke' | 'yellow' | 'yellowgreen' | 'transparent' | 'currentcolor' | $mol_style_func<'hsla' | 'rgba' | 'var'> | `#${string}`; + type Length = 0 | $mol_style_unit<$mol_style_unit_length> | $mol_style_func<'calc' | 'var' | 'clamp'>; + type Size = 'auto' | 'max-content' | 'min-content' | 'fit-content' | Length | Common; + type Directions = Value | readonly [Value, Value] | { + top?: Value; + right?: Value; + bottom?: Value; + left?: Value; + }; + type Span_align = 'none' | 'start' | 'end' | 'center'; + type Snap_axis = 'x' | 'y' | 'block' | 'inline' | 'both'; + type Overflow = 'visible' | 'hidden' | 'clip' | 'scroll' | 'auto' | 'overlay' | Common; + type ContainRule = 'size' | 'layout' | 'style' | 'paint'; + type Repeat = 'repeat-x' | 'repeat-y' | 'repeat' | 'space' | 'round' | 'no-repeat'; + type BG_size = Length | 'auto' | 'contain' | 'cover'; + interface Overrides { + alignContent?: 'baseline' | 'start' | 'end' | 'flex-start' | 'flex-end' | 'center' | 'normal' | 'space-between' | 'space-around' | 'space-evenly' | 'stretch' | readonly ['first' | 'last', 'baseline'] | readonly ['safe' | 'unsafe', 'start' | 'end' | 'flex-start' | 'flex-end'] | Common; + justifyContent?: 'start' | 'end' | 'flex-start' | 'flex-end' | 'left' | 'right' | 'space-between' | 'space-around' | 'space-evenly' | 'normal' | 'stretch' | 'center' | Common; + gap?: Length; + background?: 'none' | { + color?: Color | Common; + image?: readonly (readonly [$mol_style_func<'url'>])[] | 'none' | Common; + repeat?: Repeat | [Repeat, Repeat] | Common; + position?: 'left' | 'right' | 'top' | 'bottom' | 'center'; + size?: (BG_size | [BG_size, BG_size])[]; + }; + backdropFilter: string; + box?: { + shadow?: readonly { + inset?: boolean; + x: Length; + y: Length; + blur: Length; + spread: Length; + color: Color; + }[] | 'none' | Common; + }; + font?: { + style?: 'normal' | 'italic' | Common; + weight?: 'normal' | 'bold' | 'lighter' | 'bolder' | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900 | Common; + size?: 'xx-small' | 'x-small' | 'small' | 'medium' | 'large' | 'x-large' | 'xx-large' | 'xxx-large' | 'smaller' | 'larger' | Length | Common; + family?: 'serif' | 'sans-serif' | 'monospace' | 'cursive' | 'fantasy' | 'system-ui' | 'ui-serif' | 'ui-sans-serif' | 'ui-monospace' | 'ui-rounded' | 'emoji' | 'math' | 'fangsong' | Common; + }; + color?: Color | Common; + display?: 'block' | 'inline' | 'run-in' | 'list-item' | 'none' | 'flow' | 'flow-root' | 'table' | 'flex' | 'grid' | 'contents' | 'table-row-group' | 'table-header-group' | 'table-footer-group' | 'table-column-group' | 'table-row' | 'table-cell' | 'table-column' | 'table-caption' | 'inline-block' | 'inline-table' | 'inline-flex' | 'inline-grid' | 'ruby' | 'ruby-base' | 'ruby-text' | 'ruby-base-container' | 'ruby-text-container' | Common; + overflow?: Overflow | { + x?: Overflow | Common; + y?: Overflow | Common; + anchor?: 'auto' | 'none' | Common; + }; + contain?: 'none' | 'strict' | 'content' | ContainRule | readonly ContainRule[] | Common; + whiteSpace?: 'normal' | 'nowrap' | 'break-spaces' | 'pre' | 'pre-wrap' | 'pre-line' | Common; + webkitOverflowScrolling?: 'auto' | 'touch'; + scrollbar?: { + color?: readonly [Color, Color] | 'auto' | Common; + width?: 'auto' | 'thin' | 'none' | Common; + }; + scroll?: { + snap?: { + type: 'none' | Snap_axis | readonly [Snap_axis, 'mandatory' | 'proximity'] | Common; + stop: 'normal' | 'always' | Common; + align: Span_align | readonly [Span_align, Span_align] | Common; + }; + }; + width?: Size; + minWidth?: Size; + maxWidth?: Size; + height?: Size; + minHeight?: Size; + maxHeight?: Size; + margin?: Directions; + padding?: Directions; + position?: 'static' | 'relative' | 'absolute' | 'sticky' | 'fixed'; + top?: Length | 'auto' | Common; + right?: Length | 'auto' | Common; + bottom?: Length | 'auto' | Common; + left?: Length | 'auto' | Common; + border?: { + radius?: Length | [Length, Length]; + style?: 'none' | 'hidden' | 'dotted' | 'dashed' | 'solid' | 'double' | 'groove' | 'ridge' | 'inset' | 'outset' | Common; + color?: Directions | Common; + width?: Directions | Common; + }; + flex?: 'none' | 'auto' | { + grow?: number | Common; + shrink?: number | Common; + basis?: Size; + direction?: 'row' | 'row-reverse' | 'column' | 'column-reverse'; + wrap?: 'wrap' | 'nowrap' | 'wrap-reverse' | Common; + }; + zIndex: number; + opacity: number; + } + export {}; +} + +declare namespace $ { + type $mol_style_pseudo_class = ':active' | ':any' | ':any-link' | ':checked' | ':default' | ':defined' | ':dir(rtl)' | ':dir(ltr)' | ':disabled' | ':empty' | ':enabled' | ':first' | ':first-child' | ':first-of-type' | ':fullscreen' | ':focus' | ':focus-visible' | ':focus-within' | ':hover' | ':indeterminate' | ':in-range' | ':invalid' | ':last-child' | ':last-of-type' | ':left' | ':link' | ':not()' | ':nth-child(even)' | ':nth-child(odd)' | ':nth-last-child(even)' | ':nth-last-child(odd)' | ':nth-of-type(even)' | ':nth-of-type(odd)' | ':nth-last-of-type(even)' | ':nth-last-of-type(odd)' | ':only-child' | ':only-of-type' | ':optional' | ':out-of-range' | ':placeholder-shown' | ':read-only' | ':read-write' | ':required' | ':right' | ':root' | ':scope' | ':target' | ':valid' | ':visited'; +} + +declare namespace $ { + type $mol_style_pseudo_element = '::after' | '::before' | '::cue' | '::first-letter' | '::first-line' | '::selection' | '::slotted' | '::backdrop' | '::placeholder' | '::marker' | '::spelling-error' | '::grammar-error' | '::-webkit-calendar-picker-indicator' | '::-webkit-color-swatch' | '::-webkit-color-swatch-wrapper' | '::-webkit-details-marker' | '::-webkit-file-upload-button' | '::-webkit-image-inner-element' | '::-webkit-inner-spin-button' | '::-webkit-input-placeholder' | '::-webkit-input-speech-button' | '::-webkit-keygen-select' | '::-webkit-media-controls-panel' | '::-webkit-media-controls-timeline-container' | '::-webkit-media-slider-container' | '::-webkit-meter-bar' | '::-webkit-meter-even-less-good-value' | '::-webkit-meter-optimum-value' | '::-webkit-meter-suboptimal-value' | '::-webkit-progress-bar' | '::-webkit-progress-value' | '::-webkit-resizer' | '::-webkit-resizer:window-inactive' | '::-webkit-scrollbar' | '::-webkit-scrollbar-button' | '::-webkit-scrollbar-button:disabled' | '::-webkit-scrollbar-button:double-button:horizontal:end:decrement' | '::-webkit-scrollbar-button:double-button:horizontal:end:increment' | '::-webkit-scrollbar-button:double-button:horizontal:end:increment:corner-present' | '::-webkit-scrollbar-button:double-button:horizontal:start:decrement' | '::-webkit-scrollbar-button:double-button:horizontal:start:increment' | '::-webkit-scrollbar-button:double-button:vertical:end:decrement' | '::-webkit-scrollbar-button:double-button:vertical:end:increment' | '::-webkit-scrollbar-button:double-button:vertical:end:increment:corner-present' | '::-webkit-scrollbar-button:double-button:vertical:start:decrement' | '::-webkit-scrollbar-button:double-button:vertical:start:increment' | '::-webkit-scrollbar-button:end' | '::-webkit-scrollbar-button:end:decrement' | '::-webkit-scrollbar-button:end:increment' | '::-webkit-scrollbar-button:horizontal' | '::-webkit-scrollbar-button:horizontal:decrement' | '::-webkit-scrollbar-button:horizontal:decrement:active' | '::-webkit-scrollbar-button:horizontal:decrement:hover' | '::-webkit-scrollbar-button:horizontal:decrement:window-inactive' | '::-webkit-scrollbar-button:horizontal:end' | '::-webkit-scrollbar-button:horizontal:end:decrement' | '::-webkit-scrollbar-button:horizontal:end:increment' | '::-webkit-scrollbar-button:horizontal:end:increment:corner-present' | '::-webkit-scrollbar-button:horizontal:increment' | '::-webkit-scrollbar-button:horizontal:increment:active' | '::-webkit-scrollbar-button:horizontal:increment:hover' | '::-webkit-scrollbar-button:horizontal:increment:window-inactive' | '::-webkit-scrollbar-button:horizontal:start' | '::-webkit-scrollbar-button:horizontal:start:decrement' | '::-webkit-scrollbar-button:horizontal:start:increment' | '::-webkit-scrollbar-button:start' | '::-webkit-scrollbar-button:start:decrement' | '::-webkit-scrollbar-button:start:increment' | '::-webkit-scrollbar-button:vertical' | '::-webkit-scrollbar-button:vertical:decrement' | '::-webkit-scrollbar-button:vertical:decrement:active' | '::-webkit-scrollbar-button:vertical:decrement:hover' | '::-webkit-scrollbar-button:vertical:decrement:window-inactive' | '::-webkit-scrollbar-button:vertical:end' | '::-webkit-scrollbar-button:vertical:end:decrement' | '::-webkit-scrollbar-button:vertical:end:increment' | '::-webkit-scrollbar-button:vertical:end:increment:corner-present' | '::-webkit-scrollbar-button:vertical:increment' | '::-webkit-scrollbar-button:vertical:increment:active' | '::-webkit-scrollbar-button:vertical:increment:hover' | '::-webkit-scrollbar-button:vertical:increment:window-inactive' | '::-webkit-scrollbar-button:vertical:start' | '::-webkit-scrollbar-button:vertical:start:decrement' | '::-webkit-scrollbar-button:vertical:start:increment' | '::-webkit-scrollbar-corner' | '::-webkit-scrollbar-corner:window-inactive' | '::-webkit-scrollbar-thumb' | '::-webkit-scrollbar-thumb:horizontal' | '::-webkit-scrollbar-thumb:horizontal:active' | '::-webkit-scrollbar-thumb:horizontal:hover' | '::-webkit-scrollbar-thumb:horizontal:window-inactive' | '::-webkit-scrollbar-thumb:vertical' | '::-webkit-scrollbar-thumb:vertical:active' | '::-webkit-scrollbar-thumb:vertical:hover' | '::-webkit-scrollbar-thumb:vertical:window-inactive' | '::-webkit-scrollbar-track' | '::-webkit-scrollbar-track-piece' | '::-webkit-scrollbar-track-piece:disabled' | '::-webkit-scrollbar-track-piece:end' | '::-webkit-scrollbar-track-piece:horizontal:decrement' | '::-webkit-scrollbar-track-piece:horizontal:decrement:active' | '::-webkit-scrollbar-track-piece:horizontal:decrement:hover' | '::-webkit-scrollbar-track-piece:horizontal:end' | '::-webkit-scrollbar-track-piece:horizontal:end:corner-present' | '::-webkit-scrollbar-track-piece:horizontal:end:double-button' | '::-webkit-scrollbar-track-piece:horizontal:end:no-button' | '::-webkit-scrollbar-track-piece:horizontal:end:no-button:corner-present' | '::-webkit-scrollbar-track-piece:horizontal:end:single-button' | '::-webkit-scrollbar-track-piece:horizontal:increment' | '::-webkit-scrollbar-track-piece:horizontal:increment:active' | '::-webkit-scrollbar-track-piece:horizontal:increment:hover' | '::-webkit-scrollbar-track-piece:horizontal:start' | '::-webkit-scrollbar-track-piece:horizontal:start:double-button' | '::-webkit-scrollbar-track-piece:horizontal:start:no-button' | '::-webkit-scrollbar-track-piece:horizontal:start:single-button' | '::-webkit-scrollbar-track-piece:start' | '::-webkit-scrollbar-track-piece:vertical:decrement' | '::-webkit-scrollbar-track-piece:vertical:decrement:active' | '::-webkit-scrollbar-track-piece:vertical:decrement:hover' | '::-webkit-scrollbar-track-piece:vertical:end' | '::-webkit-scrollbar-track-piece:vertical:end:corner-present' | '::-webkit-scrollbar-track-piece:vertical:end:double-button' | '::-webkit-scrollbar-track-piece:vertical:end:no-button' | '::-webkit-scrollbar-track-piece:vertical:end:no-button:corner-present' | '::-webkit-scrollbar-track-piece:vertical:end:single-button' | '::-webkit-scrollbar-track-piece:vertical:increment' | '::-webkit-scrollbar-track-piece:vertical:increment:active' | '::-webkit-scrollbar-track-piece:vertical:increment:hover' | '::-webkit-scrollbar-track-piece:vertical:start' | '::-webkit-scrollbar-track-piece:vertical:start:double-button' | '::-webkit-scrollbar-track-piece:vertical:start:no-button' | '::-webkit-scrollbar-track-piece:vertical:start:single-button' | '::-webkit-scrollbar-track:disabled' | '::-webkit-scrollbar-track:horizontal' | '::-webkit-scrollbar-track:horizontal:disabled' | '::-webkit-scrollbar-track:horizontal:disabled:corner-present' | '::-webkit-scrollbar-track:vertical:disabled' | '::-webkit-scrollbar-track:vertical:disabled:corner-present' | '::-webkit-scrollbar:horizontal' | '::-webkit-scrollbar:horizontal:corner-present' | '::-webkit-scrollbar:horizontal:window-inactive' | '::-webkit-scrollbar:vertical' | '::-webkit-scrollbar:vertical:corner-present' | '::-webkit-scrollbar:vertical:window-inactive' | '::-webkit-search-cancel-button' | '::-webkit-search-decoration' | '::-webkit-search-results-button' | '::-webkit-search-results-decoration' | '::-webkit-slider-container' | '::-webkit-slider-runnable-track' | '::-webkit-slider-thumb' | '::-webkit-slider-thumb:disabled' | '::-webkit-slider-thumb:hover' | '::-webkit-textfield-decoration-container' | '::-webkit-validation-bubble' | '::-webkit-validation-bubble-arrow' | '::-webkit-validation-bubble-arrow-clipper' | '::-webkit-validation-bubble-heading' | '::-webkit-validation-bubble-message' | '::-webkit-validation-bubble-text-block'; +} + +declare namespace $ { + type Descendant = $mol_style_guard, $mol_view>, Config>; + type Kids = { + [view in keyof Config]: view extends keyof $mol_view_all ? Descendant : $mol_type_error<'Unknown View'>; + }; + type Attrs = { + [name in keyof Config]: name extends keyof ReturnType ? { + [val in keyof Config[name]]: $mol_style_guard; + } : $mol_type_error<'Unknown attribute'>; + }; + type Medias = { + [query in keyof Config]: $mol_style_guard; + }; + export type $mol_style_guard = $mol_style_properties & { + [key in keyof Config]: key extends keyof $mol_style_properties ? unknown : key extends $mol_style_pseudo_class | $mol_style_pseudo_element ? $mol_style_guard : key extends '>' ? Kids : key extends '@' ? Attrs : key extends '@media' ? Medias : key extends keyof $mol_view_all ? Descendant : key extends keyof View ? View[key] extends (id?: any) => infer Sub ? Sub extends $mol_view ? $mol_style_guard : $mol_type_error<'Property returns non $mol_view', { + Returns: Sub; + }> : $mol_type_error<'Field is not a Property'> : $mol_type_error<'Unknown Property or View'>; + }; + export {}; +} + +declare namespace $ { + function $mol_style_sheet>(Component: new () => Component, config0: Config): string; +} + +declare namespace $ { + function $mol_style_define>(Component: new () => Component, config: Config): HTMLStyleElement | null; +} + +declare namespace $ { + class $mol_svg extends $mol_view { + dom_name(): string; + dom_name_space(): string; + font_size(): number; + font_family(): string; + style_size(): {}; + } +} + +declare namespace $ { + class $mol_after_timeout extends $mol_object2 { + delay: number; + task: () => void; + id: any; + constructor(delay: number, task: () => void); + destructor(): void; + } +} + +declare namespace $ { + class $mol_state_time extends $mol_object { + static task(precision: number, reset?: null): $mol_after_timeout | $mol_after_frame; + static now(precision: number): number; + } +} + +declare namespace $.$$ { + class $mol_svg extends $.$mol_svg { + computed_style(): CSSStyleDeclaration; + font_size(): number; + font_family(): any; + } +} + +declare namespace $ { + class $mol_svg_root extends $mol_svg { + dom_name(): string; + attr(): { + viewBox: string; + preserveAspectRatio: string; + }; + view_box(): string; + aspect(): string; + } +} + +declare namespace $ { +} + +declare namespace $ { + class $mol_svg_path extends $mol_svg { + dom_name(): string; + attr(): { + d: string; + }; + geometry(): string; + } +} + +declare namespace $ { + class $mol_icon extends $mol_svg_root { + view_box(): string; + minimal_width(): number; + minimal_height(): number; + sub(): readonly any[]; + path(): string; + Path(): $mol_svg_path; + } +} + +declare namespace $ { +} + +declare namespace $ { + class $mol_link extends $mol_view { + dom_name(): string; + attr(): { + href: string; + title: string; + target: string; + download: string; + mol_link_current: boolean; + }; + sub(): readonly $mol_view_content[]; + arg(): {}; + event(): { + click: (event?: any) => any; + }; + uri(): string; + hint(): string; + target(): string; + file_name(): string; + current(): boolean; + event_click(event?: any): any; + click(event?: any): any; + } +} + +declare namespace $ { + class $mol_state_arg extends $mol_object { + prefix: string; + static href(next?: string): string; + static href_normal(): string; + static href_absolute(): string; + static dict(next?: { + [key: string]: string | null; + }): { + [key: string]: string; + }; + static dict_cut(except: string[]): { + [key: string]: string; + }; + static value(key: string, next?: string | null): string | null; + static link(next: { + [key: string]: string; + }): string; + static prolog: string; + static separator: string; + static make_link(next: { + [key: string]: string | null; + }): string; + static encode(str: string): string; + constructor(prefix?: string); + value(key: string, next?: string): string | null; + sub(postfix: string): $mol_state_arg; + link(next: { + [key: string]: string; + }): string; + } +} + +declare namespace $ { +} + +declare namespace $.$$ { + class $mol_link extends $.$mol_link { + uri(): string; + uri_native(): URL; + current(): boolean; + file_name(): string; + minimal_height(): number; + target(): '_self' | '_blank' | '_top' | '_parent' | string; + } +} + +declare namespace $ { + class $mol_button_typed extends $mol_button { + minimal_height(): number; + minimal_width(): number; + } +} + +declare namespace $ { +} + +declare namespace $ { + class $mol_button_minor extends $mol_button_typed { + } +} + +declare namespace $ { +} + +declare namespace $ { + class $mol_check extends $mol_button_minor { + attr(): { + mol_check_checked: boolean; + "aria-checked": boolean; + role: string; + disabled: boolean; + tabindex: number; + title: string; + }; + sub(): readonly $mol_view_content[]; + checked(val?: any): boolean; + Icon(): any; + title(): string; + Title(): $mol_view; + label(): readonly any[]; + } +} + +declare namespace $ { +} + +declare namespace $.$$ { + class $mol_check extends $.$mol_check { + click(next?: Event): void; + sub(): readonly $mol_view_content[]; + label(): readonly any[]; + } +} + +declare namespace $ { + class $mol_scroll extends $mol_view { + scroll_top(val?: any): number; + scroll_left(val?: any): number; + field(): { + tabIndex: number; + }; + event(): { + scroll: (event?: any) => any; + }; + tabindex(): number; + event_scroll(event?: any): any; + } +} + +declare namespace $ { + class $mol_print extends $mol_object { + static before(): $mol_dom_listener; + static after(): $mol_dom_listener; + static active(next?: boolean): boolean; + } +} + +declare namespace $.$$ { +} + +declare namespace $.$$ { + class $mol_scroll extends $.$mol_scroll { + scroll_top(next?: number, cache?: 'cache'): number; + scroll_left(next?: number, cache?: 'cache'): number; + event_scroll(next?: Event): void; + minimal_height(): number; + minimal_width(): number; + } +} + +declare namespace $ { + class $mol_paragraph extends $mol_view { + line_height(): number; + letter_width(): number; + width_limit(): number; + sub(): readonly any[]; + } +} + +declare namespace $ { +} + +declare namespace $.$$ { + class $mol_paragraph extends $.$mol_paragraph { + maximal_width(): number; + width_limit(): number; + minimal_width(): number; + row_width(): number; + minimal_height(): number; + } +} + +declare namespace $ { + class $mol_list extends $mol_view { + render_visible_only(): boolean; + render_over(): number; + sub(): readonly $mol_view[]; + Empty(): $mol_view; + Gap_before(): $mol_view; + Gap_after(): $mol_view; + view_window(): readonly any[]; + rows(): readonly $mol_view[]; + gap_before(): number; + gap_after(): number; + } +} + +declare namespace $ { + function $mol_support_css_overflow_anchor(this: $): boolean; +} + +declare namespace $ { + function $mol_wire_probe(task: () => Value, next?: Value): Value | undefined; +} + +declare namespace $ { + let $mol_mem_cached: typeof $mol_wire_probe; +} + +declare namespace $ { +} + +declare namespace $.$$ { + class $mol_list extends $.$mol_list { + sub(): readonly $mol_view[]; + render_visible_only(): boolean; + view_window(next?: [number, number]): [number, number]; + gap_before(): number; + gap_after(): number; + sub_visible(): $mol_view[]; + minimal_height(): number; + force_render(path: Set<$mol_view>): void; + } +} + +declare namespace $ { + class $mol_bar extends $mol_view { + } +} + +declare namespace $ { +} + +declare namespace $ { + class $hyoo_todomvc extends $mol_scroll { + title(): string; + attr(): { + mol_theme: string; + }; + sub(): readonly any[]; + Title(): $$.$mol_paragraph; + head_complete_enabled(): boolean; + completed_all(next?: any): boolean; + Head_complete(): $$.$mol_check; + task_title_new(next?: any): string; + add(next?: any): any; + Add(): $$.$hyoo_todomvc_add; + Head_content(): readonly any[]; + Head(): $mol_view; + task_completed(id: any, next?: any): boolean; + task_title(id: any, next?: any): string; + task_drop(id: any, next?: any): any; + Task_row(id: any): $hyoo_todomvc_task_row; + task_rows(): readonly $mol_view[]; + List(): $$.$mol_list; + pending_message(): string; + Pending(): $$.$mol_paragraph; + Filter_all(): $$.$mol_link; + Filter_active(): $$.$mol_link; + Filter_completed(): $$.$mol_link; + filterOptions(): readonly any[]; + Filter(): $mol_bar; + sweep_enabled(): boolean; + sweep(next?: any): any; + sweep_label(): string; + Sweep(): $mol_button_minor; + foot_content(): readonly any[]; + Foot(): $mol_view; + panels(): readonly any[]; + Panel(): $$.$mol_list; + Page(): $$.$mol_list; + } + class $hyoo_todomvc_add extends $mol_string { + hint(): string; + event(): { + keydown: (next?: any) => any; + input: (event?: any) => any; + }; + done(next?: any): any; + press(next?: any): any; + } + class $hyoo_todomvc_task_row extends $mol_view { + minimal_height(): number; + attr(): { + hyoo_todomvc_task_row_completed: boolean; + }; + sub(): readonly any[]; + completed(next?: any): boolean; + Complete(): $$.$mol_check; + title_hint(): string; + title(next?: any): string; + Title(): $$.$mol_string; + drop(next?: any): any; + Drop(): $mol_button_typed; + } +} + +declare namespace $ { + class $mol_state_local extends $mol_object { + static 'native()': Pick; + static native(): Storage | { + getItem(key: string): any; + setItem(key: string, value: string): void; + removeItem(key: string): void; + }; + static changes(next?: StorageEvent): StorageEvent | undefined; + static value(key: string, next?: Value | null): Value | null; + prefix(): string; + value(key: string, next?: Value): Value | null; + } +} + +declare namespace $ { +} + +declare namespace $ { +} + +interface $hyoo_todomvc_task { + completed?: boolean; + title?: string; +} +declare namespace $.$$ { + class $hyoo_todomvc_add extends $.$hyoo_todomvc_add { + press(next: KeyboardEvent): any; + } + class $hyoo_todomvc extends $.$hyoo_todomvc { + task_ids(next?: number[]): number[]; + arg_completed(): string | null; + groups_completed(): { + [index: string]: number[]; + }; + task_ids_filtered(): number[]; + completed_all(next?: boolean): boolean; + head_complete_enabled(): boolean; + pending_message(): string; + new_id(): number; + add(next?: Event): void; + task_rows(): $hyoo_todomvc_task_row[]; + task(id: number, next?: $hyoo_todomvc_task | null): $hyoo_todomvc_task | null; + task_completed(id: number, next?: boolean): boolean; + task_title(id: number, next?: string): string; + task_drop(id: number, next?: Event): void; + sweep(): void; + panels(): $mol_view[]; + foot_visible(): boolean; + sweep_enabled(): boolean; + } +} + +export = $; \ No newline at end of file diff --git a/examples/mol/web.deps.json b/examples/mol/web.deps.json new file mode 100644 index 0000000000..b3f5797aa8 --- /dev/null +++ b/examples/mol/web.deps.json @@ -0,0 +1 @@ +{"files":["lang.lang.tree","LICENSE","mam.jam.js","mam.ts","package.json","README.md","sandbox.config.json","tsconfig.json","tsfmt.json","yarn.lock","hyoo/hyoo.meta.tree","hyoo/hyoo.ts","hyoo/LICENSE","mol/CNAME","mol/CODE_OF_CONDUCT.md","mol/CONTRIBUTING.md","mol/index.html","mol/LICENSE","mol/mol.meta.tree","mol/readme.md","mol/style/readme.md","mol/ambient/ambient.ts","mol/ambient/readme.md","mol/delegate/delegate.ts","mol/owning/owning.ts","mol/fail/fail.ts","mol/fail/hidden/hidden.ts","mol/type/README.md","mol/type/writable/writable.ts","mol/object2/object2.ts","mol/after/tick/tick.ts","mol/dom/context/context.ts","mol/dom/context/context.web.ts","mol/style/attach/attach.ts","mol/view/readme.md","mol/view/view.lang.tree","mol/decor/decor.ts","mol/style/unit/unit.ts","mol/style/func/func.ts","mol/theme/-css/theme.css.ts","mol/theme/theme.css","mol/theme/theme.ts","mol/object/object.ts","mol/object/readme.md","mol/wire/cursor/cursor.ts","mol/wire/pub/pub.ts","mol/wire/sub/sub.ts","mol/wire/README.md","mol/wire/wire.ts","mol/dev/format/format.ts","mol/wire/pub/sub/README.md","mol/wire/pub/sub/sub.ts","mol/after/frame/frame.web.ts","mol/wire/fiber/fiber.ts","mol/wire/fiber/readme.md","mol/guid/guid.ts","mol/key/key.ts","mol/key/README.md","mol/compare/deep/deep.ts","mol/compare/deep/README.md","mol/wire/task/task.ts","mol/wire/method/method.ts","mol/wire/method/README.md","mol/wire/atom/atom.ts","mol/wire/mem/mem.ts","mol/wire/mem/README.md","mol/mem/mem.ts","mol/window/window.web.ts","mol/fail/catch/catch.ts","mol/fail/log/log.ts","mol/view/selection/selection.ts","mol/maybe/maybe.ts","mol/view/selection/selection.web.ts","mol/wrapper/wrapper.ts","mol/memo/memo.ts","mol/dom/qname/qname.ts","mol/wire/watch/watch.ts","mol/const/const.ts","mol/const/readme.md","mol/dom/render/attributes/attributes.ts","mol/wire/async/async.ts","mol/wire/async/README.md","mol/dom/render/styles/styles.ts","mol/dom/render/children/children.ts","mol/dom/render/fields/fields.ts","mol/func/name/name.ts","mol/type/keys/extract/extract.ts","mol/type/pick/pick.ts","mol/view/view/view.ts","mol/view/view/-css/view.css.ts","mol/view/view/view.css","mol/view/view/view.web.ts","mol/plugin/plugin.ts","mol/hotkey/-view.tree/hotkey.view.tree.ts","mol/hotkey/hotkey.view.tree","mol/keyboard/code.ts","mol/hotkey/-view.tree/hotkey.view.tree.locale=en.json","mol/hotkey/hotkey.view.ts","mol/hotkey/readme.md","mol/string/-view.tree/string.view.tree.ts","mol/string/string.view.tree","mol/gap/-css/gap.css.ts","mol/gap/gap.css","mol/gap/gap.ts","mol/dom/listener/listener.ts","mol/string/readme.md","mol/string/-css/string.view.css.ts","mol/string/-view.tree/string.view.tree.locale=en.json","mol/string/string.view.css","mol/string/string.view.ts","mol/speck/-view.tree/speck.view.tree.ts","mol/speck/speck.view.tree","mol/speck/readme.md","mol/speck/-css/speck.view.css.ts","mol/speck/-view.tree/speck.view.tree.locale=en.json","mol/speck/speck.view.css","mol/button/-view.tree/button.view.tree.ts","mol/button/button.view.tree","mol/button/-css/button.view.css.ts","mol/button/-view.tree/button.view.tree.locale=en.json","mol/button/button.view.css","mol/button/button.view.ts","mol/button/readme.md","mol/type/result/result.ts","mol/type/error/error.ts","mol/type/override/override.ts","mol/style/properties/properties.ts","mol/style/pseudo/class.ts","mol/style/pseudo/element.ts","mol/style/guard/guard.ts","mol/style/sheet/sheet.ts","mol/style/define/define.ts","mol/svg/-view.tree/svg.view.tree.ts","mol/svg/svg.view.tree","mol/after/timeout/readme.md","mol/after/timeout/timeout.ts","mol/state/time/readme.md","mol/state/time/time.ts","mol/svg/readme.md","mol/svg/-view.tree/svg.view.tree.locale=en.json","mol/svg/svg.view.ts","mol/svg/root/-view.tree/root.view.tree.ts","mol/svg/root/root.view.tree","mol/svg/root/-css/root.view.css.ts","mol/svg/root/-view.tree/root.view.tree.locale=en.json","mol/svg/root/root.view.css","mol/svg/path/-view.tree/path.view.tree.ts","mol/svg/path/-view.tree/path.view.tree.locale=en.json","mol/svg/path/path.view.tree","mol/icon/-view.tree/icon.view.tree.ts","mol/icon/icon.view.tree","mol/icon/-css/icon.view.css.ts","mol/icon/-view.tree/icon.view.tree.locale=en.json","mol/icon/icon.view.css","mol/icon/LICENSE","mol/icon/README.md","mol/link/-view.tree/link.view.tree.ts","mol/link/link.view.tree","mol/state/arg/arg.web.ts","mol/state/arg/readme.md","mol/link/link.view.css.ts","mol/link/-view.tree/link.view.tree.locale=en.json","mol/link/link.view.ts","mol/link/readme.md","mol/button/typed/-view.tree/typed.view.tree.ts","mol/button/typed/typed.view.tree","mol/button/typed/-css/typed.view.css.ts","mol/button/typed/-view.tree/typed.view.tree.locale=en.json","mol/button/typed/typed.view.css","mol/button/minor/-view.tree/minor.view.tree.ts","mol/button/minor/minor.view.tree","mol/button/minor/-css/minor.view.css.ts","mol/button/minor/-view.tree/minor.view.tree.locale=en.json","mol/button/minor/minor.view.css","mol/check/-view.tree/check.view.tree.ts","mol/check/check.view.tree","mol/check/-css/check.css.ts","mol/check/check.css","mol/check/-view.tree/check.view.tree.locale=en.json","mol/check/check.view.ts","mol/check/readme.md","mol/scroll/-view.tree/scroll.view.tree.ts","mol/scroll/scroll.view.tree","mol/print/print.ts","mol/scroll/readme.md","mol/scroll/scroll.view.css.ts","mol/scroll/-view.tree/scroll.view.tree.locale=en.json","mol/scroll/scroll.view.ts","mol/paragraph/-view.tree/paragraph.view.tree.ts","mol/paragraph/paragraph.view.tree","mol/paragraph/-css/paragraph.view.css.ts","mol/paragraph/-view.tree/paragraph.view.tree.locale=en.json","mol/paragraph/paragraph.view.css","mol/paragraph/paragraph.view.ts","mol/list/-view.tree/list.view.tree.ts","mol/list/list.view.tree","mol/support/css/css.ts","mol/wire/probe/probe.ts","mol/mem/cached/cached.ts","mol/list/-css/list.view.css.ts","mol/list/-view.tree/list.view.tree.locale=en.json","mol/list/list.view.css","mol/list/list.view.ts","mol/list/readme.md","mol/bar/-view.tree/bar.view.tree.ts","mol/bar/bar.view.tree","mol/bar/-css/bar.view.css.ts","mol/bar/-view.tree/bar.view.tree.locale=en.json","mol/bar/bar.view.css","mol/bar/readme.md","hyoo/todomvc/-view.tree/todomvc.view.tree.ts","hyoo/todomvc/todomvc.view.tree","mol/state/local/local.ts","mol/state/local/local.web.ts","hyoo/todomvc/CNAME","hyoo/todomvc/index.html","hyoo/todomvc/LICENSE","hyoo/todomvc/-css/todomvc.css.ts","hyoo/todomvc/todomvc.css","hyoo/todomvc/todomvc.meta.tree","hyoo/todomvc/-view.tree/todomvc.view.tree.locale=en.json","hyoo/todomvc/todomvc.view.ts","hyoo/todomvc/todomvc_active.svg","hyoo/todomvc/todomvc_completed.svg"],"mods":{},"deps_in":{"hyoo":{"hyoo/todomvc":-9007199254740991},"":{"hyoo":-9007199254740991,"mol":-9007199254740991},"mol/style/attach":{"hyoo/todomvc":0,"mol/string":0,"mol/view/view":0,"mol/theme":0,"mol/gap":0,"mol/button":0,"mol/speck":0,"mol/style/define":-2,"mol/icon":0,"mol/svg/root":0,"mol/check":0,"mol/button/minor":0,"mol/button/typed":0,"mol/paragraph":0,"mol/list":0,"mol/bar":0},"mol/style":{"mol/style/attach":-9007199254740991,"mol/style/func":-9007199254740991,"mol/style/unit":-9007199254740991,"mol/style/define":-9007199254740991,"mol/style/guard":-9007199254740991,"mol/style/properties":-9007199254740991,"mol/style/pseudo":-9007199254740991,"mol/style/sheet":-9007199254740991},"mol":{"mol/style":-9007199254740991,"mol/after":-9007199254740991,"mol/object2":-9007199254740991,"mol/ambient":-9007199254740991,"mol/owning":-9007199254740991,"mol/delegate":-9007199254740991,"mol/fail":-9007199254740991,"mol/type":-9007199254740991,"mol/dom":-9007199254740991,"mol/string":-9007199254740991,"mol/view":-9007199254740991,"mol/theme":-9007199254740991,"mol/decor":-9007199254740991,"mol/window":-9007199254740991,"mol/object":-9007199254740991,"mol/mem":-9007199254740991,"mol/wire":-9007199254740991,"mol/dev":-9007199254740991,"mol/key":-9007199254740991,"mol/guid":-9007199254740991,"mol/compare":-9007199254740991,"mol/maybe":-9007199254740991,"mol/memo":-9007199254740991,"mol/wrapper":-9007199254740991,"mol/const":-9007199254740991,"mol/plugin":-9007199254740991,"mol/func":-9007199254740991,"mol/hotkey":-9007199254740991,"mol/keyboard":-9007199254740991,"mol/gap":-9007199254740991,"mol/button":-9007199254740991,"mol/speck":-9007199254740991,"mol/link":-9007199254740991,"mol/icon":-9007199254740991,"mol/svg":-9007199254740991,"mol/state":-9007199254740991,"mol/check":-9007199254740991,"mol/scroll":-9007199254740991,"mol/print":-9007199254740991,"mol/paragraph":-9007199254740991,"mol/list":-9007199254740991,"mol/support":-9007199254740991,"mol/bar":-9007199254740991},"mol/after/tick":{"mol/style/attach":-1,"mol/view/selection":-3,"mol/view/selection/selection.ts":-3},"mol/after":{"mol/after/tick":-9007199254740991,"mol/after/frame":-9007199254740991,"mol/after/timeout":-9007199254740991},"mol/object2":{"mol/after/tick":-1,"mol/object":-1,"mol/after/frame":-1,"mol/wrapper":-1,"mol/after/timeout":-1},"mol/ambient":{"mol/object2":-2,"mol/style/sheet":-2},"mol/owning":{"mol/object2":-3,"mol/wire/atom":-3,"mol/plugin":-3,"mol/view/view":-3,"mol/view/view/view.ts":-3},"mol/delegate":{"mol/owning":-3},"mol/fail/hidden":{"mol/object2":-3,"mol/wire/fiber":-4,"mol/view/view":-4,"mol/view/view/view.ts":-4,"mol/button":-4},"mol/fail":{"mol/fail/hidden":-9007199254740991,"mol/wire/pub":-4,"mol/wire/pub/sub":-3,"mol/fail/log":-9007199254740991,"mol/fail/catch":-9007199254740991,"mol/wire/watch":-3},"mol/type/writable":{"mol/object2":-3},"mol/type":{"mol/type/writable":-9007199254740991,"mol/type/pick":-9007199254740991,"mol/type/keys":-9007199254740991,"mol/type/result":-9007199254740991,"mol/type/error":-9007199254740991,"mol/type/override":-9007199254740991},"mol/dom/context":{"mol/style/attach":-2,"mol/view/view":-1,"mol/view/selection":-1,"mol/view/selection/selection.ts":-3,"mol/dom/render/children":-3,"mol/view/view/view.ts":-3,"mol/string":-4,"mol/svg":-3,"mol/state/arg":-2,"mol/link":-3,"mol/print":-3,"mol/support/css":-2,"mol/state/local":-4,"mol/state/local/local.ts":-4},"mol/dom":{"mol/dom/context":-9007199254740991,"mol/dom/qname":-9007199254740991,"mol/dom/render":-9007199254740991,"mol/dom/listener":-9007199254740991},"mol/dom/context/context.ts":{"mol/dom/context":0},"mol/string":{"hyoo/todomvc":0,"hyoo/todomvc/-view.tree/todomvc.view.tree.ts":-1},"mol/string/string.view.tree":{"mol/string":0},"mol/string/-view.tree/string.view.tree.ts":{"mol/string/string.view.tree":0,"mol/string":0},"mol/view/view":{"mol/string/-view.tree/string.view.tree.ts":-1,"mol/plugin":-1,"mol/string":-1,"mol/button/-view.tree/button.view.tree.ts":-1,"mol/speck/-view.tree/speck.view.tree.ts":-1,"mol/speck":-1,"mol/button":-1,"mol/style/define":-2,"mol/style/guard":-1,"mol/style/sheet":-2,"mol/svg":-1,"mol/svg/-view.tree/svg.view.tree.ts":-1,"mol/link":-1,"mol/link/-view.tree/link.view.tree.ts":-1,"mol/check":-2.25,"mol/check/-view.tree/check.view.tree.ts":-2.25,"mol/scroll":-1,"mol/scroll/-view.tree/scroll.view.tree.ts":-1,"mol/paragraph/-view.tree/paragraph.view.tree.ts":-1,"mol/paragraph":-1,"hyoo/todomvc":-1,"mol/list/-view.tree/list.view.tree.ts":-1,"mol/list":-1,"mol/bar/-view.tree/bar.view.tree.ts":-1,"mol/bar":-1,"hyoo/todomvc/-view.tree/todomvc.view.tree.ts":-1},"mol/view":{"mol/view/view":0,"mol/view/selection":-9007199254740991,"mol/view/view/view.ts":-1,"mol/button/-view.tree/button.view.tree.ts":-2.25,"mol/button":-2.25,"mol/style/guard":-1,"mol/link":-2.25,"mol/link/-view.tree/link.view.tree.ts":-2.25,"mol/check":-2.25,"mol/check/-view.tree/check.view.tree.ts":-2.25},"mol/theme":{"mol/view/view":-1,"mol/string":-1,"mol/speck/-view.tree/speck.view.tree.ts":-2.25,"mol/speck":-2.25,"mol/link":-2,"mol/icon":-1,"mol/button/typed":-1,"mol/button/minor":-1,"hyoo/todomvc":-1,"mol/scroll":-3,"hyoo/todomvc/-view.tree/todomvc.view.tree.ts":-2.25},"mol/style/func":{"mol/theme":-1,"mol/gap":-1,"mol/link":-1,"mol/style/properties":-1},"mol/style/unit":{"mol/style/func":-1,"mol/link":-1,"mol/style/properties":-1,"mol/scroll":-1},"mol/decor":{"mol/style/unit":-1,"mol/style/func":-1},"mol/window":{"mol/view/view":-2,"mol/view/view/view.ts":-2,"mol/paragraph":-3,"mol/list":-3},"mol/object":{"mol/window":-1,"mol/view/view":-1,"mol/view/selection":-1,"mol/view/selection/selection.ts":-1,"mol/view/view/view.ts":-1,"mol/dom/listener":-1,"mol/state/time":-1,"mol/state/arg":-1,"mol/print":-1,"mol/state/local":-1,"mol/state/local/local.ts":-1},"mol/mem":{"mol/window":-2,"mol/view/view":-2,"mol/view/selection":-2,"mol/view/selection/selection.ts":-2,"mol/plugin":-2,"mol/view/view/view.ts":-2,"mol/string/-view.tree/string.view.tree.ts":-2,"mol/hotkey":-2,"mol/hotkey/-view.tree/hotkey.view.tree.ts":-2,"mol/string":-2,"mol/button/-view.tree/button.view.tree.ts":-2,"mol/button":-2,"mol/svg":-2,"mol/state/time":-2,"mol/icon/-view.tree/icon.view.tree.ts":-2,"mol/icon":-2,"mol/link":-2,"mol/link/-view.tree/link.view.tree.ts":-2,"mol/state/arg":-2,"mol/check":-2,"mol/check/-view.tree/check.view.tree.ts":-2,"mol/scroll":-2,"mol/scroll/-view.tree/scroll.view.tree.ts":-2,"mol/print":-2,"mol/paragraph":-2,"hyoo/todomvc":-2,"mol/list/-view.tree/list.view.tree.ts":-2,"mol/list":-2,"mol/mem/cached":-9007199254740991,"hyoo/todomvc/-view.tree/todomvc.view.tree.ts":-2,"mol/state/local":-2,"mol/state/local/local.ts":-2},"mol/wire/mem":{"mol/mem":-1},"mol/wire":{"mol/wire/mem":-5,"mol/wire/atom":-9007199254740991,"mol/wire/fiber":-9007199254740991,"mol/wire/pub/sub":-3,"mol/wire/method":-9007199254740991,"mol/wire/task":-4,"mol/wire/watch":-2,"mol/wire/async":-9007199254740991,"mol/wire/probe":-9007199254740991},"mol/wire/sub":{"mol/wire":-1,"mol/wire/pub/sub":-1},"mol/wire/pub":{"mol/wire/sub":-1,"mol/wire/pub/sub":-1,"mol/wire/fiber":-5},"mol/wire/cursor":{"mol/wire/pub":-2,"mol/wire/sub":-2,"mol/wire/pub/sub":-2,"mol/wire/fiber":-2,"mol/wire/atom":-3,"mol/wire/task":-3},"mol/wire/atom":{"mol/wire/mem":-3,"mol/wire/watch":-2},"mol/wire/fiber":{"mol/wire/atom":-1,"mol/wire/task":-1,"mol/wire/mem":-5,"mol/wire/async":-4,"mol/plugin":-3,"mol/view/view":-3,"mol/view/view/view.ts":-3,"mol/wire/probe":-2},"mol/wire/pub/sub":{"mol/wire/fiber":-1},"mol/dev/format":{"mol/wire/pub/sub":-2,"mol/wire/fiber":-2,"mol/view/view":-2,"mol/view/view/view.ts":-2},"mol/dev":{"mol/dev/format":-9007199254740991},"mol/after/frame":{"mol/wire/fiber":-2,"mol/wire/atom":-3,"mol/state/time":-2,"mol/state/arg":-4},"mol/key":{"mol/wire/atom":-5},"mol/guid":{"mol/key":-3},"mol/wire/method":{"mol/wire/atom":-2},"mol/wire/task":{"mol/wire/method":-2,"mol/wire/mem":-5,"mol/wire/async":-4},"mol/compare/deep":{"mol/wire/task":-5,"mol/wire/atom":-5},"mol/compare":{"mol/compare/deep":-9007199254740991},"mol/fail/log":{"mol/view/view":-4,"mol/view/view/view.ts":-4,"mol/list":-5},"mol/fail/catch":{"mol/fail/log":-2},"mol/view/selection":{"mol/view/view":-3,"mol/view/view/view.ts":-3},"mol/view/selection/selection.ts":{"mol/view/selection":0},"mol/maybe":{"mol/view/selection":-4,"mol/check":-4},"mol/memo":{"mol/view/view":-2,"mol/view/view/view.ts":-2},"mol/wrapper":{"mol/memo":-1},"mol/dom/qname":{"mol/view/view":-3,"mol/view/view/view.ts":-3,"mol/style/sheet":-2},"mol/wire/watch":{"mol/view/view":-3,"mol/view/view/view.ts":-3},"mol/const":{"mol/view/view":-3,"mol/view/view/view.ts":-3},"mol/dom/render/attributes":{"mol/view/view":-3,"mol/plugin":-3,"mol/view/view/view.ts":-3},"mol/dom/render":{"mol/dom/render/attributes":-9007199254740991,"mol/dom/render/styles":-9007199254740991,"mol/dom/render/children":-9007199254740991,"mol/dom/render/fields":-9007199254740991},"mol/wire/async":{"mol/view/view":-3,"mol/plugin":-3,"mol/view/view/view.ts":-3},"mol/plugin":{"mol/hotkey":-1,"mol/hotkey/-view.tree/hotkey.view.tree.ts":-1,"mol/string/-view.tree/string.view.tree.ts":-6},"mol/dom/render/styles":{"mol/view/view":-3,"mol/view/view/view.ts":-3},"mol/dom/render/children":{"mol/view/view":-3,"mol/view/view/view.ts":-3},"mol/dom/render/fields":{"mol/view/view":-3,"mol/view/view/view.ts":-3},"mol/func/name":{"mol/view/view":-4,"mol/view/view/view.ts":-4,"mol/style/sheet":-2},"mol/func":{"mol/func/name":-9007199254740991},"mol/type/pick":{"mol/view/view":-1,"mol/view/view/view.ts":-1},"mol/type/keys/extract":{"mol/type/pick":-3},"mol/type/keys":{"mol/type/keys/extract":-9007199254740991},"mol/view/view/view.ts":{"mol/view/view":0},"mol/hotkey":{"mol/string/-view.tree/string.view.tree.ts":-2.25,"mol/string":-2.25},"mol/hotkey/-view.tree/hotkey.view.tree.ts":{"mol/hotkey":0,"mol/hotkey/hotkey.view.tree":0},"mol/hotkey/hotkey.view.tree":{"mol/hotkey":0},"mol/keyboard":{"mol/hotkey":-3,"mol/button":-3,"hyoo/todomvc":-4},"mol/gap":{"mol/string":-1,"mol/button":-1,"mol/link":-2,"mol/check":-1,"mol/button/typed":-1,"mol/scroll":-4,"mol/bar":-1},"mol/dom/listener":{"mol/string":-3,"mol/print":-3},"mol/button":{"hyoo/todomvc":0,"mol/button/minor":-9007199254740991,"mol/button/typed":-1,"mol/button/typed/-view.tree/typed.view.tree.ts":-1},"mol/button/button.view.tree":{"mol/button":0},"mol/button/-view.tree/button.view.tree.ts":{"mol/button/button.view.tree":0,"mol/button":0},"mol/speck":{"mol/button/-view.tree/button.view.tree.ts":-2.25,"mol/button":-2.25},"mol/speck/speck.view.tree":{"mol/speck":0},"mol/speck/-view.tree/speck.view.tree.ts":{"mol/speck/speck.view.tree":0,"mol/speck":0},"mol/link":{"hyoo/todomvc":0,"hyoo/todomvc/-view.tree/todomvc.view.tree.ts":-2.25},"mol/style/define":{"mol/link":-1,"mol/scroll":-1},"mol/style/guard":{"mol/style/define":-2,"mol/style/sheet":-2},"mol/type/result":{"mol/style/guard":-2},"mol/type/error":{"mol/style/guard":-2},"mol/style/properties":{"mol/style/guard":-1},"mol/type/override":{"mol/style/properties":-1},"mol/style/pseudo":{"mol/style/guard":-2},"mol/style/sheet":{"mol/style/define":-3},"mol/icon":{"mol/link":-3,"mol/button/typed":0},"mol/icon/icon.view.tree":{"mol/icon":0},"mol/icon/-view.tree/icon.view.tree.ts":{"mol/icon/icon.view.tree":0,"mol/icon":0},"mol/svg/root":{"mol/icon/-view.tree/icon.view.tree.ts":-1,"mol/icon":-1},"mol/svg":{"mol/svg/root":-1,"mol/svg/root/-view.tree/root.view.tree.ts":-1,"mol/svg/path":-1,"mol/svg/path/-view.tree/path.view.tree.ts":-1},"mol/svg/-view.tree/svg.view.tree.ts":{"mol/svg":0,"mol/svg/svg.view.tree":0},"mol/svg/svg.view.tree":{"mol/svg":0},"mol/state/time":{"mol/svg":-3},"mol/state":{"mol/state/time":-9007199254740991,"mol/state/arg":-9007199254740991,"mol/state/local":-9007199254740991},"mol/after/timeout":{"mol/state/time":-2},"mol/svg/root/root.view.tree":{"mol/svg/root":0},"mol/svg/root/-view.tree/root.view.tree.ts":{"mol/svg/root/root.view.tree":0,"mol/svg/root":0},"mol/svg/path":{"mol/icon/-view.tree/icon.view.tree.ts":-2.25,"mol/icon":-2.25},"mol/svg/path/-view.tree/path.view.tree.ts":{"mol/svg/path":0},"mol/link/-view.tree/link.view.tree.ts":{"mol/link":0,"mol/link/link.view.tree":0},"mol/link/link.view.tree":{"mol/link":0},"mol/state/arg":{"mol/link":-3,"hyoo/todomvc":-3},"mol/check":{"hyoo/todomvc":0,"hyoo/todomvc/-view.tree/todomvc.view.tree.ts":-2.25},"mol/button/minor":{"mol/check":-1,"mol/check/-view.tree/check.view.tree.ts":-1,"hyoo/todomvc":-2.25,"hyoo/todomvc/-view.tree/todomvc.view.tree.ts":-2.25},"mol/button/minor/minor.view.tree":{"mol/button/minor":0},"mol/button/minor/-view.tree/minor.view.tree.ts":{"mol/button/minor/minor.view.tree":0,"mol/button/minor":0},"mol/button/typed":{"mol/button/minor/-view.tree/minor.view.tree.ts":-1,"mol/button/minor":-1,"hyoo/todomvc":-2.25,"hyoo/todomvc/-view.tree/todomvc.view.tree.ts":-2.25},"mol/button/typed/typed.view.tree":{"mol/button/typed":0},"mol/button/typed/-view.tree/typed.view.tree.ts":{"mol/button/typed/typed.view.tree":0,"mol/button/typed":0},"mol/check/-view.tree/check.view.tree.ts":{"mol/check":0,"mol/check/check.view.tree":0},"mol/check/check.view.tree":{"mol/check":0},"mol/scroll":{"hyoo/todomvc":-1,"hyoo/todomvc/-view.tree/todomvc.view.tree.ts":-1},"mol/scroll/-view.tree/scroll.view.tree.ts":{"mol/scroll":0,"mol/scroll/scroll.view.tree":0},"mol/scroll/scroll.view.tree":{"mol/scroll":0},"mol/print":{"mol/scroll":-3,"mol/list":-3},"mol/paragraph":{"hyoo/todomvc":-2.25,"hyoo/todomvc/-view.tree/todomvc.view.tree.ts":-2.25},"mol/paragraph/paragraph.view.tree":{"mol/paragraph":0},"mol/paragraph/-view.tree/paragraph.view.tree.ts":{"mol/paragraph/paragraph.view.tree":0,"mol/paragraph":0},"mol/list":{"hyoo/todomvc":-2.25,"hyoo/todomvc/-view.tree/todomvc.view.tree.ts":-2.25},"mol/list/list.view.tree":{"mol/list":0},"mol/list/-view.tree/list.view.tree.ts":{"mol/list/list.view.tree":0,"mol/list":0},"mol/support/css":{"mol/list":-3},"mol/support":{"mol/support/css":-9007199254740991},"mol/mem/cached":{"mol/list":-3},"mol/wire/probe":{"mol/mem/cached":-1},"mol/bar":{"hyoo/todomvc":-2.25,"hyoo/todomvc/-view.tree/todomvc.view.tree.ts":-2.25},"mol/bar/bar.view.tree":{"mol/bar":0},"mol/bar/-view.tree/bar.view.tree.ts":{"mol/bar/bar.view.tree":0,"mol/bar":0},"hyoo/todomvc/-view.tree/todomvc.view.tree.ts":{"hyoo/todomvc":0,"hyoo/todomvc/todomvc.view.tree":0},"hyoo/todomvc":{},"hyoo/todomvc/todomvc.view.tree":{"hyoo/todomvc":0},"mol/state/local":{"hyoo/todomvc":-3},"mol/state/local/local.ts":{"mol/state/local":0}},"deps_out":{"hyoo/todomvc":{"hyoo":-9007199254740991,"mol/style/attach":0,"mol/string":0,"mol/button":0,"mol/link":0,"mol/check":0,"mol/theme":-1,"mol/scroll":-1,"mol/paragraph":-2.25,"mol/mem":-2,"mol/view/view":-1,"mol/list":-2.25,"mol/bar":-2.25,"mol/button/minor":-2.25,"mol/button/typed":-2.25,"hyoo/todomvc/-view.tree/todomvc.view.tree.ts":0,"hyoo/todomvc/todomvc.view.tree":0,"mol/keyboard":-4,"mol/state/local":-3,"mol/state/arg":-3},"hyoo":{"":-9007199254740991},"mol/style/attach":{"mol/style":-9007199254740991,"mol/after/tick":-1,"mol/dom/context":-2},"mol/style":{"mol":-9007199254740991},"mol":{"":-9007199254740991},"mol/after/tick":{"mol/after":-9007199254740991,"mol/object2":-1},"mol/after":{"mol":-9007199254740991},"mol/object2":{"mol":-9007199254740991,"mol/ambient":-2,"mol/owning":-3,"mol/fail/hidden":-3,"mol/type/writable":-3},"mol/ambient":{"mol":-9007199254740991},"mol/owning":{"mol":-9007199254740991,"mol/delegate":-3},"mol/delegate":{"mol":-9007199254740991},"mol/fail/hidden":{"mol/fail":-9007199254740991},"mol/fail":{"mol":-9007199254740991},"mol/type/writable":{"mol/type":-9007199254740991},"mol/type":{"mol":-9007199254740991},"mol/dom/context":{"mol/dom":-9007199254740991,"mol/dom/context/context.ts":0},"mol/dom":{"mol":-9007199254740991},"mol/dom/context/context.ts":{},"mol/string":{"mol":-9007199254740991,"mol/style/attach":0,"mol/string/string.view.tree":0,"mol/gap":-1,"mol/theme":-1,"mol/view/view":-1,"mol/mem":-2,"mol/hotkey":-2.25,"mol/string/-view.tree/string.view.tree.ts":0,"mol/dom/listener":-3,"mol/dom/context":-4},"mol/string/string.view.tree":{"mol/string/-view.tree/string.view.tree.ts":0},"mol/string/-view.tree/string.view.tree.ts":{"mol/view/view":-1,"mol/mem":-2,"mol/hotkey":-2.25,"mol/plugin":-6},"mol/view/view":{"mol/view":0,"mol/style/attach":0,"mol/theme":-1,"mol/window":-2,"mol/object":-1,"mol/mem":-2,"mol/fail/log":-4,"mol/dom/context":-1,"mol/view/selection":-3,"mol/memo":-2,"mol/dom/qname":-3,"mol/wire/watch":-3,"mol/const":-3,"mol/dom/render/attributes":-3,"mol/wire/async":-3,"mol/dom/render/styles":-3,"mol/dom/render/children":-3,"mol/dom/render/fields":-3,"mol/owning":-3,"mol/wire/fiber":-3,"mol/func/name":-4,"mol/dev/format":-2,"mol/fail/hidden":-4,"mol/type/pick":-1,"mol/view/view/view.ts":0},"mol/view":{"mol":-9007199254740991},"mol/theme":{"mol":-9007199254740991,"mol/style/attach":0,"mol/style/func":-1},"mol/style/func":{"mol/style":-9007199254740991,"mol/style/unit":-1,"mol/decor":-1},"mol/style/unit":{"mol/style":-9007199254740991,"mol/decor":-1},"mol/decor":{"mol":-9007199254740991},"mol/window":{"mol":-9007199254740991,"mol/object":-1,"mol/mem":-2},"mol/object":{"mol":-9007199254740991,"mol/object2":-1},"mol/mem":{"mol":-9007199254740991,"mol/wire/mem":-1},"mol/wire/mem":{"mol/wire":-5,"mol/wire/atom":-3,"mol/wire/fiber":-5,"mol/wire/task":-5},"mol/wire":{"mol":-9007199254740991,"mol/wire/sub":-1},"mol/wire/sub":{"mol/wire/pub":-1,"mol/wire/cursor":-2},"mol/wire/pub":{"mol/fail":-4,"mol/wire/cursor":-2},"mol/wire/cursor":{},"mol/wire/atom":{"mol/wire":-9007199254740991,"mol/wire/fiber":-1,"mol/key":-5,"mol/after/frame":-3,"mol/wire/cursor":-3,"mol/wire/method":-2,"mol/owning":-3,"mol/compare/deep":-5},"mol/wire/fiber":{"mol/wire":-9007199254740991,"mol/wire/pub/sub":-1,"mol/after/frame":-2,"mol/wire/cursor":-2,"mol/dev/format":-2,"mol/wire/pub":-5,"mol/fail/hidden":-4},"mol/wire/pub/sub":{"mol/wire/pub":-1,"mol/wire/sub":-1,"mol/wire/cursor":-2,"mol/wire":-3,"mol/fail":-3,"mol/dev/format":-2},"mol/dev/format":{"mol/dev":-9007199254740991},"mol/dev":{"mol":-9007199254740991},"mol/after/frame":{"mol/after":-9007199254740991,"mol/object2":-1},"mol/key":{"mol":-9007199254740991,"mol/guid":-3},"mol/guid":{"mol":-9007199254740991},"mol/wire/method":{"mol/wire":-9007199254740991,"mol/wire/task":-2},"mol/wire/task":{"mol/wire":-4,"mol/wire/fiber":-1,"mol/compare/deep":-5,"mol/wire/cursor":-3},"mol/compare/deep":{"mol/compare":-9007199254740991},"mol/compare":{"mol":-9007199254740991},"mol/fail/log":{"mol/fail":-9007199254740991,"mol/fail/catch":-2},"mol/fail/catch":{"mol/fail":-9007199254740991},"mol/view/selection":{"mol/view":-9007199254740991,"mol/object":-1,"mol/mem":-2,"mol/dom/context":-1,"mol/after/tick":-3,"mol/view/selection/selection.ts":0,"mol/maybe":-4},"mol/view/selection/selection.ts":{"mol/object":-1,"mol/mem":-2,"mol/dom/context":-3,"mol/after/tick":-3},"mol/maybe":{"mol":-9007199254740991},"mol/memo":{"mol":-9007199254740991,"mol/wrapper":-1},"mol/wrapper":{"mol":-9007199254740991,"mol/object2":-1},"mol/dom/qname":{"mol/dom":-9007199254740991},"mol/wire/watch":{"mol/wire":-2,"mol/wire/atom":-2,"mol/fail":-3},"mol/const":{"mol":-9007199254740991},"mol/dom/render/attributes":{"mol/dom/render":-9007199254740991},"mol/dom/render":{"mol/dom":-9007199254740991},"mol/wire/async":{"mol/wire":-9007199254740991,"mol/wire/fiber":-4,"mol/wire/task":-4},"mol/plugin":{"mol":-9007199254740991,"mol/view/view":-1,"mol/mem":-2,"mol/owning":-3,"mol/wire/fiber":-3,"mol/dom/render/attributes":-3,"mol/wire/async":-3},"mol/dom/render/styles":{"mol/dom/render":-9007199254740991},"mol/dom/render/children":{"mol/dom/render":-9007199254740991,"mol/dom/context":-3},"mol/dom/render/fields":{"mol/dom/render":-9007199254740991},"mol/func/name":{"mol/func":-9007199254740991},"mol/func":{"mol":-9007199254740991},"mol/type/pick":{"mol/type":-9007199254740991,"mol/type/keys/extract":-3},"mol/type/keys/extract":{"mol/type/keys":-9007199254740991},"mol/type/keys":{"mol/type":-9007199254740991},"mol/view/view/view.ts":{"mol/view":-1,"mol/window":-2,"mol/object":-1,"mol/mem":-2,"mol/fail/log":-4,"mol/dom/context":-3,"mol/view/selection":-3,"mol/memo":-2,"mol/dom/qname":-3,"mol/wire/watch":-3,"mol/const":-3,"mol/dom/render/attributes":-3,"mol/wire/async":-3,"mol/dom/render/styles":-3,"mol/dom/render/children":-3,"mol/dom/render/fields":-3,"mol/owning":-3,"mol/wire/fiber":-3,"mol/func/name":-4,"mol/dev/format":-2,"mol/fail/hidden":-4,"mol/type/pick":-1},"mol/hotkey":{"mol":-9007199254740991,"mol/plugin":-1,"mol/mem":-2,"mol/hotkey/-view.tree/hotkey.view.tree.ts":0,"mol/hotkey/hotkey.view.tree":0,"mol/keyboard":-3},"mol/hotkey/-view.tree/hotkey.view.tree.ts":{"mol/plugin":-1,"mol/mem":-2},"mol/hotkey/hotkey.view.tree":{"mol/hotkey/-view.tree/hotkey.view.tree.ts":0},"mol/keyboard":{"mol":-9007199254740991},"mol/gap":{"mol":-9007199254740991,"mol/style/attach":0,"mol/style/func":-1},"mol/dom/listener":{"mol/dom":-9007199254740991,"mol/object":-1},"mol/button":{"mol":-9007199254740991,"mol/style/attach":0,"mol/button/button.view.tree":0,"mol/gap":-1,"mol/view/view":-1,"mol/mem":-2,"mol/view":-2.25,"mol/speck":-2.25,"mol/button/-view.tree/button.view.tree.ts":0,"mol/fail/hidden":-4,"mol/keyboard":-3},"mol/button/button.view.tree":{"mol/button/-view.tree/button.view.tree.ts":0},"mol/button/-view.tree/button.view.tree.ts":{"mol/view/view":-1,"mol/mem":-2,"mol/view":-2.25,"mol/speck":-2.25},"mol/speck":{"mol":-9007199254740991,"mol/style/attach":0,"mol/speck/speck.view.tree":0,"mol/view/view":-1,"mol/theme":-2.25,"mol/speck/-view.tree/speck.view.tree.ts":0},"mol/speck/speck.view.tree":{"mol/speck/-view.tree/speck.view.tree.ts":0},"mol/speck/-view.tree/speck.view.tree.ts":{"mol/view/view":-1,"mol/theme":-2.25},"mol/link":{"mol":-9007199254740991,"mol/style/unit":-1,"mol/style/func":-1,"mol/style/define":-1,"mol/theme":-2,"mol/gap":-2,"mol/icon":-3,"mol/view/view":-1,"mol/view":-2.25,"mol/mem":-2,"mol/link/-view.tree/link.view.tree.ts":0,"mol/link/link.view.tree":0,"mol/state/arg":-3,"mol/dom/context":-3},"mol/style/define":{"mol/style":-9007199254740991,"mol/view/view":-2,"mol/style/guard":-2,"mol/style/attach":-2,"mol/style/sheet":-3},"mol/style/guard":{"mol/style":-9007199254740991,"mol/view":-1,"mol/type/result":-2,"mol/view/view":-1,"mol/type/error":-2,"mol/style/properties":-1,"mol/style/pseudo":-2},"mol/type/result":{"mol/type":-9007199254740991},"mol/type/error":{"mol/type":-9007199254740991},"mol/style/properties":{"mol/style":-9007199254740991,"mol/type/override":-1,"mol/style/func":-1,"mol/style/unit":-1},"mol/type/override":{"mol/type":-9007199254740991},"mol/style/pseudo":{"mol/style":-9007199254740991},"mol/style/sheet":{"mol/style":-9007199254740991,"mol/view/view":-2,"mol/style/guard":-2,"mol/dom/qname":-2,"mol/ambient":-2,"mol/func/name":-2},"mol/icon":{"mol":-9007199254740991,"mol/style/attach":0,"mol/icon/icon.view.tree":0,"mol/theme":-1,"mol/svg/root":-1,"mol/svg/path":-2.25,"mol/mem":-2,"mol/icon/-view.tree/icon.view.tree.ts":0},"mol/icon/icon.view.tree":{"mol/icon/-view.tree/icon.view.tree.ts":0},"mol/icon/-view.tree/icon.view.tree.ts":{"mol/svg/root":-1,"mol/svg/path":-2.25,"mol/mem":-2},"mol/svg/root":{"mol/svg":-1,"mol/style/attach":0,"mol/svg/root/root.view.tree":0,"mol/svg/root/-view.tree/root.view.tree.ts":0},"mol/svg":{"mol":-9007199254740991,"mol/view/view":-1,"mol/svg/-view.tree/svg.view.tree.ts":0,"mol/svg/svg.view.tree":0,"mol/mem":-2,"mol/dom/context":-3,"mol/state/time":-3},"mol/svg/-view.tree/svg.view.tree.ts":{"mol/view/view":-1},"mol/svg/svg.view.tree":{"mol/svg/-view.tree/svg.view.tree.ts":0},"mol/state/time":{"mol/state":-9007199254740991,"mol/object":-1,"mol/mem":-2,"mol/after/timeout":-2,"mol/after/frame":-2},"mol/state":{"mol":-9007199254740991},"mol/after/timeout":{"mol/after":-9007199254740991,"mol/object2":-1},"mol/svg/root/root.view.tree":{"mol/svg/root/-view.tree/root.view.tree.ts":0},"mol/svg/root/-view.tree/root.view.tree.ts":{"mol/svg":-1},"mol/svg/path":{"mol/svg":-1,"mol/svg/path/-view.tree/path.view.tree.ts":0},"mol/svg/path/-view.tree/path.view.tree.ts":{"mol/svg":-1},"mol/link/-view.tree/link.view.tree.ts":{"mol/view/view":-1,"mol/view":-2.25,"mol/mem":-2},"mol/link/link.view.tree":{"mol/link/-view.tree/link.view.tree.ts":0},"mol/state/arg":{"mol/state":-9007199254740991,"mol/object":-1,"mol/mem":-2,"mol/dom/context":-2,"mol/after/frame":-4},"mol/check":{"mol":-9007199254740991,"mol/style/attach":0,"mol/gap":-1,"mol/button/minor":-1,"mol/view":-2.25,"mol/mem":-2,"mol/view/view":-2.25,"mol/check/-view.tree/check.view.tree.ts":0,"mol/check/check.view.tree":0,"mol/maybe":-4},"mol/button/minor":{"mol/button":-9007199254740991,"mol/style/attach":0,"mol/button/minor/minor.view.tree":0,"mol/theme":-1,"mol/button/typed":-1,"mol/button/minor/-view.tree/minor.view.tree.ts":0},"mol/button/minor/minor.view.tree":{"mol/button/minor/-view.tree/minor.view.tree.ts":0},"mol/button/minor/-view.tree/minor.view.tree.ts":{"mol/button/typed":-1},"mol/button/typed":{"mol/button":-1,"mol/style/attach":0,"mol/button/typed/typed.view.tree":0,"mol/gap":-1,"mol/theme":-1,"mol/icon":0,"mol/button/typed/-view.tree/typed.view.tree.ts":0},"mol/button/typed/typed.view.tree":{"mol/button/typed/-view.tree/typed.view.tree.ts":0},"mol/button/typed/-view.tree/typed.view.tree.ts":{"mol/button":-1},"mol/check/-view.tree/check.view.tree.ts":{"mol/button/minor":-1,"mol/view":-2.25,"mol/mem":-2,"mol/view/view":-2.25},"mol/check/check.view.tree":{"mol/check/-view.tree/check.view.tree.ts":0},"mol/scroll":{"mol":-9007199254740991,"mol/style/unit":-1,"mol/style/define":-1,"mol/view/view":-1,"mol/theme":-3,"mol/gap":-4,"mol/mem":-2,"mol/scroll/-view.tree/scroll.view.tree.ts":0,"mol/scroll/scroll.view.tree":0,"mol/print":-3},"mol/scroll/-view.tree/scroll.view.tree.ts":{"mol/view/view":-1,"mol/mem":-2},"mol/scroll/scroll.view.tree":{"mol/scroll/-view.tree/scroll.view.tree.ts":0},"mol/print":{"mol":-9007199254740991,"mol/object":-1,"mol/mem":-2,"mol/dom/listener":-3,"mol/dom/context":-3},"mol/paragraph":{"mol":-9007199254740991,"mol/style/attach":0,"mol/paragraph/paragraph.view.tree":0,"mol/view/view":-1,"mol/paragraph/-view.tree/paragraph.view.tree.ts":0,"mol/mem":-2,"mol/window":-3},"mol/paragraph/paragraph.view.tree":{"mol/paragraph/-view.tree/paragraph.view.tree.ts":0},"mol/paragraph/-view.tree/paragraph.view.tree.ts":{"mol/view/view":-1},"mol/list":{"mol":-9007199254740991,"mol/style/attach":0,"mol/list/list.view.tree":0,"mol/view/view":-1,"mol/mem":-2,"mol/list/-view.tree/list.view.tree.ts":0,"mol/support/css":-3,"mol/print":-3,"mol/mem/cached":-3,"mol/window":-3,"mol/fail/log":-5},"mol/list/list.view.tree":{"mol/list/-view.tree/list.view.tree.ts":0},"mol/list/-view.tree/list.view.tree.ts":{"mol/view/view":-1,"mol/mem":-2},"mol/support/css":{"mol/support":-9007199254740991,"mol/dom/context":-2},"mol/support":{"mol":-9007199254740991},"mol/mem/cached":{"mol/mem":-9007199254740991,"mol/wire/probe":-1},"mol/wire/probe":{"mol/wire":-9007199254740991,"mol/wire/fiber":-2},"mol/bar":{"mol":-9007199254740991,"mol/style/attach":0,"mol/bar/bar.view.tree":0,"mol/gap":-1,"mol/view/view":-1,"mol/bar/-view.tree/bar.view.tree.ts":0},"mol/bar/bar.view.tree":{"mol/bar/-view.tree/bar.view.tree.ts":0},"mol/bar/-view.tree/bar.view.tree.ts":{"mol/view/view":-1},"hyoo/todomvc/-view.tree/todomvc.view.tree.ts":{"mol/scroll":-1,"mol/theme":-2.25,"mol/paragraph":-2.25,"mol/mem":-2,"mol/check":-2.25,"mol/view/view":-1,"mol/list":-2.25,"mol/link":-2.25,"mol/bar":-2.25,"mol/button/minor":-2.25,"mol/string":-1,"mol/button/typed":-2.25},"hyoo/todomvc/todomvc.view.tree":{"hyoo/todomvc/-view.tree/todomvc.view.tree.ts":0},"mol/state/local":{"mol/state":-9007199254740991,"mol/object":-1,"mol/dom/context":-4,"mol/mem":-2,"mol/state/local/local.ts":0},"mol/state/local/local.ts":{"mol/object":-1,"mol/dom/context":-4,"mol/mem":-2}},"sloc":{"tree":304,"LICENSE":164,"js":10,"ts":3630,"json":86,"md":1994,"lock":1281,"CNAME":2,"html":16,"css":429,"svg":7},"deps":{"hyoo/todomvc":{"..":-9007199254740991,"/mol/style/attach":0,"/hyoo/todomvc":0,"/mol/string":0,"/mol/button":0,"/mol/link":0,"/mol/link/current":0,"/hyoo/todomvc/head/complete":0,"/mol/check/checked":0,"/hyoo/todomvc/add":0,"/hyoo/todomvc/list":0,"/hyoo/todomvc/page":0,"/hyoo/todomvc/panel":0,"/mol/theme/back":-1,"/mol/theme/text":-1,"/hyoo/todomvc/head":0,"/hyoo/todomvc/title":0,"/hyoo/todomvc/task/row":0,"/hyoo/todomvc/task/row/complete":0,"/hyoo/todomvc/task/row/title":0,"/hyoo/todomvc/task/row/completed":0,"/hyoo/todomvc/task/row/drop":0,"/hyoo/todomvc/foot":0,"/hyoo/todomvc/pending":0,"/hyoo/todomvc/filter":0,"/hyoo/todomvc/sweep":0,"/mol/scroll":-1,"/mol/theme/light":-2.25,"/mol/paragraph":-2.25,"/mol/mem":-2,"/mol/check":-2.25,"/mol/view":-1,"/mol/mem/key":-2,"/mol/list":-2.25,"/mol/bar":-2.25,"/mol/button/minor":-2.25,"/mol/button/typed":-2.25,"/hyoo/todomvc/-view.tree/todomvc.view.tree.ts":0,"./todomvc.view.tree":0,"/hyoo/todomvc/task":0,"/mol/keyboard/code/enter":-4,"/mol/state/local/value":-3,"/mol/state/arg/value":-3},"hyoo":{"..":-9007199254740991},"":{},"mol/style/attach":{"..":-9007199254740991,"/mol/after/tick":-1,"/mol/style/attach":-1,"/mol/dom/context/document":-2},"mol/style":{"..":-9007199254740991},"mol":{"..":-9007199254740991},"mol/after/tick":{"..":-9007199254740991,"/mol/after/tick":-1,"/mol/object2":-1},"mol/after":{"..":-9007199254740991},"mol/object2":{"..":-9007199254740991,"/mol/object2":-1,"/mol/ambient/ref":-2,"/mol/owning/get":-3,"/mol/fail/hidden":-3,"/mol/type/writable":-3},"mol/ambient":{"..":-9007199254740991,"/mol/ambient/ref":-1,"/mol/ambient/context":-1,"/mol/ambient":-1},"mol/owning":{"..":-9007199254740991,"/mol/owning/map":-1,"/mol/owning/allow":-1,"/mol/delegate":-3,"/mol/owning/get":-1,"/mol/owning/map/get":-2,"/mol/owning/check":-1,"/mol/owning/catch":-1,"/mol/owning/map/set":-2},"mol/delegate":{"..":-9007199254740991,"/mol/delegate":-1},"mol/fail/hidden":{"..":-9007199254740991,"/mol/fail/hidden":-1},"mol/fail":{"..":-9007199254740991,"/mol/fail":-1},"mol/type/writable":{"..":-9007199254740991,"/mol/type/writable":-1},"mol/type":{"..":-9007199254740991},"mol/dom/context":{"..":-9007199254740991,"/mol/dom/context":-1,"./context.ts":0},"mol/dom":{"..":-9007199254740991},"mol/dom/context/context.ts":{"/mol/dom/context":-1},"mol/string":{"..":-9007199254740991,"/mol/style/attach":0,"./string.view.tree":0,"/mol/string":0,"/mol/gap/round":-1,"/mol/gap/text":-1,"/mol/theme/card":-1,"/mol/theme/text":-1,"/mol/theme/hover":-1,"/mol/theme/field":-1,"/mol/theme/focus":-1,"/mol/view":-1,"/mol/mem":-2,"/mol/hotkey":-2.25,"/mol/string/-view.tree/string.view.tree.ts":0,"/mol/dom/listener":-3,"/mol/dom/context/document":-4},"mol/string/string.view.tree":{"/mol/string/-view.tree/string.view.tree.ts":0},"mol/string/-view.tree/string.view.tree.ts":{"/mol/string":-1,"/mol/view":-1,"/mol/mem":-2,"/mol/hotkey":-2.25},"mol/view/view":{"..":-9007199254740991,"/mol/style/attach":0,"/mol/view":0,"/mol/theme/line":-1,"/mol/view/root":0,"/mol/theme/back":-1,"/mol/theme/text":-1,"/mol/view/error":0,"/mol/view/content":-1,"/mol/view/visible/width":-1,"/mol/window/size":-2,"/mol/view/visible/height":-1,"/mol/view/state/key":-1,"/mol/object":-1,"/mol/mem/key":-2,"/mol/mem":-2,"/mol/fail/log":-4,"/mol/dom/context/document/query/selector/all":-3,"/mol/view/selection/focused":-3,"/mol/memo/method":-2,"/mol/dom/qname":-3,"/mol/wire/watch":-3,"/mol/dom/context/document/create/element":-3,"/mol/const":-3,"/mol/dom/render/attributes":-3,"/mol/wire/async":-3,"/mol/plugin":-6,"/mol/dom/render/styles":-3,"/mol/dom/context":-5,"/mol/dom/render/children":-3,"/mol/dom/render/fields":-3,"/mol/owning/get":-3,"/mol/wire/fiber":-3,"/mol/func/name":-4,"/mol/dev/format/head":-2,"/mol/dev/format/span":-3,"/mol/dev/format/native":-4,"/mol/fail/hidden":-4,"/mol/wire/fiber/sync":-3,"/mol/view/all":-1,"/mol/type/pick":-1,"./view.ts":0,"/mol/dom/context/document":-1,"/mol/view/autobind":-2},"mol/view":{"..":-9007199254740991},"mol/theme":{"..":-9007199254740991,"/mol/style/attach":0,"/mol/theme/light":-0.25,"/mol/theme/dark":-0.25,"/mol/theme/base":-0.25,"/mol/theme/current":-0.25,"/mol/theme/special":-0.25,"/mol/theme/accent":-0.25,"/mol/theme/hue":-1,"/mol/theme/luma":-1,"/mol/theme/image":-1,"/mol/theme":0,"/mol/theme/back":-1,"/mol/theme/text":-1,"/mol/theme/field":-1,"/mol/theme/card":-1,"/mol/theme/hover":-1,"/mol/theme/line":-1,"/mol/theme/shade":-1,"/mol/theme/control":-1,"/mol/theme/focus":-1,"/mol/style/func":-1},"mol/style/func":{"..":-9007199254740991,"/mol/style/func/name":-1,"/mol/style/unit":-1,"/mol/style/func":-1,"/mol/decor":-1},"mol/style/unit":{"..":-9007199254740991,"/mol/style/unit/length":-1,"/mol/style/unit/angle":-1,"/mol/style/unit/time":-1,"/mol/style/unit/any":-1,"/mol/style/unit":-1,"/mol/decor":-1},"mol/decor":{"..":-9007199254740991,"/mol/decor":-1},"mol/window":{"..":-9007199254740991,"./window.ts":0,"/mol/window":-1,"/mol/object":-1,"/mol/mem":-2,"/mol/window/resizes":-1},"mol/object":{"..":-9007199254740991,"/mol/object/field":-1,"/mol/object":-1,"/mol/object2":-1},"mol/mem":{"..":-9007199254740991,"/mol/mem":-1,"/mol/wire/mem":-1,"/mol/mem/key":-1,"/mol/mem/key2":-1,"/mol/mem/key3":-1},"mol/wire/mem":{"..":-9007199254740991,"/mol/wire/mem":-1,"/mol/wire/mem/func":-1,"/mol/wire/atom/getter":-3,"/mol/wire/fiber/warm":-5,"/mol/wire/auto":-5,"/mol/wire/task":-5},"mol/wire":{"..":-9007199254740991,"/mol/wire/sub":-1,"/mol/wire/auto":-1,"/mol/wire/affected":-1},"mol/wire/sub":{"..":-9007199254740991,"/mol/wire/sub":-1,"/mol/wire/pub":-1,"/mol/wire/cursor":-2},"mol/wire/pub":{"..":-9007199254740991,"/mol/wire/pub":-1,"/mol/wire/sub":-3,"/mol/fail":-4,"/mol/wire/auto":-3,"/mol/wire/cursor/stale":-2},"mol/wire/cursor":{"..":-9007199254740991,"/mol/wire/cursor":-1},"mol/wire/atom":{"..":-9007199254740991,"/mol/wire/atom":-1,"/mol/wire/fiber":-1,"/mol/wire/atom/get":-4,"/mol/key":-5,"/mol/after/frame":-3,"/mol/wire/atom/watch":-1,"/mol/wire/atom/watching":-3,"/mol/wire/cursor/final":-4,"/mol/wire/atom/watching/delete":-5,"/mol/wire/cursor/stale":-5,"/mol/wire/atom/watching/add":-3,"/mol/wire/method":-2,"/mol/owning/check":-3,"/mol/owning/catch":-4,"/mol/compare/deep":-5,"/mol/wire/cursor/fresh":-3},"mol/wire/fiber":{"..":-9007199254740991,"/mol/wire/fiber":-1,"/mol/wire/pub/sub":-1,"/mol/after/frame":-2,"/mol/wire/fiber/plan/task":-5,"/mol/wire/cursor/final":-3,"/mol/wire/fiber/planning/add":-3,"/mol/wire/fiber/plan":-3,"/mol/wire/fiber/reaping/add":-3,"/mol/dev/format/head":-2,"/mol/dev/format/div":-3,"/mol/dev/format/native":-4,"/mol/dev/format/shade":-4,"/mol/dev/format/auto":-4,"/mol/wire/cursor/stale":-2,"/mol/wire/cursor/fresh":-3,"/mol/wire/cursor/doubt":-3,"/mol/wire/pub":-5,"/mol/wire/fiber/warm":-3,"/mol/fail/hidden":-4},"mol/wire/pub/sub":{"..":-9007199254740991,"/mol/wire/pub/sub":-1,"/mol/wire/pub":-1,"/mol/wire/sub":-1,"/mol/wire/cursor/stale":-2,"/mol/wire/auto":-3,"/mol/fail":-3,"/mol/wire/cursor/fresh":-3,"/mol/wire/cursor/final":-3,"/mol/wire/cursor/doubt":-3,"/mol/dev/format/head":-2,"/mol/dev/format/native":-3},"mol/dev/format":{"..":-9007199254740991,"/mol/dev/format/register":-1,"/mol/dev/format/head":-1,"/mol/dev/format/body":-1,"/mol/dev/format/native":-1,"/mol/dev/format/shade":-1,"/mol/dev/format/auto":-1,"/mol/dev/format/element":-1,"/mol/dev/format/span":-1,"/mol/dev/format/div":-1,"/mol/dev/format/element/bind":-1,"/mol/dev/format/ol":-1,"/mol/dev/format/li":-1,"/mol/dev/format/table":-1,"/mol/dev/format/tr":-1,"/mol/dev/format/td":-1,"/mol/dev/format/accent":-1,"/mol/dev/format/span/bind":-1,"/mol/dev/format/strong":-1,"/mol/dev/format/string":-1,"/mol/dev/format/indent":-1,"/mol/dev/format/div/bind":-1},"mol/dev":{"..":-9007199254740991},"mol/after/frame":{"..":-9007199254740991,"./frame.ts":0,"/mol/after/frame":-1,"/mol/object2":-1,"/mol/after/frame/promise/then":-3},"mol/key":{"..":-9007199254740991,"/mol/key/store":-1,"/mol/key":-1,"/mol/key/store/get":-3,"/mol/guid":-3,"/mol/key/store/set":-3},"mol/guid":{"..":-9007199254740991,"/mol/guid":-1},"mol/wire/method":{"..":-9007199254740991,"/mol/wire/method":-1,"/mol/wire/task/getter":-2},"mol/wire/task":{"..":-9007199254740991,"/mol/wire/task":-1,"/mol/wire/fiber":-1,"/mol/wire/task/get":-3,"/mol/wire/auto":-4,"/mol/compare/deep":-5,"/mol/wire/cursor/fresh":-4,"/mol/wire/cursor/final":-3},"mol/compare/deep":{"..":-9007199254740991,"/mol/compare/deep/cache":-1,"/mol/compare/deep":-1,"/mol/compare/deep/cache/get":-2,"/mol/compare/deep/cache/set":-3},"mol/compare":{"..":-9007199254740991},"mol/fail/log":{"..":-9007199254740991,"/mol/fail/log":-1,"/mol/fail/catch":-2},"mol/fail/catch":{"..":-9007199254740991,"/mol/fail/catch":-1},"mol/view/selection":{"..":-9007199254740991,"/mol/view/selection":-1,"/mol/object":-1,"/mol/mem":-2,"/mol/dom/context/document/active/element":-3,"/mol/after/tick":-3,"/mol/dom/context/blur":-4,"./selection.ts":0,"/mol/dom/context/document":-1,"/mol/dom/context/document/document/element/add/event/listener":-2,"/mol/view/selection/focused":-4,"/mol/maybe":-4},"mol/view/selection/selection.ts":{"/mol/view/selection":-1,"/mol/object":-1,"/mol/mem":-2,"/mol/dom/context/document/active/element":-3,"/mol/after/tick":-3,"/mol/dom/context/blur":-4},"mol/maybe":{"..":-9007199254740991,"/mol/maybe":-1},"mol/memo":{"..":-9007199254740991,"/mol/memo":-1,"/mol/wrapper":-1},"mol/wrapper":{"..":-9007199254740991,"/mol/wrapper":-1,"/mol/object2":-1},"mol/dom/qname":{"..":-9007199254740991,"/mol/dom/qname":-1},"mol/wire/watch":{"..":-9007199254740991,"/mol/wire/watch":-1,"/mol/wire/auto":-2,"/mol/wire/atom":-2,"/mol/fail":-3},"mol/const":{"..":-9007199254740991,"/mol/const":-1},"mol/dom/render/attributes":{"..":-9007199254740991,"/mol/dom/render/attributes":-1},"mol/dom/render":{"..":-9007199254740991},"mol/wire/async":{"..":-9007199254740991,"/mol/wire/async":-1,"/mol/wire/fiber":-4,"/mol/wire/task/getter":-4},"mol/plugin":{"..":-9007199254740991,"/mol/plugin":-1,"/mol/view":-1,"/mol/mem":-2,"/mol/owning/get":-3,"/mol/wire/fiber":-3,"/mol/dom/render/attributes":-3,"/mol/wire/async":-3},"mol/dom/render/styles":{"..":-9007199254740991,"/mol/dom/render/styles":-1},"mol/dom/render/children":{"..":-9007199254740991,"/mol/dom/render/children":-1,"/mol/dom/context":-3,"/mol/dom/context/document/create/text/node":-5},"mol/dom/render/fields":{"..":-9007199254740991,"/mol/dom/render/fields":-1},"mol/func/name":{"..":-9007199254740991,"/mol/func/name":-1,"/mol/func/name/from":-1},"mol/func":{"..":-9007199254740991},"mol/type/pick":{"..":-9007199254740991,"/mol/type/pick":-1,"/mol/type/keys/extract":-3},"mol/type/keys/extract":{"..":-9007199254740991,"/mol/type/keys/extract":-1},"mol/type/keys":{"..":-9007199254740991},"mol/view/view/view.ts":{"/mol/view/content":-1,"/mol/view":-1,"/mol/view/visible/width":-1,"/mol/window/size":-2,"/mol/view/visible/height":-1,"/mol/view/state/key":-1,"/mol/object":-1,"/mol/mem/key":-2,"/mol/mem":-2,"/mol/fail/log":-4,"/mol/dom/context/document/query/selector/all":-3,"/mol/view/selection/focused":-3,"/mol/memo/method":-2,"/mol/dom/qname":-3,"/mol/wire/watch":-3,"/mol/dom/context/document/create/element":-3,"/mol/const":-3,"/mol/dom/render/attributes":-3,"/mol/wire/async":-3,"/mol/plugin":-6,"/mol/dom/render/styles":-3,"/mol/dom/context":-5,"/mol/dom/render/children":-3,"/mol/dom/render/fields":-3,"/mol/owning/get":-3,"/mol/wire/fiber":-3,"/mol/func/name":-4,"/mol/dev/format/head":-2,"/mol/dev/format/span":-3,"/mol/dev/format/native":-4,"/mol/fail/hidden":-4,"/mol/wire/fiber/sync":-3,"/mol/view/all":-1,"/mol/type/pick":-1},"mol/hotkey":{"..":-9007199254740991,"/mol/hotkey":-1,"/mol/plugin":-1,"/mol/mem":-2,"/mol/hotkey/-view.tree/hotkey.view.tree.ts":0,"./hotkey.view.tree":0,"/mol/keyboard/code":-3},"mol/hotkey/-view.tree/hotkey.view.tree.ts":{"/mol/hotkey":-1,"/mol/plugin":-1,"/mol/mem":-2},"mol/hotkey/hotkey.view.tree":{"/mol/hotkey/-view.tree/hotkey.view.tree.ts":0},"mol/keyboard":{"..":-9007199254740991,"/mol/keyboard/code":-0.5},"mol/gap":{"..":-9007199254740991,"/mol/style/attach":0,"/mol/gap/block":-1,"/mol/gap/text":-1,"/mol/gap/round":-1,"/mol/gap/space":-1,"/mol/gap/blur":-1,"/mol/style/func":-1,"/mol/gap":-1},"mol/dom/listener":{"..":-9007199254740991,"/mol/dom/listener":-1,"/mol/object":-1},"mol/button":{"..":-9007199254740991,"/mol/style/attach":0,"./button.view.tree":0,"/mol/button":0,"/mol/gap/round":-1,"/mol/view":-1,"/mol/mem":-2,"/mol/view/content":-2.25,"/mol/speck":-2.25,"/mol/button/-view.tree/button.view.tree.ts":0,"/mol/fail/hidden":-4,"/mol/keyboard/code/enter":-3},"mol/button/button.view.tree":{"/mol/button/-view.tree/button.view.tree.ts":0},"mol/button/-view.tree/button.view.tree.ts":{"/mol/button":-1,"/mol/view":-1,"/mol/mem":-2,"/mol/view/content":-2.25,"/mol/speck":-2.25},"mol/speck":{"..":-9007199254740991,"/mol/style/attach":0,"./speck.view.tree":0,"/mol/speck":0,"/mol/view":-1,"/mol/theme/accent":-2.25,"/mol/speck/-view.tree/speck.view.tree.ts":0},"mol/speck/speck.view.tree":{"/mol/speck/-view.tree/speck.view.tree.ts":0},"mol/speck/-view.tree/speck.view.tree.ts":{"/mol/speck":-1,"/mol/view":-1,"/mol/theme/accent":-2.25},"mol/link":{"..":-9007199254740991,"/mol/style/unit":-1,"/mol/style/func":-1,"/mol/style/define":-1,"/mol/link":-1,"/mol/theme/control":-2,"/mol/gap/text":-2,"/mol/gap/space":-2,"/mol/gap/round":-3,"/mol/theme/hover":-4,"/mol/icon":-3,"/mol/theme/current":-5,"/mol/view":-1,"/mol/view/content":-2.25,"/mol/mem":-2,"/mol/link/-view.tree/link.view.tree.ts":0,"./link.view.tree":0,"/mol/state/arg":-3,"/mol/state/arg/href":-3,"/mol/state/arg/href/normal":-3,"/mol/state/arg/value":-4,"/mol/dom/context/location/origin":-3},"mol/style/define":{"..":-9007199254740991,"/mol/style/define":-1,"/mol/view":-2,"/mol/style/guard":-2,"/mol/style/attach":-2,"/mol/style/sheet":-3},"mol/style/guard":{"..":-9007199254740991,"/mol/view/all":-1,"/mol/style/guard":-1,"/mol/type/result":-2,"/mol/view":-1,"/mol/type/error":-2,"/mol/style/properties":-1,"/mol/style/pseudo/class":-2,"/mol/style/pseudo/element":-2},"mol/type/result":{"..":-9007199254740991,"/mol/type/result":-1},"mol/type/error":{"..":-9007199254740991,"/mol/type/error":-1},"mol/style/properties":{"..":-9007199254740991,"/mol/style/properties":-1,"/mol/type/override":-1,"/mol/style/func":-1,"/mol/style/unit":-1,"/mol/style/unit/length":-1},"mol/type/override":{"..":-9007199254740991,"/mol/type/override":-1},"mol/style/pseudo":{"..":-9007199254740991,"/mol/style/pseudo/class":-1,"/mol/style/pseudo/element":-1},"mol/style/sheet":{"..":-9007199254740991,"/mol/style/sheet":-1,"/mol/view":-2,"/mol/style/guard":-2,"/mol/dom/qname":-2,"/mol/ambient":-2,"/mol/func/name":-2},"mol/icon":{"..":-9007199254740991,"/mol/style/attach":0,"./icon.view.tree":0,"/mol/icon":0,"/mol/theme/back":-1,"/mol/icon/path":0,"/mol/svg/root":-1,"/mol/svg/path":-2.25,"/mol/mem":-2,"/mol/icon/-view.tree/icon.view.tree.ts":0},"mol/icon/icon.view.tree":{"/mol/icon/-view.tree/icon.view.tree.ts":0},"mol/icon/-view.tree/icon.view.tree.ts":{"/mol/icon":-1,"/mol/svg/root":-1,"/mol/svg/path":-2.25,"/mol/mem":-2},"mol/svg/root":{"..":-9007199254740991,"/mol/style/attach":0,"./root.view.tree":0,"/mol/svg/root":0,"/mol/svg":-1,"/mol/svg/root/-view.tree/root.view.tree.ts":0},"mol/svg":{"..":-9007199254740991,"/mol/svg":-1,"/mol/view":-1,"/mol/svg/-view.tree/svg.view.tree.ts":0,"./svg.view.tree":0,"/mol/mem":-2,"/mol/dom/context":-3,"/mol/state/time/now":-3},"mol/svg/-view.tree/svg.view.tree.ts":{"/mol/svg":-1,"/mol/view":-1},"mol/svg/svg.view.tree":{"/mol/svg/-view.tree/svg.view.tree.ts":0},"mol/state/time":{"..":-9007199254740991,"/mol/state/time":-1,"/mol/object":-1,"/mol/mem/key":-2,"/mol/after/timeout":-2,"/mol/after/frame":-2},"mol/state":{"..":-9007199254740991},"mol/after/timeout":{"..":-9007199254740991,"/mol/after/timeout":-1,"/mol/object2":-1},"mol/svg/root/root.view.tree":{"/mol/svg/root/-view.tree/root.view.tree.ts":0},"mol/svg/root/-view.tree/root.view.tree.ts":{"/mol/svg/root":-1,"/mol/svg":-1},"mol/svg/path":{"..":-9007199254740991,"/mol/svg/path":-1,"/mol/svg":-1,"/mol/svg/path/-view.tree/path.view.tree.ts":0},"mol/svg/path/-view.tree/path.view.tree.ts":{"/mol/svg/path":-1,"/mol/svg":-1},"mol/link/-view.tree/link.view.tree.ts":{"/mol/link":-1,"/mol/view":-1,"/mol/view/content":-2.25,"/mol/mem":-2},"mol/link/link.view.tree":{"/mol/link/-view.tree/link.view.tree.ts":0},"mol/state/arg":{"..":-9007199254740991,"./arg.ts":0,"/mol/state/arg":-1,"/mol/object":-1,"/mol/mem":-2,"/mol/dom/context/location/href":-2,"/mol/after/frame":-4,"/mol/dom/context/history":-5,"/mol/dom/context/document/title":-5,"/mol/dom/context/parent":-3,"/mol/dom/context/self":-3,"/mol/dom/context/parent/post/message":-4,"/mol/mem/key":-2,"/mol/state/arg/change":-1,"/mol/state/arg/href":-2},"mol/check":{"..":-9007199254740991,"/mol/style/attach":0,"/mol/check":0,"/mol/gap/text":-1,"/mol/check/title":0,"/mol/button/minor":-1,"/mol/view/content":-2.25,"/mol/mem":-2,"/mol/view":-2.25,"/mol/check/-view.tree/check.view.tree.ts":0,"./check.view.tree":0,"/mol/maybe":-4},"mol/button/minor":{"..":-9007199254740991,"/mol/style/attach":0,"./minor.view.tree":0,"/mol/button/minor":0,"/mol/theme/control":-1,"/mol/theme/shade":-1,"/mol/button/typed":-1,"/mol/button/minor/-view.tree/minor.view.tree.ts":0},"mol/button/minor/minor.view.tree":{"/mol/button/minor/-view.tree/minor.view.tree.ts":0},"mol/button/minor/-view.tree/minor.view.tree.ts":{"/mol/button/minor":-1,"/mol/button/typed":-1},"mol/button/typed":{"..":-9007199254740991,"/mol/style/attach":0,"./typed.view.tree":0,"/mol/button/typed":0,"/mol/gap/text":-1,"/mol/gap/round":-1,"/mol/gap/space":-1,"/mol/theme/hover":-1,"/mol/icon":0,"/mol/button":-1,"/mol/button/typed/-view.tree/typed.view.tree.ts":0},"mol/button/typed/typed.view.tree":{"/mol/button/typed/-view.tree/typed.view.tree.ts":0},"mol/button/typed/-view.tree/typed.view.tree.ts":{"/mol/button/typed":-1,"/mol/button":-1},"mol/check/-view.tree/check.view.tree.ts":{"/mol/check":-1,"/mol/button/minor":-1,"/mol/view/content":-2.25,"/mol/mem":-2,"/mol/view":-2.25},"mol/check/check.view.tree":{"/mol/check/-view.tree/check.view.tree.ts":0},"mol/scroll":{"..":-9007199254740991,"/mol/style/unit":-1,"/mol/style/define":-1,"/mol/scroll":-1,"/mol/view":-1,"/mol/theme/line":-3,"/mol/gap/round":-4,"/mol/mem":-2,"/mol/scroll/-view.tree/scroll.view.tree.ts":0,"./scroll.view.tree":0,"/mol/print/active":-3},"mol/scroll/-view.tree/scroll.view.tree.ts":{"/mol/scroll":-1,"/mol/view":-1,"/mol/mem":-2},"mol/scroll/scroll.view.tree":{"/mol/scroll/-view.tree/scroll.view.tree.ts":0},"mol/print":{"..":-9007199254740991,"/mol/print":-1,"/mol/object":-1,"/mol/mem":-2,"/mol/dom/listener":-3,"/mol/dom/context":-3},"mol/paragraph":{"..":-9007199254740991,"/mol/style/attach":0,"./paragraph.view.tree":0,"/mol/paragraph":0,"/mol/view":-1,"/mol/paragraph/-view.tree/paragraph.view.tree.ts":0,"/mol/mem":-2,"/mol/window/size":-3},"mol/paragraph/paragraph.view.tree":{"/mol/paragraph/-view.tree/paragraph.view.tree.ts":0},"mol/paragraph/-view.tree/paragraph.view.tree.ts":{"/mol/paragraph":-1,"/mol/view":-1},"mol/list":{"..":-9007199254740991,"/mol/style/attach":0,"./list.view.tree":0,"/mol/list":0,"/mol/list/gap/before":0,"/mol/list/gap/after":0,"/mol/view":-1,"/mol/mem":-2,"/mol/list/-view.tree/list.view.tree.ts":0,"/mol/support/css/overflow/anchor":-3,"/mol/print/active":-3,"/mol/mem/cached":-3,"/mol/window/size":-3,"/mol/fail/log":-5},"mol/list/list.view.tree":{"/mol/list/-view.tree/list.view.tree.ts":0},"mol/list/-view.tree/list.view.tree.ts":{"/mol/list":-1,"/mol/view":-1,"/mol/mem":-2},"mol/support/css":{"..":-9007199254740991,"/mol/support/css/overflow/anchor":-1,"/mol/dom/context":-2},"mol/support":{"..":-9007199254740991},"mol/mem/cached":{"..":-9007199254740991,"/mol/mem/cached":-1,"/mol/wire/probe":-1},"mol/wire/probe":{"..":-9007199254740991,"/mol/wire/probe":-1,"/mol/wire/fiber/warm":-2},"mol/bar":{"..":-9007199254740991,"/mol/style/attach":0,"./bar.view.tree":0,"/mol/bar":0,"/mol/gap/round":-1,"/mol/view":-1,"/mol/bar/-view.tree/bar.view.tree.ts":0},"mol/bar/bar.view.tree":{"/mol/bar/-view.tree/bar.view.tree.ts":0},"mol/bar/-view.tree/bar.view.tree.ts":{"/mol/bar":-1,"/mol/view":-1},"hyoo/todomvc/-view.tree/todomvc.view.tree.ts":{"/hyoo/todomvc":-1,"/mol/scroll":-1,"/mol/theme/light":-2.25,"/mol/paragraph":-2.25,"/mol/mem":-2,"/mol/check":-2.25,"/hyoo/todomvc/add":-1,"/mol/view":-1,"/mol/mem/key":-2,"/hyoo/todomvc/task/row":-1,"/mol/list":-2.25,"/mol/link":-2.25,"/mol/bar":-2.25,"/mol/button/minor":-2.25,"/mol/string":-1,"/mol/button/typed":-2.25},"hyoo/todomvc/todomvc.view.tree":{"/hyoo/todomvc/-view.tree/todomvc.view.tree.ts":0},"mol/state/local":{"..":-9007199254740991,"/mol/state/local":-1,"/mol/object":-1,"/mol/dom/context/local/storage":-4,"/mol/mem":-2,"/mol/mem/key":-2,"/mol/state/local/value":-3,"./local.ts":0,"/mol/state/local/changes":-1},"mol/state/local/local.ts":{"/mol/state/local":-1,"/mol/object":-1,"/mol/dom/context/local/storage":-4,"/mol/mem":-2,"/mol/mem/key":-2,"/mol/state/local/value":-3}}} \ No newline at end of file diff --git a/examples/mol/web.esm.js b/examples/mol/web.esm.js new file mode 100644 index 0000000000..a806e5b917 --- /dev/null +++ b/examples/mol/web.esm.js @@ -0,0 +1,4646 @@ +"use strict"; +function require( path ){ return $node[ path ] }; +"use strict" + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if ((d = decorators[i])) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; + +var globalThis = globalThis || ( typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : this ) +var $ = ( typeof module === 'object' ) ? ( module['export'+'s'] = globalThis ) : globalThis +$.$$ = $ + +; + +var $node = $node || {} +void function( module ) { var exports = module.exports = this; function require( id ) { return $node[ id.replace( /^.\// , "../" ) ] }; +; +"use strict"; +Error.stackTraceLimit = 50; +var $; +(function ($) { +})($ || ($ = {})); +module.exports = $; +//mam.ts +; + +$node[ "../mam.ts" ] = $node[ "../mam.ts" ] = module.exports }.call( {} , {} ) +; +"use strict"; +//hyoo/hyoo.ts +; +"use strict"; +var $; +(function ($) { + $.$mol_ambient_ref = Symbol('$mol_ambient_ref'); + function $mol_ambient(overrides) { + return Object.setPrototypeOf(overrides, this || $); + } + $.$mol_ambient = $mol_ambient; +})($ || ($ = {})); +//mol/ambient/ambient.ts +; +"use strict"; +var $; +(function ($) { + const instances = new WeakSet(); + function $mol_delegate(proto, target) { + const proxy = new Proxy(proto, { + get: (_, field) => { + const obj = target(); + let val = Reflect.get(obj, field); + if (typeof val === 'function') { + val = val.bind(obj); + } + return val; + }, + has: (_, field) => Reflect.has(target(), field), + set: (_, field, value) => Reflect.set(target(), field, value), + getOwnPropertyDescriptor: (_, field) => Reflect.getOwnPropertyDescriptor(target(), field), + ownKeys: () => Reflect.ownKeys(target()), + getPrototypeOf: () => Reflect.getPrototypeOf(target()), + setPrototypeOf: (_, donor) => Reflect.setPrototypeOf(target(), donor), + isExtensible: () => Reflect.isExtensible(target()), + preventExtensions: () => Reflect.preventExtensions(target()), + apply: (_, self, args) => Reflect.apply(target(), self, args), + construct: (_, args, retarget) => Reflect.construct(target(), args, retarget), + defineProperty: (_, field, descr) => Reflect.defineProperty(target(), field, descr), + deleteProperty: (_, field) => Reflect.deleteProperty(target(), field), + }); + instances.add(proxy); + return proxy; + } + $.$mol_delegate = $mol_delegate; + Reflect.defineProperty($mol_delegate, Symbol.hasInstance, { + value: (obj) => instances.has(obj), + }); +})($ || ($ = {})); +//mol/delegate/delegate.ts +; +"use strict"; +var $; +(function ($) { + $.$mol_owning_map = new WeakMap(); + function $mol_owning_allow(having) { + try { + if (!having) + return false; + if (typeof having !== 'object') + return false; + if (having instanceof $mol_delegate) + return false; + if (typeof having['destructor'] !== 'function') + return false; + return true; + } + catch { + return false; + } + } + $.$mol_owning_allow = $mol_owning_allow; + function $mol_owning_get(having, Owner) { + if (!$mol_owning_allow(having)) + return null; + while (true) { + const owner = $.$mol_owning_map.get(having); + if (!owner) + return owner; + if (!Owner) + return owner; + if (owner instanceof Owner) + return owner; + having = owner; + } + } + $.$mol_owning_get = $mol_owning_get; + function $mol_owning_check(owner, having) { + if (!$mol_owning_allow(having)) + return false; + if ($.$mol_owning_map.get(having) !== owner) + return false; + return true; + } + $.$mol_owning_check = $mol_owning_check; + function $mol_owning_catch(owner, having) { + if (!$mol_owning_allow(having)) + return false; + if ($.$mol_owning_map.get(having)) + return false; + $.$mol_owning_map.set(having, owner); + return true; + } + $.$mol_owning_catch = $mol_owning_catch; +})($ || ($ = {})); +//mol/owning/owning.ts +; +"use strict"; +var $; +(function ($) { + function $mol_fail(error) { + throw error; + } + $.$mol_fail = $mol_fail; +})($ || ($ = {})); +//mol/fail/fail.ts +; +"use strict"; +var $; +(function ($) { + function $mol_fail_hidden(error) { + throw error; + } + $.$mol_fail_hidden = $mol_fail_hidden; +})($ || ($ = {})); +//mol/fail/hidden/hidden.ts +; +"use strict"; +//mol/type/writable/writable.ts +; +"use strict"; +var $; +(function ($) { + class $mol_object2 { + static $ = $; + [$mol_ambient_ref] = null; + get $() { + if (this[$mol_ambient_ref]) + return this[$mol_ambient_ref]; + const owner = $mol_owning_get(this); + return this[$mol_ambient_ref] = owner?.$ || $mol_object2.$; + } + set $(next) { + if (this[$mol_ambient_ref]) + $mol_fail_hidden(new Error('Context already defined')); + this[$mol_ambient_ref] = next; + } + static create(init) { + const obj = new this; + if (init) + init(obj); + return obj; + } + static [Symbol.toPrimitive]() { + return this.toString(); + } + static toString() { + if (Symbol.toStringTag in this) + return this[Symbol.toStringTag]; + return this.name; + } + destructor() { } + toString() { + return this[Symbol.toStringTag] || this.constructor.name + '()'; + } + toJSON() { + return this.toString(); + } + } + $.$mol_object2 = $mol_object2; +})($ || ($ = {})); +//mol/object2/object2.ts +; +"use strict"; +var $; +(function ($) { + class $mol_after_tick extends $mol_object2 { + task; + promise; + cancelled = false; + constructor(task) { + super(); + this.task = task; + this.promise = Promise.resolve().then(() => { + if (this.cancelled) + return; + task(); + }); + } + destructor() { + this.cancelled = true; + } + } + $.$mol_after_tick = $mol_after_tick; +})($ || ($ = {})); +//mol/after/tick/tick.ts +; +"use strict"; +var $; +(function ($) { +})($ || ($ = {})); +//mol/dom/context/context.ts +; +"use strict"; +var $; +(function ($) { + $.$mol_dom_context = self; +})($ || ($ = {})); +//mol/dom/context/context.web.ts +; +"use strict"; +var $; +(function ($) { + let all = []; + let el = null; + let timer = null; + function $mol_style_attach(id, text) { + all.push(`/* ${id} */\n\n${text}`); + if (timer) + return el; + const doc = $mol_dom_context.document; + if (!doc) + return null; + el = doc.createElement('style'); + el.id = `$mol_style_attach`; + doc.head.appendChild(el); + timer = new $mol_after_tick(() => { + el.innerHTML = '\n' + all.join('\n\n'); + all = []; + el = null; + timer = null; + }); + return el; + } + $.$mol_style_attach = $mol_style_attach; +})($ || ($ = {})); +//mol/style/attach/attach.ts +; +"use strict"; +var $; +(function ($) { + class $mol_decor { + value; + constructor(value) { + this.value = value; + } + prefix() { return ''; } + valueOf() { return this.value; } + postfix() { return ''; } + toString() { + return `${this.prefix()}${this.valueOf()}${this.postfix()}`; + } + } + $.$mol_decor = $mol_decor; +})($ || ($ = {})); +//mol/decor/decor.ts +; +"use strict"; +var $; +(function ($) { + class $mol_style_unit extends $mol_decor { + literal; + constructor(value, literal) { + super(value); + this.literal = literal; + } + postfix() { + return this.literal; + } + static per(value) { return new $mol_style_unit(value, '%'); } + static px(value) { return new $mol_style_unit(value, 'px'); } + static mm(value) { return new $mol_style_unit(value, 'mm'); } + static cm(value) { return new $mol_style_unit(value, 'cm'); } + static Q(value) { return new $mol_style_unit(value, 'Q'); } + static in(value) { return new $mol_style_unit(value, 'in'); } + static pc(value) { return new $mol_style_unit(value, 'pc'); } + static pt(value) { return new $mol_style_unit(value, 'pt'); } + static cap(value) { return new $mol_style_unit(value, 'cap'); } + static ch(value) { return new $mol_style_unit(value, 'ch'); } + static em(value) { return new $mol_style_unit(value, 'em'); } + static rem(value) { return new $mol_style_unit(value, 'rem'); } + static ex(value) { return new $mol_style_unit(value, 'ex'); } + static ic(value) { return new $mol_style_unit(value, 'ic'); } + static lh(value) { return new $mol_style_unit(value, 'lh'); } + static rlh(value) { return new $mol_style_unit(value, 'rlh'); } + static vh(value) { return new $mol_style_unit(value, 'vh'); } + static vw(value) { return new $mol_style_unit(value, 'vw'); } + static vi(value) { return new $mol_style_unit(value, 'vi'); } + static vb(value) { return new $mol_style_unit(value, 'vb'); } + static vmin(value) { return new $mol_style_unit(value, 'vmin'); } + static vmax(value) { return new $mol_style_unit(value, 'vmax'); } + static deg(value) { return new $mol_style_unit(value, 'deg'); } + static rad(value) { return new $mol_style_unit(value, 'rad'); } + static grad(value) { return new $mol_style_unit(value, 'grad'); } + static turn(value) { return new $mol_style_unit(value, 'turn'); } + static s(value) { return new $mol_style_unit(value, 's'); } + static ms(value) { return new $mol_style_unit(value, 'ms'); } + } + $.$mol_style_unit = $mol_style_unit; +})($ || ($ = {})); +//mol/style/unit/unit.ts +; +"use strict"; +var $; +(function ($) { + const { per } = $mol_style_unit; + class $mol_style_func extends $mol_decor { + name; + constructor(name, value) { + super(value); + this.name = name; + } + prefix() { return this.name + '('; } + postfix() { return ')'; } + static calc(value) { + return new $mol_style_func('calc', value); + } + static vary(name) { + return new $mol_style_func('var', name); + } + static url(href) { + return new $mol_style_func('url', JSON.stringify(href)); + } + static hsla(hue, saturation, lightness, alpha) { + return new $mol_style_func('hsla', [hue, per(saturation), per(lightness), alpha]); + } + static clamp(min, mid, max) { + return new $mol_style_func('clamp', [min, mid, max]); + } + static rgba(red, green, blue, alpha) { + return new $mol_style_func('rgba', [red, green, blue, alpha]); + } + static scale(zoom) { + return new $mol_style_func('scale', [zoom]); + } + } + $.$mol_style_func = $mol_style_func; +})($ || ($ = {})); +//mol/style/func/func.ts +; +"use strict"; +var $; +(function ($) { + $mol_style_attach("mol/theme/theme.css", ":root {\n\t--mol_theme_hue: 210deg;\n\t--mol_theme_luma: -1;\n\t--mol_theme_image: none;\n}\n\n[mol_theme] {\n\tbackground-color: var(--mol_theme_back);\n\tcolor: var(--mol_theme_text);\n\tfill: var(--mol_theme_text);\n}\n\t\n:root, [mol_theme] {\n\t--mol_theme_back: hsl( var(--mol_theme_hue), 50% , calc( 54% + 44% * var(--mol_theme_luma) ) );\n\t--mol_theme_text: hsl( var(--mol_theme_hue), 0% , calc( 50% - 30% * var(--mol_theme_luma) ) );\n\t--mol_theme_field: hsl( var(--mol_theme_hue), 0%, calc( 50% + 50% * var(--mol_theme_luma) ), .2 );\n\t\n\t--mol_theme_card: hsl( var(--mol_theme_hue), 0%, 50%, .05 );\n\t--mol_theme_hover: hsl( var(--mol_theme_hue), 0%, 50%, .1 );\n\t--mol_theme_line: hsl( var(--mol_theme_hue), 0%, 50%, .25 );\n\t--mol_theme_shade: hsl( var(--mol_theme_hue), 0%, 50%, 1 );\n\t\n\t--mol_theme_control: hsl( var(--mol_theme_hue), 50%, calc( 50% - 5% * var(--mol_theme_luma) ) );\n\t--mol_theme_current: hsl( calc( var(--mol_theme_hue) - 90deg ), 50%, calc( 50% - 10% * var(--mol_theme_luma) ) );\n\t--mol_theme_special: hsl( calc( var(--mol_theme_hue) + 90deg ), 50%, calc( 50% - 10% * var(--mol_theme_luma) ) );\n\t--mol_theme_focus: hsl( calc( var(--mol_theme_hue) + 180deg ), 100%, calc( 50% - 15% * var(--mol_theme_luma) ) );\n\t\n}\n\n[mol_theme=\"$mol_theme_light\"] {\n\t--mol_theme_luma: 1;\n\t--mol_theme_image: none;\n}\n\n[mol_theme=\"$mol_theme_dark\"] {\n\t--mol_theme_luma: -1;\n\t--mol_theme_image: invert(1) hue-rotate( 180deg );\n}\n\n[mol_theme=\"$mol_theme_base\"] {\n\t--mol_theme_luma: -2;\n\t--mol_theme_back: hsl( var(--mol_theme_hue), 50%, 40% );\n\t--mol_theme_hover: hsl( var(--mol_theme_hue), 60%, 30% );\n\t--mol_theme_current: hsl( var(--mol_theme_hue), 100%, 20% );\n}\n\n[mol_theme=\"$mol_theme_current\"] {\n\t--mol_theme_back: hsl( calc( var(--mol_theme_hue) - 90deg ), 50%, calc( 50% + 25% * var(--mol_theme_luma) ) );\n}\n\n[mol_theme=\"$mol_theme_special\"] {\n\t--mol_theme_back: hsl( calc( var(--mol_theme_hue) + 90deg ), 50%, calc( 50% + 25% * var(--mol_theme_luma) ) );\n}\n\n[mol_theme=\"$mol_theme_accent\"] {\n\t--mol_theme_luma: -2;\n\t--mol_theme_back: hsl( calc( var(--mol_theme_hue) + 180deg ), 80%, 40% );\n\t--mol_theme_hover: hsl( calc( var(--mol_theme_hue) + 180deg ), 80%, 35% );\n}\n\n[mol_theme=\"$mol_theme_accent\"] [mol_theme=\"$mol_theme_accent\"] {\n\t--mol_theme_back: black;\n}\n"); +})($ || ($ = {})); +//mol/theme/-css/theme.css.ts +; +"use strict"; +var $; +(function ($) { + const { vary } = $mol_style_func; + $.$mol_theme = { + back: vary('--mol_theme_back'), + hover: vary('--mol_theme_hover'), + card: vary('--mol_theme_card'), + current: vary('--mol_theme_current'), + special: vary('--mol_theme_special'), + text: vary('--mol_theme_text'), + control: vary('--mol_theme_control'), + shade: vary('--mol_theme_shade'), + line: vary('--mol_theme_line'), + focus: vary('--mol_theme_focus'), + field: vary('--mol_theme_field'), + image: vary('--mol_theme_image'), + }; +})($ || ($ = {})); +//mol/theme/theme.ts +; +"use strict"; +var $; +(function ($_1) { + let $$; + (function ($$) { + let $; + })($$ = $_1.$$ || ($_1.$$ = {})); + $_1.$mol_object_field = Symbol('$mol_object_field'); + class $mol_object extends $mol_object2 { + static make(config) { + return super.create(obj => { + for (let key in config) + obj[key] = config[key]; + }); + } + } + $_1.$mol_object = $mol_object; +})($ || ($ = {})); +//mol/object/object.ts +; +"use strict"; +var $; +(function ($) { + let $mol_wire_cursor; + (function ($mol_wire_cursor) { + $mol_wire_cursor[$mol_wire_cursor["stale"] = -1] = "stale"; + $mol_wire_cursor[$mol_wire_cursor["doubt"] = -2] = "doubt"; + $mol_wire_cursor[$mol_wire_cursor["fresh"] = -3] = "fresh"; + $mol_wire_cursor[$mol_wire_cursor["final"] = -4] = "final"; + })($mol_wire_cursor = $.$mol_wire_cursor || ($.$mol_wire_cursor = {})); +})($ || ($ = {})); +//mol/wire/cursor/cursor.ts +; +"use strict"; +var $; +(function ($) { + class $mol_wire_pub extends Object { + data = []; + static get [Symbol.species]() { + return Array; + } + sub_from = 0; + get sub_list() { + const res = []; + for (let i = this.sub_from; i < this.data.length; i += 2) { + res.push(this.data[i]); + } + return res; + } + get sub_empty() { + return this.sub_from === this.data.length; + } + sub_on(sub, pub_pos) { + const pos = this.data.length; + this.data.push(sub, pub_pos); + return pos; + } + sub_off(sub_pos) { + if (!(sub_pos < this.data.length)) { + $mol_fail(new Error(`Wrong pos ${sub_pos}`)); + } + const end = this.data.length - 2; + if (sub_pos !== end) { + this.peer_move(end, sub_pos); + } + this.data.pop(); + this.data.pop(); + if (this.data.length === this.sub_from) + this.reap(); + } + reap() { } + promote() { + $mol_wire_auto()?.track_next(this); + } + fresh() { } + complete() { } + emit(quant = $mol_wire_cursor.stale) { + for (let i = this.sub_from; i < this.data.length; i += 2) { + ; + this.data[i].absorb(quant); + } + } + peer_move(from_pos, to_pos) { + const peer = this.data[from_pos]; + const self_pos = this.data[from_pos + 1]; + this.data[to_pos] = peer; + this.data[to_pos + 1] = self_pos; + peer.peer_repos(self_pos, to_pos); + } + peer_repos(peer_pos, self_pos) { + this.data[peer_pos + 1] = self_pos; + } + } + $.$mol_wire_pub = $mol_wire_pub; +})($ || ($ = {})); +//mol/wire/pub/pub.ts +; +"use strict"; +//mol/wire/sub/sub.ts +; +"use strict"; +var $; +(function ($) { + let auto = null; + function $mol_wire_auto(next = auto) { + return auto = next; + } + $.$mol_wire_auto = $mol_wire_auto; + $.$mol_wire_affected = []; +})($ || ($ = {})); +//mol/wire/wire.ts +; +"use strict"; +var $; +(function ($) { + $['devtoolsFormatters'] = $['devtoolsFormatters'] || []; + function $mol_dev_format_register(config) { + $['devtoolsFormatters'].push(config); + } + $.$mol_dev_format_register = $mol_dev_format_register; + $.$mol_dev_format_head = Symbol('$mol_dev_format_head'); + $.$mol_dev_format_body = Symbol('$mol_dev_format_body'); + $mol_dev_format_register({ + header: (val, config = false) => { + if (config) + return null; + if (!val) + return null; + if ($.$mol_dev_format_head in val) { + return val[$.$mol_dev_format_head](); + } + if (typeof val === 'function') { + return $mol_dev_format_native(val); + } + return null; + }, + hasBody: val => val[$.$mol_dev_format_body], + body: val => val[$.$mol_dev_format_body](), + }); + function $mol_dev_format_native(obj) { + if (typeof obj === 'undefined') + return $.$mol_dev_format_shade('undefined'); + if (typeof obj !== 'object' && typeof obj !== 'function') + return obj; + return [ + 'object', + { + object: obj, + config: true, + }, + ]; + } + $.$mol_dev_format_native = $mol_dev_format_native; + function $mol_dev_format_auto(obj) { + if (obj == null) + return $.$mol_dev_format_shade(String(obj)); + if (typeof obj === 'object' && $.$mol_dev_format_head in obj) { + return obj[$.$mol_dev_format_head](); + } + return [ + 'object', + { + object: obj, + config: false, + }, + ]; + } + $.$mol_dev_format_auto = $mol_dev_format_auto; + function $mol_dev_format_element(element, style, ...content) { + const styles = []; + for (let key in style) + styles.push(`${key} : ${style[key]}`); + return [ + element, + { + style: styles.join(' ; '), + }, + ...content, + ]; + } + $.$mol_dev_format_element = $mol_dev_format_element; + function $mol_dev_format_span(style, ...content) { + return $mol_dev_format_element('span', { + 'vertical-align': '8%', + ...style, + }, ...content); + } + $.$mol_dev_format_span = $mol_dev_format_span; + $.$mol_dev_format_div = $mol_dev_format_element.bind(null, 'div'); + $.$mol_dev_format_ol = $mol_dev_format_element.bind(null, 'ol'); + $.$mol_dev_format_li = $mol_dev_format_element.bind(null, 'li'); + $.$mol_dev_format_table = $mol_dev_format_element.bind(null, 'table'); + $.$mol_dev_format_tr = $mol_dev_format_element.bind(null, 'tr'); + $.$mol_dev_format_td = $mol_dev_format_element.bind(null, 'td'); + $.$mol_dev_format_accent = $mol_dev_format_span.bind(null, { + 'color': 'magenta', + }); + $.$mol_dev_format_strong = $mol_dev_format_span.bind(null, { + 'font-weight': 'bold', + }); + $.$mol_dev_format_string = $mol_dev_format_span.bind(null, { + 'color': 'green', + }); + $.$mol_dev_format_shade = $mol_dev_format_span.bind(null, { + 'color': 'gray', + }); + $.$mol_dev_format_indent = $.$mol_dev_format_div.bind(null, { + 'margin-left': '13px' + }); +})($ || ($ = {})); +//mol/dev/format/format.ts +; +"use strict"; +var $; +(function ($) { + class $mol_wire_pub_sub extends $mol_wire_pub { + pub_from = 0; + cursor = $mol_wire_cursor.stale; + get pub_list() { + const res = []; + const max = this.cursor >= 0 ? this.cursor : this.sub_from; + for (let i = this.pub_from; i < max; i += 2) { + res.push(this.data[i]); + } + return res; + } + track_on() { + this.cursor = this.pub_from; + const sub = $mol_wire_auto(); + $mol_wire_auto(this); + return sub; + } + promote() { + if (this.cursor >= this.pub_from) { + $mol_fail(new Error('Circular subscription')); + } + super.promote(); + } + track_next(pub) { + if (this.cursor < 0) + $mol_fail(new Error('Promo to non begun sub')); + if (this.cursor < this.sub_from) { + const next = this.data[this.cursor]; + if (pub === undefined) + return next ?? null; + if (next === pub) { + this.cursor += 2; + return next; + } + if (next) { + if (this.sub_from < this.data.length) { + this.peer_move(this.sub_from, this.data.length); + } + this.peer_move(this.cursor, this.sub_from); + this.sub_from += 2; + } + } + else { + if (pub === undefined) + return null; + if (this.sub_from < this.data.length) { + this.peer_move(this.sub_from, this.data.length); + } + this.sub_from += 2; + } + this.data[this.cursor] = pub; + this.data[this.cursor + 1] = pub.sub_on(this, this.cursor); + this.cursor += 2; + return pub; + } + track_off(sub) { + $mol_wire_auto(sub); + if (this.cursor < 0) { + $mol_fail(new Error('End of non begun sub')); + } + for (let cursor = this.pub_from; cursor < this.cursor; cursor += 2) { + const pub = this.data[cursor]; + pub.fresh(); + } + this.cursor = $mol_wire_cursor.fresh; + } + pub_off(sub_pos) { + this.data[sub_pos] = undefined; + this.data[sub_pos + 1] = undefined; + } + destructor() { + for (let cursor = this.data.length - 2; cursor >= this.sub_from; cursor -= 2) { + const sub = this.data[cursor]; + const pos = this.data[cursor + 1]; + sub.pub_off(pos); + this.data.pop(); + this.data.pop(); + } + this.cursor = this.pub_from; + this.track_cut(); + this.cursor = $mol_wire_cursor.final; + } + track_cut() { + if (this.cursor < this.pub_from) { + $mol_fail(new Error('Cut of non begun sub')); + } + let tail = 0; + for (let cursor = this.cursor; cursor < this.sub_from; cursor += 2) { + const pub = this.data[cursor]; + pub?.sub_off(this.data[cursor + 1]); + if (this.sub_from < this.data.length) { + this.peer_move(this.data.length - 2, cursor); + this.data.pop(); + this.data.pop(); + } + else { + ++tail; + } + } + for (; tail; --tail) { + this.data.pop(); + this.data.pop(); + } + this.sub_from = this.cursor; + } + complete() { } + complete_pubs() { + const limit = this.cursor < 0 ? this.sub_from : this.cursor; + for (let cursor = this.pub_from; cursor < limit; cursor += 2) { + const pub = this.data[cursor]; + pub?.complete(); + } + } + absorb(quant = $mol_wire_cursor.stale) { + if (this.cursor === $mol_wire_cursor.final) + return; + if (this.cursor >= quant) + return; + this.cursor = quant; + this.emit($mol_wire_cursor.doubt); + } + [$mol_dev_format_head]() { + return $mol_dev_format_native(this); + } + get pub_empty() { + return this.sub_from === this.pub_from; + } + } + $.$mol_wire_pub_sub = $mol_wire_pub_sub; +})($ || ($ = {})); +//mol/wire/pub/sub/sub.ts +; +"use strict"; +var $; +(function ($) { + class $mol_after_frame extends $mol_object2 { + task; + static _promise = null; + static get promise() { + if (this._promise) + return this._promise; + return this._promise = new Promise(done => { + const complete = () => { + this._promise = null; + done(); + }; + if (typeof requestAnimationFrame === 'function') { + requestAnimationFrame(complete); + } + else { + setTimeout(complete, 16); + } + }); + } + cancelled = false; + promise; + constructor(task) { + super(); + this.task = task; + this.promise = $mol_after_frame.promise.then(() => { + if (this.cancelled) + return; + task(); + }); + } + destructor() { + this.cancelled = true; + } + } + $.$mol_after_frame = $mol_after_frame; +})($ || ($ = {})); +//mol/after/frame/frame.web.ts +; +"use strict"; +var $; +(function ($) { + const handled = new WeakSet(); + class $mol_wire_fiber extends $mol_wire_pub_sub { + task; + host; + static warm = true; + static planning = new Set(); + static reaping = new Set(); + static plan_task = null; + static plan() { + if (this.plan_task) + return; + this.plan_task = new $mol_after_frame(() => { + try { + this.sync(); + } + finally { + $mol_wire_fiber.plan_task = null; + } + }); + } + static sync() { + while (this.planning.size) { + for (const fiber of this.planning) { + this.planning.delete(fiber); + if (fiber.cursor >= 0) + continue; + if (fiber.cursor === $mol_wire_cursor.final) + continue; + fiber.fresh(); + } + } + while (this.reaping.size) { + const fibers = this.reaping; + this.reaping = new Set; + for (const fiber of fibers) { + if (!fiber.sub_empty) + continue; + fiber.destructor(); + } + } + } + cache = undefined; + get args() { + return this.data.slice(0, this.pub_from); + } + result() { + if (this.cache instanceof Promise) + return; + if (this.cache instanceof Error) + return; + return this.cache; + } + field() { + return this.task.name + '()'; + } + constructor(id, task, host, args) { + super(); + this.task = task; + this.host = host; + if (args) + this.data.push(...args); + this.pub_from = this.sub_from = args?.length ?? 0; + this[Symbol.toStringTag] = id; + } + plan() { + $mol_wire_fiber.planning.add(this); + $mol_wire_fiber.plan(); + } + reap() { + $mol_wire_fiber.reaping.add(this); + $mol_wire_fiber.plan(); + } + toString() { + return this[Symbol.toStringTag]; + } + toJSON() { + return this[Symbol.toStringTag]; + } + [$mol_dev_format_head]() { + const cursor = { + [-1]: '🔴', + [-2]: '🟡', + [-3]: '🟢', + [-4]: '🔵', + }[this.cursor] ?? this.cursor.toString(); + return $mol_dev_format_div({}, $mol_dev_format_native(this), $mol_dev_format_shade(cursor + ' '), $mol_dev_format_auto(this.cache)); + } + get $() { + return (this.host ?? this.task)['$']; + } + emit(quant = $mol_wire_cursor.stale) { + if (this.sub_empty) + this.plan(); + else + super.emit(quant); + } + fresh() { + if (this.cursor === $mol_wire_cursor.fresh) + return; + if (this.cursor === $mol_wire_cursor.final) + return; + check: if (this.cursor === $mol_wire_cursor.doubt) { + for (let i = this.pub_from; i < this.sub_from; i += 2) { + ; + this.data[i]?.fresh(); + if (this.cursor !== $mol_wire_cursor.doubt) + break check; + } + this.cursor = $mol_wire_cursor.fresh; + return; + } + const bu = this.track_on(); + let result; + try { + switch (this.pub_from) { + case 0: + result = this.task.call(this.host); + break; + case 1: + result = this.task.call(this.host, this.data[0]); + break; + default: + result = this.task.call(this.host, ...this.args); + break; + } + if (result instanceof Promise) { + const put = (res) => { + if (this.cache === result) + this.put(res); + return res; + }; + result = Object.assign(result.then(put, put), { + destructor: result['destructor'] + }); + handled.add(result); + } + } + catch (error) { + if (error instanceof Error || error instanceof Promise) { + result = error; + } + else { + result = new Error(String(error), { cause: error }); + } + if (result instanceof Promise && !handled.has(result)) { + result = Object.assign(result.finally(() => { + if (this.cache === result) + this.absorb(); + }), { + destructor: result['destructor'] + }); + handled.add(result); + } + } + if (!(result instanceof Promise)) { + this.track_cut(); + } + this.track_off(bu); + this.put(result); + } + refresh() { + this.cursor = $mol_wire_cursor.stale; + this.fresh(); + } + sync() { + if (!$mol_wire_fiber.warm) { + return this.result(); + } + this.promote(); + this.fresh(); + if (this.cache instanceof Error) { + return $mol_fail_hidden(this.cache); + } + if (this.cache instanceof Promise) { + return $mol_fail_hidden(this.cache); + } + return this.cache; + } + async async() { + while (true) { + this.fresh(); + if (this.cache instanceof Error) { + $mol_fail_hidden(this.cache); + } + if (!(this.cache instanceof Promise)) + return this.cache; + await this.cache; + if (this.cursor === $mol_wire_cursor.final) { + await new Promise(() => { }); + } + } + } + } + $.$mol_wire_fiber = $mol_wire_fiber; +})($ || ($ = {})); +//mol/wire/fiber/fiber.ts +; +"use strict"; +var $; +(function ($) { + function $mol_guid(length = 8, exists = () => false) { + for (;;) { + let id = Math.random().toString(36).substring(2, length + 2).toUpperCase(); + if (exists(id)) + continue; + return id; + } + } + $.$mol_guid = $mol_guid; +})($ || ($ = {})); +//mol/guid/guid.ts +; +"use strict"; +var $; +(function ($) { + $.$mol_key_store = new WeakMap(); + function $mol_key(value) { + if (!value) + return JSON.stringify(value); + if (typeof value !== 'object' && typeof value !== 'function') + return JSON.stringify(value); + return JSON.stringify(value, (field, value) => { + if (!value) + return value; + if (typeof value !== 'object' && typeof value !== 'function') + return value; + if (Array.isArray(value)) + return value; + const proto = Reflect.getPrototypeOf(value); + if (!proto) + return value; + if (Reflect.getPrototypeOf(proto) === null) + return value; + if ('toJSON' in value) + return value; + if (value instanceof RegExp) + return value.toString(); + let key = $.$mol_key_store.get(value); + if (key) + return key; + key = $mol_guid(); + $.$mol_key_store.set(value, key); + return key; + }); + } + $.$mol_key = $mol_key; +})($ || ($ = {})); +//mol/key/key.ts +; +"use strict"; +var $; +(function ($) { + $.$mol_compare_deep_cache = new WeakMap(); + function $mol_compare_deep(left, right) { + if (Object.is(left, right)) + return true; + if (left === null) + return false; + if (right === null) + return false; + if (typeof left !== 'object') + return false; + if (typeof right !== 'object') + return false; + const left_proto = Reflect.getPrototypeOf(left); + const right_proto = Reflect.getPrototypeOf(right); + if (left_proto !== right_proto) + return false; + if (left instanceof Boolean) + return Object.is(left.valueOf(), right['valueOf']()); + if (left instanceof Number) + return Object.is(left.valueOf(), right['valueOf']()); + if (left instanceof String) + return Object.is(left.valueOf(), right['valueOf']()); + if (left instanceof Date) + return Object.is(left.valueOf(), right['valueOf']()); + if (left instanceof RegExp) + return left.source === right['source'] && left.flags === right['flags']; + let left_cache = $.$mol_compare_deep_cache.get(left); + if (left_cache) { + const right_cache = left_cache.get(right); + if (typeof right_cache === 'boolean') + return right_cache; + } + else { + left_cache = new WeakMap([[right, true]]); + $.$mol_compare_deep_cache.set(left, left_cache); + } + let result; + try { + if (left_proto && !Reflect.getPrototypeOf(left_proto)) + result = compare_pojo(left, right); + else if (Array.isArray(left)) + result = compare_array(left, right); + else if (left instanceof Set) + result = compare_set(left, right); + else if (left instanceof Map) + result = compare_map(left, right); + else if (left instanceof Error) + result = left.stack === right.stack; + else if (ArrayBuffer.isView(left)) + result = compare_buffer(left, right); + else if (Symbol.toPrimitive in left) + result = compare_primitive(left, right); + else + result = false; + } + finally { + left_cache.set(right, result); + } + return result; + } + $.$mol_compare_deep = $mol_compare_deep; + function compare_array(left, right) { + const len = left.length; + if (len !== right.length) + return false; + for (let i = 0; i < len; ++i) { + if (!$mol_compare_deep(left[i], right[i])) + return false; + } + return true; + } + function compare_buffer(left, right) { + const len = left.byteLength; + if (len !== right.byteLength) + return false; + for (let i = 0; i < len; ++i) { + if (left[i] !== right[i]) + return false; + } + return true; + } + function compare_iterator(left, right, compare) { + while (true) { + const left_next = left.next(); + const right_next = right.next(); + if (left_next.done !== right_next.done) + return false; + if (left_next.done) + break; + if (!compare(left_next.value, right_next.value)) + return false; + } + return true; + } + function compare_set(left, right) { + if (left.size !== right.size) + return false; + return compare_iterator(left.values(), right.values(), $mol_compare_deep); + } + function compare_map(left, right) { + if (left.size !== right.size) + return false; + return compare_iterator(left.keys(), right.keys(), Object.is) + && compare_iterator(left.values(), right.values(), $mol_compare_deep); + } + function compare_pojo(left, right) { + const left_keys = Object.getOwnPropertyNames(left); + const right_keys = Object.getOwnPropertyNames(right); + if (left_keys.length !== right_keys.length) + return false; + for (let key of left_keys) { + if (!$mol_compare_deep(left[key], Reflect.get(right, key))) + return false; + } + return true; + } + function compare_primitive(left, right) { + return Object.is(left[Symbol.toPrimitive]('default'), right[Symbol.toPrimitive]('default')); + } +})($ || ($ = {})); +//mol/compare/deep/deep.ts +; +"use strict"; +var $; +(function ($) { + class $mol_wire_task extends $mol_wire_fiber { + static getter(task) { + return function $mol_wire_task_get(host, args) { + const existen = $mol_wire_auto()?.track_next(); + reuse: if (existen) { + if (!(existen instanceof $mol_wire_task)) + break reuse; + if (existen.host !== host) + break reuse; + if (existen.task !== task) + break reuse; + if (!$mol_compare_deep(existen.args, args)) + break reuse; + return existen; + } + return new $mol_wire_task(`${host?.[Symbol.toStringTag] ?? host}.${task.name}(#)`, task, host, args); + }; + } + complete() { + this.destructor(); + } + put(next) { + const prev = this.cache; + this.cache = next; + if (next instanceof Promise) { + this.cursor = $mol_wire_cursor.fresh; + if (next !== prev) + this.emit(); + return next; + } + this.cursor = $mol_wire_cursor.final; + if (this.sub_empty) + this.destructor(); + else if (next !== prev) + this.emit(); + return next; + } + } + $.$mol_wire_task = $mol_wire_task; +})($ || ($ = {})); +//mol/wire/task/task.ts +; +"use strict"; +var $; +(function ($) { + function $mol_wire_method(host, field, descr) { + if (!descr) + descr = Reflect.getOwnPropertyDescriptor(host, field); + const orig = descr?.value ?? host[field]; + const sup = Reflect.getPrototypeOf(host); + if (typeof sup[field] === 'function') { + Object.defineProperty(orig, 'name', { value: sup[field].name }); + } + const temp = $mol_wire_task.getter(orig); + const value = function (...args) { + const fiber = temp(this ?? null, args); + return fiber.sync(); + }; + Object.defineProperty(value, 'name', { value: orig.name + ' ' }); + Object.assign(value, { orig }); + const descr2 = { ...descr, value }; + Reflect.defineProperty(host, field, descr2); + return descr2; + } + $.$mol_wire_method = $mol_wire_method; +})($ || ($ = {})); +//mol/wire/method/method.ts +; +"use strict"; +var $; +(function ($) { + class $mol_wire_atom extends $mol_wire_fiber { + static getter(task, keys) { + const field = task.name + '()'; + if (keys) { + return function $mol_wire_atom_get(host, args) { + let dict, key, fiber; + key = `${host?.[Symbol.toStringTag] ?? host}.${task.name}(${args.map(v => $mol_key(v)).join(',')})`; + dict = Object.getOwnPropertyDescriptor(host ?? task, field)?.value; + if (dict) { + const existen = dict.get(key); + if (existen) + return existen; + } + else { + dict = (host ?? task)[field] = new Map(); + } + fiber = new $mol_wire_atom(key, task, host, args); + dict.set(key, fiber); + return fiber; + }; + } + else { + return function $mol_wire_atom_get(host, args) { + const existen = Object.getOwnPropertyDescriptor(host ?? task, field)?.value; + if (existen) + return existen; + const key = `${host?.[Symbol.toStringTag] ?? host}.${field}`; + const fiber = new $mol_wire_atom(key, task, host, args); + (host ?? task)[field] = fiber; + return fiber; + }; + } + } + static watching = new Set(); + static watch() { + new $mol_after_frame($mol_wire_atom.watch); + for (const atom of $mol_wire_atom.watching) { + if (atom.cursor === $mol_wire_cursor.final) { + $mol_wire_atom.watching.delete(atom); + } + else { + atom.cursor = $mol_wire_cursor.stale; + atom.fresh(); + } + } + } + watch() { + $mol_wire_atom.watching.add(this); + } + resync(args) { + return this.put(this.task.call(this.host, ...args)); + } + once() { + return this.sync(); + } + destructor() { + super.destructor(); + const prev = this.cache; + if ($mol_owning_check(this, prev)) { + prev.destructor(); + } + if (this.pub_from === 0) { + ; + (this.host ?? this.task)[this.field()] = null; + } + else { + ; + (this.host ?? this.task)[this.field()].delete(this[Symbol.toStringTag]); + } + } + put(next) { + const prev = this.cache; + if (next !== prev) { + if ($mol_owning_check(this, prev)) { + prev.destructor(); + } + this.cache = next; + if ($mol_owning_catch(this, next)) { + try { + next[Symbol.toStringTag] = this[Symbol.toStringTag]; + } + catch { } + } + if (this.sub_from < this.data.length) { + if (!$mol_compare_deep(prev, next)) { + this.emit(); + } + } + } + this.cursor = $mol_wire_cursor.fresh; + if (next instanceof Promise) + return next; + this.complete_pubs(); + return next; + } + } + __decorate([ + $mol_wire_method + ], $mol_wire_atom.prototype, "resync", null); + __decorate([ + $mol_wire_method + ], $mol_wire_atom.prototype, "once", null); + $.$mol_wire_atom = $mol_wire_atom; + $mol_wire_atom.watch(); +})($ || ($ = {})); +//mol/wire/atom/atom.ts +; +"use strict"; +var $; +(function ($) { + function $mol_wire_mem(keys) { + const wrap = $mol_wire_mem_func(keys); + return (host, field, descr) => { + if (!descr) + descr = Reflect.getOwnPropertyDescriptor(host, field); + const orig = descr?.value ?? host[field]; + const sup = Reflect.getPrototypeOf(host); + if (typeof sup[field] === 'function') { + Object.defineProperty(orig, 'name', { value: sup[field].name }); + } + const descr2 = { + ...descr, + value: wrap(orig) + }; + Reflect.defineProperty(host, field, descr2); + return descr2; + }; + } + $.$mol_wire_mem = $mol_wire_mem; + function $mol_wire_mem_func(keys) { + return (func) => { + const persist = $mol_wire_atom.getter(func, keys); + const wrapper = function (...args) { + let atom = persist(this, args.slice(0, keys)); + if (args.length <= keys || args[keys] === undefined) { + if (!$mol_wire_fiber.warm) + return atom.result(); + if ($mol_wire_auto() instanceof $mol_wire_task) { + return atom.once(); + } + else { + return atom.sync(); + } + } + return atom.resync(args); + }; + Object.defineProperty(wrapper, 'name', { value: func.name + ' ' }); + Object.assign(wrapper, { orig: func }); + return wrapper; + }; + } + $.$mol_wire_mem_func = $mol_wire_mem_func; +})($ || ($ = {})); +//mol/wire/mem/mem.ts +; +"use strict"; +var $; +(function ($) { + $.$mol_mem = $mol_wire_mem(0); + $.$mol_mem_key = $mol_wire_mem(1); + $.$mol_mem_key2 = $mol_wire_mem(2); + $.$mol_mem_key3 = $mol_wire_mem(3); +})($ || ($ = {})); +//mol/mem/mem.ts +; +"use strict"; +var $; +(function ($) { + class $mol_window extends $mol_object { + static size() { + this.resizes(); + return { + width: self.innerWidth, + height: self.innerHeight, + }; + } + static resizes(next) { return next; } + } + __decorate([ + $mol_mem + ], $mol_window, "size", null); + __decorate([ + $mol_mem + ], $mol_window, "resizes", null); + $.$mol_window = $mol_window; + self.addEventListener('resize', event => $mol_window.resizes(event)); +})($ || ($ = {})); +//mol/window/window.web.ts +; +"use strict"; +var $; +(function ($) { + const cacthed = new WeakMap(); + function $mol_fail_catch(error) { + if (typeof error !== 'object') + return false; + if (cacthed.get(error)) + return false; + cacthed.set(error, true); + return true; + } + $.$mol_fail_catch = $mol_fail_catch; +})($ || ($ = {})); +//mol/fail/catch/catch.ts +; +"use strict"; +var $; +(function ($) { + function $mol_fail_log(error) { + if (error instanceof Promise) + return false; + if (!$mol_fail_catch(error)) + return false; + console.error(error); + return true; + } + $.$mol_fail_log = $mol_fail_log; +})($ || ($ = {})); +//mol/fail/log/log.ts +; +"use strict"; +var $; +(function ($) { + class $mol_view_selection extends $mol_object { + static focused(next) { + const parents = []; + let element = next?.[0] ?? $mol_dom_context.document.activeElement; + while (element) { + parents.push(element); + element = element.parentNode; + } + new $mol_after_tick(() => { + const element = this.focused()[0]; + if (element) + element.focus(); + else + $mol_dom_context.blur(); + }); + return parents; + } + } + __decorate([ + $mol_mem + ], $mol_view_selection, "focused", null); + $.$mol_view_selection = $mol_view_selection; +})($ || ($ = {})); +//mol/view/selection/selection.ts +; +"use strict"; +var $; +(function ($) { + function $mol_maybe(value) { + return (value == null) ? [] : [value]; + } + $.$mol_maybe = $mol_maybe; +})($ || ($ = {})); +//mol/maybe/maybe.ts +; +"use strict"; +var $; +(function ($) { + if ($mol_dom_context.document) { + $mol_dom_context.document.documentElement.addEventListener('focus', (event) => { + $mol_view_selection.focused($mol_maybe($mol_dom_context.document.activeElement)); + }, true); + } +})($ || ($ = {})); +//mol/view/selection/selection.web.ts +; +"use strict"; +var $; +(function ($) { + class $mol_wrapper extends $mol_object2 { + static wrap; + static run(task) { + return this.func(task)(); + } + static func(func) { + return this.wrap(func); + } + static get class() { + return (Class) => { + const construct = (target, args) => new Class(...args); + const handler = { + construct: this.func(construct) + }; + handler[Symbol.toStringTag] = Class.name + '#'; + return new Proxy(Class, handler); + }; + } + static get method() { + return (obj, name, descr) => { + descr.value = this.func(descr.value); + return descr; + }; + } + static get field() { + return (obj, name, descr) => { + descr.get = descr.set = this.func(descr.get); + return descr; + }; + } + } + $.$mol_wrapper = $mol_wrapper; +})($ || ($ = {})); +//mol/wrapper/wrapper.ts +; +"use strict"; +var $; +(function ($) { + class $mol_memo extends $mol_wrapper { + static wrap(task) { + const store = new WeakMap(); + return function (next) { + if (next === undefined && store.has(this)) + return store.get(this); + const val = task.call(this, next) ?? next; + store.set(this, val); + return val; + }; + } + } + $.$mol_memo = $mol_memo; +})($ || ($ = {})); +//mol/memo/memo.ts +; +"use strict"; +var $; +(function ($) { + function $mol_dom_qname(name) { + return name.replace(/\W/g, '').replace(/^(?=\d+)/, '_'); + } + $.$mol_dom_qname = $mol_dom_qname; +})($ || ($ = {})); +//mol/dom/qname/qname.ts +; +"use strict"; +var $; +(function ($) { + function $mol_wire_watch() { + const atom = $mol_wire_auto(); + if (atom instanceof $mol_wire_atom) { + atom.watch(); + } + else { + $mol_fail(new Error('Atom is equired for watching')); + } + } + $.$mol_wire_watch = $mol_wire_watch; +})($ || ($ = {})); +//mol/wire/watch/watch.ts +; +"use strict"; +var $; +(function ($) { + function $mol_const(value) { + var getter = (() => value); + getter['()'] = value; + getter[Symbol.toStringTag] = value; + return getter; + } + $.$mol_const = $mol_const; +})($ || ($ = {})); +//mol/const/const.ts +; +"use strict"; +var $; +(function ($) { + function $mol_dom_render_attributes(el, attrs) { + for (let name in attrs) { + let val = attrs[name]; + if (val === null || val === false) { + if (!el.hasAttribute(name)) + continue; + el.removeAttribute(name); + } + else { + const str = String(val); + if (el.getAttribute(name) === str) + continue; + el.setAttribute(name, str); + } + } + } + $.$mol_dom_render_attributes = $mol_dom_render_attributes; +})($ || ($ = {})); +//mol/dom/render/attributes/attributes.ts +; +"use strict"; +var $; +(function ($) { + function $mol_wire_async(obj) { + return new Proxy(obj, { + get(obj, field) { + const val = obj[field]; + if (typeof val !== 'function') + return val; + let fiber; + const temp = $mol_wire_task.getter(val); + return function $mol_wire_async(...args) { + fiber?.destructor(); + fiber = temp(obj, args); + return fiber.async(); + }; + }, + apply(obj, self, args) { + const temp = $mol_wire_task.getter(obj); + const fiber = temp(self, args); + return fiber.async(); + }, + }); + } + $.$mol_wire_async = $mol_wire_async; +})($ || ($ = {})); +//mol/wire/async/async.ts +; +"use strict"; +var $; +(function ($) { + function $mol_dom_render_styles(el, styles) { + for (let name in styles) { + let val = styles[name]; + const style = el.style; + if (typeof val === 'number') { + style[name] = `${val}px`; + } + else { + style[name] = val; + } + } + } + $.$mol_dom_render_styles = $mol_dom_render_styles; +})($ || ($ = {})); +//mol/dom/render/styles/styles.ts +; +"use strict"; +var $; +(function ($) { + function $mol_dom_render_children(el, childNodes) { + const node_set = new Set(childNodes); + let nextNode = el.firstChild; + for (let view of childNodes) { + if (view == null) + continue; + if (view instanceof $mol_dom_context.Node) { + while (true) { + if (!nextNode) { + el.appendChild(view); + break; + } + if (nextNode == view) { + nextNode = nextNode.nextSibling; + break; + } + else { + if (node_set.has(nextNode)) { + el.insertBefore(view, nextNode); + break; + } + else { + const nn = nextNode.nextSibling; + el.removeChild(nextNode); + nextNode = nn; + } + } + } + } + else { + if (nextNode && nextNode.nodeName === '#text') { + const str = String(view); + if (nextNode.nodeValue !== str) + nextNode.nodeValue = str; + nextNode = nextNode.nextSibling; + } + else { + const textNode = $mol_dom_context.document.createTextNode(String(view)); + el.insertBefore(textNode, nextNode); + } + } + } + while (nextNode) { + const currNode = nextNode; + nextNode = currNode.nextSibling; + el.removeChild(currNode); + } + } + $.$mol_dom_render_children = $mol_dom_render_children; +})($ || ($ = {})); +//mol/dom/render/children/children.ts +; +"use strict"; +var $; +(function ($) { + function $mol_dom_render_fields(el, fields) { + for (let key in fields) { + const val = fields[key]; + if (val === undefined) + continue; + el[key] = val; + } + } + $.$mol_dom_render_fields = $mol_dom_render_fields; +})($ || ($ = {})); +//mol/dom/render/fields/fields.ts +; +"use strict"; +var $; +(function ($) { + function $mol_func_name(func) { + let name = func.name; + if (name?.length > 1) + return name; + for (let key in this) { + try { + if (this[key] !== func) + continue; + name = key; + Object.defineProperty(func, 'name', { value: name }); + break; + } + catch { } + } + return name; + } + $.$mol_func_name = $mol_func_name; + function $mol_func_name_from(target, source) { + Object.defineProperty(target, 'name', { value: source.name }); + return target; + } + $.$mol_func_name_from = $mol_func_name_from; +})($ || ($ = {})); +//mol/func/name/name.ts +; +"use strict"; +//mol/type/keys/extract/extract.ts +; +"use strict"; +//mol/type/pick/pick.ts +; +"use strict"; +var $; +(function ($) { + function $mol_view_visible_width() { + return $mol_window.size().width; + } + $.$mol_view_visible_width = $mol_view_visible_width; + function $mol_view_visible_height() { + return $mol_window.size().height; + } + $.$mol_view_visible_height = $mol_view_visible_height; + function $mol_view_state_key(suffix) { + return suffix; + } + $.$mol_view_state_key = $mol_view_state_key; + const error_shower = new WeakMap(); + class $mol_view extends $mol_object { + static Root(id) { + return new this; + } + autorun() { + try { + this.dom_tree(); + document.title = this.title(); + } + catch (error) { + $mol_fail_log(error); + } + } + static autobind() { + const nodes = $mol_dom_context.document.querySelectorAll('[mol_view_root]:not([mol_view_root=""])'); + for (let i = nodes.length - 1; i >= 0; --i) { + const name = nodes.item(i).getAttribute('mol_view_root'); + const View = $[name]; + if (!View) { + console.error(`Can not attach view. Class not found: ${name}`); + continue; + } + const view = View.Root(i); + view.dom_node(nodes.item(i)); + view.autorun(); + } + } + title() { + return this.constructor.toString(); + } + focused(next) { + let node = this.dom_node(); + const value = $mol_view_selection.focused(next === undefined ? undefined : (next ? [node] : [])); + return value.indexOf(node) !== -1; + } + state_key(suffix = '') { + return this.$.$mol_view_state_key(suffix); + } + dom_name() { + return $mol_dom_qname(this.constructor.toString()) || 'div'; + } + dom_name_space() { return 'http://www.w3.org/1999/xhtml'; } + sub() { + return []; + } + sub_visible() { + return this.sub(); + } + minimal_width() { + let min = 0; + try { + const sub = this.sub(); + if (!sub) + return 0; + sub.forEach(view => { + if (view instanceof $mol_view) { + min = Math.max(min, view.minimal_width()); + } + }); + } + catch (error) { + $mol_fail_log(error); + return 24; + } + return min; + } + maximal_width() { + return this.minimal_width(); + } + minimal_height() { + let min = 0; + try { + for (const view of this.sub() ?? []) { + if (view instanceof $mol_view) { + min = Math.max(min, view.minimal_height()); + } + } + } + catch (error) { + $mol_fail_log(error); + return 24; + } + return min; + } + static watchers = new Set(); + view_rect() { + $mol_wire_watch(); + const { width, height, left, right, top, bottom } = this.dom_node().getBoundingClientRect(); + return { width, height, left, right, top, bottom }; + } + dom_id() { + return this.toString(); + } + dom_node(next) { + const node = next || $mol_dom_context.document.createElementNS(this.dom_name_space(), this.dom_name()); + const id = this.dom_id(); + node.setAttribute('id', id); + node.toString = $mol_const('<#' + id + '>'); + $mol_dom_render_attributes(node, this.attr_static()); + const events = $mol_wire_async(this.event()); + for (let event_name in events) { + node.addEventListener(event_name, events[event_name], { passive: false }); + } + return node; + } + dom_final() { + this.render(); + const sub = this.sub_visible(); + if (!sub) + return; + for (const el of sub) { + if (el && typeof el === 'object' && 'dom_final' in el) { + el['dom_final'](); + } + } + return this.dom_node(); + } + dom_tree(next) { + const node = this.dom_node(next); + try { + $mol_dom_render_attributes(node, { mol_view_error: null }); + try { + this.render(); + } + finally { + for (let plugin of this.plugins()) { + if (plugin instanceof $mol_plugin) { + plugin.dom_tree(); + } + } + } + this.auto(); + } + catch (error) { + $mol_fail_log(error); + $mol_dom_render_attributes(node, { mol_view_error: error.name || error.constructor.name }); + if (error instanceof Promise) + return node; + if ((error_shower.get(error) ?? this) !== this) + return node; + try { + const message = error.message || error; + node.innerText = message.replace(/^|$/mg, '\xA0\xA0'); + } + catch { } + error_shower.set(error, this); + } + return node; + } + dom_node_actual() { + const node = this.dom_node(); + $mol_dom_render_styles(node, this.style_size()); + const attr = this.attr(); + const style = this.style(); + const fields = this.field(); + $mol_dom_render_attributes(node, attr); + $mol_dom_render_styles(node, style); + return node; + } + auto() { + return null; + } + render() { + const node = this.dom_node_actual(); + const sub = this.sub_visible(); + if (!sub) + return; + const nodes = sub.map(child => { + if (child == null) + return null; + return (child instanceof $mol_view) + ? child.dom_node() + : child instanceof $mol_dom_context.Node + ? child + : String(child); + }); + $mol_dom_render_children(node, nodes); + for (const el of sub) + if (el && typeof el === 'object' && 'dom_tree' in el) + el['dom_tree'](); + $mol_dom_render_fields(node, this.field()); + } + static view_classes() { + const proto = this.prototype; + let current = proto; + const classes = []; + while (current) { + classes.push(current.constructor); + if (!(current instanceof $mol_view)) + break; + current = Object.getPrototypeOf(current); + } + return classes; + } + view_names_owned() { + const names = []; + let owner = $mol_owning_get(this); + if (owner?.host instanceof $mol_view) { + const suffix = owner.task.name.trim(); + const suffix2 = '_' + suffix[0].toLowerCase() + suffix.substring(1); + for (let Class of owner.host.constructor.view_classes()) { + if (suffix in Class.prototype) + names.push(this.$.$mol_func_name(Class) + suffix2); + else + break; + } + for (let prefix of owner.host.view_names_owned()) { + names.push(prefix + suffix2); + } + } + return names; + } + view_names() { + const names = []; + for (let name of this.view_names_owned()) { + if (names.indexOf(name) < 0) + names.push(name); + } + for (let Class of this.constructor.view_classes()) { + const name = this.$.$mol_func_name(Class); + if (!name) + continue; + if (names.indexOf(name) < 0) + names.push(name); + } + return names; + } + attr_static() { + let attrs = {}; + for (let name of this.view_names()) + attrs[name.replace(/\$/g, '').replace(/^(?=\d)/, '_').toLowerCase()] = ''; + return attrs; + } + attr() { + return {}; + } + style_size() { + return { + minHeight: this.minimal_height(), + minWidth: this.minimal_width(), + }; + } + style() { + return {}; + } + field() { + return {}; + } + event() { + return {}; + } + plugins() { + return []; + } + [$mol_dev_format_head]() { + return $mol_dev_format_span({}, $mol_dev_format_native(this)); + } + *view_find(check, path = []) { + if (check(this)) + return yield [...path, this]; + try { + for (const item of this.sub()) { + if (item instanceof $mol_view) { + yield* item.view_find(check, [...path, this]); + } + } + } + catch (error) { + if (error instanceof Promise) + $mol_fail_hidden(error); + $mol_fail_log(error); + } + } + force_render(path) { + const kids = this.sub(); + const index = kids.findIndex(item => { + if (item instanceof $mol_view) { + return path.has(item); + } + else { + return false; + } + }); + if (index >= 0) { + kids[index].force_render(path); + } + } + async ensure_visible(view, align = "start") { + const path = this.view_find(v => v === view).next().value; + this.force_render(new Set(path)); + $mol_wire_fiber.sync(); + view.dom_node().scrollIntoView({ block: align }); + } + } + __decorate([ + $mol_mem + ], $mol_view.prototype, "autorun", null); + __decorate([ + $mol_mem + ], $mol_view.prototype, "focused", null); + __decorate([ + $mol_memo.method + ], $mol_view.prototype, "dom_name", null); + __decorate([ + $mol_mem + ], $mol_view.prototype, "minimal_width", null); + __decorate([ + $mol_mem + ], $mol_view.prototype, "minimal_height", null); + __decorate([ + $mol_mem + ], $mol_view.prototype, "view_rect", null); + __decorate([ + $mol_mem + ], $mol_view.prototype, "dom_node", null); + __decorate([ + $mol_mem + ], $mol_view.prototype, "dom_final", null); + __decorate([ + $mol_mem + ], $mol_view.prototype, "dom_tree", null); + __decorate([ + $mol_mem + ], $mol_view.prototype, "dom_node_actual", null); + __decorate([ + $mol_mem + ], $mol_view.prototype, "render", null); + __decorate([ + $mol_memo.method + ], $mol_view.prototype, "view_names_owned", null); + __decorate([ + $mol_memo.method + ], $mol_view.prototype, "view_names", null); + __decorate([ + $mol_mem_key + ], $mol_view, "Root", null); + __decorate([ + $mol_mem + ], $mol_view, "autobind", null); + __decorate([ + $mol_memo.method + ], $mol_view, "view_classes", null); + $.$mol_view = $mol_view; +})($ || ($ = {})); +//mol/view/view/view.ts +; +"use strict"; +var $; +(function ($) { + $mol_style_attach("mol/view/view/view.css", "[mol_view] {\n\ttransition-property: height, width, min-height, min-width, max-width, max-height, transform;\n\ttransition-duration: .2s;\n\ttransition-timing-function: ease-out;\n\t-webkit-appearance: none;\n\tword-break: break-word;\n\tbox-sizing: border-box;\n\tdisplay: flex;\n\tflex-shrink: 0;\n\tcontain: style;\n\ttab-size: 4;\n}\n\n[mol_view]::selection {\n\tbackground: var(--mol_theme_line);\n}\n\n[mol_view] > * {\n\tword-break: inherit;\n}\n\n[mol_view_root] {\n\tmargin: 0;\n\tpadding: 0;\n\twidth: 100%;\n\theight: 100%;\n\tbox-sizing: border-box;\n\tfont-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n\tfont-size: 1rem;\n\tline-height: 1.5rem;\n\tbackground: var(--mol_theme_back);\n\tcolor: var(--mol_theme_text);\n\tcontain: unset; /** Fixes bg ignoring when applied to body on Chrome */\n}\n\n[mol_view][mol_view_error]:not([mol_view_error=\"Promise\"]) {\n\tbackground-image: repeating-linear-gradient(\n\t\t-45deg,\n\t\t#f92323,\n\t\t#f92323 .5rem,\n\t\t#ff3d3d .5rem,\n\t\t#ff3d3d 1.5rem\n\t);\n\tcolor: black;\n\talign-items: center;\n justify-content: center;\n}\n\n@keyframes mol_view_wait_move {\n\tfrom {\n\t\tbackground-position: 0 0;\n\t}\n\tto {\n\t\tbackground-position: 200vmax 0;\n\t}\n}\n\n@keyframes mol_view_wait_show {\n\tto {\n\t\tbackground-image: repeating-linear-gradient(\n\t\t\t45deg,\n\t\t\thsla( 0 , 0% , 50% , .5 ) 0% ,\n\t\t\thsla( 0 , 0% , 50% , 0 ) 5% ,\n\t\t\thsla( 0 , 0% , 50% , 0 ) 45% ,\n\t\t\thsla( 0 , 0% , 50% , .5 ) 50% ,\n\t\t\thsla( 0 , 0% , 50% , 0 ) 55% ,\n\t\t\thsla( 0 , 0% , 50% , 0 ) 95% ,\n\t\t\thsla( 0 , 0% , 50% , .5 ) 100%\n\t\t);\n\t\tbackground-size: 200vmax 200vmax;\n\t}\n}\n\n[mol_view][mol_view_error=\"Promise\"] {\n\tanimation: mol_view_wait_show .5s .5s linear forwards , mol_view_wait_move 1s linear infinite;\n\topacity: .75;\n}\n"); +})($ || ($ = {})); +//mol/view/view/-css/view.css.ts +; +"use strict"; +var $; +(function ($) { + if ($mol_dom_context.document) { + setTimeout(() => $mol_view.autobind()); + } +})($ || ($ = {})); +//mol/view/view/view.web.ts +; +"use strict"; +var $; +(function ($) { + class $mol_plugin extends $mol_view { + dom_node(next) { + const node = next || $mol_owning_get(this).host.dom_node(); + $mol_dom_render_attributes(node, this.attr_static()); + const events = $mol_wire_async(this.event()); + for (let event_name in events) { + node.addEventListener(event_name, events[event_name], { passive: false }); + } + return node; + } + attr_static() { + return {}; + } + event() { + return {}; + } + render() { + this.dom_node_actual(); + } + } + __decorate([ + $mol_mem + ], $mol_plugin.prototype, "dom_node", null); + $.$mol_plugin = $mol_plugin; +})($ || ($ = {})); +//mol/plugin/plugin.ts +; +"use strict"; +var $; +(function ($) { + class $mol_hotkey extends $mol_plugin { + event() { + return { + ...super.event(), + keydown: (event) => this.keydown(event) + }; + } + key() { + return {}; + } + mod_ctrl() { + return false; + } + mod_alt() { + return false; + } + mod_shift() { + return false; + } + keydown(event) { + if (event !== undefined) + return event; + return null; + } + } + __decorate([ + $mol_mem + ], $mol_hotkey.prototype, "keydown", null); + $.$mol_hotkey = $mol_hotkey; +})($ || ($ = {})); +//mol/hotkey/-view.tree/hotkey.view.tree.ts +; +"use strict"; +var $; +(function ($) { + let $mol_keyboard_code; + (function ($mol_keyboard_code) { + $mol_keyboard_code[$mol_keyboard_code["backspace"] = 8] = "backspace"; + $mol_keyboard_code[$mol_keyboard_code["tab"] = 9] = "tab"; + $mol_keyboard_code[$mol_keyboard_code["enter"] = 13] = "enter"; + $mol_keyboard_code[$mol_keyboard_code["shift"] = 16] = "shift"; + $mol_keyboard_code[$mol_keyboard_code["ctrl"] = 17] = "ctrl"; + $mol_keyboard_code[$mol_keyboard_code["alt"] = 18] = "alt"; + $mol_keyboard_code[$mol_keyboard_code["pause"] = 19] = "pause"; + $mol_keyboard_code[$mol_keyboard_code["capsLock"] = 20] = "capsLock"; + $mol_keyboard_code[$mol_keyboard_code["escape"] = 27] = "escape"; + $mol_keyboard_code[$mol_keyboard_code["space"] = 32] = "space"; + $mol_keyboard_code[$mol_keyboard_code["pageUp"] = 33] = "pageUp"; + $mol_keyboard_code[$mol_keyboard_code["pageDown"] = 34] = "pageDown"; + $mol_keyboard_code[$mol_keyboard_code["end"] = 35] = "end"; + $mol_keyboard_code[$mol_keyboard_code["home"] = 36] = "home"; + $mol_keyboard_code[$mol_keyboard_code["left"] = 37] = "left"; + $mol_keyboard_code[$mol_keyboard_code["up"] = 38] = "up"; + $mol_keyboard_code[$mol_keyboard_code["right"] = 39] = "right"; + $mol_keyboard_code[$mol_keyboard_code["down"] = 40] = "down"; + $mol_keyboard_code[$mol_keyboard_code["insert"] = 45] = "insert"; + $mol_keyboard_code[$mol_keyboard_code["delete"] = 46] = "delete"; + $mol_keyboard_code[$mol_keyboard_code["key0"] = 48] = "key0"; + $mol_keyboard_code[$mol_keyboard_code["key1"] = 49] = "key1"; + $mol_keyboard_code[$mol_keyboard_code["key2"] = 50] = "key2"; + $mol_keyboard_code[$mol_keyboard_code["key3"] = 51] = "key3"; + $mol_keyboard_code[$mol_keyboard_code["key4"] = 52] = "key4"; + $mol_keyboard_code[$mol_keyboard_code["key5"] = 53] = "key5"; + $mol_keyboard_code[$mol_keyboard_code["key6"] = 54] = "key6"; + $mol_keyboard_code[$mol_keyboard_code["key7"] = 55] = "key7"; + $mol_keyboard_code[$mol_keyboard_code["key8"] = 56] = "key8"; + $mol_keyboard_code[$mol_keyboard_code["key9"] = 57] = "key9"; + $mol_keyboard_code[$mol_keyboard_code["A"] = 65] = "A"; + $mol_keyboard_code[$mol_keyboard_code["B"] = 66] = "B"; + $mol_keyboard_code[$mol_keyboard_code["C"] = 67] = "C"; + $mol_keyboard_code[$mol_keyboard_code["D"] = 68] = "D"; + $mol_keyboard_code[$mol_keyboard_code["E"] = 69] = "E"; + $mol_keyboard_code[$mol_keyboard_code["F"] = 70] = "F"; + $mol_keyboard_code[$mol_keyboard_code["G"] = 71] = "G"; + $mol_keyboard_code[$mol_keyboard_code["H"] = 72] = "H"; + $mol_keyboard_code[$mol_keyboard_code["I"] = 73] = "I"; + $mol_keyboard_code[$mol_keyboard_code["J"] = 74] = "J"; + $mol_keyboard_code[$mol_keyboard_code["K"] = 75] = "K"; + $mol_keyboard_code[$mol_keyboard_code["L"] = 76] = "L"; + $mol_keyboard_code[$mol_keyboard_code["M"] = 77] = "M"; + $mol_keyboard_code[$mol_keyboard_code["N"] = 78] = "N"; + $mol_keyboard_code[$mol_keyboard_code["O"] = 79] = "O"; + $mol_keyboard_code[$mol_keyboard_code["P"] = 80] = "P"; + $mol_keyboard_code[$mol_keyboard_code["Q"] = 81] = "Q"; + $mol_keyboard_code[$mol_keyboard_code["R"] = 82] = "R"; + $mol_keyboard_code[$mol_keyboard_code["S"] = 83] = "S"; + $mol_keyboard_code[$mol_keyboard_code["T"] = 84] = "T"; + $mol_keyboard_code[$mol_keyboard_code["U"] = 85] = "U"; + $mol_keyboard_code[$mol_keyboard_code["V"] = 86] = "V"; + $mol_keyboard_code[$mol_keyboard_code["W"] = 87] = "W"; + $mol_keyboard_code[$mol_keyboard_code["X"] = 88] = "X"; + $mol_keyboard_code[$mol_keyboard_code["Y"] = 89] = "Y"; + $mol_keyboard_code[$mol_keyboard_code["Z"] = 90] = "Z"; + $mol_keyboard_code[$mol_keyboard_code["metaLeft"] = 91] = "metaLeft"; + $mol_keyboard_code[$mol_keyboard_code["metaRight"] = 92] = "metaRight"; + $mol_keyboard_code[$mol_keyboard_code["select"] = 93] = "select"; + $mol_keyboard_code[$mol_keyboard_code["numpad0"] = 96] = "numpad0"; + $mol_keyboard_code[$mol_keyboard_code["numpad1"] = 97] = "numpad1"; + $mol_keyboard_code[$mol_keyboard_code["numpad2"] = 98] = "numpad2"; + $mol_keyboard_code[$mol_keyboard_code["numpad3"] = 99] = "numpad3"; + $mol_keyboard_code[$mol_keyboard_code["numpad4"] = 100] = "numpad4"; + $mol_keyboard_code[$mol_keyboard_code["numpad5"] = 101] = "numpad5"; + $mol_keyboard_code[$mol_keyboard_code["numpad6"] = 102] = "numpad6"; + $mol_keyboard_code[$mol_keyboard_code["numpad7"] = 103] = "numpad7"; + $mol_keyboard_code[$mol_keyboard_code["numpad8"] = 104] = "numpad8"; + $mol_keyboard_code[$mol_keyboard_code["numpad9"] = 105] = "numpad9"; + $mol_keyboard_code[$mol_keyboard_code["multiply"] = 106] = "multiply"; + $mol_keyboard_code[$mol_keyboard_code["add"] = 107] = "add"; + $mol_keyboard_code[$mol_keyboard_code["subtract"] = 109] = "subtract"; + $mol_keyboard_code[$mol_keyboard_code["decimal"] = 110] = "decimal"; + $mol_keyboard_code[$mol_keyboard_code["divide"] = 111] = "divide"; + $mol_keyboard_code[$mol_keyboard_code["F1"] = 112] = "F1"; + $mol_keyboard_code[$mol_keyboard_code["F2"] = 113] = "F2"; + $mol_keyboard_code[$mol_keyboard_code["F3"] = 114] = "F3"; + $mol_keyboard_code[$mol_keyboard_code["F4"] = 115] = "F4"; + $mol_keyboard_code[$mol_keyboard_code["F5"] = 116] = "F5"; + $mol_keyboard_code[$mol_keyboard_code["F6"] = 117] = "F6"; + $mol_keyboard_code[$mol_keyboard_code["F7"] = 118] = "F7"; + $mol_keyboard_code[$mol_keyboard_code["F8"] = 119] = "F8"; + $mol_keyboard_code[$mol_keyboard_code["F9"] = 120] = "F9"; + $mol_keyboard_code[$mol_keyboard_code["F10"] = 121] = "F10"; + $mol_keyboard_code[$mol_keyboard_code["F11"] = 122] = "F11"; + $mol_keyboard_code[$mol_keyboard_code["F12"] = 123] = "F12"; + $mol_keyboard_code[$mol_keyboard_code["numLock"] = 144] = "numLock"; + $mol_keyboard_code[$mol_keyboard_code["scrollLock"] = 145] = "scrollLock"; + $mol_keyboard_code[$mol_keyboard_code["semicolon"] = 186] = "semicolon"; + $mol_keyboard_code[$mol_keyboard_code["equals"] = 187] = "equals"; + $mol_keyboard_code[$mol_keyboard_code["comma"] = 188] = "comma"; + $mol_keyboard_code[$mol_keyboard_code["dash"] = 189] = "dash"; + $mol_keyboard_code[$mol_keyboard_code["period"] = 190] = "period"; + $mol_keyboard_code[$mol_keyboard_code["forwardSlash"] = 191] = "forwardSlash"; + $mol_keyboard_code[$mol_keyboard_code["graveAccent"] = 192] = "graveAccent"; + $mol_keyboard_code[$mol_keyboard_code["bracketOpen"] = 219] = "bracketOpen"; + $mol_keyboard_code[$mol_keyboard_code["slashBack"] = 220] = "slashBack"; + $mol_keyboard_code[$mol_keyboard_code["slashBackLeft"] = 226] = "slashBackLeft"; + $mol_keyboard_code[$mol_keyboard_code["bracketClose"] = 221] = "bracketClose"; + $mol_keyboard_code[$mol_keyboard_code["quoteSingle"] = 222] = "quoteSingle"; + })($mol_keyboard_code = $.$mol_keyboard_code || ($.$mol_keyboard_code = {})); +})($ || ($ = {})); +//mol/keyboard/code.ts +; +"use strict"; +var $; +(function ($) { + var $$; + (function ($$) { + class $mol_hotkey extends $.$mol_hotkey { + key() { + return super.key(); + } + keydown(event) { + if (!event) + return; + if (event.defaultPrevented) + return; + let name = $mol_keyboard_code[event.keyCode]; + if (this.mod_ctrl() !== event.ctrlKey) + return; + if (this.mod_alt() !== event.altKey) + return; + if (this.mod_shift() !== event.shiftKey) + return; + const handle = this.key()[name]; + if (handle) + handle(event); + } + } + $$.$mol_hotkey = $mol_hotkey; + })($$ = $.$$ || ($.$$ = {})); +})($ || ($ = {})); +//mol/hotkey/hotkey.view.ts +; +"use strict"; +var $; +(function ($) { + class $mol_string extends $mol_view { + dom_name() { + return "input"; + } + enabled() { + return true; + } + minimal_height() { + return 40; + } + autocomplete() { + return false; + } + selection(val) { + if (val !== undefined) + return val; + return []; + } + auto() { + return [ + this.selection_watcher() + ]; + } + field() { + return { + ...super.field(), + disabled: this.disabled(), + value: this.value_changed(), + placeholder: this.hint_visible(), + spellcheck: this.spellcheck(), + autocomplete: this.autocomplete_native(), + selectionEnd: this.selection_end(), + selectionStart: this.selection_start() + }; + } + attr() { + return { + ...super.attr(), + maxlength: this.length_max(), + type: this.type() + }; + } + event() { + return { + ...super.event(), + input: (event) => this.event_change(event), + keydown: (event) => this.event_key_press(event) + }; + } + plugins() { + return [ + this.Submit() + ]; + } + selection_watcher() { + return null; + } + disabled() { + return false; + } + value(val) { + if (val !== undefined) + return val; + return ""; + } + value_changed(val) { + return this.value(val); + } + hint() { + return ""; + } + hint_visible() { + return this.hint(); + } + spellcheck() { + return false; + } + autocomplete_native() { + return ""; + } + selection_end() { + return 0; + } + selection_start() { + return 0; + } + length_max() { + return Infinity; + } + type(val) { + if (val !== undefined) + return val; + return "text"; + } + event_change(event) { + if (event !== undefined) + return event; + return null; + } + event_key_press(event) { + if (event !== undefined) + return event; + return null; + } + submit(event) { + if (event !== undefined) + return event; + return null; + } + Submit() { + const obj = new this.$.$mol_hotkey(); + obj.key = () => ({ + enter: (event) => this.submit(event) + }); + return obj; + } + } + __decorate([ + $mol_mem + ], $mol_string.prototype, "selection", null); + __decorate([ + $mol_mem + ], $mol_string.prototype, "value", null); + __decorate([ + $mol_mem + ], $mol_string.prototype, "type", null); + __decorate([ + $mol_mem + ], $mol_string.prototype, "event_change", null); + __decorate([ + $mol_mem + ], $mol_string.prototype, "event_key_press", null); + __decorate([ + $mol_mem + ], $mol_string.prototype, "submit", null); + __decorate([ + $mol_mem + ], $mol_string.prototype, "Submit", null); + $.$mol_string = $mol_string; +})($ || ($ = {})); +//mol/string/-view.tree/string.view.tree.ts +; +"use strict"; +var $; +(function ($) { + $mol_style_attach("mol/gap/gap.css", ":root {\n\t--mol_gap_block: .75rem;\n\t--mol_gap_text: .5rem .75rem;\n\t--mol_gap_round: .25rem;\n\t--mol_gap_space: .25rem;\n\t--mol_gap_blur: .5rem;\n}\n"); +})($ || ($ = {})); +//mol/gap/-css/gap.css.ts +; +"use strict"; +var $; +(function ($) { + const { vary } = $mol_style_func; + $.$mol_gap = { + block: vary('--mol_gap_block'), + text: vary('--mol_gap_text'), + round: vary('--mol_gap_round'), + space: vary('--mol_gap_space'), + blur: vary('--mol_gap_blur'), + }; +})($ || ($ = {})); +//mol/gap/gap.ts +; +"use strict"; +var $; +(function ($) { + class $mol_dom_listener extends $mol_object { + _node; + _event; + _handler; + _config; + constructor(_node, _event, _handler, _config = { passive: true }) { + super(); + this._node = _node; + this._event = _event; + this._handler = _handler; + this._config = _config; + this._node.addEventListener(this._event, this._handler, this._config); + } + destructor() { + this._node.removeEventListener(this._event, this._handler, this._config); + super.destructor(); + } + } + $.$mol_dom_listener = $mol_dom_listener; +})($ || ($ = {})); +//mol/dom/listener/listener.ts +; +"use strict"; +var $; +(function ($) { + $mol_style_attach("mol/string/string.view.css", "[mol_string] {\n\tbox-sizing: border-box;\n\toutline-offset: 0;\n\tborder: none;\n\tborder-radius: var(--mol_gap_round);\n\twhite-space: nowrap;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\tpadding: var(--mol_gap_text);\n\ttext-align: left;\n\tposition: relative;\n\tz-index: 0;\n\tfont: inherit;\n\tflex: 1 1 auto;\n\tbackground: transparent;\n\tmin-width: 0;\n\tcolor: inherit;\n\tbackground: var(--mol_theme_card);\n}\n\n[mol_string]:disabled:not(:placeholder-shown) {\n\tbackground-color: transparent;\n\tcolor: var(--mol_theme_text);\n}\n\n[mol_string]:hover:where(:not(:disabled)) {\n\tbackground: var(--mol_theme_hover);\n}\n\n[mol_string]:focus {\n\toutline: none;\n\tz-index: 1;\n\tbackground: var(--mol_theme_field);\n\tcolor: var(--mol_theme_text);\n\tbox-shadow: inset 0 0 0 1px var(--mol_theme_focus);\n}\n\n[mol_string]::-ms-clear {\n\tdisplay: none;\n}\n"); +})($ || ($ = {})); +//mol/string/-css/string.view.css.ts +; +"use strict"; +var $; +(function ($) { + var $$; + (function ($$) { + class $mol_string extends $.$mol_string { + event_change(next) { + if (!next) + return; + this.value(next.target.value); + this.selection_change(next); + } + hint_visible() { + return (this.enabled() ? this.hint() : '') || ' '; + } + disabled() { + return !this.enabled(); + } + autocomplete_native() { + return this.autocomplete() ? 'on' : 'off'; + } + selection_watcher() { + return new $mol_dom_listener(this.$.$mol_dom_context.document, 'selectionchange', event => this.selection_change(event)); + } + selection_change(event) { + const el = this.dom_node(); + this.selection([ + el.selectionStart, + el.selectionEnd, + ]); + } + selection_start() { + return this.selection()[0]; + } + selection_end() { + return this.selection()[1]; + } + } + __decorate([ + $mol_mem + ], $mol_string.prototype, "selection_watcher", null); + $$.$mol_string = $mol_string; + })($$ = $.$$ || ($.$$ = {})); +})($ || ($ = {})); +//mol/string/string.view.ts +; +"use strict"; +var $; +(function ($) { + class $mol_speck extends $mol_view { + attr() { + return { + ...super.attr(), + mol_theme: "$mol_theme_accent" + }; + } + style() { + return { + ...super.style(), + minHeight: "1em" + }; + } + sub() { + return [ + this.value() + ]; + } + value() { + return null; + } + } + $.$mol_speck = $mol_speck; +})($ || ($ = {})); +//mol/speck/-view.tree/speck.view.tree.ts +; +"use strict"; +var $; +(function ($) { + $mol_style_attach("mol/speck/speck.view.css", "[mol_speck] {\n\tfont-size: .625rem;\n\tborder-radius: 1rem;\n\tmargin: -0.5rem -0.25rem;\n\talign-self: flex-start;\n\tmin-height: 1em;\n\tmin-width: .5em;\n\tvertical-align: sub;\n\tpadding: .25em .5em;\n\tposition: absolute;\n\tz-index: 2;\n\ttext-align: center;\n\tline-height: 1;\n\tdisplay: inline-block;\n\twhite-space: nowrap;\n\ttext-overflow: ellipsis;\n}\n"); +})($ || ($ = {})); +//mol/speck/-css/speck.view.css.ts +; +"use strict"; +var $; +(function ($) { + class $mol_button extends $mol_view { + enabled() { + return true; + } + click(event) { + if (event !== undefined) + return event; + return null; + } + event_click(event) { + if (event !== undefined) + return event; + return null; + } + event() { + return { + ...super.event(), + click: (event) => this.event_activate(event), + keydown: (event) => this.event_key_press(event) + }; + } + attr() { + return { + ...super.attr(), + disabled: this.disabled(), + role: "button", + tabindex: this.tab_index(), + title: this.hint() + }; + } + sub() { + return [ + this.title() + ]; + } + Speck() { + const obj = new this.$.$mol_speck(); + obj.value = () => this.error(); + return obj; + } + event_activate(event) { + if (event !== undefined) + return event; + return null; + } + event_key_press(event) { + if (event !== undefined) + return event; + return null; + } + disabled() { + return false; + } + tab_index() { + return 0; + } + hint() { + return ""; + } + error() { + return ""; + } + } + __decorate([ + $mol_mem + ], $mol_button.prototype, "click", null); + __decorate([ + $mol_mem + ], $mol_button.prototype, "event_click", null); + __decorate([ + $mol_mem + ], $mol_button.prototype, "Speck", null); + __decorate([ + $mol_mem + ], $mol_button.prototype, "event_activate", null); + __decorate([ + $mol_mem + ], $mol_button.prototype, "event_key_press", null); + $.$mol_button = $mol_button; +})($ || ($ = {})); +//mol/button/-view.tree/button.view.tree.ts +; +"use strict"; +var $; +(function ($) { + $mol_style_attach("mol/button/button.view.css", "[mol_button] {\n\tborder: none;\n\tfont: inherit;\n\tdisplay: inline-flex;\n\tflex-shrink: 0;\n\ttext-decoration: inherit;\n\tcursor: inherit;\n\tposition: relative;\n\tbox-sizing: border-box;\n\tword-break: normal;\n\tcursor: default;\n\tuser-select: none;\n\tborder-radius: var(--mol_gap_round);\n}\n\n[mol_button]:focus {\n\toutline: none;\n}\n"); +})($ || ($ = {})); +//mol/button/-css/button.view.css.ts +; +"use strict"; +var $; +(function ($) { + var $$; + (function ($$) { + class $mol_button extends $.$mol_button { + status(next = [null]) { return next; } + disabled() { + return !this.enabled(); + } + event_activate(next) { + if (!next) + return; + if (!this.enabled()) + return; + try { + this.event_click(next); + this.click(next); + this.status([null]); + } + catch (error) { + this.status([error]); + $mol_fail_hidden(error); + } + } + event_key_press(event) { + if (event.keyCode === $mol_keyboard_code.enter) { + return this.event_activate(event); + } + } + tab_index() { + return this.enabled() ? super.tab_index() : -1; + } + error() { + const [error] = this.status(); + if (!error) + return ''; + if (error instanceof Promise) { + return $mol_fail_hidden(error); + } + return String(error.message ?? error); + } + sub_visible() { + return [ + ...this.error() ? [this.Speck()] : [], + ...this.sub(), + ]; + } + } + __decorate([ + $mol_mem + ], $mol_button.prototype, "status", null); + $$.$mol_button = $mol_button; + })($$ = $.$$ || ($.$$ = {})); +})($ || ($ = {})); +//mol/button/button.view.ts +; +"use strict"; +//mol/type/result/result.ts +; +"use strict"; +//mol/type/error/error.ts +; +"use strict"; +//mol/type/override/override.ts +; +"use strict"; +//mol/style/properties/properties.ts +; +"use strict"; +//mol/style/pseudo/class.ts +; +"use strict"; +//mol/style/pseudo/element.ts +; +"use strict"; +//mol/style/guard/guard.ts +; +"use strict"; +var $; +(function ($) { + function $mol_style_sheet(Component, config0) { + let rules = []; + const block = $mol_dom_qname($mol_ambient({}).$mol_func_name(Component)); + const kebab = (name) => name.replace(/[A-Z]/g, letter => '-' + letter.toLowerCase()); + const make_class = (prefix, path, config) => { + const props = []; + const selector = (prefix, path) => { + if (path.length === 0) + return prefix || `[${block}]`; + let res = `[${block}_${path.join('_')}]`; + if (prefix) + res = prefix + ' :where(' + res + ')'; + return res; + }; + for (const key of Object.keys(config).reverse()) { + if (/^[a-z]/.test(key)) { + const addProp = (keys, val) => { + if (Array.isArray(val)) { + if (val[0] && [Array, Object].includes(val[0].constructor)) { + val = val.map(v => { + return Object.entries(v).map(([n, a]) => { + if (a === true) + return kebab(n); + if (a === false) + return null; + return String(a); + }).filter(Boolean).join(' '); + }).join(','); + } + else { + val = val.join(' '); + } + props.push(`\t${keys.join('-')}: ${val};\n`); + } + else if (val.constructor === Object) { + for (let suffix in val) { + addProp([...keys, kebab(suffix)], val[suffix]); + } + } + else { + props.push(`\t${keys.join('-')}: ${val};\n`); + } + }; + addProp([kebab(key)], config[key]); + } + else if (/^[A-Z]/.test(key)) { + make_class(prefix, [...path, key.toLowerCase()], config[key]); + } + else if (key[0] === '$') { + make_class(selector(prefix, path) + ' :where([' + $mol_dom_qname(key) + '])', [], config[key]); + } + else if (key === '>') { + const types = config[key]; + for (let type in types) { + make_class(selector(prefix, path) + ' > :where([' + $mol_dom_qname(type) + '])', [], types[type]); + } + } + else if (key === '@') { + const attrs = config[key]; + for (let name in attrs) { + for (let val in attrs[name]) { + make_class(selector(prefix, path) + ':where([' + name + '=' + JSON.stringify(val) + '])', [], attrs[name][val]); + } + } + } + else if (key === '@media') { + const media = config[key]; + for (let query in media) { + rules.push('}\n'); + make_class(prefix, path, media[query]); + rules.push(`${key} ${query} {\n`); + } + } + else { + make_class(selector(prefix, path) + key, [], config[key]); + } + } + if (props.length) { + rules.push(`${selector(prefix, path)} {\n${props.reverse().join('')}}\n`); + } + }; + make_class('', [], config0); + return rules.reverse().join(''); + } + $.$mol_style_sheet = $mol_style_sheet; +})($ || ($ = {})); +//mol/style/sheet/sheet.ts +; +"use strict"; +var $; +(function ($) { + function $mol_style_define(Component, config) { + return $mol_style_attach(Component.name, $mol_style_sheet(Component, config)); + } + $.$mol_style_define = $mol_style_define; +})($ || ($ = {})); +//mol/style/define/define.ts +; +"use strict"; +var $; +(function ($) { + class $mol_svg extends $mol_view { + dom_name() { + return "svg"; + } + dom_name_space() { + return "http://www.w3.org/2000/svg"; + } + font_size() { + return 16; + } + font_family() { + return ""; + } + style_size() { + return {}; + } + } + $.$mol_svg = $mol_svg; +})($ || ($ = {})); +//mol/svg/-view.tree/svg.view.tree.ts +; +"use strict"; +var $; +(function ($) { + class $mol_after_timeout extends $mol_object2 { + delay; + task; + id; + constructor(delay, task) { + super(); + this.delay = delay; + this.task = task; + this.id = setTimeout(task, delay); + } + destructor() { + clearTimeout(this.id); + } + } + $.$mol_after_timeout = $mol_after_timeout; +})($ || ($ = {})); +//mol/after/timeout/timeout.ts +; +"use strict"; +var $; +(function ($) { + class $mol_state_time extends $mol_object { + static task(precision, reset) { + if (precision) { + return new $mol_after_timeout(precision, () => this.task(precision, null)); + } + else { + return new $mol_after_frame(() => this.task(precision, null)); + } + } + static now(precision) { + this.task(precision); + return Date.now(); + } + } + __decorate([ + $mol_mem_key + ], $mol_state_time, "task", null); + __decorate([ + $mol_mem_key + ], $mol_state_time, "now", null); + $.$mol_state_time = $mol_state_time; +})($ || ($ = {})); +//mol/state/time/time.ts +; +"use strict"; +var $; +(function ($) { + var $$; + (function ($$) { + class $mol_svg extends $.$mol_svg { + computed_style() { + const win = this.$.$mol_dom_context; + const style = win.getComputedStyle(this.dom_node()); + if (!style['font-size']) + $mol_state_time.now(0); + return style; + } + font_size() { + return parseInt(this.computed_style()['font-size']) || 16; + } + font_family() { + return this.computed_style()['font-family']; + } + } + __decorate([ + $mol_mem + ], $mol_svg.prototype, "computed_style", null); + __decorate([ + $mol_mem + ], $mol_svg.prototype, "font_size", null); + __decorate([ + $mol_mem + ], $mol_svg.prototype, "font_family", null); + $$.$mol_svg = $mol_svg; + })($$ = $.$$ || ($.$$ = {})); +})($ || ($ = {})); +//mol/svg/svg.view.ts +; +"use strict"; +var $; +(function ($) { + class $mol_svg_root extends $mol_svg { + dom_name() { + return "svg"; + } + attr() { + return { + ...super.attr(), + viewBox: this.view_box(), + preserveAspectRatio: this.aspect() + }; + } + view_box() { + return "0 0 100 100"; + } + aspect() { + return "xMidYMid"; + } + } + $.$mol_svg_root = $mol_svg_root; +})($ || ($ = {})); +//mol/svg/root/-view.tree/root.view.tree.ts +; +"use strict"; +var $; +(function ($) { + $mol_style_attach("mol/svg/root/root.view.css", "[mol_svg_root] {\n\toverflow: hidden;\n}\n"); +})($ || ($ = {})); +//mol/svg/root/-css/root.view.css.ts +; +"use strict"; +var $; +(function ($) { + class $mol_svg_path extends $mol_svg { + dom_name() { + return "path"; + } + attr() { + return { + ...super.attr(), + d: this.geometry() + }; + } + geometry() { + return ""; + } + } + $.$mol_svg_path = $mol_svg_path; +})($ || ($ = {})); +//mol/svg/path/-view.tree/path.view.tree.ts +; +"use strict"; +var $; +(function ($) { + class $mol_icon extends $mol_svg_root { + view_box() { + return "0 0 24 24"; + } + minimal_width() { + return 16; + } + minimal_height() { + return 16; + } + sub() { + return [ + this.Path() + ]; + } + path() { + return ""; + } + Path() { + const obj = new this.$.$mol_svg_path(); + obj.geometry = () => this.path(); + return obj; + } + } + __decorate([ + $mol_mem + ], $mol_icon.prototype, "Path", null); + $.$mol_icon = $mol_icon; +})($ || ($ = {})); +//mol/icon/-view.tree/icon.view.tree.ts +; +"use strict"; +var $; +(function ($) { + $mol_style_attach("mol/icon/icon.view.css", "[mol_icon] {\n\tfill: currentColor;\n\tstroke: none;\n\twidth: 1rem;\n\theight: 1rem;\n\tflex: 0 0 auto;\n\tvertical-align: top;\n\tmargin: .25rem 0;\n\tdisplay: inline-block;\n\tfilter: drop-shadow(0px 1px 1px var(--mol_theme_back));\n\ttransform-origin: center;\n}\n\n[mol_icon_path] {\n\ttransform-origin: center;\n}\n"); +})($ || ($ = {})); +//mol/icon/-css/icon.view.css.ts +; +"use strict"; +var $; +(function ($) { + class $mol_link extends $mol_view { + dom_name() { + return "a"; + } + attr() { + return { + ...super.attr(), + href: this.uri(), + title: this.hint(), + target: this.target(), + download: this.file_name(), + mol_link_current: this.current() + }; + } + sub() { + return [ + this.title() + ]; + } + arg() { + return {}; + } + event() { + return { + ...super.event(), + click: (event) => this.click(event) + }; + } + uri() { + return ""; + } + hint() { + return ""; + } + target() { + return "_self"; + } + file_name() { + return ""; + } + current() { + return false; + } + event_click(event) { + if (event !== undefined) + return event; + return null; + } + click(event) { + return this.event_click(event); + } + } + __decorate([ + $mol_mem + ], $mol_link.prototype, "event_click", null); + $.$mol_link = $mol_link; +})($ || ($ = {})); +//mol/link/-view.tree/link.view.tree.ts +; +"use strict"; +var $; +(function ($) { + class $mol_state_arg extends $mol_object { + prefix; + static href(next) { + if (next === undefined) { + next = $mol_dom_context.location.href; + } + else if (!/^about:srcdoc/.test(next)) { + new $mol_after_frame(() => { + const next = this.href(); + const prev = $mol_dom_context.location.href; + if (next === prev) + return; + const history = $mol_dom_context.history; + history.replaceState(history.state, $mol_dom_context.document.title, next); + }); + } + if ($mol_dom_context.parent !== $mol_dom_context.self) { + $mol_dom_context.parent.postMessage(['hashchange', next], '*'); + } + return next; + } + static href_normal() { + return this.link({}); + } + static href_absolute() { + return new URL(this.href(), $mol_dom_context.location.href).toString(); + } + static dict(next) { + var href = this.href(next && this.make_link(next)).split(/#!?/)[1] || ''; + var chunks = href.split(this.separator); + var params = {}; + chunks.forEach(chunk => { + if (!chunk) + return; + var vals = chunk.split('=').map(decodeURIComponent); + params[vals.shift()] = vals.join('='); + }); + return params; + } + static dict_cut(except) { + const dict = this.dict(); + const cut = {}; + for (const key in dict) { + if (except.indexOf(key) >= 0) + continue; + cut[key] = dict[key]; + } + return cut; + } + static value(key, next) { + const nextDict = (next === void 0) ? void 0 : { ...this.dict(), [key]: next }; + const next2 = this.dict(nextDict)[key]; + return (next2 == null) ? null : next2; + } + static link(next) { + return this.make_link({ + ...this.dict_cut(Object.keys(next)), + ...next, + }); + } + static prolog = '!'; + static separator = '/'; + static make_link(next) { + const chunks = []; + for (let key in next) { + if (null == next[key]) + continue; + const val = next[key]; + chunks.push([key].concat(val ? [val] : []).map(this.encode).join('=')); + } + return new URL('#' + this.prolog + chunks.join(this.separator), this.href_absolute()).toString(); + } + static encode(str) { + return encodeURIComponent(str).replace(/\(/g, '%28').replace(/\)/g, '%29'); + } + constructor(prefix = '') { + super(); + this.prefix = prefix; + } + value(key, next) { + return this.constructor.value(this.prefix + key, next); + } + sub(postfix) { + return new this.constructor(this.prefix + postfix + '.'); + } + link(next) { + var prefix = this.prefix; + var dict = {}; + for (var key in next) { + dict[prefix + key] = next[key]; + } + return this.constructor.link(dict); + } + } + __decorate([ + $mol_mem + ], $mol_state_arg, "href", null); + __decorate([ + $mol_mem + ], $mol_state_arg, "href_normal", null); + __decorate([ + $mol_mem + ], $mol_state_arg, "href_absolute", null); + __decorate([ + $mol_mem + ], $mol_state_arg, "dict", null); + __decorate([ + $mol_mem_key + ], $mol_state_arg, "dict_cut", null); + __decorate([ + $mol_mem_key + ], $mol_state_arg, "value", null); + __decorate([ + $mol_mem_key + ], $mol_state_arg, "make_link", null); + $.$mol_state_arg = $mol_state_arg; + const $mol_state_arg_change = (event) => { + $mol_state_arg.href($mol_dom_context.location.href); + }; + self.addEventListener('hashchange', $mol_state_arg_change); +})($ || ($ = {})); +//mol/state/arg/arg.web.ts +; +"use strict"; +var $; +(function ($) { + const { rem } = $mol_style_unit; + const { scale } = $mol_style_func; + $mol_style_define($mol_link, { + textDecoration: 'none', + color: $mol_theme.control, + stroke: 'currentcolor', + cursor: 'pointer', + padding: $mol_gap.text, + boxSizing: 'border-box', + position: 'relative', + minWidth: rem(2.5), + gap: $mol_gap.space, + border: { + radius: $mol_gap.round, + }, + ':hover': { + background: { + color: $mol_theme.hover, + }, + $mol_icon: { + transform: 'scale(1.5)', + }, + }, + ':focus': { + outline: 'none', + background: { + color: $mol_theme.hover, + }, + $mol_icon: { + transform: 'scale(1.5)', + }, + }, + ':focus-within': { + outline: 'none', + background: { + color: $mol_theme.hover, + } + }, + '@': { + mol_link_current: { + 'true': { + color: $mol_theme.current, + textShadow: '0 0', + } + } + }, + }); +})($ || ($ = {})); +//mol/link/link.view.css.ts +; +"use strict"; +var $; +(function ($) { + var $$; + (function ($$) { + class $mol_link extends $.$mol_link { + uri() { + const arg = this.arg(); + const uri = new this.$.$mol_state_arg(this.state_key()).link(arg); + if (uri !== this.$.$mol_state_arg.href()) + return uri; + const arg2 = {}; + for (let i in arg) + arg2[i] = null; + return new this.$.$mol_state_arg(this.state_key()).link(arg2); + } + uri_native() { + const base = this.$.$mol_state_arg.href(); + return new URL(this.uri(), base); + } + current() { + const base = this.$.$mol_state_arg.href_normal(); + const target = this.uri_native().toString(); + if (base === target) + return true; + const args = this.arg(); + const keys = Object.keys(args).filter(key => args[key] != null); + if (keys.length === 0) + return false; + for (const key of keys) { + if (this.$.$mol_state_arg.value(key) !== args[key]) + return false; + } + return true; + } + file_name() { + return null; + } + minimal_height() { + return Math.max(super.minimal_height(), 24); + } + target() { + return (this.uri_native().origin === $mol_dom_context.location.origin) ? '_self' : '_blank'; + } + } + __decorate([ + $mol_mem + ], $mol_link.prototype, "uri", null); + __decorate([ + $mol_mem + ], $mol_link.prototype, "uri_native", null); + __decorate([ + $mol_mem + ], $mol_link.prototype, "current", null); + $$.$mol_link = $mol_link; + })($$ = $.$$ || ($.$$ = {})); +})($ || ($ = {})); +//mol/link/link.view.ts +; +"use strict"; +var $; +(function ($) { + class $mol_button_typed extends $mol_button { + minimal_height() { + return 40; + } + minimal_width() { + return 40; + } + } + $.$mol_button_typed = $mol_button_typed; +})($ || ($ = {})); +//mol/button/typed/-view.tree/typed.view.tree.ts +; +"use strict"; +var $; +(function ($) { + $mol_style_attach("mol/button/typed/typed.view.css", "[mol_button_typed] {\n\talign-content: center;\n\talign-items: center;\n\tpadding: var(--mol_gap_text);\n\tborder-radius: var(--mol_gap_round);\n\tgap: var(--mol_gap_space);\n\tuser-select: none;\n\tcursor: pointer;\n}\n\n[mol_button_typed][disabled] {\n\tpointer-events: none;\n}\n\n[mol_button_typed]:hover ,\n[mol_button_typed]:focus {\n\tbackground-color: var(--mol_theme_hover);\n}\n\n[mol_button_typed]:hover [mol_icon] ,\n[mol_button_typed]:focus [mol_icon] {\n\ttransform: scale(1.5);\n}\n"); +})($ || ($ = {})); +//mol/button/typed/-css/typed.view.css.ts +; +"use strict"; +var $; +(function ($) { + class $mol_button_minor extends $mol_button_typed { + } + $.$mol_button_minor = $mol_button_minor; +})($ || ($ = {})); +//mol/button/minor/-view.tree/minor.view.tree.ts +; +"use strict"; +var $; +(function ($) { + $mol_style_attach("mol/button/minor/minor.view.css", "[mol_button_minor] {\n\tcolor: var(--mol_theme_control);\n}\n\n[mol_button_minor][disabled] {\n\tcolor: var(--mol_theme_shade);\n}\n"); +})($ || ($ = {})); +//mol/button/minor/-css/minor.view.css.ts +; +"use strict"; +var $; +(function ($) { + class $mol_check extends $mol_button_minor { + attr() { + return { + ...super.attr(), + mol_check_checked: this.checked(), + "aria-checked": this.checked(), + role: "checkbox" + }; + } + sub() { + return [ + this.Icon(), + this.label() + ]; + } + checked(val) { + if (val !== undefined) + return val; + return false; + } + Icon() { + return null; + } + title() { + return ""; + } + Title() { + const obj = new this.$.$mol_view(); + obj.sub = () => [ + this.title() + ]; + return obj; + } + label() { + return [ + this.Title() + ]; + } + } + __decorate([ + $mol_mem + ], $mol_check.prototype, "checked", null); + __decorate([ + $mol_mem + ], $mol_check.prototype, "Title", null); + $.$mol_check = $mol_check; +})($ || ($ = {})); +//mol/check/-view.tree/check.view.tree.ts +; +"use strict"; +var $; +(function ($) { + $mol_style_attach("mol/check/check.css", "[mol_check] {\n\tflex: 0 0 auto;\n\tjustify-content: flex-start;\n\talign-content: center;\n\talign-items: flex-start;\n\tborder: none;\n\tfont-weight: inherit;\n\tbox-shadow: none;\n\ttext-align: left;\n\tpadding: var(--mol_gap_text);\n\tdisplay: inline-flex;\n\tflex-wrap: nowrap;\n}\n\n[mol_check_title] {\n\tflex-shrink: 1;\n}\n"); +})($ || ($ = {})); +//mol/check/-css/check.css.ts +; +"use strict"; +var $; +(function ($) { + var $$; + (function ($$) { + class $mol_check extends $.$mol_check { + click(next) { + if (next?.defaultPrevented) + return; + this.checked(!this.checked()); + if (next) + next.preventDefault(); + } + sub() { + return [ + ...$mol_maybe(this.Icon()), + ...this.label(), + ]; + } + label() { + return this.title() ? super.label() : []; + } + } + $$.$mol_check = $mol_check; + })($$ = $.$$ || ($.$$ = {})); +})($ || ($ = {})); +//mol/check/check.view.ts +; +"use strict"; +var $; +(function ($) { + class $mol_scroll extends $mol_view { + scroll_top(val) { + if (val !== undefined) + return val; + return 0; + } + scroll_left(val) { + if (val !== undefined) + return val; + return 0; + } + field() { + return { + ...super.field(), + tabIndex: this.tabindex() + }; + } + event() { + return { + ...super.event(), + scroll: (event) => this.event_scroll(event) + }; + } + tabindex() { + return -1; + } + event_scroll(event) { + if (event !== undefined) + return event; + return null; + } + } + __decorate([ + $mol_mem + ], $mol_scroll.prototype, "scroll_top", null); + __decorate([ + $mol_mem + ], $mol_scroll.prototype, "scroll_left", null); + __decorate([ + $mol_mem + ], $mol_scroll.prototype, "event_scroll", null); + $.$mol_scroll = $mol_scroll; +})($ || ($ = {})); +//mol/scroll/-view.tree/scroll.view.tree.ts +; +"use strict"; +var $; +(function ($) { + class $mol_print extends $mol_object { + static before() { + return new $mol_dom_listener(this.$.$mol_dom_context, 'beforeprint', () => { + this.active(true); + }); + } + static after() { + return new $mol_dom_listener(this.$.$mol_dom_context, 'afterprint', () => { + this.active(false); + }); + } + static active(next) { + this.before(); + this.after(); + return next || false; + } + } + __decorate([ + $mol_mem + ], $mol_print, "before", null); + __decorate([ + $mol_mem + ], $mol_print, "after", null); + __decorate([ + $mol_mem + ], $mol_print, "active", null); + $.$mol_print = $mol_print; +})($ || ($ = {})); +//mol/print/print.ts +; +"use strict"; +var $; +(function ($) { + var $$; + (function ($$) { + const { per, rem, px } = $mol_style_unit; + $mol_style_define($mol_scroll, { + overflow: 'auto', + }); + $mol_style_define($mol_scroll, { + display: 'flex', + overflow: 'overlay', + flex: { + direction: 'column', + grow: 1, + shrink: 1, + basis: 0, + }, + outline: 'none', + alignSelf: 'stretch', + boxSizing: 'border-box', + willChange: 'scroll-position', + maxHeight: per(100), + maxWidth: per(100), + webkitOverflowScrolling: 'touch', + contain: 'content', + '>': { + $mol_view: { + transform: 'translateZ(0)', + }, + }, + scrollbar: { + color: [$mol_theme.line, 'transparent'], + width: 'thin', + }, + '::-webkit-scrollbar': { + width: rem(.25), + height: rem(.25), + }, + ':hover': { + '::-webkit-scrollbar': { + width: rem(.5), + height: rem(.5), + }, + }, + '::-webkit-scrollbar-corner': { + background: { + color: $mol_theme.line, + }, + }, + '::-webkit-scrollbar-track': { + background: { + color: 'transparent', + }, + }, + '::-webkit-scrollbar-thumb': { + background: { + color: $mol_theme.line, + }, + border: { + radius: $mol_gap.round, + }, + }, + '@media': { + 'print': { + overflow: 'visible', + contain: 'none', + maxHeight: 'unset', + }, + }, + }); + })($$ = $.$$ || ($.$$ = {})); +})($ || ($ = {})); +//mol/scroll/scroll.view.css.ts +; +"use strict"; +var $; +(function ($) { + var $$; + (function ($$) { + class $mol_scroll extends $.$mol_scroll { + scroll_top(next, cache) { + const el = this.dom_node(); + if (next !== undefined && !cache) + el.scrollTop = next; + return el.scrollTop; + } + scroll_left(next, cache) { + const el = this.dom_node(); + if (next !== undefined && !cache) + el.scrollLeft = next; + return el.scrollLeft; + } + event_scroll(next) { + const el = this.dom_node(); + this.scroll_left(el.scrollLeft, 'cache'); + this.scroll_top(el.scrollTop, 'cache'); + } + minimal_height() { + return this.$.$mol_print.active() ? null : 0; + } + minimal_width() { + return this.$.$mol_print.active() ? null : 0; + } + } + __decorate([ + $mol_mem + ], $mol_scroll.prototype, "scroll_top", null); + __decorate([ + $mol_mem + ], $mol_scroll.prototype, "scroll_left", null); + $$.$mol_scroll = $mol_scroll; + })($$ = $.$$ || ($.$$ = {})); +})($ || ($ = {})); +//mol/scroll/scroll.view.ts +; +"use strict"; +var $; +(function ($) { + class $mol_paragraph extends $mol_view { + line_height() { + return 24; + } + letter_width() { + return 7; + } + width_limit() { + return Infinity; + } + sub() { + return [ + this.title() + ]; + } + } + $.$mol_paragraph = $mol_paragraph; +})($ || ($ = {})); +//mol/paragraph/-view.tree/paragraph.view.tree.ts +; +"use strict"; +var $; +(function ($) { + $mol_style_attach("mol/paragraph/paragraph.view.css", ":where([mol_paragraph]) {\n\tmargin: 0;\n\tmax-width: 100%;\n}\n"); +})($ || ($ = {})); +//mol/paragraph/-css/paragraph.view.css.ts +; +"use strict"; +var $; +(function ($) { + var $$; + (function ($$) { + class $mol_paragraph extends $.$mol_paragraph { + maximal_width() { + let width = 0; + const letter = this.letter_width(); + for (const kid of this.sub()) { + if (!kid) + continue; + if (kid instanceof $mol_view) { + width += kid.maximal_width(); + } + else if (typeof kid !== 'object') { + width += String(kid).length * letter; + } + } + return width; + } + width_limit() { + return this.$.$mol_window.size().width; + } + minimal_width() { + return this.letter_width(); + } + row_width() { + return Math.max(Math.min(this.width_limit(), this.maximal_width()), this.letter_width()); + } + minimal_height() { + return Math.max(1, Math.ceil(this.maximal_width() / this.row_width())) * this.line_height(); + } + } + __decorate([ + $mol_mem + ], $mol_paragraph.prototype, "maximal_width", null); + __decorate([ + $mol_mem + ], $mol_paragraph.prototype, "row_width", null); + __decorate([ + $mol_mem + ], $mol_paragraph.prototype, "minimal_height", null); + $$.$mol_paragraph = $mol_paragraph; + })($$ = $.$$ || ($.$$ = {})); +})($ || ($ = {})); +//mol/paragraph/paragraph.view.ts +; +"use strict"; +var $; +(function ($) { + class $mol_list extends $mol_view { + render_visible_only() { + return true; + } + render_over() { + return 0; + } + sub() { + return this.rows(); + } + Empty() { + const obj = new this.$.$mol_view(); + return obj; + } + Gap_before() { + const obj = new this.$.$mol_view(); + obj.style = () => ({ + paddingTop: this.gap_before() + }); + return obj; + } + Gap_after() { + const obj = new this.$.$mol_view(); + obj.style = () => ({ + paddingTop: this.gap_after() + }); + return obj; + } + view_window() { + return [ + 0, + 0 + ]; + } + rows() { + return []; + } + gap_before() { + return 0; + } + gap_after() { + return 0; + } + } + __decorate([ + $mol_mem + ], $mol_list.prototype, "Empty", null); + __decorate([ + $mol_mem + ], $mol_list.prototype, "Gap_before", null); + __decorate([ + $mol_mem + ], $mol_list.prototype, "Gap_after", null); + $.$mol_list = $mol_list; +})($ || ($ = {})); +//mol/list/-view.tree/list.view.tree.ts +; +"use strict"; +var $; +(function ($) { + let cache = null; + function $mol_support_css_overflow_anchor() { + return cache ?? (cache = this.$mol_dom_context.CSS?.supports('overflow-anchor:auto') ?? false); + } + $.$mol_support_css_overflow_anchor = $mol_support_css_overflow_anchor; +})($ || ($ = {})); +//mol/support/css/css.ts +; +"use strict"; +var $; +(function ($) { + function $mol_wire_probe(task, next) { + const warm = $mol_wire_fiber.warm; + try { + $mol_wire_fiber.warm = false; + return task(); + } + finally { + $mol_wire_fiber.warm = warm; + } + } + $.$mol_wire_probe = $mol_wire_probe; +})($ || ($ = {})); +//mol/wire/probe/probe.ts +; +"use strict"; +var $; +(function ($) { + $.$mol_mem_cached = $mol_wire_probe; +})($ || ($ = {})); +//mol/mem/cached/cached.ts +; +"use strict"; +var $; +(function ($) { + $mol_style_attach("mol/list/list.view.css", "[mol_list] {\n\twill-change: contents;\n\tdisplay: flex;\n\tflex-direction: column;\n\tflex-shrink: 0;\n\tmax-width: 100%;\n\t/* display: flex;\n\talign-items: stretch;\n\talign-content: stretch; */\n\ttransition: none;\n\tmin-height: .5rem;\n}\n\n[mol_list_gap_before] ,\n[mol_list_gap_after] {\n\tdisplay: block !important;\n\tflex: none;\n\ttransition: none;\n\toverflow-anchor: none;\n}\n"); +})($ || ($ = {})); +//mol/list/-css/list.view.css.ts +; +"use strict"; +var $; +(function ($) { + var $$; + (function ($$) { + class $mol_list extends $.$mol_list { + sub() { + const rows = this.rows(); + return (rows.length === 0) ? [this.Empty()] : rows; + } + render_visible_only() { + return this.$.$mol_support_css_overflow_anchor(); + } + view_window(next) { + const kids = this.sub(); + if (kids.length < 3) + return [0, kids.length]; + if (this.$.$mol_print.active()) + return [0, kids.length]; + const rect = this.view_rect(); + if (next) + return next; + let [min, max] = $mol_mem_cached(() => this.view_window()) ?? [0, 0]; + let max2 = max = Math.min(max, kids.length); + let min2 = min = Math.max(0, Math.min(min, max - 1)); + const anchoring = this.render_visible_only(); + const window_height = this.$.$mol_window.size().height + 40; + const over = Math.ceil(window_height * this.render_over()); + const limit_top = -over; + const limit_bottom = window_height + over; + const gap_before = $mol_mem_cached(() => this.gap_before()) ?? 0; + const gap_after = $mol_mem_cached(() => this.gap_after()) ?? 0; + let top = Math.ceil(rect?.top ?? 0) + gap_before; + let bottom = Math.ceil(rect?.bottom ?? 0) - gap_after; + if (top <= limit_top && bottom >= limit_bottom) { + return [min2, max2]; + } + if (anchoring && ((bottom < limit_top) || (top > limit_bottom))) { + min = 0; + top = Math.ceil(rect?.top ?? 0); + while (min < (kids.length - 1)) { + const height = kids[min].minimal_height(); + if (top + height >= limit_top) + break; + top += height; + ++min; + } + min2 = min; + max2 = max = min; + bottom = top; + } + let top2 = top; + let bottom2 = bottom; + if (anchoring && (top <= limit_top) && (bottom2 < limit_bottom)) { + min2 = Math.max(0, max - 1); + top2 = bottom; + } + if ((bottom >= limit_bottom) && (top2 >= limit_top)) { + max2 = Math.min(min + 1, kids.length); + bottom2 = top; + } + while (bottom2 < limit_bottom && max2 < kids.length) { + bottom2 += kids[max2].minimal_height(); + ++max2; + } + while (anchoring && ((top2 >= limit_top) && (min2 > 0))) { + --min2; + top2 -= kids[min2].minimal_height(); + } + return [min2, max2]; + } + gap_before() { + const skipped = this.sub().slice(0, this.view_window()[0]); + return Math.max(0, skipped.reduce((sum, view) => sum + view.minimal_height(), 0)); + } + gap_after() { + const skipped = this.sub().slice(this.view_window()[1]); + return Math.max(0, skipped.reduce((sum, view) => sum + view.minimal_height(), 0)); + } + sub_visible() { + return [ + ...this.gap_before() ? [this.Gap_before()] : [], + ...this.sub().slice(...this.view_window()), + ...this.gap_after() ? [this.Gap_after()] : [], + ]; + } + minimal_height() { + return this.sub().reduce((sum, view) => { + try { + return sum + view.minimal_height(); + } + catch (error) { + $mol_fail_log(error); + return sum; + } + }, 0); + } + force_render(path) { + const kids = this.rows(); + const index = kids.findIndex(item => path.has(item)); + if (index >= 0) { + const win = this.view_window(); + if (index < win[0] || index >= win[1]) { + this.view_window([index, index + 1]); + } + kids[index].force_render(path); + } + } + } + __decorate([ + $mol_mem + ], $mol_list.prototype, "sub", null); + __decorate([ + $mol_mem + ], $mol_list.prototype, "view_window", null); + __decorate([ + $mol_mem + ], $mol_list.prototype, "gap_before", null); + __decorate([ + $mol_mem + ], $mol_list.prototype, "gap_after", null); + __decorate([ + $mol_mem + ], $mol_list.prototype, "sub_visible", null); + __decorate([ + $mol_mem + ], $mol_list.prototype, "minimal_height", null); + $$.$mol_list = $mol_list; + })($$ = $.$$ || ($.$$ = {})); +})($ || ($ = {})); +//mol/list/list.view.ts +; +"use strict"; +var $; +(function ($) { + class $mol_bar extends $mol_view { + } + $.$mol_bar = $mol_bar; +})($ || ($ = {})); +//mol/bar/-view.tree/bar.view.tree.ts +; +"use strict"; +var $; +(function ($) { + $mol_style_attach("mol/bar/bar.view.css", "[mol_bar] {\n\tdisplay: flex;\n\t/* box-shadow: inset 0 0 0 1px var(--mol_theme_line); */\n\tborder-radius: var(--mol_gap_round);\n}\n"); +})($ || ($ = {})); +//mol/bar/-css/bar.view.css.ts +; +"use strict"; +var $; +(function ($) { + class $hyoo_todomvc extends $mol_scroll { + title() { + return "Todos"; + } + attr() { + return { + ...super.attr(), + mol_theme: "$mol_theme_light" + }; + } + sub() { + return [ + this.Page() + ]; + } + Title() { + const obj = new this.$.$mol_paragraph(); + obj.minimal_height = () => 176; + obj.title = () => this.title(); + return obj; + } + head_complete_enabled() { + return false; + } + completed_all(next) { + if (next !== undefined) + return next; + return false; + } + Head_complete() { + const obj = new this.$.$mol_check(); + obj.enabled = () => this.head_complete_enabled(); + obj.checked = (next) => this.completed_all(next); + obj.title = () => "❯"; + return obj; + } + task_title_new(next) { + if (next !== undefined) + return next; + return ""; + } + add(next) { + if (next !== undefined) + return next; + return null; + } + Add() { + const obj = new this.$.$hyoo_todomvc_add(); + obj.value = (next) => this.task_title_new(next); + obj.done = (next) => this.add(next); + return obj; + } + Head_content() { + return [ + this.Head_complete(), + this.Add() + ]; + } + Head() { + const obj = new this.$.$mol_view(); + obj.minimal_height = () => 64; + obj.sub = () => this.Head_content(); + return obj; + } + task_completed(id, next) { + if (next !== undefined) + return next; + return false; + } + task_title(id, next) { + if (next !== undefined) + return next; + return ""; + } + task_drop(id, next) { + if (next !== undefined) + return next; + return null; + } + Task_row(id) { + const obj = new this.$.$hyoo_todomvc_task_row(); + obj.completed = (next) => this.task_completed(id, next); + obj.title = (next) => this.task_title(id, next); + obj.drop = (next) => this.task_drop(id, next); + return obj; + } + task_rows() { + return [ + this.Task_row("0") + ]; + } + List() { + const obj = new this.$.$mol_list(); + obj.rows = () => this.task_rows(); + return obj; + } + pending_message() { + return "0 items left "; + } + Pending() { + const obj = new this.$.$mol_paragraph(); + obj.title = () => this.pending_message(); + return obj; + } + Filter_all() { + const obj = new this.$.$mol_link(); + obj.title = () => "All"; + obj.arg = () => ({ + completed: null + }); + return obj; + } + Filter_active() { + const obj = new this.$.$mol_link(); + obj.title = () => "Active"; + obj.arg = () => ({ + completed: "false" + }); + return obj; + } + Filter_completed() { + const obj = new this.$.$mol_link(); + obj.title = () => "Completed"; + obj.arg = () => ({ + completed: "true" + }); + return obj; + } + filterOptions() { + return [ + this.Filter_all(), + this.Filter_active(), + this.Filter_completed() + ]; + } + Filter() { + const obj = new this.$.$mol_bar(); + obj.sub = () => this.filterOptions(); + return obj; + } + sweep_enabled() { + return true; + } + sweep(next) { + if (next !== undefined) + return next; + return null; + } + sweep_label() { + return "Clear completed"; + } + Sweep() { + const obj = new this.$.$mol_button_minor(); + obj.enabled = () => this.sweep_enabled(); + obj.click = (next) => this.sweep(next); + obj.sub = () => [ + this.sweep_label() + ]; + return obj; + } + foot_content() { + return [ + this.Pending(), + this.Filter(), + this.Sweep() + ]; + } + Foot() { + const obj = new this.$.$mol_view(); + obj.sub = () => this.foot_content(); + return obj; + } + panels() { + return [ + this.Head(), + this.List(), + this.Foot() + ]; + } + Panel() { + const obj = new this.$.$mol_list(); + obj.rows = () => this.panels(); + return obj; + } + Page() { + const obj = new this.$.$mol_list(); + obj.rows = () => [ + this.Title(), + this.Panel() + ]; + return obj; + } + } + __decorate([ + $mol_mem + ], $hyoo_todomvc.prototype, "Title", null); + __decorate([ + $mol_mem + ], $hyoo_todomvc.prototype, "completed_all", null); + __decorate([ + $mol_mem + ], $hyoo_todomvc.prototype, "Head_complete", null); + __decorate([ + $mol_mem + ], $hyoo_todomvc.prototype, "task_title_new", null); + __decorate([ + $mol_mem + ], $hyoo_todomvc.prototype, "add", null); + __decorate([ + $mol_mem + ], $hyoo_todomvc.prototype, "Add", null); + __decorate([ + $mol_mem + ], $hyoo_todomvc.prototype, "Head", null); + __decorate([ + $mol_mem_key + ], $hyoo_todomvc.prototype, "task_completed", null); + __decorate([ + $mol_mem_key + ], $hyoo_todomvc.prototype, "task_title", null); + __decorate([ + $mol_mem_key + ], $hyoo_todomvc.prototype, "task_drop", null); + __decorate([ + $mol_mem_key + ], $hyoo_todomvc.prototype, "Task_row", null); + __decorate([ + $mol_mem + ], $hyoo_todomvc.prototype, "List", null); + __decorate([ + $mol_mem + ], $hyoo_todomvc.prototype, "Pending", null); + __decorate([ + $mol_mem + ], $hyoo_todomvc.prototype, "Filter_all", null); + __decorate([ + $mol_mem + ], $hyoo_todomvc.prototype, "Filter_active", null); + __decorate([ + $mol_mem + ], $hyoo_todomvc.prototype, "Filter_completed", null); + __decorate([ + $mol_mem + ], $hyoo_todomvc.prototype, "Filter", null); + __decorate([ + $mol_mem + ], $hyoo_todomvc.prototype, "sweep", null); + __decorate([ + $mol_mem + ], $hyoo_todomvc.prototype, "Sweep", null); + __decorate([ + $mol_mem + ], $hyoo_todomvc.prototype, "Foot", null); + __decorate([ + $mol_mem + ], $hyoo_todomvc.prototype, "Panel", null); + __decorate([ + $mol_mem + ], $hyoo_todomvc.prototype, "Page", null); + $.$hyoo_todomvc = $hyoo_todomvc; + class $hyoo_todomvc_add extends $mol_string { + hint() { + return "What needs to be done?"; + } + event() { + return { + ...super.event(), + keydown: (next) => this.press(next) + }; + } + done(next) { + if (next !== undefined) + return next; + return null; + } + press(next) { + if (next !== undefined) + return next; + return null; + } + } + __decorate([ + $mol_mem + ], $hyoo_todomvc_add.prototype, "done", null); + __decorate([ + $mol_mem + ], $hyoo_todomvc_add.prototype, "press", null); + $.$hyoo_todomvc_add = $hyoo_todomvc_add; + class $hyoo_todomvc_task_row extends $mol_view { + minimal_height() { + return 64; + } + attr() { + return { + ...super.attr(), + hyoo_todomvc_task_row_completed: this.completed() + }; + } + sub() { + return [ + this.Complete(), + this.Title(), + this.Drop() + ]; + } + completed(next) { + if (next !== undefined) + return next; + return false; + } + Complete() { + const obj = new this.$.$mol_check(); + obj.checked = (next) => this.completed(next); + return obj; + } + title_hint() { + return "Task title"; + } + title(next) { + if (next !== undefined) + return next; + return ""; + } + Title() { + const obj = new this.$.$mol_string(); + obj.hint = () => this.title_hint(); + obj.value = (next) => this.title(next); + return obj; + } + drop(next) { + if (next !== undefined) + return next; + return null; + } + Drop() { + const obj = new this.$.$mol_button_typed(); + obj.sub = () => [ + "✖" + ]; + obj.click = (next) => this.drop(next); + return obj; + } + } + __decorate([ + $mol_mem + ], $hyoo_todomvc_task_row.prototype, "completed", null); + __decorate([ + $mol_mem + ], $hyoo_todomvc_task_row.prototype, "Complete", null); + __decorate([ + $mol_mem + ], $hyoo_todomvc_task_row.prototype, "title", null); + __decorate([ + $mol_mem + ], $hyoo_todomvc_task_row.prototype, "Title", null); + __decorate([ + $mol_mem + ], $hyoo_todomvc_task_row.prototype, "drop", null); + __decorate([ + $mol_mem + ], $hyoo_todomvc_task_row.prototype, "Drop", null); + $.$hyoo_todomvc_task_row = $hyoo_todomvc_task_row; +})($ || ($ = {})); +//hyoo/todomvc/-view.tree/todomvc.view.tree.ts +; +"use strict"; +var $; +(function ($) { + class $mol_state_local extends $mol_object { + static 'native()'; + static native() { + if (this['native()']) + return this['native()']; + check: try { + const native = $mol_dom_context.localStorage; + if (!native) + break check; + native.setItem('', ''); + native.removeItem(''); + return this['native()'] = native; + } + catch (error) { + console.warn(error); + } + return this['native()'] = { + getItem(key) { + return this[':' + key]; + }, + setItem(key, value) { + this[':' + key] = value; + }, + removeItem(key) { + this[':' + key] = void 0; + } + }; + } + static changes(next) { return next; } + static value(key, next) { + this.changes(); + if (next === void 0) + return JSON.parse(this.native().getItem(key) || 'null'); + if (next === null) + this.native().removeItem(key); + else + this.native().setItem(key, JSON.stringify(next)); + return next; + } + prefix() { return ''; } + value(key, next) { + return $mol_state_local.value(this.prefix() + '.' + key, next); + } + } + __decorate([ + $mol_mem + ], $mol_state_local, "changes", null); + __decorate([ + $mol_mem_key + ], $mol_state_local, "value", null); + $.$mol_state_local = $mol_state_local; +})($ || ($ = {})); +//mol/state/local/local.ts +; +"use strict"; +var $; +(function ($) { + self.addEventListener('storage', event => $.$mol_state_local.changes(event)); +})($ || ($ = {})); +//mol/state/local/local.web.ts +; +"use strict"; +var $; +(function ($) { + $mol_style_attach("hyoo/todomvc/todomvc.css", "[hyoo_todomvc] {\n\talign-self: stretch;\n\twidth: 100%;\n\tmargin: 0;\n\ttransition: none;\n}\n\n[hyoo_todomvc] [mol_string] ,\n[hyoo_todomvc] [mol_string]:focus ,\n[hyoo_todomvc] [mol_string]:hover ,\n[hyoo_todomvc] [mol_button] ,\n[hyoo_todomvc] [mol_button]:focus ,\n[hyoo_todomvc] [mol_button]:hover ,\n[hyoo_todomvc] [mol_link] ,\n[hyoo_todomvc] [mol_link]:focus ,\n[hyoo_todomvc] [mol_link]:hover {\n\tbox-shadow: none;\n\tbackground-color: transparent;\n}\n\n[hyoo_todomvc] [mol_link_current] {\n\tcolor: black;\n}\n\n[hyoo_todomvc] [mol_link]:not([mol_link_current]):hover ,\n[hyoo_todomvc] [mol_link]:not([mol_link_current]):focus {\n\ttext-decoration: underline;\n}\n\n[hyoo_todomvc_head_complete] {\n\tflex: 0 0 4rem;\n\ttransform: rotate( 90deg );\n\talign-items: center;\n\topacity: .5;\n\tpadding: 0;\n\tjustify-content: center;\n}\n[hyoo_todomvc_head_complete]:disabled {\n\tvisibility: hidden;\n}\n[hyoo_todomvc_head_complete][mol_check_checked] {\n\topacity: 1;\n}\n\n[hyoo_todomvc_add] {\n\tpadding: 0;\n\tflex: 1 1 auto;\n}\n\n[hyoo_todomvc_list] {\n\tfont-size: 1.5rem;\n\ttransition: none;\n}\n\n[hyoo_todomvc_page] {\n\tflex: 1 1 auto;\n\ttransition: none;\n}\n\n[hyoo_todomvc_panel] {\n\tbox-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.2), 0 25px 50px 0 rgba(0, 0, 0, 0.1);\n\twidth: 38rem;\n\t--mol_theme_back: white;\n\t--mol_theme_text: black;\n\tbackground-color: var(--mol_theme_back);\n\tdisplay: flex;\n\tflex-direction: column;\n\tmargin: 0 auto 2rem;\n\ttransition: none;\n}\n\n[hyoo_todomvc_head] {\n\tfont-size: 1.5rem;\n\tpadding: 0;\n\tdisplay: flex;\n\theight: 4rem;\n}\n\n[hyoo_todomvc_title] {\n\tword-break: normal;\n\tdisplay: block;\n\tpadding: .25rem;\n\tfont-size: 7rem;\n\tfont-weight: 100;\n\ttext-align: center;\n\tcolor: rgba(275, 147, 147, 0.2);\n\ttext-rendering: optimizeLegibility;\n\ttext-transform: lowercase;\n\tline-height: 1.5;\n}\n\n[hyoo_todomvc_task_row] {\n\tdisplay: flex;\n\tbackground-color: white;\n\tbox-shadow: 0 -1px 0 0 #ededed;\n\theight: 4rem;\n}\n\n[hyoo_todomvc_task_row_complete] {\n\tflex: 0 0 4rem;\n\tpadding: 1rem;\n\tbackground: no-repeat center center url('hyoo/todomvc/todomvc_active.svg');\n}\n[hyoo_todomvc_task_row_complete][mol_check_checked] {\n\tbackground: no-repeat center center url('hyoo/todomvc/todomvc_completed.svg');\n}\n\n[hyoo_todomvc_task_row_title] {\n\tpadding: 0;\n\tflex: 1 1 auto;\n}\n\n[hyoo_todomvc_task_row_completed] [hyoo_todomvc_task_row_title] {\n\tcolor: #d9d9d9;\n\ttext-decoration: line-through;\n}\n\n[hyoo_todomvc_task_row_drop] {\n\tfont-size: 1.25rem;\n\tflex: 0 04rem;\n\tpadding: 1.25rem;\n}\n[hyoo_todomvc_task_row]:not(:hover) [hyoo_todomvc_task_row_drop]:not(:focus) {\n\topacity: 0;\n\tcolor: #cc9a9a;\n}\n\n[hyoo_todomvc_foot] {\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\talign-items: baseline;\n\tpadding: .5rem 1rem;\n\tcolor: #777;\n\tfont-size: .85rem;\n\tborder-top: 1px solid #ededed;\n\tbox-shadow: 0 1px 1px rgba(0, 0, 0, 0.2), 0 8px 0 -3px #f6f6f6, 0 9px 1px -3px rgba(0, 0, 0, 0.2), 0 16px 0 -6px #f6f6f6, 0 17px 2px -6px rgba(0, 0, 0, 0.2);\n}\n\n[hyoo_todomvc_pending] {\n\tpadding: .25rem;\n\tflex: 0 1 6rem;\n}\n\n[hyoo_todomvc_filter] {\n\tflex: 1 100 auto;\n\tdisplay: flex;\n\tjustify-content: center;\n\tmargin: .25rem;\n\tbox-shadow: none;\n}\n\n[hyoo_todomvc_sweep] {\n\tflex: 0 1 auto;\n\tpadding: .25rem;\n}\n[hyoo_todomvc_sweep][disabled] {\n\tvisibility: hidden;\n}\n\n[hyoo_todomvc_sweep]:hover ,\n[hyoo_todomvc_sweep]:focus {\n\ttext-decoration: underline;\n}\n"); +})($ || ($ = {})); +//hyoo/todomvc/-css/todomvc.css.ts +; +"use strict"; +var $; +(function ($) { + var $$; + (function ($$) { + class $hyoo_todomvc_add extends $.$hyoo_todomvc_add { + press(next) { + switch (next.keyCode) { + case $mol_keyboard_code.enter: return this.done(next); + } + } + } + $$.$hyoo_todomvc_add = $hyoo_todomvc_add; + class $hyoo_todomvc extends $.$hyoo_todomvc { + task_ids(next) { + return this.$.$mol_state_local.value(this.state_key('mol-todos'), next) || []; + } + arg_completed() { + return this.$.$mol_state_arg.value(this.state_key('completed')); + } + groups_completed() { + var groups = { 'true': [], 'false': [] }; + for (let id of this.task_ids()) { + var task = this.task(id); + groups[String(task.completed)].push(id); + } + return groups; + } + task_ids_filtered() { + var completed = this.arg_completed(); + if (completed) { + return this.groups_completed()[completed] || []; + } + else { + return this.task_ids(); + } + } + completed_all(next) { + if (next === void 0) + return this.groups_completed()['false'].length === 0; + for (let id of this.groups_completed()[String(!next)]) { + var task = this.task(id); + this.task(id, { title: task.title, completed: next }); + } + return next; + } + head_complete_enabled() { + return this.task_ids().length > 0; + } + pending_message() { + let count = this.groups_completed()['false'].length; + return (count === 1) ? '1 item left' : `${count} items left`; + } + new_id() { + return Math.max(1, 1 + Math.max(...this.task_ids())); + } + add(next) { + var title = this.task_title_new(); + if (!title) + return; + var id = this.new_id(); + var task = { completed: false, title }; + this.task(id, task); + this.task_ids([...this.task_ids(), id]); + this.task_title_new(''); + } + task_rows() { + return this.task_ids_filtered().map(id => this.Task_row(id)); + } + task(id, next) { + const key = this.state_key(`mol-todos-${id}`); + if (next === void 0) { + return this.$.$mol_state_local.value(key) || { title: '', completed: false }; + } + this.$.$mol_state_local.value(key, next); + return next || null; + } + task_completed(id, next) { + return this.task(id, next === undefined ? undefined : { ...this.task(id), completed: next }).completed ?? false; + } + task_title(id, next) { + return this.task(id, next === undefined ? undefined : { ...this.task(id), title: next }).title ?? ''; + } + task_drop(id, next) { + this.task(id, null); + this.task_ids(this.task_ids().filter(id2 => id !== id2)); + } + sweep() { + this.task_ids(this.task_ids().filter(id => { + if (!this.task(id).completed) + return true; + this.task(id, null); + return false; + })); + } + panels() { + return [ + this.Head(), + this.List(), + ...this.foot_visible() ? [this.Foot()] : [], + ]; + } + foot_visible() { + return this.task_ids().length > 0; + } + sweep_enabled() { + return this.groups_completed()['true'].length > 0; + } + } + __decorate([ + $mol_mem + ], $hyoo_todomvc.prototype, "groups_completed", null); + __decorate([ + $mol_mem + ], $hyoo_todomvc.prototype, "task_ids_filtered", null); + __decorate([ + $mol_mem + ], $hyoo_todomvc.prototype, "completed_all", null); + __decorate([ + $mol_mem + ], $hyoo_todomvc.prototype, "pending_message", null); + __decorate([ + $mol_mem + ], $hyoo_todomvc.prototype, "new_id", null); + __decorate([ + $mol_mem + ], $hyoo_todomvc.prototype, "task_rows", null); + __decorate([ + $mol_mem_key + ], $hyoo_todomvc.prototype, "task_completed", null); + __decorate([ + $mol_mem_key + ], $hyoo_todomvc.prototype, "task_title", null); + $$.$hyoo_todomvc = $hyoo_todomvc; + })($$ = $.$$ || ($.$$ = {})); +})($ || ($ = {})); +//hyoo/todomvc/todomvc.view.ts +; +var $node = $node || {} ; $node[ "/hyoo/todomvc/todomvc_active.svg" ] = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0MCIgaGVpZ2h0PSI0MCIgdmlld0JveD0iMCAtMTggMTAwIDEzNSI+DQoJPGNpcmNsZSBjeD0iNTAiIGN5PSI1MCIgcj0iNTAiIGZpbGw9Im5vbmUiICBzdHJva2U9IiNlZGVkZWQiIHN0cm9rZS13aWR0aD0iMyIvPg0KPC9zdmc+" + +; +var $node = $node || {} ; $node[ "/hyoo/todomvc/todomvc_completed.svg" ] = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0MCIgaGVpZ2h0PSI0MCIgdmlld0JveD0iMCAtMTggMTAwIDEzNSI+DQoJPGNpcmNsZSBjeD0iNTAiIGN5PSI1MCIgcj0iNTAiIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2JkZGFkNSIgc3Ryb2tlLXdpZHRoPSIzIi8+DQoJPHBhdGggZmlsbD0iJTIzNWRjMmFmIiBkPSJNNzIgMjVMNDIgNzEgMjcgNTZsLTQgNCAyMCAyMCAzNC01MnoiLz4NCjwvc3ZnPg0K" + +; +export default $ +//# sourceMappingURL=web.esm.js.map diff --git a/examples/mol/web.esm.js.map b/examples/mol/web.esm.js.map new file mode 100644 index 0000000000..63f3411c05 --- /dev/null +++ b/examples/mol/web.esm.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../../mam.jam.js","-","../../../mam.ts","../../hyoo.ts","../../../mol/ambient/mol/ambient/ambient.ts","../../../mol/delegate/mol/delegate/delegate.ts","../../../mol/owning/mol/owning/owning.ts","../../../mol/fail/mol/fail/fail.ts","../../../mol/fail/hidden/mol/fail/hidden/hidden.ts","../../../mol/type/writable/writable.ts","../../../mol/object2/mol/object2/object2.ts","../../../mol/after/tick/mol/after/tick/tick.ts","../../../mol/dom/context/mol/dom/context/context.ts","../../../mol/dom/context/mol/dom/context/context.web.ts","../../../mol/style/attach/mol/style/attach/attach.ts","../../../mol/decor/mol/decor/decor.ts","../../../mol/style/unit/mol/style/unit/unit.ts","../../../mol/style/func/mol/style/func/func.ts","../../../mol/theme/-css/mol/theme/-css/theme.css.ts","../../../mol/theme/mol/theme/theme.ts","../../../mol/object/mol/object/object.ts","../../../mol/wire/cursor/mol/wire/cursor/cursor.ts","../../../mol/wire/pub/mol/wire/pub/pub.ts","../../../mol/wire/sub/sub.ts","../../../mol/wire/mol/wire/wire.ts","../../../mol/dev/format/mol/dev/format/format.ts","../../../mol/wire/pub/sub/mol/wire/pub/sub/sub.ts","../../../mol/after/frame/mol/after/frame/frame.web.ts","../../../mol/wire/fiber/mol/wire/fiber/fiber.ts","../../../mol/guid/mol/guid/guid.ts","../../../mol/key/mol/key/key.ts","../../../mol/compare/deep/mol/compare/deep/deep.ts","../../../mol/wire/task/mol/wire/task/task.ts","../../../mol/wire/method/mol/wire/method/method.ts","../../../mol/wire/atom/mol/wire/atom/atom.ts","../../../mol/wire/mem/mol/wire/mem/mem.ts","../../../mol/mem/mol/mem/mem.ts","../../../mol/window/mol/window/window.web.ts","../../../mol/fail/catch/mol/fail/catch/catch.ts","../../../mol/fail/log/mol/fail/log/log.ts","../../../mol/view/selection/mol/view/selection/selection.ts","../../../mol/maybe/mol/maybe/maybe.ts","../../../mol/view/selection/mol/view/selection/selection.web.ts","../../../mol/wrapper/mol/wrapper/wrapper.ts","../../../mol/memo/mol/memo/memo.ts","../../../mol/dom/qname/mol/dom/qname/qname.ts","../../../mol/wire/watch/mol/wire/watch/watch.ts","../../../mol/const/mol/const/const.ts","../../../mol/dom/render/attributes/mol/dom/render/attributes/attributes.ts","../../../mol/wire/async/mol/wire/async/async.ts","../../../mol/dom/render/styles/mol/dom/render/styles/styles.ts","../../../mol/dom/render/children/mol/dom/render/children/children.ts","../../../mol/dom/render/fields/mol/dom/render/fields/fields.ts","../../../mol/func/name/mol/func/name/name.ts","../../../mol/type/keys/extract/extract.ts","../../../mol/type/pick/pick.ts","../../../mol/view/view/mol/view/view/view.ts","../../../mol/view/view/-css/mol/view/view/-css/view.css.ts","../../../mol/view/view/mol/view/view/view.web.ts","../../../mol/plugin/mol/plugin/plugin.ts","../../../mol/hotkey/-view.tree/mol/hotkey/-view.tree/hotkey.view.tree.ts","../../../mol/keyboard/mol/keyboard/code.ts","../../../mol/hotkey/mol/hotkey/hotkey.view.ts","../../../mol/string/-view.tree/mol/string/-view.tree/string.view.tree.ts","../../../mol/gap/-css/mol/gap/-css/gap.css.ts","../../../mol/gap/mol/gap/gap.ts","../../../mol/dom/listener/mol/dom/listener/listener.ts","../../../mol/string/-css/mol/string/-css/string.view.css.ts","../../../mol/string/mol/string/string.view.ts","../../../mol/speck/-view.tree/mol/speck/-view.tree/speck.view.tree.ts","../../../mol/speck/-css/mol/speck/-css/speck.view.css.ts","../../../mol/button/-view.tree/mol/button/-view.tree/button.view.tree.ts","../../../mol/button/-css/mol/button/-css/button.view.css.ts","../../../mol/button/mol/button/button.view.ts","../../../mol/type/result/result.ts","../../../mol/type/error/error.ts","../../../mol/type/override/override.ts","../../../mol/style/properties/properties.ts","../../../mol/style/pseudo/class.ts","../../../mol/style/pseudo/element.ts","../../../mol/style/guard/guard.ts","../../../mol/style/sheet/mol/style/sheet/sheet.ts","../../../mol/style/define/mol/style/define/define.ts","../../../mol/svg/-view.tree/mol/svg/-view.tree/svg.view.tree.ts","../../../mol/after/timeout/mol/after/timeout/timeout.ts","../../../mol/state/time/mol/state/time/time.ts","../../../mol/svg/mol/svg/svg.view.ts","../../../mol/svg/root/-view.tree/mol/svg/root/-view.tree/root.view.tree.ts","../../../mol/svg/root/-css/mol/svg/root/-css/root.view.css.ts","../../../mol/svg/path/-view.tree/mol/svg/path/-view.tree/path.view.tree.ts","../../../mol/icon/-view.tree/mol/icon/-view.tree/icon.view.tree.ts","../../../mol/icon/-css/mol/icon/-css/icon.view.css.ts","../../../mol/link/-view.tree/mol/link/-view.tree/link.view.tree.ts","../../../mol/state/arg/mol/state/arg/arg.web.ts","../../../mol/link/mol/link/link.view.css.ts","../../../mol/link/mol/link/link.view.ts","../../../mol/button/typed/-view.tree/mol/button/typed/-view.tree/typed.view.tree.ts","../../../mol/button/typed/-css/mol/button/typed/-css/typed.view.css.ts","../../../mol/button/minor/-view.tree/mol/button/minor/-view.tree/minor.view.tree.ts","../../../mol/button/minor/-css/mol/button/minor/-css/minor.view.css.ts","../../../mol/check/-view.tree/mol/check/-view.tree/check.view.tree.ts","../../../mol/check/-css/mol/check/-css/check.css.ts","../../../mol/check/mol/check/check.view.ts","../../../mol/scroll/-view.tree/mol/scroll/-view.tree/scroll.view.tree.ts","../../../mol/print/mol/print/print.ts","../../../mol/scroll/mol/scroll/scroll.view.css.ts","../../../mol/scroll/mol/scroll/scroll.view.ts","../../../mol/paragraph/-view.tree/mol/paragraph/-view.tree/paragraph.view.tree.ts","../../../mol/paragraph/-css/mol/paragraph/-css/paragraph.view.css.ts","../../../mol/paragraph/mol/paragraph/paragraph.view.ts","../../../mol/list/-view.tree/mol/list/-view.tree/list.view.tree.ts","../../../mol/support/css/mol/support/css/css.ts","../../../mol/wire/probe/mol/wire/probe/probe.ts","../../../mol/mem/cached/mol/mem/cached/cached.ts","../../../mol/list/-css/mol/list/-css/list.view.css.ts","../../../mol/list/mol/list/list.view.ts","../../../mol/bar/-view.tree/mol/bar/-view.tree/bar.view.tree.ts","../../../mol/bar/-css/mol/bar/-css/bar.view.css.ts","../-view.tree/hyoo/todomvc/-view.tree/todomvc.view.tree.ts","../../../mol/state/local/mol/state/local/local.ts","../../../mol/state/local/mol/state/local/local.web.ts","../-css/hyoo/todomvc/-css/todomvc.css.ts","../hyoo/todomvc/todomvc.view.ts","../-bin/todomvc_active.svg.js","../-bin/todomvc_completed.svg.js"],"names":[],"mappings":"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","file":"web.esm.js","sourcesContent":[null,null,"Error.stackTraceLimit = 50;\n\ndeclare let _$_: { new(): {} } & typeof globalThis\ndeclare class $ extends _$_ {}\n\nnamespace $ {\n\texport type $ = typeof $$\n\texport declare class $$ extends $ {}\n\tnamespace $$ {\n\t\texport type $$ = $\n\t}\n}\n\nmodule.exports = $\n",null,"namespace $ {\n\n\texport const $mol_ambient_ref : unique symbol = Symbol( '$mol_ambient_ref' )\n\n\t/** @deprecated use $ instead */\n\texport type $mol_ambient_context = $\n\n\texport function $mol_ambient( this : $ | void , overrides : Partial< $ > ) : $ {\n\t\treturn Object.setPrototypeOf( overrides , this || $ )\n\t}\n\n}\n","namespace $ {\n\n\tconst instances = new WeakSet< any >()\n\n\t/**\n\t * Proxy that delegates all to lazy returned target.\n\t * \n\t * \t$mol_delegate( Array.prototype , ()=> fetch_array() )\n\t */\n export function $mol_delegate< Value extends object >(\n\t\tproto : Value ,\n\t\ttarget : ()=> Value ,\n\t) {\n\n\t\tconst proxy = new Proxy( proto , {\n\n\t\t\tget: ( _ , field )=> {\n\t\t\t\tconst obj = target()\n\t\t\t\tlet val = Reflect.get( obj , field )\n\t\t\t\tif( typeof val === 'function' ) {\n\t\t\t\t\tval = val.bind( obj )\n\t\t\t\t} \n\t\t\t\treturn val\n\t\t\t},\n\t\t\thas: ( _ , field )=> Reflect.has( target(), field ),\n\t\t\tset: ( _ , field , value )=> Reflect.set( target() , field , value ),\n\t\t\t\n\t\t\tgetOwnPropertyDescriptor: ( _ , field )=> Reflect.getOwnPropertyDescriptor( target() , field ),\n\t\t\townKeys: ()=> Reflect.ownKeys( target() ),\n\t\t\t\n\t\t\tgetPrototypeOf: ()=> Reflect.getPrototypeOf( target() ),\n\t\t\tsetPrototypeOf: ( _ , donor )=> Reflect.setPrototypeOf( target() , donor ),\n\t\t\t\n\t\t\tisExtensible: ()=> Reflect.isExtensible( target() ),\n\t\t\tpreventExtensions: ()=> Reflect.preventExtensions( target() ),\n\t\t\t\n\t\t\tapply: ( _ , self , args )=> Reflect.apply( target() as Function , self , args ),\n\t\t\tconstruct: ( _ , args , retarget )=> Reflect.construct( target() as Function , args , retarget ),\n\t\t\t\n\t\t\tdefineProperty: ( _ , field , descr )=> Reflect.defineProperty( target() , field , descr ),\n\t\t\tdeleteProperty: ( _ , field )=> Reflect.deleteProperty( target() , field ),\n\n\t\t} )\n\n\t\tinstances.add( proxy )\n\n\t\treturn proxy\n\n\t}\n\n\tReflect.defineProperty(\n\t\t$mol_delegate ,\n\t\tSymbol.hasInstance ,\n\t\t{\n\t\t\tvalue : ( obj : object )=> instances.has( obj ),\n\t\t},\n\t)\n\n}\n","namespace $ {\n\n\texport const $mol_owning_map = new WeakMap< any , any >()\n\n\texport function $mol_owning_allow< Having >(\n\t\thaving : Having ,\n\t) : having is Having & {\n\t\tdestructor() : void\n\t} {\n\t\ttry {\n\t\t\tif( !having ) return false\n\t\t\tif( typeof having !== 'object' ) return false\n\t\t\tif( having instanceof $mol_delegate ) return false\n\t\t\tif( typeof having['destructor'] !== 'function' ) return false\n\t\t\treturn true\n\t\t} catch {\n\t\t\treturn false\n\t\t}\n\t}\n\n\texport function $mol_owning_get< Having , Owner extends object >( having : Having , Owner? : { new() : Owner } ) : Owner | null {\n\t\n\t\tif( !$mol_owning_allow( having ) ) return null\n\n\t\twhile( true ) {\n\n\t\t\tconst owner = $mol_owning_map.get( having )\n\t\t\tif( !owner ) return owner\n\t\t\tif( !Owner ) return owner\n\t\t\t\n\t\t\tif( owner instanceof Owner ) return owner\n\n\t\t\thaving = owner\n\t\t}\n\n\t}\n\t\n\texport function $mol_owning_check< Owner , Having >(\n\t\towner : Owner ,\n\t\thaving : Having ,\n\t) : having is Having & { destructor() : void } {\n\t\tif( !$mol_owning_allow( having ) ) return false\n\t\tif( $mol_owning_map.get( having ) !== owner ) return false\n\t\treturn true\n\t}\n\t\n\texport function $mol_owning_catch< Owner , Having >(\n\t\towner : Owner ,\n\t\thaving : Having ,\n\t) {\n\t\tif( !$mol_owning_allow( having ) ) return false\n\t\tif( $mol_owning_map.get( having ) ) return false\n\n\t\t$mol_owning_map.set( having , owner )\n\t\treturn true\n\t}\n\n}\n","namespace $ {\n\n\texport function $mol_fail( error : any ) : never {\n\t\tthrow error\n\t}\n\n}\n","namespace $ {\n\n\texport function $mol_fail_hidden( error : any ) : never {\n\t\tthrow error /// Use 'Never Pause Here' breakpoint in DevTools or simply blackbox this script\n\t}\n\n}\n",null,"namespace $ {\n\n\texport class $mol_object2 {\n\t\t\n\t\tstatic $ = $ as $\n\t\t\n\t\t[ $mol_ambient_ref ] = null as any as $\n\t\tget $() {\n\t\t\tif( this[ $mol_ambient_ref ] ) return this[ $mol_ambient_ref ]\n\t\t\tconst owner = $mol_owning_get( this ) as any\n\t\t\treturn this[ $mol_ambient_ref ] = owner?.$ || $mol_object2.$ as $\n\t\t}\n\t\tset $( next : $ ) {\n\t\t\tif( this[ $mol_ambient_ref ] ) $mol_fail_hidden( new Error( 'Context already defined' ) )\n\t\t\tthis[ $mol_ambient_ref ] = next\n\t\t}\n\n\t\tpublic static create< Instance >(\n\t\t\tthis : new( init? : ( instance : any )=> void )=> Instance ,\n\t\t\tinit? : ( instance : $mol_type_writable )=> void\n\t\t) : Instance {\n\t\t\tconst obj = new this\n\t\t\tif( init ) init( obj )\n\t\t\treturn obj\n\t\t}\n\t\t\n\t\tstatic [ Symbol.toPrimitive ]() {\n\t\t\treturn this.toString()\n\t\t}\n\t\t\n\t\tstatic toString() {\n\t\t\tif( Symbol.toStringTag in this ) return this[ Symbol.toStringTag ]\n\t\t\treturn this.name\n\t\t}\n\t\t\n\t\tdestructor() { }\n\t\t\n\t\t//[ Symbol.toPrimitive ]( hint: string ) {\n\t\t//\treturn hint === 'number' ? this.valueOf() : this.toString()\n\t\t//}\n\t\t\n\t\ttoString() {\n\t\t\treturn this[ Symbol.toStringTag ] || this.constructor.name + '()'\n\t\t}\n\t\t\n\t\ttoJSON() {\n\t\t\treturn this.toString()\n\t\t}\n\n\t}\n}\n","namespace $ {\n\n\texport class $mol_after_tick extends $mol_object2 {\n\n\t\tpromise : any\n\t\tcancelled = false\n\n\t\tconstructor(\n\t\t\tpublic task : ()=> void ,\n\t\t) {\n\t\t\tsuper()\n\t\t\tthis.promise = Promise.resolve().then( ()=> {\n\t\t\t\tif( this.cancelled ) return\n\t\t\t\ttask()\n\t\t\t} )\n\t\t}\n\n\t\tdestructor() {\n\t\t\tthis.cancelled = true\n\t\t}\n\n\t}\n\t\n}\n","namespace $ {\n\t\n\texport var $mol_dom_context : typeof globalThis\n\t\n}\n","namespace $ {\n\t\n\t$.$mol_dom_context = self as any\n\t\n}\n","namespace $ {\n\n\tlet all = [] as string[]\n\tlet el : HTMLStyleElement | null = null\n\tlet timer : $mol_after_tick | null = null\n\n\texport function $mol_style_attach(\n\t\tid : string ,\n\t\ttext : string ,\n\t) {\n\n\t\tall.push( `/* ${ id } */\\n\\n${ text }`)\n\n\t\tif( timer ) return el!\n\t\t\n\t\tconst doc = $mol_dom_context.document\n\t\tif( !doc ) return null\n\n\t\tel = doc.createElement('style')\n\t\tel.id = `$mol_style_attach`\n\t\tdoc.head.appendChild( el )\n\n\t\ttimer = new $mol_after_tick( ()=> {\n\t\t\tel!.innerHTML = '\\n' + all.join( '\\n\\n' )\n\t\t\tall = []\n\t\t\tel = null\n\t\t\ttimer = null\n\t\t} )\n\n\t\treturn el\n\n\t}\n\n}\n","namespace $ {\n\n\texport class $mol_decor< Value > {\n\t\t\n\t\tconstructor(\n\t\t\treadonly value : Value\n\t\t) {}\n\n\t\tprefix() { return '' }\n\t\tvalueOf() { return this.value }\n\t\tpostfix() { return '' }\n\n\t\ttoString(){\n\t\t\treturn `${ this.prefix() }${ this.valueOf() }${ this.postfix() }`\n\t\t}\n\n\t}\n\n}\n","namespace $ {\n\t\n\texport type $mol_style_unit_length =\n\t| '%'\n\t| 'px' | 'cm' | 'mm' | 'Q' | 'in' | 'pc' | 'pt'\n\t| 'cap' | 'ch' | 'em' | 'rem' | 'ex' | 'ic' | 'lh' | 'rlh'\n\t| 'vh' | 'vw' | 'vi' | 'vb' | 'vmin' | 'vmax'\n\t\n\texport type $mol_style_unit_angle = 'deg' | 'rad' | 'grad' | 'turn'\n\t\n\texport type $mol_style_unit_time = 's' | 'ms'\n\n\texport type $mol_style_unit_any = $mol_style_unit_length | $mol_style_unit_angle | $mol_style_unit_time\n\t\n\texport class $mol_style_unit<\n\t\tLiteral extends $mol_style_unit_any\n\t> extends $mol_decor< number > {\n\n\t\tconstructor(\n\t\t\tvalue : number,\n\t\t\treadonly literal : Literal,\n\t\t) {\n\t\t\tsuper( value )\n\t\t}\n\n\t\tpostfix() {\n\t\t\treturn this.literal\n\t\t}\n\n\t\tstatic per( value : number ) { return new $mol_style_unit( value , '%' ) }\n\t\tstatic px( value : number ) { return new $mol_style_unit( value , 'px' ) }\n\t\tstatic mm( value : number ) { return new $mol_style_unit( value , 'mm' ) }\n\t\tstatic cm( value : number ) { return new $mol_style_unit( value , 'cm' ) }\n\t\tstatic Q( value : number ) { return new $mol_style_unit( value , 'Q' ) }\n\t\tstatic in( value : number ) { return new $mol_style_unit( value , 'in' ) }\n\t\tstatic pc( value : number ) { return new $mol_style_unit( value , 'pc' ) }\n\t\tstatic pt( value : number ) { return new $mol_style_unit( value , 'pt' ) }\n\t\tstatic cap( value : number ) { return new $mol_style_unit( value , 'cap' ) }\n\t\tstatic ch( value : number ) { return new $mol_style_unit( value , 'ch' ) }\n\t\tstatic em( value : number ) { return new $mol_style_unit( value , 'em' ) }\n\t\tstatic rem( value : number ) { return new $mol_style_unit( value , 'rem' ) }\n\t\tstatic ex( value : number ) { return new $mol_style_unit( value , 'ex' ) }\n\t\tstatic ic( value : number ) { return new $mol_style_unit( value , 'ic' ) }\n\t\tstatic lh( value : number ) { return new $mol_style_unit( value , 'lh' ) }\n\t\tstatic rlh( value : number ) { return new $mol_style_unit( value , 'rlh' ) }\n\t\tstatic vh( value : number ) { return new $mol_style_unit( value , 'vh' ) }\n\t\tstatic vw( value : number ) { return new $mol_style_unit( value , 'vw' ) }\n\t\tstatic vi( value : number ) { return new $mol_style_unit( value , 'vi' ) }\n\t\tstatic vb( value : number ) { return new $mol_style_unit( value , 'vb' ) }\n\t\tstatic vmin( value : number ) { return new $mol_style_unit( value , 'vmin' ) }\n\t\tstatic vmax( value : number ) { return new $mol_style_unit( value , 'vmax' ) }\n\t\t\n\t\tstatic deg( value : number ) { return new $mol_style_unit( value , 'deg' ) }\n\t\tstatic rad( value : number ) { return new $mol_style_unit( value , 'rad' ) }\n\t\tstatic grad( value : number ) { return new $mol_style_unit( value , 'grad' ) }\n\t\tstatic turn( value : number ) { return new $mol_style_unit( value , 'turn' ) }\n\n\t\tstatic s( value : number ) { return new $mol_style_unit( value , 's' ) }\n\t\tstatic ms( value : number ) { return new $mol_style_unit( value , 'ms' ) }\n\t\n\t}\n\n}\n","namespace $ {\n\n\texport type $mol_style_func_name =\n\t| 'calc'\n\t| 'hsla'\n\t| 'rgba'\n\t| 'var'\n\t| 'clamp'\n\t| 'url'\n\t| 'scale'\n\n\tconst { per } = $mol_style_unit\n\t\n\texport class $mol_style_func<\n\t\tName extends $mol_style_func_name ,\n\t\tValue = unknown,\n\t> extends $mol_decor< Value > {\n\n\t\tconstructor(\n\t\t\treadonly name : Name,\n\t\t\tvalue : Value,\n\t\t) {\n\t\t\tsuper( value )\n\t\t}\n\n\t\tprefix() { return this.name + '(' }\n\t\tpostfix() { return ')' }\n\n\t\tstatic calc< Value >( value : Value ) {\n\t\t\treturn new $mol_style_func( 'calc' , value )\n\t\t}\n\n\t\tstatic vary< Name extends string >( name : Name ) {\n\t\t\treturn new $mol_style_func( 'var' , name )\n\t\t}\n\n\t\tstatic url< Href extends string >( href : Href ) {\n\t\t\treturn new $mol_style_func( 'url' , JSON.stringify( href ) )\n\t\t}\n\n\t\tstatic hsla(\n\t\t\thue: number,\n\t\t\tsaturation: number,\n\t\t\tlightness: number,\n\t\t\talpha: number,\n\t\t) {\n\t\t\treturn new $mol_style_func(\n\t\t\t\t'hsla',\n\t\t\t\t[ hue , per( saturation ) , per( lightness ) , alpha ],\n\t\t\t)\n\t\t}\n\t\n\t\tstatic clamp(\n\t\t\tmin: $mol_style_unit< any >,\n\t\t\tmid: $mol_style_unit< any >,\n\t\t\tmax: $mol_style_unit< any >,\n\t\t) {\n\t\t\treturn new $mol_style_func(\n\t\t\t\t'clamp',\n\t\t\t\t[ min, mid, max ],\n\t\t\t)\n\t\t}\n\t\n\t\tstatic rgba(\n\t\t\tred: number,\n\t\t\tgreen: number,\n\t\t\tblue: number,\n\t\t\talpha: number,\n\t\t) {\n\t\t\treturn new $mol_style_func(\n\t\t\t\t'rgba',\n\t\t\t\t[ red , green , blue , alpha ],\n\t\t\t)\n\t\t}\n\t\n\t\tstatic scale(\n\t\t\tzoom: number,\n\t\t) {\n\t\t\treturn new $mol_style_func( 'scale', [ zoom ] )\n\t\t}\n\t\n\t}\n\n}\n","namespace $ { $mol_style_attach( \"mol/theme/theme.css\",\n \":root {\\n\\t--mol_theme_hue: 210deg;\\n\\t--mol_theme_luma: -1;\\n\\t--mol_theme_image: none;\\n}\\n\\n[mol_theme] {\\n\\tbackground-color: var(--mol_theme_back);\\n\\tcolor: var(--mol_theme_text);\\n\\tfill: var(--mol_theme_text);\\n}\\n\\t\\n:root, [mol_theme] {\\n\\t--mol_theme_back: hsl( var(--mol_theme_hue), 50% , calc( 54% + 44% * var(--mol_theme_luma) ) );\\n\\t--mol_theme_text: hsl( var(--mol_theme_hue), 0% , calc( 50% - 30% * var(--mol_theme_luma) ) );\\n\\t--mol_theme_field: hsl( var(--mol_theme_hue), 0%, calc( 50% + 50% * var(--mol_theme_luma) ), .2 );\\n\\t\\n\\t--mol_theme_card: hsl( var(--mol_theme_hue), 0%, 50%, .05 );\\n\\t--mol_theme_hover: hsl( var(--mol_theme_hue), 0%, 50%, .1 );\\n\\t--mol_theme_line: hsl( var(--mol_theme_hue), 0%, 50%, .25 );\\n\\t--mol_theme_shade: hsl( var(--mol_theme_hue), 0%, 50%, 1 );\\n\\t\\n\\t--mol_theme_control: hsl( var(--mol_theme_hue), 50%, calc( 50% - 5% * var(--mol_theme_luma) ) );\\n\\t--mol_theme_current: hsl( calc( var(--mol_theme_hue) - 90deg ), 50%, calc( 50% - 10% * var(--mol_theme_luma) ) );\\n\\t--mol_theme_special: hsl( calc( var(--mol_theme_hue) + 90deg ), 50%, calc( 50% - 10% * var(--mol_theme_luma) ) );\\n\\t--mol_theme_focus: hsl( calc( var(--mol_theme_hue) + 180deg ), 100%, calc( 50% - 15% * var(--mol_theme_luma) ) );\\n\\t\\n}\\n\\n[mol_theme=\\\"$mol_theme_light\\\"] {\\n\\t--mol_theme_luma: 1;\\n\\t--mol_theme_image: none;\\n}\\n\\n[mol_theme=\\\"$mol_theme_dark\\\"] {\\n\\t--mol_theme_luma: -1;\\n\\t--mol_theme_image: invert(1) hue-rotate( 180deg );\\n}\\n\\n[mol_theme=\\\"$mol_theme_base\\\"] {\\n\\t--mol_theme_luma: -2;\\n\\t--mol_theme_back: hsl( var(--mol_theme_hue), 50%, 40% );\\n\\t--mol_theme_hover: hsl( var(--mol_theme_hue), 60%, 30% );\\n\\t--mol_theme_current: hsl( var(--mol_theme_hue), 100%, 20% );\\n}\\n\\n[mol_theme=\\\"$mol_theme_current\\\"] {\\n\\t--mol_theme_back: hsl( calc( var(--mol_theme_hue) - 90deg ), 50%, calc( 50% + 25% * var(--mol_theme_luma) ) );\\n}\\n\\n[mol_theme=\\\"$mol_theme_special\\\"] {\\n\\t--mol_theme_back: hsl( calc( var(--mol_theme_hue) + 90deg ), 50%, calc( 50% + 25% * var(--mol_theme_luma) ) );\\n}\\n\\n[mol_theme=\\\"$mol_theme_accent\\\"] {\\n\\t--mol_theme_luma: -2;\\n\\t--mol_theme_back: hsl( calc( var(--mol_theme_hue) + 180deg ), 80%, 40% );\\n\\t--mol_theme_hover: hsl( calc( var(--mol_theme_hue) + 180deg ), 80%, 35% );\\n}\\n\\n[mol_theme=\\\"$mol_theme_accent\\\"] [mol_theme=\\\"$mol_theme_accent\\\"] {\\n\\t--mol_theme_back: black;\\n}\\n\"\n) }","namespace $ {\n\n\tconst { vary } = $mol_style_func\n\n\texport const $mol_theme = {\n\t\tback: vary('--mol_theme_back'),\n\t\thover: vary('--mol_theme_hover'),\n\t\tcard: vary('--mol_theme_card'),\n\t\tcurrent: vary('--mol_theme_current'),\n\t\tspecial: vary('--mol_theme_special'),\n\t\ttext: vary('--mol_theme_text'),\n\t\tcontrol: vary('--mol_theme_control'),\n\t\tshade: vary('--mol_theme_shade'),\n\t\tline: vary('--mol_theme_line'),\n\t\tfocus: vary('--mol_theme_focus'),\n\t\tfield: vary('--mol_theme_field'),\n\t\timage: vary('--mol_theme_image'),\n\t}\n\n}\n","namespace $ {\n\n\texport namespace $$ { let $ }\n\n\texport const $mol_object_field = Symbol( '$mol_object_field' )\n\t\n\texport class $mol_object extends $mol_object2 {\n\t\t\n\t\tpublic static make< Instance >( this : { new() : Instance } , config : Partial< Instance > ) : Instance {\n\t\t\treturn super.create( obj => {\n\t\t\t\tfor( let key in config ) ( obj as any )[ key ] = config[ key ]!\n\t\t\t} ) as any\n\t\t}\n\t\t\n\t}\n\n}\n","namespace $ {\n\t\n\t/** Special status statuses. */\n\texport enum $mol_wire_cursor {\n\t\t\n\t\t/** Update required. */\n\t\tstale = -1,\n\t\t\n\t\t/** Some of (transitive) pub update required. */\n\t\tdoubt = -2,\n\t\t\n\t\t/** Actual state but may be dropped. */\n\t\tfresh = -3,\n\t\t\n\t\t/** State will never be changed. */\n\t\tfinal = -4,\n\t\t\n\t}\n\t\n}\n","namespace $ {\n\t\n\t/**\n\t * Collects subscribers in compact array. 28B\n\t */\n\texport class $mol_wire_pub extends Object {\n\t\t\n\t\tdata = [] as unknown[]\n\t\t\n\t\t// Derived objects should be Arrays.\n\t\tstatic get [ Symbol.species ]() {\n\t\t\treturn Array\n\t\t}\n\t\t\n\t\t/**\n\t\t * Index of first subscriber.\n\t\t */\n\t\tprotected sub_from = 0 // 4B\n\t\t\n\t\t/**\n\t\t * All current subscribers.\n\t\t */\n\t\tget sub_list() {\n\t\t\tconst res = [] as $mol_wire_sub[]\n\t\t\tfor( let i = this.sub_from; i < this.data.length; i += 2 ) {\n\t\t\t\tres.push( this.data[i] as $mol_wire_sub )\n\t\t\t}\n\t\t\treturn res as readonly $mol_wire_sub[]\n\t\t}\n\t\t\n\t\t/**\n\t\t * Has any subscribers or not.\n\t\t */\n\t\tget sub_empty() {\n\t\t\treturn this.sub_from === this.data.length\n\t\t}\n\t\t\n\t\t/**\n\t\t * Subscribe subscriber to this publisher events and return position of subscriber that required to unsubscribe.\n\t\t */\n\t\tsub_on( sub: $mol_wire_pub, pub_pos: number ) {\n\t\t\tconst pos = this.data.length\n\t\t\tthis.data.push( sub, pub_pos )\n\t\t\treturn pos\n\t\t}\n\t\t\n\t\t/**\n\t\t * Unsubscribe subscriber from this publisher events by subscriber position provided by `on(pub)`.\n\t\t */\n\t\tsub_off( sub_pos: number ) {\n\t\t\t\n\t\t\tif(!( sub_pos < this.data.length )) {\n\t\t\t\t$mol_fail( new Error( `Wrong pos ${ sub_pos }` ) )\n\t\t\t}\n\t\t\t\n\t\t\tconst end = this.data.length - 2\n\t\t\tif( sub_pos !== end ) {\n\t\t\t\tthis.peer_move( end, sub_pos )\n\t\t\t}\n\t\t\t\n\t\t\tthis.data.pop()\n\t\t\tthis.data.pop()\n\t\t\t\n\t\t\tif( this.data.length === this.sub_from ) this.reap()\n\t\t\t\n\t\t}\n\t\t\n\t\t/**\n\t\t * Called when last sub was unsubscribed.\n\t\t **/\n\t\treap() { }\n\t\t\n\t\t/**\n\t\t * Autowire this publisher with current subscriber.\n\t\t **/\n\t\tpromote() {\n\t\t\t$mol_wire_auto()?.track_next( this )\n\t\t}\n\t\t\n\t\t/**\n\t\t * Enforce actualization. Should not throw errors.\n\t\t */\n\t\tfresh() {}\n\t\t\n\t\t/**\n\t\t * Allow to put data to caches in the subtree.\n\t\t */\n\t\tcomplete() {}\n\t\t\n\t\t/**\n\t\t * Notify subscribers about self changes.\n\t\t */\n\t\temit( quant = $mol_wire_cursor.stale ) {\n\t\t\tfor( let i = this.sub_from; i < this.data.length; i += 2 ) {\n\t\t\t\t;( this.data[i] as $mol_wire_sub ).absorb( quant )\n\t\t\t}\n\t\t}\n\t\t\n\t\t/**\n\t\t * Moves peer from one position to another. Doesn't clear data at old position!\n\t\t */\n\t\tpeer_move( from_pos: number, to_pos: number ) {\n\t\t\t\n\t\t\tconst peer = this.data[ from_pos ] as $mol_wire_pub\n\t\t\tconst self_pos = this.data[ from_pos + 1 ] as number\n\t\t\t\n\t\t\tthis.data[ to_pos ] = peer\n\t\t\tthis.data[ to_pos + 1 ] = self_pos\n\t\t\t\n\t\t\tpeer.peer_repos( self_pos, to_pos )\n\t\t}\n\t\t\n\t\t/**\n\t\t * Updates self position in the peer.\n\t\t */\n\t\tpeer_repos( peer_pos: number, self_pos: number ) {\n\t\t\tthis.data[ peer_pos + 1 ] = self_pos\n\t\t}\n\t\t\n\t}\n\t\n}\n",null,"namespace $ {\n\t\n\tlet auto: $mol_wire_sub | null = null\n\t\n\t/**\n\t * When fulfilled, all publishers are promoted to this subscriber on access to its.\n\t */\n\texport function $mol_wire_auto( next = auto ) {\n\t\treturn auto = next\n\t}\n\t\n\t/**\n\t * Affection queue. Used to prevent accidental stack overflow on emit.\n\t */\n\texport const $mol_wire_affected = [] as ( $mol_wire_sub | number )[]\n\t\n}\n","namespace $ {\n\n\t// https://docs.google.com/document/d/1FTascZXT9cxfetuPRT2eXPQKXui4nWFivUnS_335T3U/preview#\n\t$['devtoolsFormatters'] = $['devtoolsFormatters'] || []\n\n\texport function $mol_dev_format_register( config : {\n\t\theader : ( val : any , config : any )=> any\n\t\thasBody : ( val : any , config : any )=> false\n\t} | {\n\t\theader : ( val : any , config : any )=> any\n\t\thasBody : ( val : any , config : any )=> boolean\n\t\tbody : ( val : any , config : any )=> any\n\t} ) {\n\t\t$['devtoolsFormatters'].push( config )\n\t}\n\n\texport let $mol_dev_format_head = Symbol( '$mol_dev_format_head' )\n\texport let $mol_dev_format_body = Symbol( '$mol_dev_format_body' )\n\n\t$mol_dev_format_register({\n\n\t\theader : ( val : any , config = false ) => {\n\t\t\t\n\t\t\tif( config ) return null\n\n\t\t\tif( !val ) return null\n\t\t\t\n\t\t\tif( $mol_dev_format_head in val ) {\n\t\t\t\treturn val[ $mol_dev_format_head ]()\n\t\t\t}\n\t\t\t\n\t\t\tif( typeof val === 'function' ) {\n\t\t\t\treturn $mol_dev_format_native( val )\n\t\t\t}\n\n\t\t\treturn null\n\t\t\t\n\t\t} ,\n\t\t\n\t\thasBody : val => val[ $mol_dev_format_body ] ,\n\n\t\tbody : val => val[ $mol_dev_format_body ]() ,\n\n\t})\n\n\texport function $mol_dev_format_native( obj : any ) {\n\t\t\n\t\tif( typeof obj === 'undefined' ) return $mol_dev_format_shade( 'undefined' )\n\t\tif( typeof obj !== 'object' && typeof obj !== 'function' ) return obj\n\n\t\treturn [\n\t\t\t'object' ,\n\t\t\t{\n\t\t\t\tobject : obj ,\n\t\t\t\tconfig : true ,\n\t\t\t} ,\n\t\t]\n\n\t}\n\n\texport function $mol_dev_format_auto( obj : any ) {\n\t\t\n\t\tif( obj == null ) return $mol_dev_format_shade( String( obj ) )\n\n\t\tif( typeof obj === 'object' && $mol_dev_format_head in obj ) {\n\t\t\treturn obj[ $mol_dev_format_head ]()\n\t\t}\n\n\t\treturn [\n\t\t\t'object' ,\n\t\t\t{\n\t\t\t\tobject : obj ,\n\t\t\t\tconfig : false ,\n\t\t\t} ,\n\t\t]\n\n\t}\n\n\texport function $mol_dev_format_element( element : string , style : object , ...content : any[] ) {\n\t\t\t\n\t\tconst styles = [] as string[]\n\t\t\n\t\tfor( let key in style ) styles.push( `${ key } : ${ style[key] }` )\n\t\t\n\t\treturn [\n\t\t\telement ,\n\t\t\t{\n\t\t\t\tstyle : styles.join( ' ; ' ) ,\n\t\t\t} ,\n\t\t\t... content ,\n\t\t]\n\n\t}\n\n\texport function $mol_dev_format_span( style : object , ...content : any[] ) {\n\t\treturn $mol_dev_format_element(\n\t\t\t'span' ,\n\t\t\t{\n\t\t\t\t'vertical-align' : '8%',\n\t\t\t\t... style ,\n\t\t\t} ,\n\t\t\t... content ,\n\t\t)\n\t}\n\n\texport let $mol_dev_format_div = $mol_dev_format_element.bind( null , 'div' )\n\texport let $mol_dev_format_ol = $mol_dev_format_element.bind( null , 'ol' )\n\texport let $mol_dev_format_li = $mol_dev_format_element.bind( null , 'li' )\n\texport let $mol_dev_format_table = $mol_dev_format_element.bind( null , 'table' )\n\texport let $mol_dev_format_tr = $mol_dev_format_element.bind( null , 'tr' )\n\texport let $mol_dev_format_td = $mol_dev_format_element.bind( null , 'td' )\n\n\texport let $mol_dev_format_accent = $mol_dev_format_span.bind( null , {\n\t\t'color' : 'magenta' ,\n\t} )\n\n\texport let $mol_dev_format_strong = $mol_dev_format_span.bind( null , {\n\t\t'font-weight' : 'bold' ,\n\t} )\n\n\texport let $mol_dev_format_string = $mol_dev_format_span.bind( null , {\n\t\t'color' : 'green',\n\t} )\n\n\texport let $mol_dev_format_shade = $mol_dev_format_span.bind( null , {\n\t\t'color' : 'gray',\n\t} )\n\n\texport let $mol_dev_format_indent = $mol_dev_format_div.bind( null , {\n\t\t'margin-left': '13px'\n\t} )\n\n}\n","namespace $ {\n\t\n\t/**\n\t * Publisher that can auto collect other publishers. 32B\n\t * \n\t * \tP1 P2 P3 P4 S1 S2 S3\n\t * \t^ ^\n\t * \tpubs_from subs_from\n\t */\n\texport class $mol_wire_pub_sub extends $mol_wire_pub implements $mol_wire_sub {\n\t\t\n\t\tprotected pub_from = 0 // 4B\n\t\tprotected cursor = $mol_wire_cursor.stale // 4B\n\t\t\n\t\tget pub_list() {\n\t\t\tconst res = [] as $mol_wire_pub[]\n\t\t\tconst max = this.cursor >=0 ? this.cursor : this.sub_from\n\t\t\tfor( let i = this.pub_from; i < max; i += 2 ) {\n\t\t\t\tres.push( this.data[i] as $mol_wire_pub )\n\t\t\t}\n\t\t\treturn res\n\t\t}\n\t\t\n\t\ttrack_on() {\n\t\t\tthis.cursor = this.pub_from\n\t\t\tconst sub = $mol_wire_auto()\n\t\t\t$mol_wire_auto( this )\n\t\t\treturn sub\n\t\t}\n\t\t\n\t\tpromote() {\n\t\t\t\n\t\t\tif( this.cursor >= this.pub_from ) {\n\t\t\t\t$mol_fail( new Error( 'Circular subscription' ) )\n\t\t\t}\n\t\t\t\n\t\t\tsuper.promote()\n\t\t}\n\t\t\n\t\ttrack_next( pub?: $mol_wire_pub ): $mol_wire_pub | null {\n\t\t\t\n\t\t\tif( this.cursor < 0 ) $mol_fail( new Error( 'Promo to non begun sub' ) )\n\t\t\t\n\t\t\tif( this.cursor < this.sub_from ) {\n\t\t\t\n \t\t\t\tconst next = this.data[ this.cursor ] as $mol_wire_pub | undefined\n\t\t\t\tif( pub === undefined ) return next ?? null\n\t\t\t\t\n\t\t\t\tif( next === pub ) {\n\t\t\t\t\tthis.cursor += 2\n\t\t\t\t\treturn next\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif( next ) {\n\t\t\t\t\t\n\t\t\t\t\tif( this.sub_from < this.data.length ) {\n\t\t\t\t\t\tthis.peer_move( this.sub_from, this.data.length )\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tthis.peer_move( this.cursor, this.sub_from )\n\t\t\t\t\tthis.sub_from += 2\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\t\n\t\t\t} else {\n\t\t\t\t\n\t\t\t\tif( pub === undefined ) return null\n\t\t\t\t\n\t\t\t\tif( this.sub_from < this.data.length ) {\n\t\t\t\t\tthis.peer_move( this.sub_from, this.data.length )\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.sub_from += 2\n\t\t\t\t\n\t\t\t}\t\t\t\n\t\t\t\n\t\t\tthis.data[ this.cursor ] = pub\n\t\t\tthis.data[ this.cursor + 1 ] = pub.sub_on( this, this.cursor )\n\t\t\t\n\t\t\tthis.cursor += 2\n\t\t\t\n\t\t\treturn pub\n\t\t}\n\t\t\n\t\ttrack_off( sub: $mol_wire_sub | null ) {\n\t\t\t\n\t\t\t$mol_wire_auto( sub )\n\t\t\t\n\t\t\tif( this.cursor < 0 ) {\n\t\t\t\t$mol_fail( new Error( 'End of non begun sub' ) )\n\t\t\t}\n\t\t\t\n\t\t\tfor(\n\t\t\t\tlet cursor = this.pub_from;\n\t\t\t\tcursor < this.cursor;\n\t\t\t\tcursor += 2\n\t\t\t) {\n\t\t\t\tconst pub = this.data[ cursor ] as $mol_wire_pub\n\t\t\t\tpub.fresh()\n\t\t\t}\n\t\t\t\n\t\t\tthis.cursor = $mol_wire_cursor.fresh\n\t\t\t\n\t\t}\n\t\t\n\t\tpub_off( sub_pos: number ) {\n\t\t\tthis.data[ sub_pos ] = undefined as any\n\t\t\tthis.data[ sub_pos + 1 ] = undefined as any \n\t\t}\n\t\t\n\t\tdestructor() {\n\t\t\t\n\t\t\tfor(\n\t\t\t\tlet cursor = this.data.length - 2;\n\t\t\t\tcursor >= this.sub_from;\n\t\t\t\tcursor -= 2\n\t\t\t) {\n\t\t\t\tconst sub = this.data[ cursor ] as $mol_wire_sub\n\t\t\t\tconst pos = this.data[ cursor + 1 ] as number\n\t\t\t\tsub.pub_off( pos )\n\t\t\t\tthis.data.pop()\n\t\t\t\tthis.data.pop()\n\t\t\t}\n\t\t\t\n\t\t\tthis.cursor = this.pub_from\n\t\t\tthis.track_cut()\n\t\t\tthis.cursor = $mol_wire_cursor.final\n\t\t\t\n\t\t}\n\t\t\n\t\ttrack_cut() {\n\t\t\t\n\t\t\tif( this.cursor < this.pub_from ) {\n\t\t\t\t$mol_fail( new Error( 'Cut of non begun sub' ) )\n\t\t\t}\n\t\t\t\n\t\t\tlet tail = 0\n\t\t\t\n\t\t\tfor(\n\t\t\t\tlet cursor = this.cursor;\n\t\t\t\tcursor < this.sub_from;\n\t\t\t\tcursor += 2\n\t\t\t) {\n\t\t\t\t\n\t\t\t\tconst pub = this.data[ cursor ] as $mol_wire_pub | undefined\n\t\t\t\tpub?.sub_off( this.data[ cursor + 1 ] as number )\n\t\t\t\t\n\t\t\t\tif( this.sub_from < this.data.length ) {\n\t\t\t\t\tthis.peer_move( this.data.length - 2, cursor )\n\t\t\t\t\tthis.data.pop()\n\t\t\t\t\tthis.data.pop()\n\t\t\t\t} else {\n\t\t\t\t\t++ tail\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t\tfor(; tail; -- tail ) {\n\t\t\t\tthis.data.pop()\n\t\t\t\tthis.data.pop()\n\t\t\t}\n\t\t\t\n\t\t\tthis.sub_from = this.cursor\n\t\t\t\n\t\t}\n\t\t\n\t\tcomplete() { }\n\t\t\n\t\tcomplete_pubs() {\n\t\t\t\n\t\t\tconst limit = this.cursor < 0 ? this.sub_from : this.cursor \n\t\t\t\n\t\t\tfor(\n\t\t\t\tlet cursor = this.pub_from;\n\t\t\t\tcursor < limit;\n\t\t\t\tcursor += 2\n\t\t\t) {\n\t\t\t\tconst pub = this.data[ cursor ] as $mol_wire_pub\n\t\t\t\tpub?.complete()\n\t\t\t}\n\t\t\t\n\t\t}\n\n\t\tabsorb( quant = $mol_wire_cursor.stale ) {\n\t\t\t\n\t\t\tif( this.cursor === $mol_wire_cursor.final ) return\n\t\t\tif( this.cursor >= quant ) return\n\t\t\t\n\t\t\tthis.cursor = quant\n\t\t\tthis.emit( $mol_wire_cursor.doubt )\n\t\t\t\n\t\t}\n\t\t\n\t\t[ $mol_dev_format_head ]() {\n\t\t\treturn $mol_dev_format_native( this )\n\t\t}\n\t\t\n\t\t/**\n\t\t * Is subscribed to any publisher or not.\n\t\t */\n\t\tget pub_empty() {\n\t\t\treturn this.sub_from === this.pub_from\n\t\t}\n\t\t\n\t}\n\t\n}\n","namespace $ {\n\n\texport class $mol_after_frame extends $mol_object2 {\n\n\t\tstatic _promise = null as Promise | null\n\n\t\tstatic get promise() {\n\n\t\t\tif( this._promise ) return this._promise\n\t\t\t\n\t\t\treturn this._promise = new Promise( done => {\n\t\t\t\t\n\t\t\t\tconst complete = ()=> {\n\t\t\t\t\tthis._promise = null\n\t\t\t\t\tdone()\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif( typeof requestAnimationFrame === 'function' ) {\n\t\t\t\t\trequestAnimationFrame( complete )\n\t\t\t\t} else {\n\t\t\t\t\tsetTimeout( complete, 16 )\n\t\t\t\t}\n\t\t\t\t\n\t\t\t} )\n\n\t\t}\n\n\t\tcancelled = false\n\t\tpromise!: Promise\n\n\t\tconstructor(\n\t\t\tpublic task : ()=> void ,\n\t\t) {\n\t\t\tsuper()\n\n\t\t\tthis.promise = $mol_after_frame.promise.then( ()=> {\n\t\t\t\tif( this.cancelled ) return\n\t\t\t\ttask()\n\t\t\t} )\n\n\t\t}\n\n\t\tdestructor() {\n\t\t\tthis.cancelled = true\n\t\t}\n\n\t}\n\t\n}\n","namespace $ {\n\t\n\tconst handled = new WeakSet< Promise< unknown > >()\n\t\n\t/**\n\t * Suspendable task with support both sync/async api.\n\t * \n\t * \tA1 A2 A3 A4 P1 P2 P3 P4 S1 S2 S3\n\t * \t^ ^ ^\n\t * \targs_from pubs_from subs_from\n\t **/\n\texport abstract class $mol_wire_fiber<\n\t\tHost,\n\t\tArgs extends readonly unknown[],\n\t\tResult,\n\t> extends $mol_wire_pub_sub {\n\t\t\n\t\tstatic warm = true\n\t\t\n\t\tstatic planning = new Set< $mol_wire_fiber< any, any, any > >()\n\t\tstatic reaping = new Set< $mol_wire_fiber< any, any, any > >()\n\t\t\n\t\tstatic plan_task: $mol_after_frame | null = null\n\t\tstatic plan() {\n\t\t\t\n\t\t\tif( this.plan_task ) return\n\t\t\t\n\t\t\tthis.plan_task = new $mol_after_frame( ()=> {\n\t\t\t\t\n\t\t\t\ttry {\n\t\t\t\t\tthis.sync()\n\t\t\t\t} finally {\n\t\t\t\t\t$mol_wire_fiber.plan_task = null\n\t\t\t\t}\n\n\t\t\t} )\n\t\t\t\n\t\t}\n\t\t\n\t\tstatic sync() {\n\t\t\t\n\t\t\t// Sync whole fiber graph\n\t\t\twhile( this.planning.size ) {\n\t\t\t\tfor( const fiber of this.planning ) {\n\t\t\t\t\tthis.planning.delete( fiber )\n\t\t\t\t\tif( fiber.cursor >= 0 ) continue\n\t\t\t\t\tif( fiber.cursor === $mol_wire_cursor.final ) continue\n\t\t\t\t\tfiber.fresh()\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t// Collect garbage\n\t\t\twhile( this.reaping.size ) {\n\t\t\t\t\n\t\t\t\tconst fibers = this.reaping\n\t\t\t\tthis.reaping = new Set\n\t\t\t\t\n\t\t\t\tfor( const fiber of fibers ) {\n\t\t\t\t\tif( !fiber.sub_empty ) continue\n\t\t\t\t\tfiber.destructor()\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t}\n\t\t\n\t\tpublic cache: Result | Error | Promise< Result | Error > = undefined as any\n\t\t\n\t\tget args() {\n\t\t\treturn this.data.slice( 0 , this.pub_from ) as any as Args\n\t\t}\n\t\t\n\t\tresult() {\n\t\t\tif( this.cache instanceof Promise ) return\n\t\t\tif( this.cache instanceof Error ) return\n\t\t\treturn this.cache\n\t\t}\n\t\t\n\t\tfield() {\n\t\t\treturn this.task.name + '()'\n\t\t}\n\t\t\n\t\tconstructor(\n\t\t\tid: string,\n\t\t\treadonly task: ( this : Host , ... args : Args )=> Result,\n\t\t\treadonly host?: Host,\n\t\t\targs?: Args\n\t\t) {\n\t\t\t\n\t\t\tsuper()\n\t\t\tif( args ) this.data.push( ... args )\n\t\t\tthis.pub_from = this.sub_from = args?.length ?? 0\n\t\t\tthis[ Symbol.toStringTag ] = id\n\t\t\t\n\t\t}\n\t\t\n\t\tplan() {\n\t\t\t$mol_wire_fiber.planning.add( this )\n\t\t\t$mol_wire_fiber.plan()\n\t\t}\n\t\t\n\t\treap() {\n\t\t\t$mol_wire_fiber.reaping.add( this )\n\t\t\t$mol_wire_fiber.plan()\n\t\t}\n\t\t\n\t\ttoString() {\n\t\t\treturn this[ Symbol.toStringTag ]\n\t\t}\n\t\t\n\t\ttoJSON() {\n\t\t\treturn this[ Symbol.toStringTag ]\n\t\t}\n\n\t\t[ $mol_dev_format_head ]() {\n\t\t\t\n\t\t\tconst cursor = {\n\t\t\t\t[-1]: '🔴',\n\t\t\t\t[-2]: '🟡',\n\t\t\t\t[-3]: '🟢',\n\t\t\t\t[-4]: '🔵',\n\t\t\t}[ this.cursor ] ?? this.cursor.toString()\n\t\t\t\n\t\t\treturn $mol_dev_format_div( {},\n\t\t\t\t$mol_dev_format_native( this ),\n\t\t\t\t$mol_dev_format_shade( cursor + ' ' ),\n\t\t\t\t$mol_dev_format_auto( this.cache ),\n\t\t\t)\n\t\t\t\n\t\t}\n\t\t\n\t\tget $() {\n\t\t\treturn ( this.host ?? this.task )['$']\n\t\t}\n\t\t\n\t\temit( quant = $mol_wire_cursor.stale ) {\n\t\t\tif( this.sub_empty ) this.plan()\n\t\t\telse super.emit( quant )\n\t\t}\n\t\t\n\t\tfresh() {\n\n\t\t\ttype Result = typeof this.cache\n\t\t\t\n\t\t\tif( this.cursor === $mol_wire_cursor.fresh ) return\n\t\t\tif( this.cursor === $mol_wire_cursor.final ) return\n\t\t\t\n\t\t\tcheck: if( this.cursor === $mol_wire_cursor.doubt ) {\n\t\t\t\t\n\t\t\t\tfor( let i = this.pub_from ; i < this.sub_from; i += 2 ) {\n\t\t\t\t\t;( this.data[i] as $mol_wire_pub )?.fresh()\n\t\t\t\t\tif( this.cursor !== $mol_wire_cursor.doubt ) break check\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.cursor = $mol_wire_cursor.fresh\n\t\t\t\treturn\n\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t\tconst bu = this.track_on()\n\t\t\tlet result: typeof this.cache\n\n\t\t\ttry {\n\n\t\t\t\tswitch( this.pub_from ) {\n\t\t\t\t\tcase 0: result = (this.task as any).call( this.host! ); break\n\t\t\t\t\tcase 1: result = (this.task as any).call( this.host!, this.data[0] ); break\n\t\t\t\t\tdefault: result = (this.task as any).call( this.host!, ... this.args ); break\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif( result instanceof Promise ) {\n\t\t\t\t\t\n\t\t\t\t\tconst put = ( res: Result )=> {\n\t\t\t\t\t\tif( this.cache === result ) this.put( res )\n\t\t\t\t\t\treturn res\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tresult = Object.assign( result.then( put, put ), {\n\t\t\t\t\t\tdestructor: result['destructor']\n\t\t\t\t\t} )\n\t\t\t\t\t\n\t\t\t\t\thandled.add( result )\n\t\t\t\t}\n\t\t\t\t\n\t\t\t} catch( error: any ) {\n\t\t\t\t\n\t\t\t\tif( error instanceof Error || error instanceof Promise ) {\n\t\t\t\t\tresult = error\n\t\t\t\t} else {\n\t\t\t\t\tresult = new Error( String( error ), { cause: error } )\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif( result instanceof Promise && !handled.has( result ) ) {\n\t\t\t\t\t\n\t\t\t\t\tresult = Object.assign( result.finally( ()=> {\n\t\t\t\t\t\tif( this.cache === result ) this.absorb()\n\t\t\t\t\t} ), {\n\t\t\t\t\t\tdestructor: result['destructor']\n\t\t\t\t\t} )\n\t\t\t\t\t\n\t\t\t\t\thandled.add( result )\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t\tif(!( result instanceof Promise )) {\n\t\t\t\tthis.track_cut()\n\t\t\t}\n\t\t\t\n\t\t\tthis.track_off( bu )\n\t\t\tthis.put( result )\n\n\t\t}\n\t\t\n\t\trefresh() {\n\t\t\tthis.cursor = $mol_wire_cursor.stale\n\t\t\tthis.fresh()\n\t\t}\n\t\t\n\t\tabstract put( next: Result | Error | Promise< Result | Error > ): Result | Error | Promise< Result | Error >\n\t\t\n\t\t/**\n\t\t * Synchronous execution. Throws Promise when waits async task (SuspenseAPI provider).\n\t\t * Should be called inside SuspenseAPI consumer (ie fiber).\n\t\t */\n\t\tsync() {\n\t\t\t\n\t\t\tif( !$mol_wire_fiber.warm ) {\n\t\t\t\treturn this.result() as Awaited< Result >\n\t\t\t}\n\t\t\t\n\t\t\tthis.promote()\n\t\t\tthis.fresh()\n\t\t\t\n\t\t\tif( this.cache instanceof Error ) {\n\t\t\t\treturn $mol_fail_hidden( this.cache )\n\t\t\t}\n\t\t\t\n\t\t\tif( this.cache instanceof Promise ) {\n\t\t\t\treturn $mol_fail_hidden( this.cache )\n\t\t\t}\n\t\t\t\n\t\t\treturn this.cache as Awaited< Result >\n\t\t}\n\n\t\t/**\n\t\t * Asynchronous execution.\n\t\t * It's SuspenseAPI consumer. So SuspenseAPI providers can be called inside.\n\t\t */\n\t\tasync async() {\n\t\t\t\n\t\t\twhile( true ) {\n\t\t\t\t\n\t\t\t\tthis.fresh()\n\t\t\t\t\n\t\t\t\tif( this.cache instanceof Error ) {\n\t\t\t\t\t$mol_fail_hidden( this.cache )\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(!( this.cache instanceof Promise )) return this.cache\n\t\t\t\t\t\n\t\t\t\tawait this.cache\n\t\t\t\t\t\n\t\t\t\tif( this.cursor === $mol_wire_cursor.final ) {\n\t\t\t\t\t// never ends on destructed fiber\n\t\t\t\t\tawait new Promise( ()=> {} )\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t}\n\t\t\n\t}\n\t\n}\n","namespace $ {\n\n\t/** Generates unique identifier. */\n\texport function $mol_guid(\n\t\tlength = 8,\n\t\texists: ( id: string )=> boolean = ()=> false,\n\t) {\n\n\t\tfor(;;) {\n\n\t\t\tlet id = Math.random().toString( 36 ).substring( 2, length + 2 ).toUpperCase()\n\t\t\tif( exists( id ) ) continue\n\t\t\t\n\t\t\treturn id\n\t\t}\n\n\t}\n\n}\n","namespace $ {\n\t\n\texport const $mol_key_store = new WeakMap< object, string >()\n\n\texport function $mol_key< Value >( value : Value ) : string {\n\t\t\n\t\tif( !value ) return JSON.stringify( value )\n\t\tif( typeof value !== 'object' && typeof value !== 'function' ) return JSON.stringify( value )\n\t\t\n\t\treturn JSON.stringify( value, ( field, value )=> {\n\t\t\t\n\t\t\tif( !value ) return value\n\t\t\tif( typeof value !== 'object' && typeof value !== 'function' ) return value\n\t\t\tif( Array.isArray( value ) ) return value\n\t\t\t\n\t\t\tconst proto = Reflect.getPrototypeOf( value )\n\t\t\tif( !proto ) return value\n\t\t\tif( Reflect.getPrototypeOf( proto ) === null ) return value\n\t\t\t\n\t\t\tif( 'toJSON' in value ) return value\n\t\t\tif( value instanceof RegExp ) return value.toString()\n\t\t\t\n\t\t\tlet key = $mol_key_store.get( value )\n\t\t\tif( key ) return key\n\t\t\t\n\t\t\tkey = $mol_guid()\n\t\t\t$mol_key_store.set( value, key )\n\t\t\t\n\t\t\treturn key\n\t\t} )\n\n\t}\n\t\n}\n","namespace $ {\n\n\texport let $mol_compare_deep_cache = new WeakMap< any , WeakMap< any , boolean > >()\n\t\n\t/**\n\t * Deeply compares two values. Returns true if equal.\n\t * Define `Symbol.toPrimitive` to customize.\n\t */\n\texport function $mol_compare_deep< Value >( left: Value, right: Value ): boolean {\n\n\t\tif( Object.is( left , right ) ) return true\n\n\t\tif( left === null ) return false\n\t\tif( right === null ) return false\n\n\t\tif( typeof left !== 'object' ) return false\n\t\tif( typeof right !== 'object' ) return false\n\n\t\tconst left_proto = Reflect.getPrototypeOf( left as any )\n\t\tconst right_proto = Reflect.getPrototypeOf( right as any )\n\t\t\n\t\tif( left_proto !== right_proto ) return false\n\n\t\tif( left instanceof Boolean ) return Object.is( left.valueOf(), right['valueOf']() )\n\t\tif( left instanceof Number ) return Object.is( left.valueOf(), right['valueOf']() )\n\t\tif( left instanceof String ) return Object.is( left.valueOf(), right['valueOf']() )\n\t\tif( left instanceof Date ) return Object.is( left.valueOf(), right['valueOf']() )\n\t\tif( left instanceof RegExp ) return left.source === right['source'] && left.flags === right['flags']\n\n\t\tlet left_cache = $mol_compare_deep_cache.get( left )\n\t\tif( left_cache ) {\n\n\t\t\tconst right_cache = left_cache.get( right )\n\t\t\tif( typeof right_cache === 'boolean' ) return right_cache\n\n\t\t} else {\n\t\t\t\n\t\t\tleft_cache = new WeakMap< any , boolean >([[ right, true ]])\n\t\t\t$mol_compare_deep_cache.set( left , left_cache )\n\n\t\t}\n\n\t\tlet result!: boolean\n\n\t\ttry {\n\t\t\t\n\t\t\tif( left_proto && !Reflect.getPrototypeOf( left_proto ) ) result = compare_pojo( left, right as any )\n\t\t\telse if( Array.isArray( left ) ) result = compare_array( left, right as any )\n\t\t\telse if( left instanceof Set ) result = compare_set( left, right as any )\n\t\t\telse if( left instanceof Map ) result = compare_map( left, right as any )\n\t\t\telse if( left instanceof Error ) result = left.stack === ( right as any ).stack\n\t\t\telse if( ArrayBuffer.isView( left ) ) result = compare_buffer( left, right as any )\n\t\t\telse if( Symbol.toPrimitive in left ) result = compare_primitive( left, right )\n\t\t\telse result = false\n\n\t\t} finally {\n\t\t\tleft_cache.set( right , result )\n\t\t}\n\t\t\n\t\treturn result\n\t}\n\n\tfunction compare_array< Value extends any[] >( left: Value, right: Value ): boolean {\n\t\t\n\t\tconst len = left.length\n\t\tif( len !== right.length ) return false\n\t\t\n\t\tfor( let i = 0; i < len; ++i ) {\n\t\t\tif( !$mol_compare_deep( left[i] , right[i] ) ) return false\n\t\t}\n\t\t\n\t\treturn true\n\t}\n\t\n\tfunction compare_buffer( left: ArrayBufferView, right: ArrayBufferView ): boolean {\n\t\t\n\t\tconst len = left.byteLength\n\t\tif( len !== right.byteLength ) return false\n\t\t\n\t\tfor( let i = 0; i < len; ++i ) {\n\t\t\tif( left[i] !== right[i] ) return false\n\t\t}\n\t\t\n\t\treturn true\n\t}\n\t\n\tfunction compare_iterator< Value extends IterableIterator >(\n\t\tleft: Value,\n\t\tright: Value,\n\t\tcompare: ( left: any, right: any )=> boolean\n\t): boolean {\n\t\t\n\t\twhile( true ) {\n\n\t\t\tconst left_next = left.next()\n\t\t\tconst right_next = right.next()\n\n\t\t\tif( left_next.done !== right_next.done ) return false\n\t\t\tif( left_next.done ) break\n\n\t\t\tif( !compare( left_next.value , right_next.value ) ) return false\n\n\t\t}\n\n\t\treturn true\n\n\t}\n\t\n\tfunction compare_set< Value extends Set >( left: Value, right: Value ): boolean {\n\t\tif( left.size !== right.size ) return false\n\t\treturn compare_iterator( left.values(), right.values(), $mol_compare_deep )\n\t}\n\t\n\tfunction compare_map< Key, Value >( left: Map< Key, Value > , right: Map< Key, Value > ): boolean {\n\t\tif( left.size !== right.size ) return false\n\t\treturn compare_iterator( left.keys(), right.keys(), Object.is )\n\t\t\t&& compare_iterator( left.values(), right.values(), $mol_compare_deep )\n\t}\n\t\n\tfunction compare_pojo( left: {}, right: {} ): boolean {\n\t\t\n\t\tconst left_keys = Object.getOwnPropertyNames( left )\n\t\tconst right_keys = Object.getOwnPropertyNames( right )\n\t\t\n\t\tif( left_keys.length !== right_keys.length ) return false\n\n\t\tfor( let key of left_keys ) {\n\t\t\tif( !$mol_compare_deep( left[ key ], Reflect.get( right, key ) ) ) return false\n\t\t}\n\n\t\treturn true\n\t}\n\t\n\tfunction compare_primitive( left: {}, right: {} ): boolean {\n\t\treturn Object.is(\n\t\t\tleft[ Symbol.toPrimitive ]( 'default' ),\n\t\t\tright[ Symbol.toPrimitive ]( 'default' ),\n\t\t)\n\t}\n\t\n}\n","namespace $ {\n\t\n\texport class $mol_wire_task<\n\t\tHost,\n\t\tArgs extends readonly unknown[],\n\t\tResult,\n\t> extends $mol_wire_fiber< Host, Args, Result > {\n\t\t\n\t\tstatic getter<\n\t\t\tHost,\n\t\t\tArgs extends readonly unknown[],\n\t\t\tResult,\n\t\t>(\n\t\t\ttask: ( this : Host , ... args : Args )=> Result,\n\t\t): ( host: Host, args: Args )=> $mol_wire_task< Host, [ ... Args ], Result > {\n\t\t\t\n\t\t\treturn function $mol_wire_task_get( host: Host, args: Args ) {\n\t\t\t\t\n\t\t\t\tconst existen = $mol_wire_auto()?.track_next()\n\t\t\t\n\t\t\t\treuse: if( existen ) {\n\t\t\t\t\t\n\t\t\t\t\tif(!( existen instanceof $mol_wire_task )) break reuse\n\t\t\t\t\n\t\t\t\t\tif( existen.host !== host ) break reuse\n\t\t\t\t\tif( existen.task !== task ) break reuse\n\t\t\t\t\tif( !$mol_compare_deep( existen.args, args ) ) break reuse\n\t\t\t\t\t\n\t\t\t\t\treturn existen\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn new $mol_wire_task( `${ host?.[ Symbol.toStringTag ] ?? host }.${ task.name }(#)`, task, host, args )\n\t\t\t}\n\t\t\t\n\t\t}\n\n\t\tcomplete() {\n\t\t\tthis.destructor()\n\t\t}\n\t\t\n\t\tput( next: Result | Error | Promise< Result | Error > ) {\n\t\t\t\n\t\t\tconst prev = this.cache\n\t\t\tthis.cache = next\n\t\t\t\n\t\t\tif( next instanceof Promise ) {\n\t\t\t\t\n\t\t\t\tthis.cursor = $mol_wire_cursor.fresh\n\t\t\t\tif( next !== prev ) this.emit()\n\t\t\t\t\n\t\t\t\treturn next\n\t\t\t}\n\t\t\t\n\t\t\tthis.cursor = $mol_wire_cursor.final\n\t\t\t\n\t\t\tif( this.sub_empty ) this.destructor()\n\t\t\telse if( next !== prev ) this.emit()\n\t\t\t\n\t\t\treturn next\n\t\t}\n\t\t\n\t}\n\n}\n","namespace $ {\n\t\n\texport function $mol_wire_method<\n\t\tHost extends object,\n\t\tArgs extends readonly any[],\n\t\tResult,\n\t>(\n\t\thost : Host,\n\t\tfield : PropertyKey,\n\t\tdescr? : TypedPropertyDescriptor< ( ... args: Args )=> Result >,\n\t) {\n\t\t\n\t\tif( !descr ) descr = Reflect.getOwnPropertyDescriptor( host , field )\n\t\tconst orig = descr?.value! ?? host[ field ]\n\t\t\n\t\tconst sup = Reflect.getPrototypeOf( host )!\t\n\t\tif( typeof sup[ field as any ] === 'function' ) {\n\t\t\tObject.defineProperty( orig , 'name' , { value : sup[ field as any ].name } )\n\t\t}\n\t\t\n\t\tconst temp = $mol_wire_task.getter( orig )\n\t\tconst value = function( this: Host, ... args: Args ) {\n\t\t\tconst fiber = temp( this ?? null as any, args )\n\t\t\treturn fiber.sync() as Result\n\t\t}\n\t\t\n\t\tObject.defineProperty( value , 'name' , { value : orig.name + ' ' } )\n\t\t\n\t\tObject.assign( value, { orig } )\n\t\tconst descr2 = { ... descr, value }\n\t\tReflect.defineProperty( host, field, descr2 )\n\t\t\n\t\treturn descr2\n\t\t\n\t}\n\t\n}\n","namespace $ {\n\n\texport class $mol_wire_atom<\n\t\tHost,\n\t\tArgs extends readonly unknown[],\n\t\tResult,\n\t> extends $mol_wire_fiber< Host, Args, Result > {\n\n\t\tstatic getter<\n\t\t\tHost,\n\t\t\tArgs extends readonly unknown[],\n\t\t\tResult,\n\t\t>(\n\t\t\ttask: ( this : Host , ... args : Args )=> Result,\n\t\t\tkeys: number,\n\t\t): ( host: Host, args: Args )=> $mol_wire_atom< Host, [ ... Args ], Result > {\n\t\t\t\n\t\t\tconst field = task.name + '()'\n\t\t\t\n\t\t\tif( keys ) {\n\t\t\t\t\n\t\t\t\treturn function $mol_wire_atom_get( host: Host, args: Args ) {\n\t\t\t\t\t\n\t\t\t\t\tlet dict, key!: string, fiber\n\t\t\t\t\t\n\t\t\t\t\tkey = `${ host?.[ Symbol.toStringTag ] ?? host }.${ task.name }(${ args.map( v => $mol_key( v ) ).join(',') })`\n\t\t\t\t\tdict = Object.getOwnPropertyDescriptor( host ?? task, field )?.value\n\t\t\t\t\t\n\t\t\t\t\tif( dict ) {\n\t\t\t\t\t\tconst existen = dict.get( key )\n\t\t\t\t\t\tif( existen ) return existen\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdict = ( host ?? task )[ field ] = new Map()\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tfiber = new $mol_wire_atom( key, task, host, args )\n\t\t\t\t\tdict.set( key, fiber )\n\t\t\t\t\t\n\t\t\t\t\treturn fiber\n\t\t\t\t}\n\t\t\t\t\n\t\t\t} else {\n\t\t\t\t\n\t\t\t\treturn function $mol_wire_atom_get( host: Host, args: Args ) {\n\t\t\t\t\t\n\t\t\t\t\tconst existen = Object.getOwnPropertyDescriptor( host ?? task, field )?.value\n\t\t\t\t\tif( existen ) return existen\n\t\t\t\t\t\n\t\t\t\t\tconst key = `${ host?.[ Symbol.toStringTag ] ?? host }.${ field }`\n\t\t\t\t\t\n\t\t\t\t\tconst fiber = new $mol_wire_atom( key, task, host, args )\n\t\t\t\t\t;( host ?? task )[ field ] = fiber\n\t\t\t\t\t\n\t\t\t\t\treturn fiber\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t}\n\t\t\n\t\tstatic watching = new Set< $mol_wire_atom< any, any, any > >()\n\t\t\n\t\tstatic watch() {\n\t\t\n\t\t\tnew $mol_after_frame( $mol_wire_atom.watch )\n\t\t\t\n\t\t\tfor( const atom of $mol_wire_atom.watching ) {\n\t\t\t\t\n\t\t\t\tif( atom.cursor === $mol_wire_cursor.final ) {\n\t\t\t\t\t$mol_wire_atom.watching.delete( atom )\n\t\t\t\t} else {\n\t\t\t\t\tatom.cursor = $mol_wire_cursor.stale\n\t\t\t\t\tatom.fresh()\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t}\n\t\t\n\t\twatch() {\n\t\t\t$mol_wire_atom.watching.add( this )\n\t\t}\n\t\t\n\t\t/**\n\t\t * Update fiber value through another temp fiber.\n\t\t */\n\t\t@ $mol_wire_method\n\t\tresync( args: Args ) {\n\t\t\treturn this.put( this.task.call( this.host!, ... args ) )\n\t\t}\n\t\t\n\t\t@ $mol_wire_method\n\t\tonce() {\n\t\t\treturn this.sync()\n\t\t}\n\t\t\n\t\tdestructor() {\n\t\t\t\n\t\t\tsuper.destructor()\n\t\t\t\n\t\t\tconst prev = this.cache\n\t\t\tif( $mol_owning_check( this, prev ) ) {\n\t\t\t\tprev.destructor()\n\t\t\t}\n\t\t\t\n\t\t\tif( this.pub_from === 0 ) {\n\t\t\t\t;( this.host ?? this.task )[ this.field() ] = null\n\t\t\t} else {\n\t\t\t\t;( this.host ?? this.task )[ this.field() ].delete( this[ Symbol.toStringTag ] )\n\t\t\t}\n\t\t\t\n\t\t}\n\t\t\n\t\tput( next: Result | Error | Promise< Result | Error > ) {\n\t\t\t\n\t\t\tconst prev = this.cache\n\t\t\t\n\t\t\tif( next !== prev ) {\n\t\t\t\t\n\t\t\t\tif( $mol_owning_check( this, prev ) ) {\n\t\t\t\t\tprev.destructor()\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.cache = next\n\t\t\t\t\n\t\t\t\tif( $mol_owning_catch( this, next ) ) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tnext[ Symbol.toStringTag ] = this[ Symbol.toStringTag ]\n\t\t\t\t\t} catch {} // Promises throws in strict mode\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif( this.sub_from < this.data.length ) {\n\t\t\t\t\tif( !$mol_compare_deep( prev, next ) ) {\n\t\t\t\t\t\tthis.emit()\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t\tthis.cursor = $mol_wire_cursor.fresh\n\t\t\t\n\t\t\tif( next instanceof Promise ) return next\n\t\t\t\n\t\t\tthis.complete_pubs()\n\t\t\t\n\t\t\treturn next\n\t\t}\n\t\t\n\t}\n\t\n\t$mol_wire_atom.watch()\n\t\n}\n","namespace $ {\n\t\n\texport function $mol_wire_mem< Keys extends number >( keys: Keys ) {\n\t\t\n\t\tconst wrap = $mol_wire_mem_func( keys )\n\t\n\t\treturn <\n\t\t\tHost extends object ,\n\t\t\tField extends keyof Host ,\n\t\t\tProp extends Extract< Host[ Field ] , ( ... args: any[] )=> any >,\n\t\t>(\n\t\t\thost : Host ,\n\t\t\tfield : Field ,\n\t\t\tdescr? : TypedPropertyDescriptor< Prop >\n\t\t)=> {\n\n\t\t\tif( !descr ) descr = Reflect.getOwnPropertyDescriptor( host , field )\n\t\t\tconst orig = descr?.value! ?? host[ field ]\n\t\t\t\n\t\t\tconst sup = Reflect.getPrototypeOf( host )!\n\t\t\tif( typeof sup[ field as any ] === 'function' ) {\n\t\t\t\tObject.defineProperty( orig , 'name' , { value : sup[ field as any ].name } )\n\t\t\t}\n\t\t\t\n\t\t\tconst descr2 = {\n\t\t\t\t... descr,\n\t\t\t\tvalue: wrap( orig )\n\t\t\t}\n\t\t\t\n\t\t\tReflect.defineProperty( host, field, descr2 )\n\t\t\t\n\t\t\treturn descr2\n\n\t\t}\n\t\t\n\t}\n\t\n\texport function $mol_wire_mem_func< Keys extends number >( keys: Keys ) {\n\t\t\n\t\treturn <\n\t\t\tResult,\n\t\t\tHost,\n\t\t\tArgs extends unknown[],\n\t\t\tFunc extends ( this: Host, ... args: Args )=> Result\n\t\t>( func: Func )=> {\n\t\t\t\n\t\t\tconst persist = $mol_wire_atom.getter( func, keys )\n\t\t\t\n\t\t\tconst wrapper = function( this: Host, ... args: Parameters< Func > ){\n\t\t\t\t\n\t\t\t\tlet atom = persist( this, args.slice( 0, keys ) as Args )\n\t\t\t\t\n\t\t\t\tif( args.length <= keys || args[ keys ] === undefined ) {\n\t\t\t\t\t\n\t\t\t\t\tif( !$mol_wire_fiber.warm ) return atom.result()\n\t\t\t\t\t\n\t\t\t\t\tif( $mol_wire_auto() instanceof $mol_wire_task ) {\n\t\t\t\t\t\treturn atom.once()\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn atom.sync()\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn atom.resync( args )\n\n\t\t\t}\n\t\t\t\n\t\t\tObject.defineProperty( wrapper , 'name' , { value : func.name + ' ' } )\n\t\t\tObject.assign( wrapper, { orig: func } )\n\t\t\t\n\t\t\treturn wrapper as unknown as Func\n\t\t}\n\t\t\n\t}\n\n}\n","namespace $ {\n\texport let $mol_mem = $mol_wire_mem(0)\n\texport let $mol_mem_key = $mol_wire_mem(1)\n\texport let $mol_mem_key2 = $mol_wire_mem(2)\n\texport let $mol_mem_key3 = $mol_wire_mem(3)\n}\n","namespace $ {\n\t\n\texport class $mol_window extends $mol_object {\n\t\t\n\t\t@ $mol_mem\n\t\tstatic size() {\n\t\t\tthis.resizes()\n\t\t\treturn {\n\t\t\t\twidth: self.innerWidth,\n\t\t\t\theight: self.innerHeight,\n\t\t\t}\n\t\t}\n\t\t\n\t\t@ $mol_mem\n\t\tstatic resizes( next?: Event ) { return next }\n\t\t\n\t}\n\n\tself.addEventListener( 'resize', event => $mol_window.resizes( event ) )\n\t\n}\n","namespace $ {\n\n\tconst cacthed = new WeakMap< any , boolean >()\n\n\texport function $mol_fail_catch( error: unknown ) {\n\t\t\n\t\tif( typeof error !== 'object' ) return false\n\t\tif( cacthed.get( error ) ) return false\n\t\t\n\t\tcacthed.set( error , true )\n\t\treturn true\n\t\t\n\t}\n\t\n}\n","namespace $ {\n\t\n\texport function $mol_fail_log( error: unknown ) {\n\t\t\n\t\tif( error instanceof Promise ) return false\n\t\tif( !$mol_fail_catch( error ) ) return false\n\t\t\n\t\tconsole.error( error )\n\t\treturn true\n\t\t\n\t}\n\n}\n","namespace $ {\n\t\n\texport class $mol_view_selection extends $mol_object {\n\t\t\n\t\t@ $mol_mem\n\t\tstatic focused( next? : Element[] ) : Element[] {\n\t\t\t\n\t\t\tconst parents : Element[] = []\n\t\t\tlet element = next?.[ 0 ] ?? $mol_dom_context.document.activeElement\n\t\t\t\n\t\t\twhile( element ) {\n\t\t\t\tparents.push( element )\n\t\t\t\telement = element.parentNode as HTMLElement\n\t\t\t}\n\n\t\t\tnew $mol_after_tick( ()=> {\n\n\t\t\t\tconst element = this.focused()![0] as HTMLElement\n\t\t\t\t\n\t\t\t\tif( element ) element.focus()\n\t\t\t\telse $mol_dom_context.blur()\n\n\t\t\t} )\n\n\t\t\treturn parents\n\t\t}\n\t\t\n\t}\n\t\n}\n","namespace $ {\n\t\n\texport function $mol_maybe< Value >( value : Value | null | undefined ) : Value[] {\n\t\treturn ( value == null ) ? [] : [ value ]\n\t}\n\t\n}\n","namespace $ {\n\t\n\tif( $mol_dom_context.document ) {\n\n\t\t$mol_dom_context.document.documentElement.addEventListener(\n\t\t\t'focus' ,\n\t\t\t( event : FocusEvent )=> {\n\t\t\t\t$mol_view_selection.focused( $mol_maybe( $mol_dom_context.document.activeElement ) )\n\t\t\t} ,\n\t\t\ttrue ,\n\t\t)\n\t\t\n\t\t// $mol_dom_context.document.documentElement.addEventListener(\n\t\t// \t'blur' ,\n\t\t// \t( event : FocusEvent )=> {\n\t\t// \t\t$mol_view_selection.focused( $mol_maybe( $mol_dom_context.document.activeElement ) )\n\t\t// \t} ,\n\t\t// \ttrue ,\n\t\t// )\n\t\n\t}\n\t\n}\n","namespace $ {\n\n\texport class $mol_wrapper extends $mol_object2 {\n\n\t\tstatic wrap : ( task : ( ... ags : any[] )=> any )=> ( ... ags : any[] )=> any\n\t\t\n\t\tstatic run< Result >( task : ()=> Result ) : Result {\n\t\t\treturn this.func( task )()\n\t\t}\n\t\n\t\tstatic func< Args extends any[] , Result , Host = void >(\n\t\t\tfunc : ( this : Host , ... args : Args )=> Result\n\t\t) : ( this : Host , ... args : Args )=> Result {\n\t\t\treturn this.wrap( func )\n\t\t}\n\n\t\tstatic get class() {\n\n\t\t\treturn < Class extends new ( ... args : any[] )=> any >(\n\t\t\t\tClass : Class\n\t\t\t) => {\n\n\t\t\t\ttype Args = ConstructorParameters< Class >\n\t\t\t\ttype Result = InstanceType< Class >\n\n\t\t\t\tconst construct = ( target : new ( ... args : Args )=> Result , args : Args )=> new Class( ... args )\n\n\t\t\t\tconst handler = {\n\t\t\t\t\tconstruct : this.func( construct )\n\t\t\t\t}\n\n\t\t\t\thandler[ Symbol.toStringTag ] = Class.name + '#'\n\n\t\t\t\treturn new Proxy( Class , handler )\n\t\t\t\t\n\t\t\t}\n\n\t\t}\n\n\t\tstatic get method() {\n\t\t\t\n\t\t\treturn (\n\t\t\t\tobj : object,\n\t\t\t\tname : PropertyKey,\n\t\t\t\tdescr : PropertyDescriptor,\n\t\t\t) => {\n\t\t\t\tdescr.value = this.func( descr.value! )\n\t\t\t\treturn descr\n\t\t\t}\n\t\t\t\n\t\t}\n\n\t\tstatic get field() {\n\t\t\t\n\t\t\treturn <\n\t\t\t\tHost ,\n\t\t\t\tField extends keyof Host ,\n\t\t\t\tArgs extends any[] ,\n\t\t\t\tResult ,\n\t\t\t>(\n\t\t\t\tobj : Host ,\n\t\t\t\tname : Field ,\n\t\t\t\tdescr : TypedPropertyDescriptor< Result >\n\t\t\t) => {\n\t\t\t\tdescr.get = descr.set = this.func( descr.get! )\n\t\t\t\treturn descr\n\t\t\t}\n\t\t\t\n\t\t}\n\n\t}\n\n}\n","namespace $ {\n\n\texport class $mol_memo extends $mol_wrapper {\n\t\t\n\t\tstatic wrap< This extends object , Value >( task : ( this : This , next? : Value )=> Value ) {\n\n\t\t\tconst store = new WeakMap< This , Value >()\n\n\t\t\treturn function( this : This , next? : Value ) {\n\n\t\t\t\tif( next === undefined && store.has( this ) ) return store.get( this )\n\t\t\t\t\n\t\t\t\tconst val = task.call( this , next ) ?? next\n\t\t\t\t\n\t\t\t\tstore.set( this , val! )\n\t\t\t\t\n\t\t\t\treturn val\n\n\t\t\t}\n\n\t\t}\n\t\t\n\t}\n\n}\n","namespace $ {\n\n\texport function $mol_dom_qname( name : string ) {\n\t\treturn name.replace( /\\W/g , '' ).replace( /^(?=\\d+)/ , '_' )\n\t}\n\n}\n","namespace $ {\n\t\n\t/**\n\t * Real-time refresh current atom.\n\t * Don't use if possible. May reduce performance.\n\t */\n\texport function $mol_wire_watch() {\n\t\tconst atom = $mol_wire_auto()\n\t\tif( atom instanceof $mol_wire_atom ) {\n\t\t\tatom.watch()\n\t\t} else {\n\t\t\t$mol_fail( new Error( 'Atom is equired for watching' ) )\n\t\t}\n\t}\n\t\n}\n","namespace $ { \n\texport function $mol_const< Value >( value : Value ) {\n\t\tvar getter = <{ () : Value , '()' : Value }> ( () => value )\n\t\tgetter['()'] = value\n\t\tgetter[ Symbol.toStringTag ] = value\n\t\treturn getter\n\t}\n}\n","namespace $ {\n\t\n\texport function $mol_dom_render_attributes (\n\t\tel : Element ,\n\t\tattrs : { [ key : string ] : string|number|boolean|null }\n\t) {\n\n\t\tfor( let name in attrs ) {\n\n\t\t\tlet val = attrs[ name ] as any\n\n\t\t\tif( val === null || val === false ) {\n\n\t\t\t\tif( !el.hasAttribute( name ) ) continue\n\t\t\t\t\n\t\t\t\tel.removeAttribute( name )\n\n\t\t\t} else {\n\t\t\t\t\n\t\t\t\tconst str = String( val )\n\t\t\t\tif( el.getAttribute( name ) === str ) continue\n\t\t\t\t\n\t\t\t\tel.setAttribute( name , str )\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n","namespace $ {\n\t\n\texport function $mol_wire_async< Host extends object >( obj: Host ) {\n\t\treturn new Proxy( obj, {\n\t\t\t\n\t\t\tget( obj, field ) {\n\t\t\t\t\n\t\t\t\tconst val = obj[ field ]\n\t\t\t\tif( typeof val !== 'function' ) return val\n\t\t\t\t\n\t\t\t\tlet fiber: $mol_wire_fiber< any, any, any >\n\t\t\t\tconst temp = $mol_wire_task.getter( val ) \n\t\t\t\t\n\t\t\t\treturn function $mol_wire_async( this: Host, ... args: any[] ) {\n\t\t\t\t\t\n\t\t\t\t\tfiber?.destructor()\n\t\t\t\t\t\n\t\t\t\t\tfiber = temp( obj, args )\n\t\t\t\t\treturn fiber.async()\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\t\n\t\t\t},\n\t\t\t\n\t\t\tapply( obj, self, args ) {\n\t\t\t\tconst temp = $mol_wire_task.getter( obj as ( ... args: any[] )=> any )\n\t\t\t\tconst fiber = temp( self, args )\n\t\t\t\treturn fiber.async()\n\t\t\t},\n\t\t\t\n\t\t} ) as any as (\n\t\t\tHost extends ( ... args: infer Args )=> infer Res\n\t\t\t\t? Res extends Promise\n\t\t\t\t\t? Host\n\t\t\t\t\t: ( ... args: Args )=> Promise< Res >\n\t\t\t\t: {}\n\t\t) & {\n\t\t\t[ key in keyof Host ]: Host[ key ] extends ( ... args: infer Args )=> infer Res\n\t\t\t\t? Res extends Promise\n\t\t\t\t\t? Host[ key ]\n\t\t\t\t\t: ( ... args: Args )=> Promise< Res >\n\t\t\t\t: Host[ key ]\n\t\t}\n\t}\n\t\n}\n","namespace $ {\n\t\n\texport function $mol_dom_render_styles (\n\t\tel : Element ,\n\t\tstyles : { [ key : string ] : string|number }\n\t) {\n\t\tfor( let name in styles ) {\n\t\t\tlet val = styles[ name ]\n\t\t\t\n\t\t\tconst style = ( el as HTMLElement ).style as any\n\t\t\t\n\t\t\tif( typeof val === 'number' ) {\n\t\t\t\tstyle[ name ] = `${ val }px`\n\t\t\t} else {\n\t\t\t\tstyle[ name ] = val\n\t\t\t}\n\t\t\t\n\t\t}\n\t}\n\n}\n","namespace $ {\n\n\texport function $mol_dom_render_children (\n\t\tel : Element | DocumentFragment ,\n\t\tchildNodes : NodeList | Array< Node | string | null >\n\t) {\n\t\tconst node_set = new Set< Node | string | null >( childNodes )\n\t\t\n\t\tlet nextNode : Node | null = el.firstChild\n\t\tfor( let view of childNodes ) {\n\n\t\t\tif( view == null ) continue\n\n\t\t\tif( view instanceof $mol_dom_context.Node ) {\n\t\t\t\t\n\t\t\t\twhile( true ) {\n\t\t\t\t\tif( !nextNode ) {\n\t\t\t\t\t\tel.appendChild( view )\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\tif( nextNode == view ) {\n\t\t\t\t\t\tnextNode = nextNode.nextSibling\n\t\t\t\t\t\tbreak\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif( node_set.has( nextNode ) ) {\n\t\t\t\t\t\t\tel.insertBefore( view , nextNode )\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconst nn = nextNode.nextSibling\n\t\t\t\t\t\t\tel.removeChild( nextNode )\n\t\t\t\t\t\t\tnextNode = nn\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t} else {\n\t\t\t\tif( nextNode && nextNode.nodeName === '#text' ) {\n\t\t\t\t\tconst str = String( view )\n\t\t\t\t\tif( nextNode.nodeValue !== str ) nextNode.nodeValue = str\n\t\t\t\t\tnextNode = nextNode.nextSibling\n\t\t\t\t} else {\n\t\t\t\t\tconst textNode = $mol_dom_context.document.createTextNode( String( view ) )\n\t\t\t\t\tel.insertBefore( textNode , nextNode )\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t}\n\t\t\n\t\twhile( nextNode ) {\n\t\t\tconst currNode = nextNode\n\t\t\tnextNode = currNode.nextSibling\n\t\t\tel.removeChild( currNode )\n\t\t}\n\t}\n\n}\n","namespace $ {\n\t\n\texport function $mol_dom_render_fields (\n\t\tel : Element ,\n\t\tfields : { [ key : string ] : any }\n\t) {\n\t\tfor( let key in fields ) {\n\t\t\t\n\t\t\tconst val : any = fields[ key ]\n\t\t\t\n\t\t\tif( val === undefined ) continue\n\t\t\t// if( el[ key ] === val ) continue\n\t\t\t\n\t\t\tel[ key ] = val\n\t\t}\n\t}\n\n}\n","namespace $ {\n\t\n\texport function $mol_func_name( this : $ , func : Function ) : string {\n\t\t\n\t\tlet name = func.name\n\t\tif( name?.length > 1 ) return name\n\n\t\tfor( let key in this ) {\n\t\t\ttry {\n\t\t\t\tif( this[ key ] !== func ) continue\n\t\t\t\tname = key\n\t\t\t\tObject.defineProperty( func , 'name' , { value : name } )\n\t\t\t\tbreak\n\t\t\t} catch {}\n\t\t}\n\n\t\treturn name\n\t}\n\n\texport function $mol_func_name_from< Target extends Function >( target : Target , source : Function ) {\n\t\tObject.defineProperty( target , 'name' , { value : source.name } )\n\t\treturn target\n\t}\n\n}\n",null,null,"namespace $ {\n\n\texport type $mol_view_content = $mol_view|Node|string|number|boolean\n\t\n\texport function $mol_view_visible_width() {\n\t\treturn $mol_window.size().width\n\t}\n\t\n\texport function $mol_view_visible_height() {\n\t\treturn $mol_window.size().height\n\t}\n\t\n\texport function $mol_view_state_key( suffix : string ) {\n\t\treturn suffix\n\t}\n\t\n\tconst error_shower = new WeakMap< Error, $mol_view >()\n\n\t/// Reactive statefull lazy ViewModel\n\texport class $mol_view extends $mol_object {\n\t\t\n\t\t@ $mol_mem_key\n\t\tstatic Root< This extends typeof $mol_view >( this : This , id: number ) {\n\t\t\treturn new this as InstanceType< This >\n\t\t}\n\n\t\t@ $mol_mem\n\t\tautorun() {\n\t\t\ttry {\n\t\t\t\tthis.dom_tree()\n\t\t\t\tdocument.title = this.title()\n\t\t\t} catch( error ) {\n\t\t\t\t$mol_fail_log( error )\n\t\t\t}\n\t\t}\n\t\t\n\t\t@ $mol_mem\n\t\tstatic autobind() {\n\t\t\t\n\t\t\tconst nodes = $mol_dom_context.document.querySelectorAll( '[mol_view_root]:not([mol_view_root=\"\"])' )\n\t\t\t\n\t\t\tfor( let i = nodes.length - 1 ; i >= 0 ; --i ) {\n\n\t\t\t\tconst name = nodes.item( i ).getAttribute( 'mol_view_root' )!\n\t\t\t\t\n\t\t\t\tconst View = $[ name ] as typeof $mol_view\n\t\t\t\tif( !View ) {\n\t\t\t\t\tconsole.error( `Can not attach view. Class not found: ${ name }` )\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tconst view = View.Root( i )\n\t\t\t\tview.dom_node( nodes.item( i ) )\n\t\t\t\tview.autorun()\n\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t}\n\t\t\n\t\ttitle() : string {\n\t\t\treturn this.constructor.toString()\n\t\t}\n\t\t\n\t\t@ $mol_mem\n\t\tfocused( next?: boolean ) {\n\t\t\tlet node = this.dom_node()\n\t\t\tconst value = $mol_view_selection.focused( next === undefined ? undefined : ( next ? [ node ] : [] ) )\n\t\t\treturn value.indexOf( node ) !== -1\n\t\t} \n\t\t\n\t\tstate_key( suffix = '' ) {\n\t\t\treturn this.$.$mol_view_state_key( suffix )\n\t\t}\n\t\t\n\t\t/// Name of element that created when element not found in DOM\n\t\t@ $mol_memo.method\n\t\tdom_name() {\n\t\t\treturn $mol_dom_qname( this.constructor.toString() ) || 'div'\n\t\t}\n\t\t\n\t\t/// NameSpace of element that created when element not found in DOM\n\t\tdom_name_space() { return 'http://www.w3.org/1999/xhtml' }\n\t\t\n\t\t/// Raw child views\n\t\tsub() {\n\t\t\treturn [] as readonly ($mol_view|Node|string|number|boolean)[]\n\t\t}\n\t\t\n\t\t/// Visible sub views with defined ambient context\n\t\t/// Render all by default\n\t\tsub_visible() {\n\t\t\treturn this.sub()\n\t\t}\n\t\t\n\t\t/// Minimal width that used for lazy rendering\n\t\t@ $mol_mem\n\t\tminimal_width() {\n\t\t\t\n\t\t\tlet min = 0\n\t\t\ttry {\n\t\t\t\t\n\t\t\t\tconst sub = this.sub()\n\t\t\t\tif( !sub ) return 0\n\t\t\t\t\n\t\t\t\tsub.forEach( view => {\n\t\t\t\t\tif( view instanceof $mol_view ) {\n\t\t\t\t\t\tmin = Math.max( min , view.minimal_width() )\n\t\t\t\t\t}\n\t\t\t\t} )\n\t\t\t\t\n\t\t\t} catch( error: any ) {\n\t\t\t\t$mol_fail_log( error )\n\t\t\t\treturn 24\n\t\t\t}\n\t\t\n\t\t\treturn min\n\t\t}\n\t\t\n\t\tmaximal_width() {\n\t\t\treturn this.minimal_width()\n\t\t}\n\t\t\n\t\t/// Minimal height that used for lazy rendering\n\t\t@ $mol_mem\n\t\tminimal_height() {\n\t\t\t\n\t\t\tlet min = 0\n\t\t\ttry {\n\t\t\t\t\n\t\t\t\tfor( const view of this.sub() ?? [] ) {\n\n\t\t\t\t\tif( view instanceof $mol_view ) {\n\t\t\t\t\t\tmin = Math.max( min , view.minimal_height() )\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\t \n\t\t\t} catch( error: any ) {\n\t\t\t\t$mol_fail_log( error )\n\t\t\t\treturn 24\n\t\t\t}\n\n\t\t\treturn min\n\t\t}\n\n\t\tstatic watchers = new Set< $mol_view >()\n\n\t\t@ $mol_mem\n\t\tview_rect() {\n\t\t\t$mol_wire_watch()\n\t\t\tconst { width, height, left, right, top, bottom } = this.dom_node().getBoundingClientRect()\n\t\t\treturn { width, height, left, right, top, bottom } // pick to optimize compare\n\t\t}\n\n\t\tdom_id() {\n\t\t\treturn this.toString()\n\t\t}\n\t\t\n\t\t@ $mol_mem\n\t\tdom_node( next? : Element ) {\n\t\t\t\n\t\t\tconst node = next || $mol_dom_context.document.createElementNS( this.dom_name_space() , this.dom_name() )\n\n\t\t\tconst id = this.dom_id()\n\t\t\tnode.setAttribute( 'id' , id )\n\t\t\tnode.toString = $mol_const( '<#' + id + '>' )\n\n\t\t\t$mol_dom_render_attributes( node , this.attr_static() )\n\t\t\t\n\t\t\tconst events = $mol_wire_async( this.event() )\n\t\t\tfor( let event_name in events ) {\n\t\t\t\tnode.addEventListener(\n\t\t\t\t\tevent_name ,\n\t\t\t\t\tevents[ event_name ] ,\n\t\t\t\t\t{ passive : false } as any ,\n\t\t\t\t)\n\t\t\t}\n\n\t\t\treturn node\n\t\t}\n\t\t\n\t\t@ $mol_mem\n\t\tdom_final() {\n\t\t\t\n\t\t\tthis.render()\n\t\t\t\n\t\t\tconst sub = this.sub_visible()\n\t\t\tif( !sub ) return\n\t\t\t\n\t\t\tfor( const el of sub ) {\n\t\t\t\tif( el && typeof el === 'object' && 'dom_final' in el ) {\n\t\t\t\t\tel['dom_final']()\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\treturn this.dom_node()\n\t\t\t\n\t\t}\n\t\t\n\t\t@ $mol_mem\n\t\tdom_tree( next? : Element ) : Element {\n\t\t\tconst node = this.dom_node( next )\n\t\t\t\n\t\t\ttry {\n\n\t\t\t\t$mol_dom_render_attributes( node , { mol_view_error : null } )\n\n\t\t\t\ttry {\n\t\t\t\t\n\t\t\t\t\tthis.render()\n\t\t\t\t\t\n\t\t\t\t} finally {\n\t\t\t\t\t\n\t\t\t\t\tfor( let plugin of this.plugins() ) {\n\t\t\t\t\t\tif( plugin instanceof $mol_plugin ) {\n\t\t\t\t\t\t\tplugin.dom_tree()\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.auto()\n\t\t\t\t\n\t\t\t} catch( error: any ) {\n\t\t\t\t\n\t\t\t\t$mol_fail_log( error )\n\t\t\t\t\n\t\t\t\t$mol_dom_render_attributes( node , { mol_view_error : error.name || error.constructor.name } )\n\t\t\t\t\n\t\t\t\tif( error instanceof Promise ) return node\n\t\t\t\tif( ( error_shower.get( error ) ?? this ) !== this ) return node\n\t\t\t\t\n\t\t\t\ttry {\n\t\t\t\t\tconst message = error.message || error\n\t\t\t\t\t;( node as HTMLElement ).innerText = message.replace( /^|$/mg, '\\xA0\\xA0' )\n\t\t\t\t} catch {}\n\t\t\t\t\n\t\t\t\terror_shower.set( error, this )\n\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t\treturn node\n\t\t}\n\n\t\t@ $mol_mem\n\t\tdom_node_actual() {\n\t\t\tconst node = this.dom_node()\n\n\t\t\t$mol_dom_render_styles( node, this.style_size() )\n\n\t\t\tconst attr = this.attr()\n\t\t\tconst style = this.style()\n\t\t\tconst fields = this.field()\n\n\t\t\t$mol_dom_render_attributes( node , attr )\n\t\t\t$mol_dom_render_styles( node , style )\n\n\t\t\treturn node\n\t\t}\n\t\t\n\t\tauto() {\n\t\t\treturn null as any\n\t\t}\n\n\t\t@ $mol_mem\n\t\trender() {\n\n\t\t\tconst node = this.dom_node_actual()\n\n\t\t\tconst sub = this.sub_visible()\n\t\t\tif( !sub ) return\n\t\t\t\n\t\t\tconst nodes = sub.map( child => {\n\t\t\t\tif( child == null ) return null\n\t\t\t\treturn ( child instanceof $mol_view )\n\t\t\t\t\t? child.dom_node()\n\t\t\t\t\t: child instanceof $mol_dom_context.Node\n\t\t\t\t\t? child\n\t\t\t\t\t: String( child )\n\t\t\t})\n\t\t\t\n\t\t\t$mol_dom_render_children( node , nodes )\n\n\t\t\tfor( const el of sub ) if( el && typeof el === 'object' && 'dom_tree' in el ) el['dom_tree']()\n\n\t\t\t$mol_dom_render_fields( node , this.field() )\n\t\t\t\n\t\t}\n\n\t\t@ $mol_memo.method\n\t\tstatic view_classes() {\n\t\t\tconst proto = this.prototype\n\t\t\t\n\t\t\tlet current = proto\n\t\t\tconst classes = [] as ( typeof $mol_view )[]\n\t\t\t\n\t\t\twhile( current ) {\n\t\t\t\tclasses.push( current.constructor as typeof $mol_view )\n\t\t\t\tif(!( current instanceof $mol_view )) break\n\t\t\t\tcurrent = Object.getPrototypeOf( current )\n\t\t\t}\n\t\t\t\n\t\t\treturn classes\n\t\t}\n\t\t\n\t\t@ $mol_memo.method\n\t\tview_names_owned() {\n\t\t\tconst names = [] as string[]\n\t\t\tlet owner = $mol_owning_get( this ) as $mol_wire_fiber< any, any[], any >\n\n\t\t\tif( owner?.host instanceof $mol_view ) {\n\n\t\t\t\tconst suffix = owner.task.name.trim()\n\t\t\t\tconst suffix2 = '_' + suffix[0].toLowerCase() + suffix.substring(1)\n\t\t\t\t\n\t\t\t\tfor( let Class of ( owner.host.constructor as typeof $mol_view ).view_classes() ) {\n\t\t\t\t\tif( suffix in Class.prototype ) names.push( this.$.$mol_func_name( Class ) + suffix2 )\n\t\t\t\t\telse break\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tfor( let prefix of owner.host.view_names_owned() ) {\n\t\t\t\t\tnames.push( prefix + suffix2 )\n\t\t\t\t}\n\t\t\t\n\t\t\t}\n\n\t\t\treturn names\n\t\t}\n\n\t\t@ $mol_memo.method\n\t\tview_names() {\n\t\t\tconst names = [] as string[]\n\t\t\t\n\t\t\tfor( let name of this.view_names_owned() ) {\n\t\t\t\tif( names.indexOf( name ) < 0 ) names.push( name )\n\t\t\t}\n\n\t\t\tfor( let Class of ( this.constructor as typeof $mol_view ).view_classes() ) {\n\t\t\t\tconst name = this.$.$mol_func_name( Class )\n\t\t\t\tif( !name ) continue\n\t\t\t\tif( names.indexOf( name ) < 0 ) names.push( name )\n\t\t\t}\n\n\t\t\treturn names\n\t\t}\n\t\t\n\t\tattr_static() : { [ key : string ] : string|number|boolean|null } {\n\t\t\tlet attrs : any = {}\n\t\t\t\n\t\t\tfor( let name of this.view_names() ) attrs[ name.replace( /\\$/g , '' ).replace( /^(?=\\d)/ , '_' ).toLowerCase() ] = ''\n\t\t\t\n\t\t\treturn attrs\n\t\t}\n\t\t\n\t\tattr() {\n\t\t\treturn {}\n\t\t}\n\t\t\n\t\tstyle_size() {\n\t\t\treturn {\n\t\t\t\tminHeight: this.minimal_height(),\n\t\t\t\tminWidth: this.minimal_width(),\n\t\t\t} as {\n\t\t\t\t[key: string]: string | number;\n\t\t\t}\n\t\t}\n\t\t\n\t\tstyle() : { [ key : string ] : string|number } {\n\t\t\treturn {}\n\t\t}\n\t\t\n\t\tfield() : { [ key : string ] : any } {\n\t\t\treturn {}\n\t\t}\n\t\t\n\t\tevent() : { [ key : string ] : ( event : Event )=> void } {\n\t\t\treturn {}\n\t\t}\n\t\t\n\t\tplugins() {\n\t\t\treturn [] as readonly $mol_view[]\n\t\t}\n\t\t\n\t\t[ $mol_dev_format_head ]() {\n\t\t\treturn $mol_dev_format_span( {} ,\n\t\t\t\t$mol_dev_format_native( this ) ,\n\t\t\t\t// $mol_dev_format_shade( '/' ) ,\n\t\t\t\t// $mol_dev_format_auto( $mol_wire_cache( this ).sub().cache ) ,\n\t\t\t)\n\t\t}\n\n\t\t/** Deep search view by predicate. */\n\t\t*view_find(\n\t\t\tcheck: ( path : $mol_view, text?: string )=> boolean,\n\t\t\tpath = [] as $mol_view[],\n\t\t): Generator< $mol_view[] > {\n\n\t\t\tif( check( this ) ) return yield [ ... path, this ]\n\t\t\t\n\t\t\ttry {\n\t\t\t\tfor( const item of this.sub() ) {\n\t\t\t\t\tif( item instanceof $mol_view ) {\n\t\t\t\t\t\tyield* item.view_find( check, [ ... path, this ] )\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch( error: unknown ) {\n\t\t\t\tif( error instanceof Promise ) $mol_fail_hidden( error )\n\t\t\t\t$mol_fail_log( error )\n\t\t\t}\n\t\t\t\n\t\t}\n\n\t\t/** Renders path of views to DOM. */\n\t\tforce_render(\n\t\t\tpath : Set< $mol_view >,\n\t\t) {\n\n\t\t\tconst kids = this.sub()\n\n\t\t\tconst index = kids.findIndex( item => {\n\t\t\t\tif( item instanceof $mol_view ) {\n\t\t\t\t\treturn path.has( item )\n\t\t\t\t} else {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t})\n\n\t\t\tif( index >= 0 ) {\n\t\t\t\t( kids[ index ] as $mol_view ).force_render( path )\n\t\t\t}\n\t\t\t\n\t\t}\n\n\t\t/** Renders view to DOM and scroll to it. */\n\t\tasync ensure_visible( view: $mol_view, align: ScrollLogicalPosition = \"start\" ) {\n\t\t\t\n\t\t\tconst path = this.view_find( v => v === view ).next().value\n\t\t\tthis.force_render( new Set( path ) )\n\t\t\t\n\t\t\t$mol_wire_fiber.sync()\n\n\t\t\tview.dom_node().scrollIntoView({ block: align })\n\n\t\t}\n\n\t}\n\n\texport type $mol_view_all = $mol_type_pick< $ , typeof $mol_view >\n\n}\n","namespace $ { $mol_style_attach( \"mol/view/view/view.css\",\n \"[mol_view] {\\n\\ttransition-property: height, width, min-height, min-width, max-width, max-height, transform;\\n\\ttransition-duration: .2s;\\n\\ttransition-timing-function: ease-out;\\n\\t-webkit-appearance: none;\\n\\tword-break: break-word;\\n\\tbox-sizing: border-box;\\n\\tdisplay: flex;\\n\\tflex-shrink: 0;\\n\\tcontain: style;\\n\\ttab-size: 4;\\n}\\n\\n[mol_view]::selection {\\n\\tbackground: var(--mol_theme_line);\\n}\\n\\n[mol_view] > * {\\n\\tword-break: inherit;\\n}\\n\\n[mol_view_root] {\\n\\tmargin: 0;\\n\\tpadding: 0;\\n\\twidth: 100%;\\n\\theight: 100%;\\n\\tbox-sizing: border-box;\\n\\tfont-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\\n\\tfont-size: 1rem;\\n\\tline-height: 1.5rem;\\n\\tbackground: var(--mol_theme_back);\\n\\tcolor: var(--mol_theme_text);\\n\\tcontain: unset; /** Fixes bg ignoring when applied to body on Chrome */\\n}\\n\\n[mol_view][mol_view_error]:not([mol_view_error=\\\"Promise\\\"]) {\\n\\tbackground-image: repeating-linear-gradient(\\n\\t\\t-45deg,\\n\\t\\t#f92323,\\n\\t\\t#f92323 .5rem,\\n\\t\\t#ff3d3d .5rem,\\n\\t\\t#ff3d3d 1.5rem\\n\\t);\\n\\tcolor: black;\\n\\talign-items: center;\\n justify-content: center;\\n}\\n\\n@keyframes mol_view_wait_move {\\n\\tfrom {\\n\\t\\tbackground-position: 0 0;\\n\\t}\\n\\tto {\\n\\t\\tbackground-position: 200vmax 0;\\n\\t}\\n}\\n\\n@keyframes mol_view_wait_show {\\n\\tto {\\n\\t\\tbackground-image: repeating-linear-gradient(\\n\\t\\t\\t45deg,\\n\\t\\t\\thsla( 0 , 0% , 50% , .5 ) 0% ,\\n\\t\\t\\thsla( 0 , 0% , 50% , 0 ) 5% ,\\n\\t\\t\\thsla( 0 , 0% , 50% , 0 ) 45% ,\\n\\t\\t\\thsla( 0 , 0% , 50% , .5 ) 50% ,\\n\\t\\t\\thsla( 0 , 0% , 50% , 0 ) 55% ,\\n\\t\\t\\thsla( 0 , 0% , 50% , 0 ) 95% ,\\n\\t\\t\\thsla( 0 , 0% , 50% , .5 ) 100%\\n\\t\\t);\\n\\t\\tbackground-size: 200vmax 200vmax;\\n\\t}\\n}\\n\\n[mol_view][mol_view_error=\\\"Promise\\\"] {\\n\\tanimation: mol_view_wait_show .5s .5s linear forwards , mol_view_wait_move 1s linear infinite;\\n\\topacity: .75;\\n}\\n\"\n) }","interface Window {\n\tcordova : any\n}\n\nnamespace $ {\n\n\tif( $mol_dom_context.document ) {\n\t\tsetTimeout( ()=> $mol_view.autobind() )\n\t}\n\t\n}\n","namespace $ {\n\n\texport class $mol_plugin extends $mol_view {\n\n\t\t@ $mol_mem\n\t\tdom_node( next? : Element ) {\n\n\t\t\tconst node = next || ( ( $mol_owning_get( this ) as $mol_wire_fiber ).host as $mol_view )!.dom_node()\n\n\t\t\t$mol_dom_render_attributes( node , this.attr_static() )\n\n\t\t\tconst events = $mol_wire_async( this.event() )\n\t\t\tfor( let event_name in events ) {\n\t\t\t\tnode.addEventListener(\n\t\t\t\t\tevent_name ,\n\t\t\t\t\tevents[ event_name ] ,\n\t\t\t\t\t{ passive : false } as any ,\n\t\t\t\t)\n\t\t\t}\n\n\t\t\treturn node\n\t\t}\n\n\t\tattr_static() : { [ key : string ] : string|number|boolean } {\n\t\t\treturn {}\n\t\t}\n\n\t\tevent() : { [ key : string ] : ( event : Event )=> void } {\n\t\t\treturn {}\n\t\t}\n\t\t\n\t\trender() {\n\t\t\tthis.dom_node_actual()\n\t\t}\n\t\t\n\t}\n\n}\n","namespace $ {\n\texport class $mol_hotkey extends $mol_plugin {\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * event *\n\t\t * \t^\n\t\t * \tkeydown?event <=> keydown?event\n\t\t * ```\n\t\t */\n\t\tevent() {\n\t\t\treturn {\n\t\t\t\t...super.event(),\n\t\t\t\tkeydown: (event?: any) => this.keydown(event)\n\t\t\t}\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * key *\n\t\t * ```\n\t\t */\n\t\tkey() {\n\t\t\treturn {\n\t\t\t}\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * mod_ctrl false\n\t\t * ```\n\t\t */\n\t\tmod_ctrl() {\n\t\t\treturn false\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * mod_alt false\n\t\t * ```\n\t\t */\n\t\tmod_alt() {\n\t\t\treturn false\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * mod_shift false\n\t\t * ```\n\t\t */\n\t\tmod_shift() {\n\t\t\treturn false\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * keydown?event null\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tkeydown(event?: any) {\n\t\t\tif ( event !== undefined ) return event as never\n\t\t\treturn null as any\n\t\t}\n\t}\n\t\n}\n\n","namespace $ {\n export enum $mol_keyboard_code {\n backspace = 8,\n tab = 9,\n enter = 13,\n shift= 16,\n ctrl = 17,\n alt = 18,\n pause = 19,\n capsLock = 20,\n escape = 27,\n space = 32,\n pageUp = 33,\n pageDown = 34,\n end = 35,\n home = 36,\n left = 37,\n up = 38,\n right = 39,\n down = 40,\n insert = 45,\n delete = 46,\n key0 = 48,\n key1 = 49,\n key2 = 50,\n key3 = 51,\n key4 = 52,\n key5 = 53,\n key6 = 54,\n key7 = 55,\n key8 = 56,\n key9 = 57,\n A = 65,\n B = 66,\n C = 67,\n D = 68,\n E = 69,\n F = 70,\n G = 71,\n H = 72,\n I = 73,\n J = 74,\n K = 75,\n L = 76,\n M = 77,\n N = 78,\n O = 79,\n P = 80,\n Q = 81,\n R = 82,\n S = 83,\n T = 84,\n U = 85,\n V = 86,\n W = 87,\n X = 88,\n Y = 89,\n Z = 90,\n metaLeft = 91,\n metaRight = 92,\n select = 93,\n numpad0 = 96,\n numpad1 = 97,\n numpad2 = 98,\n numpad3 = 99,\n numpad4 = 100,\n numpad5 = 101,\n numpad6 = 102,\n numpad7 = 103,\n numpad8 = 104,\n numpad9 = 105,\n multiply = 106,\n add = 107,\n subtract = 109,\n decimal = 110,\n divide = 111,\n F1 = 112,\n F2 = 113,\n F3 = 114,\n F4 = 115,\n F5 = 116,\n F6 = 117,\n F7 = 118,\n F8 = 119,\n F9 = 120,\n F10 = 121,\n F11 = 122,\n F12 = 123,\n numLock = 144,\n scrollLock = 145,\n semicolon = 186,\n equals = 187,\n comma = 188,\n dash = 189,\n period = 190,\n forwardSlash = 191,\n graveAccent = 192,\n bracketOpen = 219,\n slashBack = 220,\n slashBackLeft = 226,\n bracketClose = 221,\n quoteSingle = 222\n }\n}\n","namespace $.$$ {\n\texport class $mol_hotkey extends $.$mol_hotkey {\n\n\t\tkey() {\n\t\t\treturn super.key() as {\n\t\t\t\t[ key in keyof typeof $mol_keyboard_code ]? : ( event : KeyboardEvent )=> void\n\t\t\t}\n\t\t}\n\t\t\n\t\tkeydown( event? : KeyboardEvent ) {\n\n\t\t\tif( !event ) return\n\t\t\tif( event.defaultPrevented ) return\n\n\t\t\tlet name = $mol_keyboard_code[ event.keyCode ] as keyof typeof $mol_keyboard_code\n\t\t\t\n\t\t\tif( this.mod_ctrl() !== event.ctrlKey ) return\n\t\t\tif( this.mod_alt() !== event.altKey ) return\n\t\t\tif( this.mod_shift() !== event.shiftKey ) return\n\t\t\t\n\t\t\tconst handle = this.key()[ name ]\n\t\t\tif( handle ) handle( event )\n\n\t\t}\n\t\t\n\t}\n}\n","namespace $ {\n\texport class $mol_string extends $mol_view {\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * dom_name \\input\n\t\t * ```\n\t\t */\n\t\tdom_name() {\n\t\t\treturn \"input\"\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * enabled true\n\t\t * ```\n\t\t */\n\t\tenabled() {\n\t\t\treturn true\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * minimal_height 40\n\t\t * ```\n\t\t */\n\t\tminimal_height() {\n\t\t\treturn 40\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * autocomplete false\n\t\t * ```\n\t\t */\n\t\tautocomplete() {\n\t\t\treturn false\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * selection?val /number\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tselection(val?: any) {\n\t\t\tif ( val !== undefined ) return val as never\n\t\t\treturn [\n\t\t\t] as readonly number[]\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * auto / <= selection_watcher\n\t\t * ```\n\t\t */\n\t\tauto() {\n\t\t\treturn [\n\t\t\t\tthis.selection_watcher()\n\t\t\t] as readonly any[]\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * field *\n\t\t * \t^\n\t\t * \tdisabled <= disabled\n\t\t * \tvalue <= value_changed?val\n\t\t * \tplaceholder <= hint_visible\n\t\t * \tspellcheck <= spellcheck\n\t\t * \tautocomplete <= autocomplete_native\n\t\t * \tselectionEnd <= selection_end\n\t\t * \tselectionStart <= selection_start\n\t\t * ```\n\t\t */\n\t\tfield() {\n\t\t\treturn {\n\t\t\t\t...super.field(),\n\t\t\t\tdisabled: this.disabled(),\n\t\t\t\tvalue: this.value_changed(),\n\t\t\t\tplaceholder: this.hint_visible(),\n\t\t\t\tspellcheck: this.spellcheck(),\n\t\t\t\tautocomplete: this.autocomplete_native(),\n\t\t\t\tselectionEnd: this.selection_end(),\n\t\t\t\tselectionStart: this.selection_start()\n\t\t\t}\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * attr *\n\t\t * \t^\n\t\t * \tmaxlength <= length_max\n\t\t * \ttype <= type?val\n\t\t * ```\n\t\t */\n\t\tattr() {\n\t\t\treturn {\n\t\t\t\t...super.attr(),\n\t\t\t\tmaxlength: this.length_max(),\n\t\t\t\ttype: this.type()\n\t\t\t}\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * event *\n\t\t * \t^\n\t\t * \tinput?event <=> event_change?event\n\t\t * \tkeydown?event <=> event_key_press?event\n\t\t * ```\n\t\t */\n\t\tevent() {\n\t\t\treturn {\n\t\t\t\t...super.event(),\n\t\t\t\tinput: (event?: any) => this.event_change(event),\n\t\t\t\tkeydown: (event?: any) => this.event_key_press(event)\n\t\t\t}\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * plugins / <= Submit\n\t\t * ```\n\t\t */\n\t\tplugins() {\n\t\t\treturn [\n\t\t\t\tthis.Submit()\n\t\t\t] as readonly any[]\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * selection_watcher null\n\t\t * ```\n\t\t */\n\t\tselection_watcher() {\n\t\t\treturn null as any\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * disabled false\n\t\t * ```\n\t\t */\n\t\tdisabled() {\n\t\t\treturn false\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * value?val \\\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tvalue(val?: any) {\n\t\t\tif ( val !== undefined ) return val as never\n\t\t\treturn \"\"\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * value_changed?val <=> value?val\n\t\t * ```\n\t\t */\n\t\tvalue_changed(val?: any) {\n\t\t\treturn this.value(val)\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * hint \\\n\t\t * ```\n\t\t */\n\t\thint() {\n\t\t\treturn \"\"\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * hint_visible <= hint\n\t\t * ```\n\t\t */\n\t\thint_visible() {\n\t\t\treturn this.hint()\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * spellcheck false\n\t\t * ```\n\t\t */\n\t\tspellcheck() {\n\t\t\treturn false\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * autocomplete_native \\\n\t\t * ```\n\t\t */\n\t\tautocomplete_native() {\n\t\t\treturn \"\"\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * selection_end 0\n\t\t * ```\n\t\t */\n\t\tselection_end() {\n\t\t\treturn 0\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * selection_start 0\n\t\t * ```\n\t\t */\n\t\tselection_start() {\n\t\t\treturn 0\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * length_max Infinity\n\t\t * ```\n\t\t */\n\t\tlength_max() {\n\t\t\treturn Infinity\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * type?val \\text\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\ttype(val?: any) {\n\t\t\tif ( val !== undefined ) return val as never\n\t\t\treturn \"text\"\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * event_change?event null\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tevent_change(event?: any) {\n\t\t\tif ( event !== undefined ) return event as never\n\t\t\treturn null as any\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * event_key_press?event null\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tevent_key_press(event?: any) {\n\t\t\tif ( event !== undefined ) return event as never\n\t\t\treturn null as any\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * submit?event null\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tsubmit(event?: any) {\n\t\t\tif ( event !== undefined ) return event as never\n\t\t\treturn null as any\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * Submit $mol_hotkey key * enter?event <=> submit?event\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tSubmit() {\n\t\t\tconst obj = new this.$.$mol_hotkey()\n\t\t\t\n\t\t\tobj.key = () => ({\n\t\t\t\tenter: (event?: any) => this.submit(event)\n\t\t\t})\n\t\t\t\n\t\t\treturn obj\n\t\t}\n\t}\n\t\n}\n\n","namespace $ { $mol_style_attach( \"mol/gap/gap.css\",\n \":root {\\n\\t--mol_gap_block: .75rem;\\n\\t--mol_gap_text: .5rem .75rem;\\n\\t--mol_gap_round: .25rem;\\n\\t--mol_gap_space: .25rem;\\n\\t--mol_gap_blur: .5rem;\\n}\\n\"\n) }","namespace $ {\n\tconst { vary } = $mol_style_func\n\texport let $mol_gap = {\n\t\tblock: vary( '--mol_gap_block' ) ,\n\t\ttext: vary( '--mol_gap_text' ),\n\t\tround: vary( '--mol_gap_round' ),\n\t\tspace: vary( '--mol_gap_space' ),\n\t\tblur: vary( '--mol_gap_blur' ),\n\t} as const\n}\n","namespace $ {\n\n\texport class $mol_dom_listener extends $mol_object {\n\n\t\tconstructor(\n\t\t\tpublic _node : any ,\n\t\t\tpublic _event : string ,\n\t\t\tpublic _handler : ( event : any )=> any ,\n\t\t\tpublic _config : boolean|{ passive : boolean } = { passive : true }\n\t\t) {\n\t\t\tsuper()\n\t\t\tthis._node.addEventListener( this._event , this._handler , this._config )\n\t\t}\n\n\t\tdestructor() {\n\t\t\tthis._node.removeEventListener( this._event , this._handler , this._config )\n\t\t\tsuper.destructor()\n\t\t}\n\n\t}\n\n}\n","namespace $ { $mol_style_attach( \"mol/string/string.view.css\",\n \"[mol_string] {\\n\\tbox-sizing: border-box;\\n\\toutline-offset: 0;\\n\\tborder: none;\\n\\tborder-radius: var(--mol_gap_round);\\n\\twhite-space: nowrap;\\n\\toverflow: hidden;\\n\\ttext-overflow: ellipsis;\\n\\tpadding: var(--mol_gap_text);\\n\\ttext-align: left;\\n\\tposition: relative;\\n\\tz-index: 0;\\n\\tfont: inherit;\\n\\tflex: 1 1 auto;\\n\\tbackground: transparent;\\n\\tmin-width: 0;\\n\\tcolor: inherit;\\n\\tbackground: var(--mol_theme_card);\\n}\\n\\n[mol_string]:disabled:not(:placeholder-shown) {\\n\\tbackground-color: transparent;\\n\\tcolor: var(--mol_theme_text);\\n}\\n\\n[mol_string]:hover:where(:not(:disabled)) {\\n\\tbackground: var(--mol_theme_hover);\\n}\\n\\n[mol_string]:focus {\\n\\toutline: none;\\n\\tz-index: 1;\\n\\tbackground: var(--mol_theme_field);\\n\\tcolor: var(--mol_theme_text);\\n\\tbox-shadow: inset 0 0 0 1px var(--mol_theme_focus);\\n}\\n\\n[mol_string]::-ms-clear {\\n\\tdisplay: none;\\n}\\n\"\n) }","namespace $.$$ {\n\texport class $mol_string extends $.$mol_string {\n\t\t\n\t\t// _timer = null as any\n\t\t\n\t\tevent_change( next? : Event ) {\n\t\t\tif( !next ) return\n\t\t\tthis.value( ( next.target as HTMLInputElement ).value )\n\t\t\tthis.selection_change( next )\n\t\t}\n\n\t\thint_visible() {\n\t\t\treturn ( this.enabled() ? this.hint() : '' ) || ' '\n\t\t}\n\n\t\tdisabled() {\n\t\t\treturn !this.enabled()\n\t\t}\n\n\t\tautocomplete_native() {\n\t\t\treturn this.autocomplete() ? 'on' : 'off'\n\t\t}\n\t\t\n\t\t@ $mol_mem\n\t\tselection_watcher() {\n\t\t\treturn new $mol_dom_listener(\n\t\t\t\tthis.$.$mol_dom_context.document,\n\t\t\t\t'selectionchange',\n\t\t\t\tevent => this.selection_change( event ),\n\t\t\t)\n\t\t}\n\t\t\n\t\tselection_change( event: Event ) {\n\t\t\tconst el = this.dom_node() as HTMLInputElement\n\t\t\tthis.selection([\n\t\t\t\tel.selectionStart,\n\t\t\t\tel.selectionEnd,\n\t\t\t])\n\t\t}\n\t\t\n\t\tselection_start() {\n\t\t\treturn this.selection()[0]\n\t\t}\n\n\t\tselection_end() {\n\t\t\treturn this.selection()[1]\n\t\t}\n\n\t}\n}\n","namespace $ {\n\texport class $mol_speck extends $mol_view {\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * attr *\n\t\t * \t^\n\t\t * \tmol_theme \\$mol_theme_accent\n\t\t * ```\n\t\t */\n\t\tattr() {\n\t\t\treturn {\n\t\t\t\t...super.attr(),\n\t\t\t\tmol_theme: \"$mol_theme_accent\"\n\t\t\t}\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * style *\n\t\t * \t^\n\t\t * \tminHeight \\1em\n\t\t * ```\n\t\t */\n\t\tstyle() {\n\t\t\treturn {\n\t\t\t\t...super.style(),\n\t\t\t\tminHeight: \"1em\"\n\t\t\t}\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * sub / <= value\n\t\t * ```\n\t\t */\n\t\tsub() {\n\t\t\treturn [\n\t\t\t\tthis.value()\n\t\t\t] as readonly any[]\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * value null\n\t\t * ```\n\t\t */\n\t\tvalue() {\n\t\t\treturn null as any\n\t\t}\n\t}\n\t\n}\n\n","namespace $ { $mol_style_attach( \"mol/speck/speck.view.css\",\n \"[mol_speck] {\\n\\tfont-size: .625rem;\\n\\tborder-radius: 1rem;\\n\\tmargin: -0.5rem -0.25rem;\\n\\talign-self: flex-start;\\n\\tmin-height: 1em;\\n\\tmin-width: .5em;\\n\\tvertical-align: sub;\\n\\tpadding: .25em .5em;\\n\\tposition: absolute;\\n\\tz-index: 2;\\n\\ttext-align: center;\\n\\tline-height: 1;\\n\\tdisplay: inline-block;\\n\\twhite-space: nowrap;\\n\\ttext-overflow: ellipsis;\\n}\\n\"\n) }","namespace $ {\n\texport class $mol_button extends $mol_view {\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * enabled true\n\t\t * ```\n\t\t */\n\t\tenabled() {\n\t\t\treturn true\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * click?event null\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tclick(event?: any) {\n\t\t\tif ( event !== undefined ) return event as never\n\t\t\treturn null as any\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * event_click?event null\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tevent_click(event?: any) {\n\t\t\tif ( event !== undefined ) return event as never\n\t\t\treturn null as any\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * event *\n\t\t * \t^\n\t\t * \tclick?event <=> event_activate?event\n\t\t * \tkeydown?event <=> event_key_press?event\n\t\t * ```\n\t\t */\n\t\tevent() {\n\t\t\treturn {\n\t\t\t\t...super.event(),\n\t\t\t\tclick: (event?: any) => this.event_activate(event),\n\t\t\t\tkeydown: (event?: any) => this.event_key_press(event)\n\t\t\t}\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * attr *\n\t\t * \t^\n\t\t * \tdisabled <= disabled\n\t\t * \trole \\button\n\t\t * \ttabindex <= tab_index\n\t\t * \ttitle <= hint\n\t\t * ```\n\t\t */\n\t\tattr() {\n\t\t\treturn {\n\t\t\t\t...super.attr(),\n\t\t\t\tdisabled: this.disabled(),\n\t\t\t\trole: \"button\",\n\t\t\t\ttabindex: this.tab_index(),\n\t\t\t\ttitle: this.hint()\n\t\t\t}\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * sub /$mol_view_content <= title\n\t\t * ```\n\t\t */\n\t\tsub() {\n\t\t\treturn [\n\t\t\t\tthis.title()\n\t\t\t] as readonly $mol_view_content[]\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * Speck $mol_speck value <= error\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tSpeck() {\n\t\t\tconst obj = new this.$.$mol_speck()\n\t\t\t\n\t\t\tobj.value = () => this.error()\n\t\t\t\n\t\t\treturn obj\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * event_activate?event null\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tevent_activate(event?: any) {\n\t\t\tif ( event !== undefined ) return event as never\n\t\t\treturn null as any\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * event_key_press?event null\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tevent_key_press(event?: any) {\n\t\t\tif ( event !== undefined ) return event as never\n\t\t\treturn null as any\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * disabled false\n\t\t * ```\n\t\t */\n\t\tdisabled() {\n\t\t\treturn false\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * tab_index 0\n\t\t * ```\n\t\t */\n\t\ttab_index() {\n\t\t\treturn 0\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * hint \\\n\t\t * ```\n\t\t */\n\t\thint() {\n\t\t\treturn \"\"\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * error \\\n\t\t * ```\n\t\t */\n\t\terror() {\n\t\t\treturn \"\"\n\t\t}\n\t}\n\t\n}\n\n","namespace $ { $mol_style_attach( \"mol/button/button.view.css\",\n \"[mol_button] {\\n\\tborder: none;\\n\\tfont: inherit;\\n\\tdisplay: inline-flex;\\n\\tflex-shrink: 0;\\n\\ttext-decoration: inherit;\\n\\tcursor: inherit;\\n\\tposition: relative;\\n\\tbox-sizing: border-box;\\n\\tword-break: normal;\\n\\tcursor: default;\\n\\tuser-select: none;\\n\\tborder-radius: var(--mol_gap_round);\\n}\\n\\n[mol_button]:focus {\\n\\toutline: none;\\n}\\n\"\n) }","namespace $.$$ {\n\texport class $mol_button extends $.$mol_button {\n\n\t\t@ $mol_mem\n\t\tstatus( next = [ null as any ] ) { return next }\n\t\t\n\t\tdisabled() {\n\t\t\treturn !this.enabled()\n\t\t}\n\t\t\n\t\tevent_activate( next : Event ) {\n\t\t\t\n\t\t\tif( !next ) return\n\t\t\tif( !this.enabled() ) return\n\n\t\t\ttry {\n\t\t\t\t\n\t\t\t\tthis.event_click( next )\n\t\t\t\tthis.click( next )\n\t\t\t\tthis.status([ null ])\n\t\t\t\t\n\t\t\t} catch( error: any ) {\n\t\t\t\t\n\t\t\t\tthis.status([ error ])\n\t\t\t\t$mol_fail_hidden( error )\n\t\t\t\t\n\t\t\t}\n\n\t\t}\n\t\t\n\t\tevent_key_press ( event: KeyboardEvent ) { \n\t\t\tif( event.keyCode === $mol_keyboard_code.enter ) {\n\t\t\t\treturn this.event_activate( event )\n\t\t\t}\n\t\t} \n\t\t\n\t\ttab_index() {\n\t\t\treturn this.enabled() ? super.tab_index() : -1\n\t\t}\n\n\t\terror() {\n\n\t\t\tconst [ error ] = this.status()\n\t\t\tif( !error ) return ''\n\n\t\t\tif( error instanceof Promise ) {\n\t\t\t\treturn $mol_fail_hidden( error )\n\t\t\t}\n\t\t\t\n\t\t\treturn String( error.message ?? error )\n\n\t\t}\n\n\t\tsub_visible() {\n\t\t\treturn [\n\t\t\t\t... this.error() ? [ this.Speck() ] : [] ,\n\t\t\t\t... this.sub() ,\n\t\t\t]\n\t\t}\n\t\t\n\t}\n}\n",null,null,null,null,null,null,null,"namespace $ {\n\n\texport function $mol_style_sheet<\n\t\tComponent extends $mol_view,\n\t\tConfig extends $mol_style_guard< Component , Config >,\n\t>(\n\t\tComponent : new()=> Component,\n\t\tconfig0 : Config ,\n\t) {\n\n\t\tlet rules = [] as string[]\n\n\t\tconst block = $mol_dom_qname( $mol_ambient({}).$mol_func_name( Component ) )\n\t\tconst kebab = ( name : string )=> name.replace( /[A-Z]/g , letter => '-' + letter.toLowerCase() )\n\n\t\tconst make_class = ( prefix : string , path : string[] , config : typeof config0 )=> {\n\n\t\t\tconst props = [] as string[]\n\n\t\t\tconst selector = ( prefix : string , path : string[] )=> {\n\t\t\t\tif( path.length === 0 ) return prefix || `[${ block }]`\n\t\t\t\tlet res = `[${ block }_${ path.join('_') }]`\n\t\t\t\tif( prefix ) res = prefix + ' :where(' + res + ')'\n\t\t\t\treturn res\n\t\t\t}\n\t\t\t\n\t\t\tfor( const key of Object.keys( config ).reverse() ) {\n\n\t\t\t\tif( /^[a-z]/.test(key) ) {\n\t\t\t\t\t\n\t\t\t\t\tconst addProp = ( keys : string[] , val : any )=> {\n\n\t\t\t\t\t\tif( Array.isArray( val ) ) {\n\n\t\t\t\t\t\t\tif( val[0] && [ Array , Object ].includes( val[0].constructor ) ) {\n\t\t\t\t\t\t\t\tval = val.map( v => {\n\t\t\t\t\t\t\t\t\treturn Object.entries( v ).map( ([ n , a ])=> {\n\t\t\t\t\t\t\t\t\t\tif( a === true ) return kebab( n )\n\t\t\t\t\t\t\t\t\t\tif( a === false ) return null\n\t\t\t\t\t\t\t\t\t\treturn String( a )\n\t\t\t\t\t\t\t\t\t} ).filter( Boolean ).join(' ')\n\t\t\t\t\t\t\t\t}).join( ',' )\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tval = val.join(' ')\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tprops.push(`\\t${ keys.join('-') }: ${ val };\\n`)\n\n\t\t\t\t\t\t} else if( val.constructor === Object ) {\n\n\t\t\t\t\t\t\tfor( let suffix in val ) {\n\t\t\t\t\t\t\t\taddProp( [ ... keys , kebab( suffix ) ] , val[ suffix ] )\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tprops.push(`\\t${ keys.join('-') }: ${ val };\\n`)\n\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t}\n\n\t\t\t\t\taddProp( [ kebab(key) ] , config[key] )\n\n\t\t\t\t} else if( /^[A-Z]/.test(key) ) {\n\n\t\t\t\t\tmake_class( prefix , [ ... path , key.toLowerCase() ] , config[key] )\n\n\t\t\t\t} else if( key[0] === '$' ) {\n\n\t\t\t\t\tmake_class( selector( prefix , path ) + ' :where([' + $mol_dom_qname( key ) + '])' , [] , config[key] )\n\n\t\t\t\t} else if( key === '>' ) {\n\n\t\t\t\t\tconst types = config[key] as any\n\n\t\t\t\t\tfor( let type in types ) {\n\t\t\t\t\t\tmake_class( selector( prefix , path ) + ' > :where([' + $mol_dom_qname( type ) + '])' , [] , types[type] )\n\t\t\t\t\t}\n\n\t\t\t\t} else if( key === '@' ) {\n\n\t\t\t\t\tconst attrs = config[key] as any\n\n\t\t\t\t\tfor( let name in attrs ) {\n\t\t\t\t\t\tfor( let val in attrs[name] ) {\n\t\t\t\t\t\t\tmake_class( selector( prefix , path ) + ':where([' + name + '=' + JSON.stringify( val ) + '])' , [] , attrs[name][val] )\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t} else if( key === '@media' ) {\n\n\t\t\t\t\tconst media = config[key] as any\n\n\t\t\t\t\tfor( let query in media ) {\n\n\t\t\t\t\t\trules.push('}\\n')\n\t\t\t\t\t\t\n\t\t\t\t\t\tmake_class( prefix , path , media[query] )\n\t\t\t\t\t\t\n\t\t\t\t\t\trules.push( `${ key } ${ query } {\\n` )\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tmake_class( selector( prefix , path ) + key , [] , config[key] )\n\n\t\t\t\t}\n\n\t\t\t}\n\t\t\t\n\t\t\tif( props.length ) {\n\t\t\t\trules.push( `${ selector( prefix , path ) } {\\n${ props.reverse().join('') }}\\n` )\n\t\t\t}\n\n\t\t}\n\n\t\tmake_class( '' , [] , config0 )\n\n\t\treturn rules.reverse().join('')\n\n\t}\n\n}\n","namespace $ {\n\n\texport function $mol_style_define<\n\t\tComponent extends $mol_view,\n\t\tConfig extends $mol_style_guard< Component , Config >,\n\t>(\n\t\tComponent : new()=> Component,\n\t\tconfig : Config ,\n\t) {\n\n\t\treturn $mol_style_attach(\n\t\t\tComponent.name,\n\t\t\t$mol_style_sheet( Component , config ),\n\t\t)\n\n\t}\n\n}\n","namespace $ {\n\texport class $mol_svg extends $mol_view {\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * dom_name \\svg\n\t\t * ```\n\t\t */\n\t\tdom_name() {\n\t\t\treturn \"svg\"\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * dom_name_space \\http://www.w3.org/2000/svg\n\t\t * ```\n\t\t */\n\t\tdom_name_space() {\n\t\t\treturn \"http://www.w3.org/2000/svg\"\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * font_size 16\n\t\t * ```\n\t\t */\n\t\tfont_size() {\n\t\t\treturn 16\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * font_family \\\n\t\t * ```\n\t\t */\n\t\tfont_family() {\n\t\t\treturn \"\"\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * style_size *\n\t\t * ```\n\t\t */\n\t\tstyle_size() {\n\t\t\treturn {\n\t\t\t}\n\t\t}\n\t}\n\t\n}\n\n","namespace $ {\n\n\texport class $mol_after_timeout extends $mol_object2 {\n\n\t\tid : any\n\n\t\tconstructor(\n\t\t\tpublic delay : number ,\n\t\t\tpublic task : ()=> void ,\n\t\t) {\n\t\t\tsuper()\n\t\t\tthis.id = setTimeout( task , delay )\n\t\t}\n\n\t\tdestructor() {\n\t\t\tclearTimeout( this.id )\n\t\t}\n\n\t}\n\t\n}\n","namespace $ {\n\t\n\texport class $mol_state_time extends $mol_object {\n\t\t\n\t\t@ $mol_mem_key\n\t\tstatic task( precision: number, reset?: null ): $mol_after_timeout | $mol_after_frame {\n\t\t\t\n\t\t\tif( precision ) {\n\t\t\t\treturn new $mol_after_timeout( precision, ()=> this.task( precision, null ) )\n\t\t\t} else {\n\t\t\t\treturn new $mol_after_frame( ()=> this.task( precision, null ) )\n\t\t\t}\n\t\t\n\t\t}\n\t\t\n\t\t@ $mol_mem_key\n\t\tstatic now( precision: number ) {\n\t\t\tthis.task( precision )\n\t\t\treturn Date.now()\n\t\t}\n\t\t\n\t}\n\t\n}\n","namespace $.$$ {\n\texport class $mol_svg extends $.$mol_svg {\n\t\t@$mol_mem\n\t\tcomputed_style() {\n\t\t\tconst win = this.$.$mol_dom_context\n\t\t\tconst style = win.getComputedStyle(this.dom_node())\n\n\t\t\tif(!style['font-size']) $mol_state_time.now( 0 )\n\n\t\t\treturn style\n\t\t}\n\n\t\t@$mol_mem\n\t\tfont_size(): number {\n\t\t\treturn parseInt(this.computed_style()['font-size']) || 16\n\t\t}\n\n\t\t@$mol_mem\n\t\tfont_family() {\n\t\t\treturn this.computed_style()['font-family']\n\t\t}\n\n\t}\n}\n","namespace $ {\n\texport class $mol_svg_root extends $mol_svg {\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * dom_name \\svg\n\t\t * ```\n\t\t */\n\t\tdom_name() {\n\t\t\treturn \"svg\"\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * attr *\n\t\t * \t^\n\t\t * \tviewBox <= view_box\n\t\t * \tpreserveAspectRatio <= aspect\n\t\t * ```\n\t\t */\n\t\tattr() {\n\t\t\treturn {\n\t\t\t\t...super.attr(),\n\t\t\t\tviewBox: this.view_box(),\n\t\t\t\tpreserveAspectRatio: this.aspect()\n\t\t\t}\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * view_box \\0 0 100 100\n\t\t * ```\n\t\t */\n\t\tview_box() {\n\t\t\treturn \"0 0 100 100\"\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * aspect \\xMidYMid\n\t\t * ```\n\t\t */\n\t\taspect() {\n\t\t\treturn \"xMidYMid\"\n\t\t}\n\t}\n\t\n}\n\n","namespace $ { $mol_style_attach( \"mol/svg/root/root.view.css\",\n \"[mol_svg_root] {\\n\\toverflow: hidden;\\n}\\n\"\n) }","namespace $ {\n\texport class $mol_svg_path extends $mol_svg {\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * dom_name \\path\n\t\t * ```\n\t\t */\n\t\tdom_name() {\n\t\t\treturn \"path\"\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * attr *\n\t\t * \t^\n\t\t * \td <= geometry\n\t\t * ```\n\t\t */\n\t\tattr() {\n\t\t\treturn {\n\t\t\t\t...super.attr(),\n\t\t\t\td: this.geometry()\n\t\t\t}\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * geometry \\\n\t\t * ```\n\t\t */\n\t\tgeometry() {\n\t\t\treturn \"\"\n\t\t}\n\t}\n\t\n}\n\n","namespace $ {\n\texport class $mol_icon extends $mol_svg_root {\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * view_box \\0 0 24 24\n\t\t * ```\n\t\t */\n\t\tview_box() {\n\t\t\treturn \"0 0 24 24\"\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * minimal_width 16\n\t\t * ```\n\t\t */\n\t\tminimal_width() {\n\t\t\treturn 16\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * minimal_height 16\n\t\t * ```\n\t\t */\n\t\tminimal_height() {\n\t\t\treturn 16\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * sub / <= Path\n\t\t * ```\n\t\t */\n\t\tsub() {\n\t\t\treturn [\n\t\t\t\tthis.Path()\n\t\t\t] as readonly any[]\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * path \\\n\t\t * ```\n\t\t */\n\t\tpath() {\n\t\t\treturn \"\"\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * Path $mol_svg_path geometry <= path\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tPath() {\n\t\t\tconst obj = new this.$.$mol_svg_path()\n\t\t\t\n\t\t\tobj.geometry = () => this.path()\n\t\t\t\n\t\t\treturn obj\n\t\t}\n\t}\n\t\n}\n\n","namespace $ { $mol_style_attach( \"mol/icon/icon.view.css\",\n \"[mol_icon] {\\n\\tfill: currentColor;\\n\\tstroke: none;\\n\\twidth: 1rem;\\n\\theight: 1rem;\\n\\tflex: 0 0 auto;\\n\\tvertical-align: top;\\n\\tmargin: .25rem 0;\\n\\tdisplay: inline-block;\\n\\tfilter: drop-shadow(0px 1px 1px var(--mol_theme_back));\\n\\ttransform-origin: center;\\n}\\n\\n[mol_icon_path] {\\n\\ttransform-origin: center;\\n}\\n\"\n) }","namespace $ {\n\texport class $mol_link extends $mol_view {\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * dom_name \\a\n\t\t * ```\n\t\t */\n\t\tdom_name() {\n\t\t\treturn \"a\"\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * attr *\n\t\t * \t^\n\t\t * \thref <= uri\n\t\t * \ttitle <= hint\n\t\t * \ttarget <= target\n\t\t * \tdownload <= file_name\n\t\t * \tmol_link_current <= current\n\t\t * ```\n\t\t */\n\t\tattr() {\n\t\t\treturn {\n\t\t\t\t...super.attr(),\n\t\t\t\thref: this.uri(),\n\t\t\t\ttitle: this.hint(),\n\t\t\t\ttarget: this.target(),\n\t\t\t\tdownload: this.file_name(),\n\t\t\t\tmol_link_current: this.current()\n\t\t\t}\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * sub /$mol_view_content <= title\n\t\t * ```\n\t\t */\n\t\tsub() {\n\t\t\treturn [\n\t\t\t\tthis.title()\n\t\t\t] as readonly $mol_view_content[]\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * arg *\n\t\t * ```\n\t\t */\n\t\targ() {\n\t\t\treturn {\n\t\t\t}\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * event *\n\t\t * \t^\n\t\t * \tclick?event <=> click?event\n\t\t * ```\n\t\t */\n\t\tevent() {\n\t\t\treturn {\n\t\t\t\t...super.event(),\n\t\t\t\tclick: (event?: any) => this.click(event)\n\t\t\t}\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * uri \\\n\t\t * ```\n\t\t */\n\t\turi() {\n\t\t\treturn \"\"\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * hint \\\n\t\t * ```\n\t\t */\n\t\thint() {\n\t\t\treturn \"\"\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * target \\_self\n\t\t * ```\n\t\t */\n\t\ttarget() {\n\t\t\treturn \"_self\"\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * file_name \\\n\t\t * ```\n\t\t */\n\t\tfile_name() {\n\t\t\treturn \"\"\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * current false\n\t\t * ```\n\t\t */\n\t\tcurrent() {\n\t\t\treturn false\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * event_click?event null\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tevent_click(event?: any) {\n\t\t\tif ( event !== undefined ) return event as never\n\t\t\treturn null as any\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * click?event <=> event_click?event\n\t\t * ```\n\t\t */\n\t\tclick(event?: any) {\n\t\t\treturn this.event_click(event)\n\t\t}\n\t}\n\t\n}\n\n","namespace $ {\n\t\n\texport class $mol_state_arg extends $mol_object {\n\t\t\n\t\t@ $mol_mem\n\t\tstatic href( next?: string ) {\n\t\t\t\n\t\t\tif( next === undefined ) {\n\t\t\t\t\n\t\t\t\tnext = $mol_dom_context.location.href\n\t\t\t\t\n\t\t\t} else if( !/^about:srcdoc/.test( next ) ) {\n\t\t\t\t\n\t\t\t\tnew $mol_after_frame( ()=> {\n\t\t\t\t\t\n\t\t\t\t\tconst next = this.href()\n\t\t\t\t\tconst prev = $mol_dom_context.location.href\n\t\t\t\t\tif( next === prev ) return\n\t\t\t\t\t\n\t\t\t\t\tconst history = $mol_dom_context.history\n\t\t\t\t\thistory.replaceState( history.state, $mol_dom_context.document.title, next )\n\t\t\t\t\t\n\t\t\t\t} )\n\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t\tif( $mol_dom_context.parent !== $mol_dom_context.self ) {\n\t\t\t\t$mol_dom_context.parent.postMessage( [ 'hashchange', next ], '*' )\n\t\t\t}\n\t\t\t\n\t\t\treturn next\n\t\t}\n\t\t\n\t\t@ $mol_mem\n\t\tstatic href_normal(): string {\n\t\t\treturn this.link({})\n\t\t}\n\t\t\n\t\t@ $mol_mem\n\t\tstatic href_absolute(): string {\n\t\t\treturn new URL( this.href(), $mol_dom_context.location.href ).toString()\n\t\t}\n\t\t\n\t\t@ $mol_mem\n\t\tstatic dict( next? : { [ key : string ] : string | null } ) {\n\t\t\t\n\t\t\tvar href = this.href( next && this.make_link( next ) ).split( /#!?/ )[1] || ''\n\t\t\tvar chunks = href.split( this.separator )\n\t\t\t\n\t\t\tvar params : { [ key : string ] : string } = {}\n\t\t\tchunks.forEach(\n\t\t\t\tchunk => {\n\t\t\t\t\tif( !chunk ) return\n\t\t\t\t\tvar vals = chunk.split( '=' ).map( decodeURIComponent )\n\t\t\t\t\tparams[ vals.shift()! ] = vals.join( '=' )\n\t\t\t\t}\n\t\t\t)\n\t\t\t\n\t\t\treturn params\n\t\t}\n\n\t\t@ $mol_mem_key\n\t\tstatic dict_cut( except : string[] ) {\n\t\t\t\n\t\t\tconst dict = this.dict()\n\t\t\tconst cut : { [ key : string ] : string } = {}\n\t\t\t\n\t\t\tfor( const key in dict ) {\n\t\t\t\tif( except.indexOf( key ) >= 0 ) continue\n\t\t\t\tcut[ key ] = dict[ key ]\n\t\t\t}\n\t\t\t\n\t\t\treturn cut\n\t\t}\n\t\t\n\t\t@ $mol_mem_key\n\t\tstatic value( key : string , next? : string | null ) {\n\t\t\tconst nextDict = ( next === void 0 ) ? void 0 : { ... this.dict() , [ key ] : next }\n\t\t\tconst next2 = this.dict( nextDict )[ key ]\n\t\t\treturn ( next2 == null ) ? null : next2\n\t\t}\n\t\t\n\t\tstatic link( next : { [ key : string ] : string } ) {\n\t\t\treturn this.make_link({\n\t\t\t\t... this.dict_cut( Object.keys( next ) ),\n\t\t\t\t... next,\n\t\t\t})\n\t\t}\n\t\t\n\t\tstatic prolog = '!'\n\t\tstatic separator = '/'\n\t\t\n\t\t@ $mol_mem_key\n\t\tstatic make_link( next : { [ key : string ] : string | null } ) {\n\t\t\tconst chunks : string[] = []\n\t\t\tfor( let key in next ) {\n\t\t\t\tif( null == next[ key ] ) continue\n\t\t\t\tconst val = next[ key ]\n\t\t\t\tchunks.push( [ key ].concat( val ? [ val ] : [] ).map( this.encode ).join( '=' ) )\n\t\t\t}\n\t\t\t\n\t\t\treturn new URL( '#' + this.prolog + chunks.join( this.separator ) , this.href_absolute() ).toString()\n\t\t}\n\n\t\tstatic encode( str : string ) {\n\t\t\treturn encodeURIComponent( str ).replace( /\\(/g , '%28' ).replace( /\\)/g , '%29' )\n\t\t}\n\t\t\n\t\tconstructor( public prefix = '' ) {\n\t\t\tsuper()\n\t\t}\n\t\t\n\t\tvalue( key : string , next? : string ) {\n\t\t\treturn ( this.constructor as typeof $mol_state_arg ).value( this.prefix + key , next )\n\t\t}\n\t\t\n\t\tsub( postfix : string ) {\n\t\t\treturn new ( this.constructor as typeof $mol_state_arg )( this.prefix + postfix + '.' )\n\t\t}\n\t\t\n\t\tlink( next : { [ key : string ] : string } ) {\n\t\t\tvar prefix = this.prefix\n\t\t\tvar dict : { [ key : string ] : string } = {}\n\t\t\tfor( var key in next ) {\n\t\t\t\tdict[ prefix + key ] = next[ key ]\n\t\t\t}\n\t\t\treturn ( this.constructor as typeof $mol_state_arg ).link( dict )\n\t\t}\n\t\t\n\t}\n\n\tconst $mol_state_arg_change = ( event : Event )=> {\n\t\t$mol_state_arg.href( $mol_dom_context.location.href ) \n\t}\n\n\tself.addEventListener( 'hashchange' , $mol_state_arg_change )\n\t\n}\n","namespace $ {\n\n\tconst { rem } = $mol_style_unit\n\tconst { scale } = $mol_style_func\n\n\t$mol_style_define( $mol_link , {\n\t\t\n\t\ttextDecoration: 'none',\n\t\tcolor: $mol_theme.control,\n\t\tstroke: 'currentcolor',\n\t\tcursor: 'pointer',\n\t\tpadding: $mol_gap.text,\n\t\tboxSizing: 'border-box',\n\t\tposition: 'relative',\n\t\tminWidth: rem(2.5),\n\t\tgap: $mol_gap.space,\n\t\t\n\t\tborder: {\n\t\t\tradius: $mol_gap.round,\n\t\t},\n\n\t\t':hover': {\n\t\t\t\n\t\t\tbackground: {\n\t\t\t\tcolor: $mol_theme.hover,\n\t\t\t},\n\t\t\t\n\t\t\t$mol_icon: {\n\t\t\t\ttransform: 'scale(1.5)',\n\t\t\t},\n\t\t\t\n\t\t},\n\n\t\t':focus': {\n\t\t\t\n\t\t\toutline: 'none',\n\t\t\t\n\t\t\tbackground: {\n\t\t\t\tcolor: $mol_theme.hover,\n\t\t\t},\n\t\t\t\n\t\t\t$mol_icon: {\n\t\t\t\ttransform: 'scale(1.5)',\n\t\t\t},\n\t\t\t\n\t\t},\n\n\t\t':focus-within': {\n\t\t\toutline: 'none',\n\t\t\tbackground: {\n\t\t\t\tcolor: $mol_theme.hover,\n\t\t\t}\n\t\t},\n\n\t\t'@': {\n\t\t\tmol_link_current: {\n\t\t\t\t'true': {\n\t\t\t\t\tcolor: $mol_theme.current,\n\t\t\t\t\ttextShadow: '0 0',\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\n\t} )\n\n}\n","namespace $.$$ {\n\t\n\texport class $mol_link extends $.$mol_link {\n\t\t\n\t\t@ $mol_mem\n\t\turi() {\n\t\t\t\n\t\t\tconst arg = this.arg()\n\t\t\t\n\t\t\tconst uri = new this.$.$mol_state_arg( this.state_key() ).link( arg )\n\t\t\tif( uri !== this.$.$mol_state_arg.href() ) return uri\n\t\t\t\n\t\t\tconst arg2 = {}\n\t\t\tfor( let i in arg ) arg2[i] = null\n\t\t\t\n\t\t\treturn new this.$.$mol_state_arg( this.state_key() ).link( arg2 )\n\t\t}\n\t\t\n\t\t@ $mol_mem\n\t\turi_native() {\n\t\t\tconst base = this.$.$mol_state_arg.href()\n\t\t\treturn new URL( this.uri() , base )\n\t\t}\n\n\t\t@ $mol_mem\n\t\tcurrent() {\n\n\t\t\tconst base = this.$.$mol_state_arg.href_normal()\n\t\t\tconst target = this.uri_native().toString()\n\n\t\t\tif( base === target ) return true\n\t\t\t\n\t\t\tconst args = this.arg()\n\t\t\t\n\t\t\tconst keys = Object.keys( args ).filter( key => args[ key ] != null )\n\t\t\tif( keys.length === 0 ) return false\n\n\t\t\tfor( const key of keys ) {\n\t\t\t\tif( this.$.$mol_state_arg.value( key ) !== args[ key ] ) return false\n\t\t\t}\n\n\t\t\treturn true\n\t\t}\n\n\t\tfile_name() {\n\t\t\treturn null as unknown as string\n\t\t}\n\n\t\tminimal_height() {\n\t\t\treturn Math.max( super.minimal_height(), 24 )\n\t\t}\n\t\t\n\t\ttarget(): '_self' | '_blank' | '_top' | '_parent' | string {\n\t\t\treturn ( this.uri_native().origin === $mol_dom_context.location.origin ) ? '_self' : '_blank'\n\t\t}\n\n\t}\n\t\n}\n","namespace $ {\n\texport class $mol_button_typed extends $mol_button {\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * minimal_height 40\n\t\t * ```\n\t\t */\n\t\tminimal_height() {\n\t\t\treturn 40\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * minimal_width 40\n\t\t * ```\n\t\t */\n\t\tminimal_width() {\n\t\t\treturn 40\n\t\t}\n\t}\n\t\n}\n\n","namespace $ { $mol_style_attach( \"mol/button/typed/typed.view.css\",\n \"[mol_button_typed] {\\n\\talign-content: center;\\n\\talign-items: center;\\n\\tpadding: var(--mol_gap_text);\\n\\tborder-radius: var(--mol_gap_round);\\n\\tgap: var(--mol_gap_space);\\n\\tuser-select: none;\\n\\tcursor: pointer;\\n}\\n\\n[mol_button_typed][disabled] {\\n\\tpointer-events: none;\\n}\\n\\n[mol_button_typed]:hover ,\\n[mol_button_typed]:focus {\\n\\tbackground-color: var(--mol_theme_hover);\\n}\\n\\n[mol_button_typed]:hover [mol_icon] ,\\n[mol_button_typed]:focus [mol_icon] {\\n\\ttransform: scale(1.5);\\n}\\n\"\n) }","namespace $ {\n\texport class $mol_button_minor extends $mol_button_typed {\n\t}\n\t\n}\n\n","namespace $ { $mol_style_attach( \"mol/button/minor/minor.view.css\",\n \"[mol_button_minor] {\\n\\tcolor: var(--mol_theme_control);\\n}\\n\\n[mol_button_minor][disabled] {\\n\\tcolor: var(--mol_theme_shade);\\n}\\n\"\n) }","namespace $ {\n\texport class $mol_check extends $mol_button_minor {\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * attr *\n\t\t * \t^\n\t\t * \tmol_check_checked <= checked?val\n\t\t * \taria-checked <= checked?val\n\t\t * \trole \\checkbox\n\t\t * ```\n\t\t */\n\t\tattr() {\n\t\t\treturn {\n\t\t\t\t...super.attr(),\n\t\t\t\tmol_check_checked: this.checked(),\n\t\t\t\t\"aria-checked\": this.checked(),\n\t\t\t\trole: \"checkbox\"\n\t\t\t}\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * sub /$mol_view_content\n\t\t * \t<= Icon\n\t\t * \t<= label\n\t\t * ```\n\t\t */\n\t\tsub() {\n\t\t\treturn [\n\t\t\t\tthis.Icon(),\n\t\t\t\tthis.label()\n\t\t\t] as readonly $mol_view_content[]\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * checked?val false\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tchecked(val?: any) {\n\t\t\tif ( val !== undefined ) return val as never\n\t\t\treturn false\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * Icon null\n\t\t * ```\n\t\t */\n\t\tIcon() {\n\t\t\treturn null as any\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * title \\\n\t\t * ```\n\t\t */\n\t\ttitle() {\n\t\t\treturn \"\"\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * Title $mol_view sub / <= title\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tTitle() {\n\t\t\tconst obj = new this.$.$mol_view()\n\t\t\t\n\t\t\tobj.sub = () => [\n\t\t\t\tthis.title()\n\t\t\t] as readonly any[]\n\t\t\t\n\t\t\treturn obj\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * label / <= Title\n\t\t * ```\n\t\t */\n\t\tlabel() {\n\t\t\treturn [\n\t\t\t\tthis.Title()\n\t\t\t] as readonly any[]\n\t\t}\n\t}\n\t\n}\n\n","namespace $ { $mol_style_attach( \"mol/check/check.css\",\n \"[mol_check] {\\n\\tflex: 0 0 auto;\\n\\tjustify-content: flex-start;\\n\\talign-content: center;\\n\\talign-items: flex-start;\\n\\tborder: none;\\n\\tfont-weight: inherit;\\n\\tbox-shadow: none;\\n\\ttext-align: left;\\n\\tpadding: var(--mol_gap_text);\\n\\tdisplay: inline-flex;\\n\\tflex-wrap: nowrap;\\n}\\n\\n[mol_check_title] {\\n\\tflex-shrink: 1;\\n}\\n\"\n) }","namespace $.$$ {\n\texport class $mol_check extends $.$mol_check {\n\n\t\tclick( next? : Event ) {\n\t\t\tif( next?.defaultPrevented ) return\n\t\t\tthis.checked( !this.checked() )\n\t\t\tif( next ) next.preventDefault()\n\t\t}\n\n\t\tsub() {\n\t\t\treturn [\n\t\t\t\t... $mol_maybe( this.Icon() ) ,\n\t\t\t\t... this.label() ,\n\t\t\t] as readonly $mol_view_content[]\n\t\t}\n\n\t\tlabel() {\n\t\t\treturn this.title() ? super.label() : []\n\t\t}\n\n\t}\n}\n","namespace $ {\n\texport class $mol_scroll extends $mol_view {\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * scroll_top?val 0\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tscroll_top(val?: any) {\n\t\t\tif ( val !== undefined ) return val as never\n\t\t\treturn 0\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * scroll_left?val 0\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tscroll_left(val?: any) {\n\t\t\tif ( val !== undefined ) return val as never\n\t\t\treturn 0\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * field *\n\t\t * \t^\n\t\t * \ttabIndex <= tabindex\n\t\t * ```\n\t\t */\n\t\tfield() {\n\t\t\treturn {\n\t\t\t\t...super.field(),\n\t\t\t\ttabIndex: this.tabindex()\n\t\t\t}\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * event *\n\t\t * \t^\n\t\t * \tscroll?event <=> event_scroll?event\n\t\t * ```\n\t\t */\n\t\tevent() {\n\t\t\treturn {\n\t\t\t\t...super.event(),\n\t\t\t\tscroll: (event?: any) => this.event_scroll(event)\n\t\t\t}\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * tabindex -1\n\t\t * ```\n\t\t */\n\t\ttabindex() {\n\t\t\treturn -1\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * event_scroll?event null\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tevent_scroll(event?: any) {\n\t\t\tif ( event !== undefined ) return event as never\n\t\t\treturn null as any\n\t\t}\n\t}\n\t\n}\n\n","namespace $ {\n\n\texport class $mol_print extends $mol_object {\n\n\t\t@ $mol_mem\n\t\tstatic before() {\n\t\t\treturn new $mol_dom_listener( this.$.$mol_dom_context , 'beforeprint' , ()=> {\n\t\t\t\tthis.active( true )\n\t\t\t} )\n\t\t}\n\n\t\t@ $mol_mem\n\t\tstatic after() {\n\t\t\treturn new $mol_dom_listener( this.$.$mol_dom_context , 'afterprint' , ()=> {\n\t\t\t\tthis.active( false )\n\t\t\t} )\n\t\t}\n\n\t\t@ $mol_mem\n\t\tstatic active( next? : boolean ) {\n\t\t\tthis.before()\n\t\t\tthis.after()\n\t\t\treturn next || false\n\t\t}\n\n\t}\n\n}\n","namespace $.$$ {\n\n\tconst { per , rem , px } = $mol_style_unit\n\n\t$mol_style_define( $mol_scroll , {\n\t\toverflow: 'auto',\n\t} )\n\t\n\t$mol_style_define( $mol_scroll , {\n\n\t\tdisplay: 'flex',\n\t\toverflow: 'overlay',\n\t\tflex: {\n\t\t\tdirection: 'column',\n\t\t\tgrow: 1,\n\t\t\tshrink: 1,\n\t\t\tbasis: 0,\n\t\t},\n\t\toutline: 'none',\n\t\talignSelf: 'stretch',\n\t\tboxSizing: 'border-box',\n\t\twillChange: 'scroll-position',\n\t\tmaxHeight: per(100),\n\t\tmaxWidth: per(100),\n\t\twebkitOverflowScrolling: 'touch',\n\t\tcontain: 'content',\n\n\t\t'>': {\n\t\t\t$mol_view: {\n\t\t\t\ttransform: 'translateZ(0)', // enforce gpu scroll in all agents\n\t\t\t},\n\t\t},\n\n\t\tscrollbar: {\n\t\t\tcolor: [ $mol_theme.line , 'transparent' ],\n\t\t\twidth: 'thin',\n\t\t},\n\t\n\t\t'::-webkit-scrollbar': {\n\t\t\twidth: rem(.25),\n\t\t\theight: rem(.25),\n\t\t},\n\t\t\n\t\t':hover': {\n\t\t\t'::-webkit-scrollbar': {\n\t\t\t\twidth: rem(.5),\n\t\t\t\theight: rem(.5),\n\t\t\t},\n\t\t},\n\t\t\n\t\t'::-webkit-scrollbar-corner': {\n\t\t\tbackground: {\n\t\t\t\tcolor: $mol_theme.line,\n\t\t\t},\n\t\t},\n\n\t\t'::-webkit-scrollbar-track': {\n\t\t\tbackground: {\n\t\t\t\tcolor: 'transparent',\n\t\t\t},\n\t\t},\n\n\t\t'::-webkit-scrollbar-thumb': {\n\t\t\tbackground: {\n\t\t\t\tcolor: $mol_theme.line,\n\t\t\t},\n\t\t\tborder: {\n\t\t\t\tradius: $mol_gap.round,\n\t\t\t},\n\t\t},\n\n\t\t'@media' : {\n\t\t\t'print' : {\n\t\t\t\toverflow: 'visible',\n\t\t\t\tcontain: 'none',\n\t\t\t\tmaxHeight: 'unset',\n\t\t\t},\n\t\t},\n\n\t})\n\n}\n","namespace $.$$ {\n\t\n\texport class $mol_scroll extends $.$mol_scroll {\n\n\t\t@ $mol_mem\n\t\tscroll_top( next? : number, cache?: 'cache' ): number {\n\t\t\t\n\t\t\tconst el = this.dom_node()\n\t\t\tif( next !== undefined && !cache ) el.scrollTop = next\n\t\t\t\n\t\t\treturn el.scrollTop\n\t\t}\n\t\t\n\t\t@ $mol_mem\n\t\tscroll_left( next? : number, cache?: 'cache' ): number {\n\t\t\t\n\t\t\tconst el = this.dom_node()\n\t\t\tif( next !== undefined && !cache ) el.scrollLeft = next\n\t\t\t\n\t\t\treturn el.scrollLeft\n\t\t}\n\t\t\n\t\tevent_scroll( next? : Event ) {\n\t\t\t\n\t\t\tconst el = this.dom_node() as HTMLElement\n\t\t\t\n\t\t\tthis.scroll_left( el.scrollLeft, 'cache' )\n\t\t\tthis.scroll_top( el.scrollTop, 'cache' )\n\t\t\t\n\t\t}\n\n\t\tminimal_height() {\n\t\t\treturn this.$.$mol_print.active() ? null! : 0\n\t\t}\n\t\t\n\t\tminimal_width() {\n\t\t\treturn this.$.$mol_print.active() ? null! : 0\n\t\t}\n\t\t\n\t}\n\n}\n","namespace $ {\n\texport class $mol_paragraph extends $mol_view {\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * line_height 24\n\t\t * ```\n\t\t */\n\t\tline_height() {\n\t\t\treturn 24\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * letter_width 7\n\t\t * ```\n\t\t */\n\t\tletter_width() {\n\t\t\treturn 7\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * width_limit Infinity\n\t\t * ```\n\t\t */\n\t\twidth_limit() {\n\t\t\treturn Infinity\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * sub / <= title\n\t\t * ```\n\t\t */\n\t\tsub() {\n\t\t\treturn [\n\t\t\t\tthis.title()\n\t\t\t] as readonly any[]\n\t\t}\n\t}\n\t\n}\n\n","namespace $ { $mol_style_attach( \"mol/paragraph/paragraph.view.css\",\n \":where([mol_paragraph]) {\\n\\tmargin: 0;\\n\\tmax-width: 100%;\\n}\\n\"\n) }","namespace $.$$ {\n\n\texport class $mol_paragraph extends $.$mol_paragraph {\n\n\t\t@ $mol_mem\n\t\tmaximal_width() {\n\n\t\t\tlet width = 0\n\t\t\tconst letter = this.letter_width()\n\t\t\t\n\t\t\tfor( const kid of this.sub() ) {\n\t\t\t\t\n\t\t\t\tif( !kid ) continue\n\t\t\t\t\n\t\t\t\tif( kid instanceof $mol_view ) {\n\t\t\t\t\twidth += kid.maximal_width()\n\t\t\t\t} else if( typeof kid !== 'object' ) {\n\t\t\t\t\twidth += String( kid ).length * letter\n\t\t\t\t}\n\n\t\t\t}\n\t\t\t\n\t\t\treturn width\n\n\t\t}\n\n\t\twidth_limit() {\n\t\t\treturn this.$.$mol_window.size().width\n\t\t}\n\t\t\n\t\tminimal_width() {\n\t\t\treturn this.letter_width()\n\t\t}\n\n\t\t@ $mol_mem\n\t\trow_width() {\n\t\t\treturn Math.max( Math.min( this.width_limit() , this.maximal_width() ) , this.letter_width() )\n\t\t}\n\n\t\t@ $mol_mem\n\t\tminimal_height() {\n\t\t\treturn Math.max( 1 , Math.ceil( this.maximal_width() / this.row_width() ) ) * this.line_height()\n\t\t}\n\n\t}\n\n}\n","namespace $ {\n\texport class $mol_list extends $mol_view {\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * render_visible_only true\n\t\t * ```\n\t\t */\n\t\trender_visible_only() {\n\t\t\treturn true\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * render_over 0\n\t\t * ```\n\t\t */\n\t\trender_over() {\n\t\t\treturn 0\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * sub <= rows\n\t\t * ```\n\t\t */\n\t\tsub() {\n\t\t\treturn this.rows()\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * Empty $mol_view\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tEmpty() {\n\t\t\tconst obj = new this.$.$mol_view()\n\t\t\t\n\t\t\treturn obj\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * Gap_before $mol_view style * paddingTop <= gap_before\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tGap_before() {\n\t\t\tconst obj = new this.$.$mol_view()\n\t\t\t\n\t\t\tobj.style = () => ({\n\t\t\t\tpaddingTop: this.gap_before()\n\t\t\t})\n\t\t\t\n\t\t\treturn obj\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * Gap_after $mol_view style * paddingTop <= gap_after\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tGap_after() {\n\t\t\tconst obj = new this.$.$mol_view()\n\t\t\t\n\t\t\tobj.style = () => ({\n\t\t\t\tpaddingTop: this.gap_after()\n\t\t\t})\n\t\t\t\n\t\t\treturn obj\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * view_window /\n\t\t * \t0\n\t\t * \t0\n\t\t * ```\n\t\t */\n\t\tview_window() {\n\t\t\treturn [\n\t\t\t\t0,\n\t\t\t\t0\n\t\t\t] as readonly any[]\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * rows /$mol_view\n\t\t * ```\n\t\t */\n\t\trows() {\n\t\t\treturn [\n\t\t\t] as readonly $mol_view[]\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * gap_before 0\n\t\t * ```\n\t\t */\n\t\tgap_before() {\n\t\t\treturn 0\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * gap_after 0\n\t\t * ```\n\t\t */\n\t\tgap_after() {\n\t\t\treturn 0\n\t\t}\n\t}\n\t\n}\n\n","namespace $ {\n\n\tlet cache = null as null | boolean\n\texport function $mol_support_css_overflow_anchor( this: $ ) {\n\t\treturn cache ?? ( cache = this.$mol_dom_context.CSS?.supports( 'overflow-anchor:auto' ) ?? false )\n\t}\n\n}\n","namespace $ {\n\t\n\texport function $mol_wire_probe< Value >(\n\t\ttask : ()=> Value, next?: Value\n\t) : Value | undefined {\n\t\t\n\t\tconst warm = $mol_wire_fiber.warm\n\t\t\n\t\ttry {\n\t\t\t$mol_wire_fiber.warm = false\n\t\t\treturn task()\n\t\t} finally {\n\t\t\t$mol_wire_fiber.warm = warm\n\t\t}\n\t\t\n\t}\n\t\n}\n","namespace $ {\n\texport let $mol_mem_cached = $mol_wire_probe\n}\n","namespace $ { $mol_style_attach( \"mol/list/list.view.css\",\n \"[mol_list] {\\n\\twill-change: contents;\\n\\tdisplay: flex;\\n\\tflex-direction: column;\\n\\tflex-shrink: 0;\\n\\tmax-width: 100%;\\n\\t/* display: flex;\\n\\talign-items: stretch;\\n\\talign-content: stretch; */\\n\\ttransition: none;\\n\\tmin-height: .5rem;\\n}\\n\\n[mol_list_gap_before] ,\\n[mol_list_gap_after] {\\n\\tdisplay: block !important;\\n\\tflex: none;\\n\\ttransition: none;\\n\\toverflow-anchor: none;\\n}\\n\"\n) }","namespace $.$$ {\n\n\texport class $mol_list extends $.$mol_list {\n\t\t\n\t\t@ $mol_mem\n\t\tsub() {\n\t\t\tconst rows = this.rows()\n\t\t\treturn ( rows.length === 0 ) ? [ this.Empty() ] : rows\n\t\t}\n\n\t\trender_visible_only() {\n\t\t\treturn this.$.$mol_support_css_overflow_anchor()\n\t\t}\n\n\t\t@ $mol_mem\n\t\tview_window( next?: [ number , number ] ) : [ number , number ] {\n\t\t\t\n\t\t\tconst kids = this.sub()\n\t\t\t\n\t\t\tif( kids.length < 3 ) return [ 0 , kids.length ]\n\t\t\tif( this.$.$mol_print.active() ) return [ 0 , kids.length ]\n\t\t\t\n\t\t\tconst rect = this.view_rect()\n\t\t\tif( next ) return next\n\t\t\t\n\t\t\tlet [ min , max ] = $mol_mem_cached( ()=> this.view_window() ) ?? [ 0 , 0 ]\n\n\t\t\tlet max2 = max = Math.min( max , kids.length )\n\t\t\tlet min2 = min = Math.max( 0 , Math.min( min , max - 1 ) )\n\t\t\t\n\t\t\tconst anchoring = this.render_visible_only()\n\t\t\tconst window_height = this.$.$mol_window.size().height + 40\n\t\t\tconst over = Math.ceil( window_height * this.render_over() )\n\t\t\tconst limit_top = -over\n\t\t\tconst limit_bottom = window_height + over\n\n\t\t\tconst gap_before = $mol_mem_cached( ()=> this.gap_before() ) ?? 0\n\t\t\tconst gap_after = $mol_mem_cached( ()=> this.gap_after() ) ?? 0\n\n\t\t\tlet top = Math.ceil( rect?.top ?? 0 ) + gap_before\n\t\t\tlet bottom = Math.ceil( rect?.bottom ?? 0 ) - gap_after\n\n\t\t\t// change nothing when already covers all limits\n\t\t\tif( top <= limit_top && bottom >= limit_bottom ) {\n\t\t\t\treturn [ min2 , max2 ]\n\t\t\t}\n\n\t\t\t// jumps when fully over limits\n\t\t\tif( anchoring && (( bottom < limit_top )||( top > limit_bottom )) ) {\n\n\t\t\t\tmin = 0\n\t\t\t\ttop = Math.ceil( rect?.top ?? 0 )\n\t\t\t\t\n\t\t\t\twhile( min < ( kids.length - 1 ) ) {\n\t\t\t\t\t\n\t\t\t\t\tconst height = kids[ min ].minimal_height()\n\t\t\t\t\tif( top + height >= limit_top ) break\n\t\t\t\t\t\n\t\t\t\t\ttop += height\n\t\t\t\t\t++ min\n\n\t\t\t\t}\n\n\t\t\t\tmin2 = min\n\t\t\t\tmax2 = max = min\n\t\t\t\tbottom = top\n\n\t\t\t}\n\n\t\t\tlet top2 = top\n\t\t\tlet bottom2 = bottom\n\n\t\t\t// force recalc min when overlapse top limit\n\t\t\tif( anchoring && ( top <= limit_top ) && ( bottom2 < limit_bottom ) ) {\n\t\t\t\tmin2 = Math.max( 0, max - 1 )\n\t\t\t\ttop2 = bottom\n\t\t\t}\n\n\t\t\t// force recalc max when overlapse bottom limit\n\t\t\tif( ( bottom >= limit_bottom ) && ( top2 >= limit_top ) ) {\n\t\t\t\tmax2 = Math.min( min + 1, kids.length )\n\t\t\t\tbottom2 = top\n\t\t\t}\n\n\t\t\t// extend max to cover bottom limit\n\t\t\twhile( bottom2 < limit_bottom && max2 < kids.length ) {\n\t\t\t\tbottom2 += kids[ max2 ].minimal_height()\n\t\t\t\t++ max2\n\t\t\t}\n\n\t\t\t// extend min to cover top limit\n\t\t\twhile( anchoring && (( top2 >= limit_top )&&( min2 > 0 )) ) {\n\t\t\t\t-- min2\n\t\t\t\ttop2 -= kids[ min2 ].minimal_height()\n\t\t\t}\n\n\t\t\treturn [ min2 , max2 ]\n\t\t}\n\n\t\t@ $mol_mem\n\t\tgap_before() {\n\t\t\tconst skipped = this.sub().slice( 0 , this.view_window()[0] )\n\t\t\treturn Math.max( 0 , skipped.reduce( ( sum , view )=> sum + view.minimal_height() , 0 ) )\n\t\t}\n\n\t\t@ $mol_mem\n\t\tgap_after() {\n\t\t\tconst skipped = this.sub().slice( this.view_window()[1] )\n\t\t\treturn Math.max( 0 , skipped.reduce( ( sum , view )=> sum + view.minimal_height() , 0 ) )\n\t\t}\n\n\t\t@ $mol_mem\n\t\tsub_visible() {\n\t\t\treturn [\n\t\t\t\t... this.gap_before() ? [ this.Gap_before() ] : [],\n\t\t\t\t... this.sub().slice( ... this.view_window() ),\n\t\t\t\t... this.gap_after() ? [ this.Gap_after() ] : [],\n\t\t\t]\n\t\t}\n\t\t\n\t\t@ $mol_mem\n\t\tminimal_height() {\n\n\t\t\treturn this.sub().reduce( ( sum , view )=> {\n\n\t\t\t\ttry {\n\t\t\t\t\treturn sum + view.minimal_height() \n\t\t\t\t} catch( error: any ) {\n\t\t\t\t\t$mol_fail_log( error )\n\t\t\t\t\treturn sum\n\t\t\t\t}\n\n\t\t\t} , 0 )\n\n\t\t}\n\n\t\tforce_render(\n\t\t\tpath : Set< $mol_view >,\n\t\t) {\n\n\t\t\tconst kids = this.rows()\n\n\t\t\tconst index = kids.findIndex( item => path.has( item ) )\n\n\t\t\tif( index >= 0 ) {\n\t\t\t\tconst win = this.view_window()\n\t\t\t\tif( index < win[0] || index >= win[1] ) {\n\t\t\t\t\tthis.view_window([ index, index + 1 ])\n\t\t\t\t}\n\t\t\t\t( kids[ index ] as $mol_view ).force_render( path )\n\t\t\t}\n\t\t\t\n\t\t}\n\n\t}\n}\n","namespace $ {\n\texport class $mol_bar extends $mol_view {\n\t}\n\t\n}\n\n","namespace $ { $mol_style_attach( \"mol/bar/bar.view.css\",\n \"[mol_bar] {\\n\\tdisplay: flex;\\n\\t/* box-shadow: inset 0 0 0 1px var(--mol_theme_line); */\\n\\tborder-radius: var(--mol_gap_round);\\n}\\n\"\n) }","namespace $ {\n\texport class $hyoo_todomvc extends $mol_scroll {\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * title \\Todos\n\t\t * ```\n\t\t */\n\t\ttitle() {\n\t\t\treturn \"Todos\"\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * attr *\n\t\t * \t^\n\t\t * \tmol_theme \\$mol_theme_light\n\t\t * ```\n\t\t */\n\t\tattr() {\n\t\t\treturn {\n\t\t\t\t...super.attr(),\n\t\t\t\tmol_theme: \"$mol_theme_light\"\n\t\t\t}\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * sub / <= Page\n\t\t * ```\n\t\t */\n\t\tsub() {\n\t\t\treturn [\n\t\t\t\tthis.Page()\n\t\t\t] as readonly any[]\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * Title $mol_paragraph\n\t\t * \tminimal_height 176\n\t\t * \ttitle <= title\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tTitle() {\n\t\t\tconst obj = new this.$.$mol_paragraph()\n\t\t\t\n\t\t\tobj.minimal_height = () => 176\n\t\t\tobj.title = () => this.title()\n\t\t\t\n\t\t\treturn obj\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * head_complete_enabled false\n\t\t * ```\n\t\t */\n\t\thead_complete_enabled() {\n\t\t\treturn false\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * completed_all? false\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tcompleted_all(next?: any) {\n\t\t\tif ( next !== undefined ) return next as never\n\t\t\treturn false\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * Head_complete $mol_check\n\t\t * \tenabled <= head_complete_enabled\n\t\t * \tchecked? <=> completed_all?\n\t\t * \ttitle \\❯\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tHead_complete() {\n\t\t\tconst obj = new this.$.$mol_check()\n\t\t\t\n\t\t\tobj.enabled = () => this.head_complete_enabled()\n\t\t\tobj.checked = (next?: any) => this.completed_all(next)\n\t\t\tobj.title = () => \"❯\"\n\t\t\t\n\t\t\treturn obj\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * task_title_new? \\\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\ttask_title_new(next?: any) {\n\t\t\tif ( next !== undefined ) return next as never\n\t\t\treturn \"\"\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * add? null\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tadd(next?: any) {\n\t\t\tif ( next !== undefined ) return next as never\n\t\t\treturn null as any\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * Add $hyoo_todomvc_add\n\t\t * \tvalue? <=> task_title_new?\n\t\t * \tdone? <=> add?\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tAdd() {\n\t\t\tconst obj = new this.$.$hyoo_todomvc_add()\n\t\t\t\n\t\t\tobj.value = (next?: any) => this.task_title_new(next)\n\t\t\tobj.done = (next?: any) => this.add(next)\n\t\t\t\n\t\t\treturn obj\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * Head_content /\n\t\t * \t<= Head_complete\n\t\t * \t<= Add\n\t\t * ```\n\t\t */\n\t\tHead_content() {\n\t\t\treturn [\n\t\t\t\tthis.Head_complete(),\n\t\t\t\tthis.Add()\n\t\t\t] as readonly any[]\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * Head $mol_view\n\t\t * \tminimal_height 64\n\t\t * \tsub <= Head_content\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tHead() {\n\t\t\tconst obj = new this.$.$mol_view()\n\t\t\t\n\t\t\tobj.minimal_height = () => 64\n\t\t\tobj.sub = () => this.Head_content()\n\t\t\t\n\t\t\treturn obj\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * task_completed*? false\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem_key\n\t\ttask_completed(id: any, next?: any) {\n\t\t\tif ( next !== undefined ) return next as never\n\t\t\treturn false\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * task_title*? \\\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem_key\n\t\ttask_title(id: any, next?: any) {\n\t\t\tif ( next !== undefined ) return next as never\n\t\t\treturn \"\"\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * task_drop*? null\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem_key\n\t\ttask_drop(id: any, next?: any) {\n\t\t\tif ( next !== undefined ) return next as never\n\t\t\treturn null as any\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * Task_row*0 $hyoo_todomvc_task_row\n\t\t * \tcompleted? <=> task_completed*?\n\t\t * \ttitle? <=> task_title*?\n\t\t * \tdrop? <=> task_drop*?\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem_key\n\t\tTask_row(id: any) {\n\t\t\tconst obj = new this.$.$hyoo_todomvc_task_row()\n\t\t\t\n\t\t\tobj.completed = (next?: any) => this.task_completed(id, next)\n\t\t\tobj.title = (next?: any) => this.task_title(id, next)\n\t\t\tobj.drop = (next?: any) => this.task_drop(id, next)\n\t\t\t\n\t\t\treturn obj\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * task_rows /$mol_view <= Task_row*0\n\t\t * ```\n\t\t */\n\t\ttask_rows() {\n\t\t\treturn [\n\t\t\t\tthis.Task_row(\"0\")\n\t\t\t] as readonly $mol_view[]\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * List $mol_list rows <= task_rows\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tList() {\n\t\t\tconst obj = new this.$.$mol_list()\n\t\t\t\n\t\t\tobj.rows = () => this.task_rows()\n\t\t\t\n\t\t\treturn obj\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * pending_message \\0 items left\n\t\t * ```\n\t\t */\n\t\tpending_message() {\n\t\t\treturn \"0 items left \"\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * Pending $mol_paragraph title <= pending_message\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tPending() {\n\t\t\tconst obj = new this.$.$mol_paragraph()\n\t\t\t\n\t\t\tobj.title = () => this.pending_message()\n\t\t\t\n\t\t\treturn obj\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * Filter_all $mol_link\n\t\t * \ttitle \\All\n\t\t * \targ * completed null\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tFilter_all() {\n\t\t\tconst obj = new this.$.$mol_link()\n\t\t\t\n\t\t\tobj.title = () => \"All\"\n\t\t\tobj.arg = () => ({\n\t\t\t\tcompleted: null as any\n\t\t\t})\n\t\t\t\n\t\t\treturn obj\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * Filter_active $mol_link\n\t\t * \ttitle \\Active\n\t\t * \targ * completed \\false\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tFilter_active() {\n\t\t\tconst obj = new this.$.$mol_link()\n\t\t\t\n\t\t\tobj.title = () => \"Active\"\n\t\t\tobj.arg = () => ({\n\t\t\t\tcompleted: \"false\"\n\t\t\t})\n\t\t\t\n\t\t\treturn obj\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * Filter_completed $mol_link\n\t\t * \ttitle \\Completed\n\t\t * \targ * completed \\true\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tFilter_completed() {\n\t\t\tconst obj = new this.$.$mol_link()\n\t\t\t\n\t\t\tobj.title = () => \"Completed\"\n\t\t\tobj.arg = () => ({\n\t\t\t\tcompleted: \"true\"\n\t\t\t})\n\t\t\t\n\t\t\treturn obj\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * filterOptions /\n\t\t * \t<= Filter_all\n\t\t * \t<= Filter_active\n\t\t * \t<= Filter_completed\n\t\t * ```\n\t\t */\n\t\tfilterOptions() {\n\t\t\treturn [\n\t\t\t\tthis.Filter_all(),\n\t\t\t\tthis.Filter_active(),\n\t\t\t\tthis.Filter_completed()\n\t\t\t] as readonly any[]\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * Filter $mol_bar sub <= filterOptions\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tFilter() {\n\t\t\tconst obj = new this.$.$mol_bar()\n\t\t\t\n\t\t\tobj.sub = () => this.filterOptions()\n\t\t\t\n\t\t\treturn obj\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * sweep_enabled true\n\t\t * ```\n\t\t */\n\t\tsweep_enabled() {\n\t\t\treturn true\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * sweep? null\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tsweep(next?: any) {\n\t\t\tif ( next !== undefined ) return next as never\n\t\t\treturn null as any\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * sweep_label \\Clear completed\n\t\t * ```\n\t\t */\n\t\tsweep_label() {\n\t\t\treturn \"Clear completed\"\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * Sweep $mol_button_minor\n\t\t * \tenabled <= sweep_enabled\n\t\t * \tclick? <=> sweep?\n\t\t * \tsub / <= sweep_label\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tSweep() {\n\t\t\tconst obj = new this.$.$mol_button_minor()\n\t\t\t\n\t\t\tobj.enabled = () => this.sweep_enabled()\n\t\t\tobj.click = (next?: any) => this.sweep(next)\n\t\t\tobj.sub = () => [\n\t\t\t\tthis.sweep_label()\n\t\t\t] as readonly any[]\n\t\t\t\n\t\t\treturn obj\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * foot_content /\n\t\t * \t<= Pending\n\t\t * \t<= Filter\n\t\t * \t<= Sweep\n\t\t * ```\n\t\t */\n\t\tfoot_content() {\n\t\t\treturn [\n\t\t\t\tthis.Pending(),\n\t\t\t\tthis.Filter(),\n\t\t\t\tthis.Sweep()\n\t\t\t] as readonly any[]\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * Foot $mol_view sub <= foot_content\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tFoot() {\n\t\t\tconst obj = new this.$.$mol_view()\n\t\t\t\n\t\t\tobj.sub = () => this.foot_content()\n\t\t\t\n\t\t\treturn obj\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * panels /\n\t\t * \t<= Head\n\t\t * \t<= List\n\t\t * \t<= Foot\n\t\t * ```\n\t\t */\n\t\tpanels() {\n\t\t\treturn [\n\t\t\t\tthis.Head(),\n\t\t\t\tthis.List(),\n\t\t\t\tthis.Foot()\n\t\t\t] as readonly any[]\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * Panel $mol_list rows <= panels\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tPanel() {\n\t\t\tconst obj = new this.$.$mol_list()\n\t\t\t\n\t\t\tobj.rows = () => this.panels()\n\t\t\t\n\t\t\treturn obj\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * Page $mol_list rows /\n\t\t * \t<= Title\n\t\t * \t<= Panel\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tPage() {\n\t\t\tconst obj = new this.$.$mol_list()\n\t\t\t\n\t\t\tobj.rows = () => [\n\t\t\t\tthis.Title(),\n\t\t\t\tthis.Panel()\n\t\t\t] as readonly any[]\n\t\t\t\n\t\t\treturn obj\n\t\t}\n\t}\n\t\n\texport class $hyoo_todomvc_add extends $mol_string {\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * hint \\What needs to be done?\n\t\t * ```\n\t\t */\n\t\thint() {\n\t\t\treturn \"What needs to be done?\"\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * event *\n\t\t * \t^\n\t\t * \tkeydown? <=> press?\n\t\t * ```\n\t\t */\n\t\tevent() {\n\t\t\treturn {\n\t\t\t\t...super.event(),\n\t\t\t\tkeydown: (next?: any) => this.press(next)\n\t\t\t}\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * done? null\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tdone(next?: any) {\n\t\t\tif ( next !== undefined ) return next as never\n\t\t\treturn null as any\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * press? null\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tpress(next?: any) {\n\t\t\tif ( next !== undefined ) return next as never\n\t\t\treturn null as any\n\t\t}\n\t}\n\t\n\texport class $hyoo_todomvc_task_row extends $mol_view {\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * minimal_height 64\n\t\t * ```\n\t\t */\n\t\tminimal_height() {\n\t\t\treturn 64\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * attr *\n\t\t * \t^\n\t\t * \thyoo_todomvc_task_row_completed <= completed?\n\t\t * ```\n\t\t */\n\t\tattr() {\n\t\t\treturn {\n\t\t\t\t...super.attr(),\n\t\t\t\thyoo_todomvc_task_row_completed: this.completed()\n\t\t\t}\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * sub /\n\t\t * \t<= Complete\n\t\t * \t<= Title\n\t\t * \t<= Drop\n\t\t * ```\n\t\t */\n\t\tsub() {\n\t\t\treturn [\n\t\t\t\tthis.Complete(),\n\t\t\t\tthis.Title(),\n\t\t\t\tthis.Drop()\n\t\t\t] as readonly any[]\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * completed? false\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tcompleted(next?: any) {\n\t\t\tif ( next !== undefined ) return next as never\n\t\t\treturn false\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * Complete $mol_check checked? <=> completed?\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tComplete() {\n\t\t\tconst obj = new this.$.$mol_check()\n\t\t\t\n\t\t\tobj.checked = (next?: any) => this.completed(next)\n\t\t\t\n\t\t\treturn obj\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * title_hint \\Task title\n\t\t * ```\n\t\t */\n\t\ttitle_hint() {\n\t\t\treturn \"Task title\"\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * title? \\\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\ttitle(next?: any) {\n\t\t\tif ( next !== undefined ) return next as never\n\t\t\treturn \"\"\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * Title $mol_string\n\t\t * \thint <= title_hint\n\t\t * \tvalue? <=> title?\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tTitle() {\n\t\t\tconst obj = new this.$.$mol_string()\n\t\t\t\n\t\t\tobj.hint = () => this.title_hint()\n\t\t\tobj.value = (next?: any) => this.title(next)\n\t\t\t\n\t\t\treturn obj\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * drop? null\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tdrop(next?: any) {\n\t\t\tif ( next !== undefined ) return next as never\n\t\t\treturn null as any\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * Drop $mol_button_typed\n\t\t * \tsub / \\✖\n\t\t * \tclick? <=> drop?\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tDrop() {\n\t\t\tconst obj = new this.$.$mol_button_typed()\n\t\t\t\n\t\t\tobj.sub = () => [\n\t\t\t\t\"✖\"\n\t\t\t] as readonly any[]\n\t\t\tobj.click = (next?: any) => this.drop(next)\n\t\t\t\n\t\t\treturn obj\n\t\t}\n\t}\n\t\n}\n\n","namespace $ {\n\t\n\texport class $mol_state_local< Value > extends $mol_object {\n\t\t\n\t\tstatic 'native()' : Pick< Storage , 'getItem'|'setItem'|'removeItem' >\n\t\tstatic native() {\n\t\t\tif( this['native()'] ) return this['native()']\n\n\t\t\tcheck : try {\n\t\t\t\tconst native = $mol_dom_context.localStorage\n\t\t\t\tif( !native ) break check\n\t\t\t\t\n\t\t\t\tnative.setItem( '' , '' )\n\t\t\t\tnative.removeItem( '' )\n\t\t\t\treturn this['native()'] = native\n\t\t\t} catch( error: any ) {\n\t\t\t\tconsole.warn( error )\n\t\t\t}\n\n\t\t\treturn this['native()'] = {\n\t\t\t\tgetItem( key : string ) {\n\t\t\t\t\treturn this[ ':' + key ]\n\t\t\t\t} ,\n\t\t\t\tsetItem( key : string , value : string ) {\n\t\t\t\t\tthis[ ':' + key ] = value\n\t\t\t\t} ,\n\t\t\t\tremoveItem( key : string ) {\n\t\t\t\t\tthis[ ':' + key ] = void 0\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t\t\n\t\t@ $mol_mem\n\t\tstatic changes( next?: StorageEvent ) { return next }\n\n\t\t@ $mol_mem_key\n\t\tstatic value< Value >(\n\t\t\tkey : string ,\n\t\t\tnext? : Value | null ,\n\t\t) : Value | null {\n\t\t\t\n\t\t\tthis.changes()\n\t\t\t\n\t\t\tif( next === void 0 ) return JSON.parse( this.native().getItem( key ) || 'null' )\n\t\t\t\n\t\t\tif( next === null ) this.native().removeItem( key )\n\t\t\telse this.native().setItem( key , JSON.stringify( next ) )\n\t\t\t\n\t\t\treturn next\n\t\t}\n\t\t\n\t\tprefix() { return '' }\n\t\t\n\t\tvalue( key : string , next? : Value ) {\n\t\t\treturn $mol_state_local.value( this.prefix() + '.' + key , next )\n\t\t}\n\t\t\n\t}\n\t\n}\n","namespace $ {\n\n\tself.addEventListener( 'storage' , event => $.$mol_state_local.changes( event ) )\n\n}\n","namespace $ { $mol_style_attach( \"hyoo/todomvc/todomvc.css\",\n \"[hyoo_todomvc] {\\n\\talign-self: stretch;\\n\\twidth: 100%;\\n\\tmargin: 0;\\n\\ttransition: none;\\n}\\n\\n[hyoo_todomvc] [mol_string] ,\\n[hyoo_todomvc] [mol_string]:focus ,\\n[hyoo_todomvc] [mol_string]:hover ,\\n[hyoo_todomvc] [mol_button] ,\\n[hyoo_todomvc] [mol_button]:focus ,\\n[hyoo_todomvc] [mol_button]:hover ,\\n[hyoo_todomvc] [mol_link] ,\\n[hyoo_todomvc] [mol_link]:focus ,\\n[hyoo_todomvc] [mol_link]:hover {\\n\\tbox-shadow: none;\\n\\tbackground-color: transparent;\\n}\\n\\n[hyoo_todomvc] [mol_link_current] {\\n\\tcolor: black;\\n}\\n\\n[hyoo_todomvc] [mol_link]:not([mol_link_current]):hover ,\\n[hyoo_todomvc] [mol_link]:not([mol_link_current]):focus {\\n\\ttext-decoration: underline;\\n}\\n\\n[hyoo_todomvc_head_complete] {\\n\\tflex: 0 0 4rem;\\n\\ttransform: rotate( 90deg );\\n\\talign-items: center;\\n\\topacity: .5;\\n\\tpadding: 0;\\n\\tjustify-content: center;\\n}\\n[hyoo_todomvc_head_complete]:disabled {\\n\\tvisibility: hidden;\\n}\\n[hyoo_todomvc_head_complete][mol_check_checked] {\\n\\topacity: 1;\\n}\\n\\n[hyoo_todomvc_add] {\\n\\tpadding: 0;\\n\\tflex: 1 1 auto;\\n}\\n\\n[hyoo_todomvc_list] {\\n\\tfont-size: 1.5rem;\\n\\ttransition: none;\\n}\\n\\n[hyoo_todomvc_page] {\\n\\tflex: 1 1 auto;\\n\\ttransition: none;\\n}\\n\\n[hyoo_todomvc_panel] {\\n\\tbox-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.2), 0 25px 50px 0 rgba(0, 0, 0, 0.1);\\n\\twidth: 38rem;\\n\\t--mol_theme_back: white;\\n\\t--mol_theme_text: black;\\n\\tbackground-color: var(--mol_theme_back);\\n\\tdisplay: flex;\\n\\tflex-direction: column;\\n\\tmargin: 0 auto 2rem;\\n\\ttransition: none;\\n}\\n\\n[hyoo_todomvc_head] {\\n\\tfont-size: 1.5rem;\\n\\tpadding: 0;\\n\\tdisplay: flex;\\n\\theight: 4rem;\\n}\\n\\n[hyoo_todomvc_title] {\\n\\tword-break: normal;\\n\\tdisplay: block;\\n\\tpadding: .25rem;\\n\\tfont-size: 7rem;\\n\\tfont-weight: 100;\\n\\ttext-align: center;\\n\\tcolor: rgba(275, 147, 147, 0.2);\\n\\ttext-rendering: optimizeLegibility;\\n\\ttext-transform: lowercase;\\n\\tline-height: 1.5;\\n}\\n\\n[hyoo_todomvc_task_row] {\\n\\tdisplay: flex;\\n\\tbackground-color: white;\\n\\tbox-shadow: 0 -1px 0 0 #ededed;\\n\\theight: 4rem;\\n}\\n\\n[hyoo_todomvc_task_row_complete] {\\n\\tflex: 0 0 4rem;\\n\\tpadding: 1rem;\\n\\tbackground: no-repeat center center url('hyoo/todomvc/todomvc_active.svg');\\n}\\n[hyoo_todomvc_task_row_complete][mol_check_checked] {\\n\\tbackground: no-repeat center center url('hyoo/todomvc/todomvc_completed.svg');\\n}\\n\\n[hyoo_todomvc_task_row_title] {\\n\\tpadding: 0;\\n\\tflex: 1 1 auto;\\n}\\n\\n[hyoo_todomvc_task_row_completed] [hyoo_todomvc_task_row_title] {\\n\\tcolor: #d9d9d9;\\n\\ttext-decoration: line-through;\\n}\\n\\n[hyoo_todomvc_task_row_drop] {\\n\\tfont-size: 1.25rem;\\n\\tflex: 0 04rem;\\n\\tpadding: 1.25rem;\\n}\\n[hyoo_todomvc_task_row]:not(:hover) [hyoo_todomvc_task_row_drop]:not(:focus) {\\n\\topacity: 0;\\n\\tcolor: #cc9a9a;\\n}\\n\\n[hyoo_todomvc_foot] {\\n\\tdisplay: flex;\\n\\tflex-wrap: wrap;\\n\\talign-items: baseline;\\n\\tpadding: .5rem 1rem;\\n\\tcolor: #777;\\n\\tfont-size: .85rem;\\n\\tborder-top: 1px solid #ededed;\\n\\tbox-shadow: 0 1px 1px rgba(0, 0, 0, 0.2), 0 8px 0 -3px #f6f6f6, 0 9px 1px -3px rgba(0, 0, 0, 0.2), 0 16px 0 -6px #f6f6f6, 0 17px 2px -6px rgba(0, 0, 0, 0.2);\\n}\\n\\n[hyoo_todomvc_pending] {\\n\\tpadding: .25rem;\\n\\tflex: 0 1 6rem;\\n}\\n\\n[hyoo_todomvc_filter] {\\n\\tflex: 1 100 auto;\\n\\tdisplay: flex;\\n\\tjustify-content: center;\\n\\tmargin: .25rem;\\n\\tbox-shadow: none;\\n}\\n\\n[hyoo_todomvc_sweep] {\\n\\tflex: 0 1 auto;\\n\\tpadding: .25rem;\\n}\\n[hyoo_todomvc_sweep][disabled] {\\n\\tvisibility: hidden;\\n}\\n\\n[hyoo_todomvc_sweep]:hover ,\\n[hyoo_todomvc_sweep]:focus {\\n\\ttext-decoration: underline;\\n}\\n\"\n) }","interface $hyoo_todomvc_task {\n\tcompleted? : boolean\n\ttitle? : string\n}\n\nnamespace $.$$ {\n\t\n\texport class $hyoo_todomvc_add extends $.$hyoo_todomvc_add {\n\t\t\n\t\tpress( next : KeyboardEvent ) {\n\t\t\tswitch( next.keyCode ) {\n\t\t\t\tcase $mol_keyboard_code.enter : return this.done( next )\n\t\t\t}\n\t\t}\n\t\t\n\t}\n\t\n\texport class $hyoo_todomvc extends $.$hyoo_todomvc {\n\t\t\n\t\ttask_ids( next? : number[] ) : number[] {\n\t\t\treturn this.$.$mol_state_local.value( this.state_key( 'mol-todos' ) , next ) || []\n\t\t}\n\t\t\n\t\targ_completed() {\n\t\t\treturn this.$.$mol_state_arg.value( this.state_key( 'completed' ) )\n\t\t}\n\n\t\t@ $mol_mem\n\t\tgroups_completed() {\n\t\t\tvar groups : { [ index : string ] : number[] } = { 'true' : [] , 'false' : [] }\n\t\t\tfor( let id of this.task_ids() ) {\n\t\t\t\tvar task = this.task( id )!\n\t\t\t\tgroups[ String( task.completed ) ].push( id )\n\t\t\t}\n\t\t\treturn groups\n\t\t}\n\n\t\t@ $mol_mem\n\t\ttask_ids_filtered() {\n\t\t\tvar completed = this.arg_completed()\n\t\t\tif( completed ) {\n\t\t\t\treturn this.groups_completed()[ completed ] || []\n\t\t\t} else {\n\t\t\t\treturn this.task_ids()\n\t\t\t}\n\t\t}\n\n\t\t@ $mol_mem\n\t\tcompleted_all( next? : boolean ) {\n\t\t\tif( next === void 0 ) return this.groups_completed()[ 'false' ].length === 0\n\t\t\t\n\t\t\tfor( let id of this.groups_completed()[ String( !next ) ] ) {\n\t\t\t\tvar task = this.task( id )!\n\t\t\t\tthis.task( id , { title : task.title , completed : next } )\n\t\t\t}\n\t\t\t\n\t\t\treturn next\n\t\t}\n\t\t\n\t\thead_complete_enabled() {\n\t\t\treturn this.task_ids().length > 0 \n\t\t}\n\n\t\t@ $mol_mem\n\t\tpending_message() {\n\t\t\tlet count = this.groups_completed()[ 'false' ].length\n\t\t\treturn ( count === 1 ) ? '1 item left' : `${count} items left`\n\t\t}\n\t\t\n\t\t@ $mol_mem\n\t\tnew_id() {\n\t\t\treturn Math.max( 1 , 1 + Math.max( ... this.task_ids() ) )\n\t\t}\n\t\t\n\t\tadd( next? : Event ) {\n\t\t\tvar title = this.task_title_new() \n\t\t\tif( !title ) return\n\t\t\t\n\t\t\tvar id = this.new_id()\n\t\t\tvar task = { completed : false , title }\n\t\t\tthis.task( id , task )\n\t\t\t\n\t\t\tthis.task_ids([ ... this.task_ids(), id ])\n\t\t\tthis.task_title_new( '' )\n\t\t}\n\n\t\t@ $mol_mem\n\t\ttask_rows() {\n\t\t\treturn this.task_ids_filtered().map( id => this.Task_row( id ) )\n\t\t}\n\t\t\n\t\ttask( id : number , next? : $hyoo_todomvc_task | null ) {\n\t\t\tconst key = this.state_key( `mol-todos-${id}` )\n\t\t\tif( next === void 0 ) {\n\t\t\t\treturn this.$.$mol_state_local.value<$hyoo_todomvc_task>( key ) || { title : '' , completed : false }\n\t\t\t}\n\t\t\t\n\t\t\tthis.$.$mol_state_local.value( key , next )\n\t\t\t\n\t\t\treturn next || null\n\t\t}\n\t\t\n\t\t@ $mol_mem_key\n\t\ttask_completed( id : number , next? : boolean ) {\n\t\t\treturn this.task( id , next === undefined ? undefined : { ... this.task( id ) , completed : next } )!.completed ?? false\n\t\t}\n\t\t\n\t\t@ $mol_mem_key\n\t\ttask_title( id : number , next? : string ) {\n\t\t\treturn this.task( id , next === undefined ? undefined : { ... this.task( id ) , title : next } )!.title ?? ''\n\t\t}\n\t\t\n\t\ttask_drop( id : number , next? : Event ) {\n\t\t\tthis.task( id , null )\n\t\t\tthis.task_ids( this.task_ids().filter( id2 => id !== id2 ) )\n\t\t}\n\n\t\tsweep() {\n\t\t\tthis.task_ids( this.task_ids().filter( id => {\n\t\t\t\tif( !this.task( id )!.completed ) return true\n\t\t\t\tthis.task( id , null )\n\t\t\t\treturn false\n\t\t\t} ) )\n\t\t}\n\t\t\n\t\tpanels() {\n\t\t\treturn [\n\t\t\t\tthis.Head() , \n\t\t\t\tthis.List() ,\n\t\t\t\t... this.foot_visible() ? [ this.Foot() ] : [] ,\n\t\t\t]\n\t\t}\n\t\t\n\t\tfoot_visible() {\n\t\t\treturn this.task_ids().length > 0\n\t\t}\n\n\t\tsweep_enabled() {\n\t\t\treturn this.groups_completed()[ 'true' ].length > 0\n\t\t}\n\t\t\n\t}\n\t\n}\n",null,null]} \ No newline at end of file diff --git a/examples/mol/web.js b/examples/mol/web.js new file mode 100644 index 0000000000..ea02d313df --- /dev/null +++ b/examples/mol/web.js @@ -0,0 +1,4645 @@ +"use strict"; +function require( path ){ return $node[ path ] }; +"use strict" + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if ((d = decorators[i])) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; + +var globalThis = globalThis || ( typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : this ) +var $ = ( typeof module === 'object' ) ? ( module['export'+'s'] = globalThis ) : globalThis +$.$$ = $ + +; + +var $node = $node || {} +void function( module ) { var exports = module.exports = this; function require( id ) { return $node[ id.replace( /^.\// , "../" ) ] }; +; +"use strict"; +Error.stackTraceLimit = 50; +var $; +(function ($) { +})($ || ($ = {})); +module.exports = $; +//mam.ts +; + +$node[ "../mam.ts" ] = $node[ "../mam.ts" ] = module.exports }.call( {} , {} ) +; +"use strict"; +//hyoo/hyoo.ts +; +"use strict"; +var $; +(function ($) { + $.$mol_ambient_ref = Symbol('$mol_ambient_ref'); + function $mol_ambient(overrides) { + return Object.setPrototypeOf(overrides, this || $); + } + $.$mol_ambient = $mol_ambient; +})($ || ($ = {})); +//mol/ambient/ambient.ts +; +"use strict"; +var $; +(function ($) { + const instances = new WeakSet(); + function $mol_delegate(proto, target) { + const proxy = new Proxy(proto, { + get: (_, field) => { + const obj = target(); + let val = Reflect.get(obj, field); + if (typeof val === 'function') { + val = val.bind(obj); + } + return val; + }, + has: (_, field) => Reflect.has(target(), field), + set: (_, field, value) => Reflect.set(target(), field, value), + getOwnPropertyDescriptor: (_, field) => Reflect.getOwnPropertyDescriptor(target(), field), + ownKeys: () => Reflect.ownKeys(target()), + getPrototypeOf: () => Reflect.getPrototypeOf(target()), + setPrototypeOf: (_, donor) => Reflect.setPrototypeOf(target(), donor), + isExtensible: () => Reflect.isExtensible(target()), + preventExtensions: () => Reflect.preventExtensions(target()), + apply: (_, self, args) => Reflect.apply(target(), self, args), + construct: (_, args, retarget) => Reflect.construct(target(), args, retarget), + defineProperty: (_, field, descr) => Reflect.defineProperty(target(), field, descr), + deleteProperty: (_, field) => Reflect.deleteProperty(target(), field), + }); + instances.add(proxy); + return proxy; + } + $.$mol_delegate = $mol_delegate; + Reflect.defineProperty($mol_delegate, Symbol.hasInstance, { + value: (obj) => instances.has(obj), + }); +})($ || ($ = {})); +//mol/delegate/delegate.ts +; +"use strict"; +var $; +(function ($) { + $.$mol_owning_map = new WeakMap(); + function $mol_owning_allow(having) { + try { + if (!having) + return false; + if (typeof having !== 'object') + return false; + if (having instanceof $mol_delegate) + return false; + if (typeof having['destructor'] !== 'function') + return false; + return true; + } + catch { + return false; + } + } + $.$mol_owning_allow = $mol_owning_allow; + function $mol_owning_get(having, Owner) { + if (!$mol_owning_allow(having)) + return null; + while (true) { + const owner = $.$mol_owning_map.get(having); + if (!owner) + return owner; + if (!Owner) + return owner; + if (owner instanceof Owner) + return owner; + having = owner; + } + } + $.$mol_owning_get = $mol_owning_get; + function $mol_owning_check(owner, having) { + if (!$mol_owning_allow(having)) + return false; + if ($.$mol_owning_map.get(having) !== owner) + return false; + return true; + } + $.$mol_owning_check = $mol_owning_check; + function $mol_owning_catch(owner, having) { + if (!$mol_owning_allow(having)) + return false; + if ($.$mol_owning_map.get(having)) + return false; + $.$mol_owning_map.set(having, owner); + return true; + } + $.$mol_owning_catch = $mol_owning_catch; +})($ || ($ = {})); +//mol/owning/owning.ts +; +"use strict"; +var $; +(function ($) { + function $mol_fail(error) { + throw error; + } + $.$mol_fail = $mol_fail; +})($ || ($ = {})); +//mol/fail/fail.ts +; +"use strict"; +var $; +(function ($) { + function $mol_fail_hidden(error) { + throw error; + } + $.$mol_fail_hidden = $mol_fail_hidden; +})($ || ($ = {})); +//mol/fail/hidden/hidden.ts +; +"use strict"; +//mol/type/writable/writable.ts +; +"use strict"; +var $; +(function ($) { + class $mol_object2 { + static $ = $; + [$mol_ambient_ref] = null; + get $() { + if (this[$mol_ambient_ref]) + return this[$mol_ambient_ref]; + const owner = $mol_owning_get(this); + return this[$mol_ambient_ref] = owner?.$ || $mol_object2.$; + } + set $(next) { + if (this[$mol_ambient_ref]) + $mol_fail_hidden(new Error('Context already defined')); + this[$mol_ambient_ref] = next; + } + static create(init) { + const obj = new this; + if (init) + init(obj); + return obj; + } + static [Symbol.toPrimitive]() { + return this.toString(); + } + static toString() { + if (Symbol.toStringTag in this) + return this[Symbol.toStringTag]; + return this.name; + } + destructor() { } + toString() { + return this[Symbol.toStringTag] || this.constructor.name + '()'; + } + toJSON() { + return this.toString(); + } + } + $.$mol_object2 = $mol_object2; +})($ || ($ = {})); +//mol/object2/object2.ts +; +"use strict"; +var $; +(function ($) { + class $mol_after_tick extends $mol_object2 { + task; + promise; + cancelled = false; + constructor(task) { + super(); + this.task = task; + this.promise = Promise.resolve().then(() => { + if (this.cancelled) + return; + task(); + }); + } + destructor() { + this.cancelled = true; + } + } + $.$mol_after_tick = $mol_after_tick; +})($ || ($ = {})); +//mol/after/tick/tick.ts +; +"use strict"; +var $; +(function ($) { +})($ || ($ = {})); +//mol/dom/context/context.ts +; +"use strict"; +var $; +(function ($) { + $.$mol_dom_context = self; +})($ || ($ = {})); +//mol/dom/context/context.web.ts +; +"use strict"; +var $; +(function ($) { + let all = []; + let el = null; + let timer = null; + function $mol_style_attach(id, text) { + all.push(`/* ${id} */\n\n${text}`); + if (timer) + return el; + const doc = $mol_dom_context.document; + if (!doc) + return null; + el = doc.createElement('style'); + el.id = `$mol_style_attach`; + doc.head.appendChild(el); + timer = new $mol_after_tick(() => { + el.innerHTML = '\n' + all.join('\n\n'); + all = []; + el = null; + timer = null; + }); + return el; + } + $.$mol_style_attach = $mol_style_attach; +})($ || ($ = {})); +//mol/style/attach/attach.ts +; +"use strict"; +var $; +(function ($) { + class $mol_decor { + value; + constructor(value) { + this.value = value; + } + prefix() { return ''; } + valueOf() { return this.value; } + postfix() { return ''; } + toString() { + return `${this.prefix()}${this.valueOf()}${this.postfix()}`; + } + } + $.$mol_decor = $mol_decor; +})($ || ($ = {})); +//mol/decor/decor.ts +; +"use strict"; +var $; +(function ($) { + class $mol_style_unit extends $mol_decor { + literal; + constructor(value, literal) { + super(value); + this.literal = literal; + } + postfix() { + return this.literal; + } + static per(value) { return new $mol_style_unit(value, '%'); } + static px(value) { return new $mol_style_unit(value, 'px'); } + static mm(value) { return new $mol_style_unit(value, 'mm'); } + static cm(value) { return new $mol_style_unit(value, 'cm'); } + static Q(value) { return new $mol_style_unit(value, 'Q'); } + static in(value) { return new $mol_style_unit(value, 'in'); } + static pc(value) { return new $mol_style_unit(value, 'pc'); } + static pt(value) { return new $mol_style_unit(value, 'pt'); } + static cap(value) { return new $mol_style_unit(value, 'cap'); } + static ch(value) { return new $mol_style_unit(value, 'ch'); } + static em(value) { return new $mol_style_unit(value, 'em'); } + static rem(value) { return new $mol_style_unit(value, 'rem'); } + static ex(value) { return new $mol_style_unit(value, 'ex'); } + static ic(value) { return new $mol_style_unit(value, 'ic'); } + static lh(value) { return new $mol_style_unit(value, 'lh'); } + static rlh(value) { return new $mol_style_unit(value, 'rlh'); } + static vh(value) { return new $mol_style_unit(value, 'vh'); } + static vw(value) { return new $mol_style_unit(value, 'vw'); } + static vi(value) { return new $mol_style_unit(value, 'vi'); } + static vb(value) { return new $mol_style_unit(value, 'vb'); } + static vmin(value) { return new $mol_style_unit(value, 'vmin'); } + static vmax(value) { return new $mol_style_unit(value, 'vmax'); } + static deg(value) { return new $mol_style_unit(value, 'deg'); } + static rad(value) { return new $mol_style_unit(value, 'rad'); } + static grad(value) { return new $mol_style_unit(value, 'grad'); } + static turn(value) { return new $mol_style_unit(value, 'turn'); } + static s(value) { return new $mol_style_unit(value, 's'); } + static ms(value) { return new $mol_style_unit(value, 'ms'); } + } + $.$mol_style_unit = $mol_style_unit; +})($ || ($ = {})); +//mol/style/unit/unit.ts +; +"use strict"; +var $; +(function ($) { + const { per } = $mol_style_unit; + class $mol_style_func extends $mol_decor { + name; + constructor(name, value) { + super(value); + this.name = name; + } + prefix() { return this.name + '('; } + postfix() { return ')'; } + static calc(value) { + return new $mol_style_func('calc', value); + } + static vary(name) { + return new $mol_style_func('var', name); + } + static url(href) { + return new $mol_style_func('url', JSON.stringify(href)); + } + static hsla(hue, saturation, lightness, alpha) { + return new $mol_style_func('hsla', [hue, per(saturation), per(lightness), alpha]); + } + static clamp(min, mid, max) { + return new $mol_style_func('clamp', [min, mid, max]); + } + static rgba(red, green, blue, alpha) { + return new $mol_style_func('rgba', [red, green, blue, alpha]); + } + static scale(zoom) { + return new $mol_style_func('scale', [zoom]); + } + } + $.$mol_style_func = $mol_style_func; +})($ || ($ = {})); +//mol/style/func/func.ts +; +"use strict"; +var $; +(function ($) { + $mol_style_attach("mol/theme/theme.css", ":root {\n\t--mol_theme_hue: 210deg;\n\t--mol_theme_luma: -1;\n\t--mol_theme_image: none;\n}\n\n[mol_theme] {\n\tbackground-color: var(--mol_theme_back);\n\tcolor: var(--mol_theme_text);\n\tfill: var(--mol_theme_text);\n}\n\t\n:root, [mol_theme] {\n\t--mol_theme_back: hsl( var(--mol_theme_hue), 50% , calc( 54% + 44% * var(--mol_theme_luma) ) );\n\t--mol_theme_text: hsl( var(--mol_theme_hue), 0% , calc( 50% - 30% * var(--mol_theme_luma) ) );\n\t--mol_theme_field: hsl( var(--mol_theme_hue), 0%, calc( 50% + 50% * var(--mol_theme_luma) ), .2 );\n\t\n\t--mol_theme_card: hsl( var(--mol_theme_hue), 0%, 50%, .05 );\n\t--mol_theme_hover: hsl( var(--mol_theme_hue), 0%, 50%, .1 );\n\t--mol_theme_line: hsl( var(--mol_theme_hue), 0%, 50%, .25 );\n\t--mol_theme_shade: hsl( var(--mol_theme_hue), 0%, 50%, 1 );\n\t\n\t--mol_theme_control: hsl( var(--mol_theme_hue), 50%, calc( 50% - 5% * var(--mol_theme_luma) ) );\n\t--mol_theme_current: hsl( calc( var(--mol_theme_hue) - 90deg ), 50%, calc( 50% - 10% * var(--mol_theme_luma) ) );\n\t--mol_theme_special: hsl( calc( var(--mol_theme_hue) + 90deg ), 50%, calc( 50% - 10% * var(--mol_theme_luma) ) );\n\t--mol_theme_focus: hsl( calc( var(--mol_theme_hue) + 180deg ), 100%, calc( 50% - 15% * var(--mol_theme_luma) ) );\n\t\n}\n\n[mol_theme=\"$mol_theme_light\"] {\n\t--mol_theme_luma: 1;\n\t--mol_theme_image: none;\n}\n\n[mol_theme=\"$mol_theme_dark\"] {\n\t--mol_theme_luma: -1;\n\t--mol_theme_image: invert(1) hue-rotate( 180deg );\n}\n\n[mol_theme=\"$mol_theme_base\"] {\n\t--mol_theme_luma: -2;\n\t--mol_theme_back: hsl( var(--mol_theme_hue), 50%, 40% );\n\t--mol_theme_hover: hsl( var(--mol_theme_hue), 60%, 30% );\n\t--mol_theme_current: hsl( var(--mol_theme_hue), 100%, 20% );\n}\n\n[mol_theme=\"$mol_theme_current\"] {\n\t--mol_theme_back: hsl( calc( var(--mol_theme_hue) - 90deg ), 50%, calc( 50% + 25% * var(--mol_theme_luma) ) );\n}\n\n[mol_theme=\"$mol_theme_special\"] {\n\t--mol_theme_back: hsl( calc( var(--mol_theme_hue) + 90deg ), 50%, calc( 50% + 25% * var(--mol_theme_luma) ) );\n}\n\n[mol_theme=\"$mol_theme_accent\"] {\n\t--mol_theme_luma: -2;\n\t--mol_theme_back: hsl( calc( var(--mol_theme_hue) + 180deg ), 80%, 40% );\n\t--mol_theme_hover: hsl( calc( var(--mol_theme_hue) + 180deg ), 80%, 35% );\n}\n\n[mol_theme=\"$mol_theme_accent\"] [mol_theme=\"$mol_theme_accent\"] {\n\t--mol_theme_back: black;\n}\n"); +})($ || ($ = {})); +//mol/theme/-css/theme.css.ts +; +"use strict"; +var $; +(function ($) { + const { vary } = $mol_style_func; + $.$mol_theme = { + back: vary('--mol_theme_back'), + hover: vary('--mol_theme_hover'), + card: vary('--mol_theme_card'), + current: vary('--mol_theme_current'), + special: vary('--mol_theme_special'), + text: vary('--mol_theme_text'), + control: vary('--mol_theme_control'), + shade: vary('--mol_theme_shade'), + line: vary('--mol_theme_line'), + focus: vary('--mol_theme_focus'), + field: vary('--mol_theme_field'), + image: vary('--mol_theme_image'), + }; +})($ || ($ = {})); +//mol/theme/theme.ts +; +"use strict"; +var $; +(function ($_1) { + let $$; + (function ($$) { + let $; + })($$ = $_1.$$ || ($_1.$$ = {})); + $_1.$mol_object_field = Symbol('$mol_object_field'); + class $mol_object extends $mol_object2 { + static make(config) { + return super.create(obj => { + for (let key in config) + obj[key] = config[key]; + }); + } + } + $_1.$mol_object = $mol_object; +})($ || ($ = {})); +//mol/object/object.ts +; +"use strict"; +var $; +(function ($) { + let $mol_wire_cursor; + (function ($mol_wire_cursor) { + $mol_wire_cursor[$mol_wire_cursor["stale"] = -1] = "stale"; + $mol_wire_cursor[$mol_wire_cursor["doubt"] = -2] = "doubt"; + $mol_wire_cursor[$mol_wire_cursor["fresh"] = -3] = "fresh"; + $mol_wire_cursor[$mol_wire_cursor["final"] = -4] = "final"; + })($mol_wire_cursor = $.$mol_wire_cursor || ($.$mol_wire_cursor = {})); +})($ || ($ = {})); +//mol/wire/cursor/cursor.ts +; +"use strict"; +var $; +(function ($) { + class $mol_wire_pub extends Object { + data = []; + static get [Symbol.species]() { + return Array; + } + sub_from = 0; + get sub_list() { + const res = []; + for (let i = this.sub_from; i < this.data.length; i += 2) { + res.push(this.data[i]); + } + return res; + } + get sub_empty() { + return this.sub_from === this.data.length; + } + sub_on(sub, pub_pos) { + const pos = this.data.length; + this.data.push(sub, pub_pos); + return pos; + } + sub_off(sub_pos) { + if (!(sub_pos < this.data.length)) { + $mol_fail(new Error(`Wrong pos ${sub_pos}`)); + } + const end = this.data.length - 2; + if (sub_pos !== end) { + this.peer_move(end, sub_pos); + } + this.data.pop(); + this.data.pop(); + if (this.data.length === this.sub_from) + this.reap(); + } + reap() { } + promote() { + $mol_wire_auto()?.track_next(this); + } + fresh() { } + complete() { } + emit(quant = $mol_wire_cursor.stale) { + for (let i = this.sub_from; i < this.data.length; i += 2) { + ; + this.data[i].absorb(quant); + } + } + peer_move(from_pos, to_pos) { + const peer = this.data[from_pos]; + const self_pos = this.data[from_pos + 1]; + this.data[to_pos] = peer; + this.data[to_pos + 1] = self_pos; + peer.peer_repos(self_pos, to_pos); + } + peer_repos(peer_pos, self_pos) { + this.data[peer_pos + 1] = self_pos; + } + } + $.$mol_wire_pub = $mol_wire_pub; +})($ || ($ = {})); +//mol/wire/pub/pub.ts +; +"use strict"; +//mol/wire/sub/sub.ts +; +"use strict"; +var $; +(function ($) { + let auto = null; + function $mol_wire_auto(next = auto) { + return auto = next; + } + $.$mol_wire_auto = $mol_wire_auto; + $.$mol_wire_affected = []; +})($ || ($ = {})); +//mol/wire/wire.ts +; +"use strict"; +var $; +(function ($) { + $['devtoolsFormatters'] = $['devtoolsFormatters'] || []; + function $mol_dev_format_register(config) { + $['devtoolsFormatters'].push(config); + } + $.$mol_dev_format_register = $mol_dev_format_register; + $.$mol_dev_format_head = Symbol('$mol_dev_format_head'); + $.$mol_dev_format_body = Symbol('$mol_dev_format_body'); + $mol_dev_format_register({ + header: (val, config = false) => { + if (config) + return null; + if (!val) + return null; + if ($.$mol_dev_format_head in val) { + return val[$.$mol_dev_format_head](); + } + if (typeof val === 'function') { + return $mol_dev_format_native(val); + } + return null; + }, + hasBody: val => val[$.$mol_dev_format_body], + body: val => val[$.$mol_dev_format_body](), + }); + function $mol_dev_format_native(obj) { + if (typeof obj === 'undefined') + return $.$mol_dev_format_shade('undefined'); + if (typeof obj !== 'object' && typeof obj !== 'function') + return obj; + return [ + 'object', + { + object: obj, + config: true, + }, + ]; + } + $.$mol_dev_format_native = $mol_dev_format_native; + function $mol_dev_format_auto(obj) { + if (obj == null) + return $.$mol_dev_format_shade(String(obj)); + if (typeof obj === 'object' && $.$mol_dev_format_head in obj) { + return obj[$.$mol_dev_format_head](); + } + return [ + 'object', + { + object: obj, + config: false, + }, + ]; + } + $.$mol_dev_format_auto = $mol_dev_format_auto; + function $mol_dev_format_element(element, style, ...content) { + const styles = []; + for (let key in style) + styles.push(`${key} : ${style[key]}`); + return [ + element, + { + style: styles.join(' ; '), + }, + ...content, + ]; + } + $.$mol_dev_format_element = $mol_dev_format_element; + function $mol_dev_format_span(style, ...content) { + return $mol_dev_format_element('span', { + 'vertical-align': '8%', + ...style, + }, ...content); + } + $.$mol_dev_format_span = $mol_dev_format_span; + $.$mol_dev_format_div = $mol_dev_format_element.bind(null, 'div'); + $.$mol_dev_format_ol = $mol_dev_format_element.bind(null, 'ol'); + $.$mol_dev_format_li = $mol_dev_format_element.bind(null, 'li'); + $.$mol_dev_format_table = $mol_dev_format_element.bind(null, 'table'); + $.$mol_dev_format_tr = $mol_dev_format_element.bind(null, 'tr'); + $.$mol_dev_format_td = $mol_dev_format_element.bind(null, 'td'); + $.$mol_dev_format_accent = $mol_dev_format_span.bind(null, { + 'color': 'magenta', + }); + $.$mol_dev_format_strong = $mol_dev_format_span.bind(null, { + 'font-weight': 'bold', + }); + $.$mol_dev_format_string = $mol_dev_format_span.bind(null, { + 'color': 'green', + }); + $.$mol_dev_format_shade = $mol_dev_format_span.bind(null, { + 'color': 'gray', + }); + $.$mol_dev_format_indent = $.$mol_dev_format_div.bind(null, { + 'margin-left': '13px' + }); +})($ || ($ = {})); +//mol/dev/format/format.ts +; +"use strict"; +var $; +(function ($) { + class $mol_wire_pub_sub extends $mol_wire_pub { + pub_from = 0; + cursor = $mol_wire_cursor.stale; + get pub_list() { + const res = []; + const max = this.cursor >= 0 ? this.cursor : this.sub_from; + for (let i = this.pub_from; i < max; i += 2) { + res.push(this.data[i]); + } + return res; + } + track_on() { + this.cursor = this.pub_from; + const sub = $mol_wire_auto(); + $mol_wire_auto(this); + return sub; + } + promote() { + if (this.cursor >= this.pub_from) { + $mol_fail(new Error('Circular subscription')); + } + super.promote(); + } + track_next(pub) { + if (this.cursor < 0) + $mol_fail(new Error('Promo to non begun sub')); + if (this.cursor < this.sub_from) { + const next = this.data[this.cursor]; + if (pub === undefined) + return next ?? null; + if (next === pub) { + this.cursor += 2; + return next; + } + if (next) { + if (this.sub_from < this.data.length) { + this.peer_move(this.sub_from, this.data.length); + } + this.peer_move(this.cursor, this.sub_from); + this.sub_from += 2; + } + } + else { + if (pub === undefined) + return null; + if (this.sub_from < this.data.length) { + this.peer_move(this.sub_from, this.data.length); + } + this.sub_from += 2; + } + this.data[this.cursor] = pub; + this.data[this.cursor + 1] = pub.sub_on(this, this.cursor); + this.cursor += 2; + return pub; + } + track_off(sub) { + $mol_wire_auto(sub); + if (this.cursor < 0) { + $mol_fail(new Error('End of non begun sub')); + } + for (let cursor = this.pub_from; cursor < this.cursor; cursor += 2) { + const pub = this.data[cursor]; + pub.fresh(); + } + this.cursor = $mol_wire_cursor.fresh; + } + pub_off(sub_pos) { + this.data[sub_pos] = undefined; + this.data[sub_pos + 1] = undefined; + } + destructor() { + for (let cursor = this.data.length - 2; cursor >= this.sub_from; cursor -= 2) { + const sub = this.data[cursor]; + const pos = this.data[cursor + 1]; + sub.pub_off(pos); + this.data.pop(); + this.data.pop(); + } + this.cursor = this.pub_from; + this.track_cut(); + this.cursor = $mol_wire_cursor.final; + } + track_cut() { + if (this.cursor < this.pub_from) { + $mol_fail(new Error('Cut of non begun sub')); + } + let tail = 0; + for (let cursor = this.cursor; cursor < this.sub_from; cursor += 2) { + const pub = this.data[cursor]; + pub?.sub_off(this.data[cursor + 1]); + if (this.sub_from < this.data.length) { + this.peer_move(this.data.length - 2, cursor); + this.data.pop(); + this.data.pop(); + } + else { + ++tail; + } + } + for (; tail; --tail) { + this.data.pop(); + this.data.pop(); + } + this.sub_from = this.cursor; + } + complete() { } + complete_pubs() { + const limit = this.cursor < 0 ? this.sub_from : this.cursor; + for (let cursor = this.pub_from; cursor < limit; cursor += 2) { + const pub = this.data[cursor]; + pub?.complete(); + } + } + absorb(quant = $mol_wire_cursor.stale) { + if (this.cursor === $mol_wire_cursor.final) + return; + if (this.cursor >= quant) + return; + this.cursor = quant; + this.emit($mol_wire_cursor.doubt); + } + [$mol_dev_format_head]() { + return $mol_dev_format_native(this); + } + get pub_empty() { + return this.sub_from === this.pub_from; + } + } + $.$mol_wire_pub_sub = $mol_wire_pub_sub; +})($ || ($ = {})); +//mol/wire/pub/sub/sub.ts +; +"use strict"; +var $; +(function ($) { + class $mol_after_frame extends $mol_object2 { + task; + static _promise = null; + static get promise() { + if (this._promise) + return this._promise; + return this._promise = new Promise(done => { + const complete = () => { + this._promise = null; + done(); + }; + if (typeof requestAnimationFrame === 'function') { + requestAnimationFrame(complete); + } + else { + setTimeout(complete, 16); + } + }); + } + cancelled = false; + promise; + constructor(task) { + super(); + this.task = task; + this.promise = $mol_after_frame.promise.then(() => { + if (this.cancelled) + return; + task(); + }); + } + destructor() { + this.cancelled = true; + } + } + $.$mol_after_frame = $mol_after_frame; +})($ || ($ = {})); +//mol/after/frame/frame.web.ts +; +"use strict"; +var $; +(function ($) { + const handled = new WeakSet(); + class $mol_wire_fiber extends $mol_wire_pub_sub { + task; + host; + static warm = true; + static planning = new Set(); + static reaping = new Set(); + static plan_task = null; + static plan() { + if (this.plan_task) + return; + this.plan_task = new $mol_after_frame(() => { + try { + this.sync(); + } + finally { + $mol_wire_fiber.plan_task = null; + } + }); + } + static sync() { + while (this.planning.size) { + for (const fiber of this.planning) { + this.planning.delete(fiber); + if (fiber.cursor >= 0) + continue; + if (fiber.cursor === $mol_wire_cursor.final) + continue; + fiber.fresh(); + } + } + while (this.reaping.size) { + const fibers = this.reaping; + this.reaping = new Set; + for (const fiber of fibers) { + if (!fiber.sub_empty) + continue; + fiber.destructor(); + } + } + } + cache = undefined; + get args() { + return this.data.slice(0, this.pub_from); + } + result() { + if (this.cache instanceof Promise) + return; + if (this.cache instanceof Error) + return; + return this.cache; + } + field() { + return this.task.name + '()'; + } + constructor(id, task, host, args) { + super(); + this.task = task; + this.host = host; + if (args) + this.data.push(...args); + this.pub_from = this.sub_from = args?.length ?? 0; + this[Symbol.toStringTag] = id; + } + plan() { + $mol_wire_fiber.planning.add(this); + $mol_wire_fiber.plan(); + } + reap() { + $mol_wire_fiber.reaping.add(this); + $mol_wire_fiber.plan(); + } + toString() { + return this[Symbol.toStringTag]; + } + toJSON() { + return this[Symbol.toStringTag]; + } + [$mol_dev_format_head]() { + const cursor = { + [-1]: '🔴', + [-2]: '🟡', + [-3]: '🟢', + [-4]: '🔵', + }[this.cursor] ?? this.cursor.toString(); + return $mol_dev_format_div({}, $mol_dev_format_native(this), $mol_dev_format_shade(cursor + ' '), $mol_dev_format_auto(this.cache)); + } + get $() { + return (this.host ?? this.task)['$']; + } + emit(quant = $mol_wire_cursor.stale) { + if (this.sub_empty) + this.plan(); + else + super.emit(quant); + } + fresh() { + if (this.cursor === $mol_wire_cursor.fresh) + return; + if (this.cursor === $mol_wire_cursor.final) + return; + check: if (this.cursor === $mol_wire_cursor.doubt) { + for (let i = this.pub_from; i < this.sub_from; i += 2) { + ; + this.data[i]?.fresh(); + if (this.cursor !== $mol_wire_cursor.doubt) + break check; + } + this.cursor = $mol_wire_cursor.fresh; + return; + } + const bu = this.track_on(); + let result; + try { + switch (this.pub_from) { + case 0: + result = this.task.call(this.host); + break; + case 1: + result = this.task.call(this.host, this.data[0]); + break; + default: + result = this.task.call(this.host, ...this.args); + break; + } + if (result instanceof Promise) { + const put = (res) => { + if (this.cache === result) + this.put(res); + return res; + }; + result = Object.assign(result.then(put, put), { + destructor: result['destructor'] + }); + handled.add(result); + } + } + catch (error) { + if (error instanceof Error || error instanceof Promise) { + result = error; + } + else { + result = new Error(String(error), { cause: error }); + } + if (result instanceof Promise && !handled.has(result)) { + result = Object.assign(result.finally(() => { + if (this.cache === result) + this.absorb(); + }), { + destructor: result['destructor'] + }); + handled.add(result); + } + } + if (!(result instanceof Promise)) { + this.track_cut(); + } + this.track_off(bu); + this.put(result); + } + refresh() { + this.cursor = $mol_wire_cursor.stale; + this.fresh(); + } + sync() { + if (!$mol_wire_fiber.warm) { + return this.result(); + } + this.promote(); + this.fresh(); + if (this.cache instanceof Error) { + return $mol_fail_hidden(this.cache); + } + if (this.cache instanceof Promise) { + return $mol_fail_hidden(this.cache); + } + return this.cache; + } + async async() { + while (true) { + this.fresh(); + if (this.cache instanceof Error) { + $mol_fail_hidden(this.cache); + } + if (!(this.cache instanceof Promise)) + return this.cache; + await this.cache; + if (this.cursor === $mol_wire_cursor.final) { + await new Promise(() => { }); + } + } + } + } + $.$mol_wire_fiber = $mol_wire_fiber; +})($ || ($ = {})); +//mol/wire/fiber/fiber.ts +; +"use strict"; +var $; +(function ($) { + function $mol_guid(length = 8, exists = () => false) { + for (;;) { + let id = Math.random().toString(36).substring(2, length + 2).toUpperCase(); + if (exists(id)) + continue; + return id; + } + } + $.$mol_guid = $mol_guid; +})($ || ($ = {})); +//mol/guid/guid.ts +; +"use strict"; +var $; +(function ($) { + $.$mol_key_store = new WeakMap(); + function $mol_key(value) { + if (!value) + return JSON.stringify(value); + if (typeof value !== 'object' && typeof value !== 'function') + return JSON.stringify(value); + return JSON.stringify(value, (field, value) => { + if (!value) + return value; + if (typeof value !== 'object' && typeof value !== 'function') + return value; + if (Array.isArray(value)) + return value; + const proto = Reflect.getPrototypeOf(value); + if (!proto) + return value; + if (Reflect.getPrototypeOf(proto) === null) + return value; + if ('toJSON' in value) + return value; + if (value instanceof RegExp) + return value.toString(); + let key = $.$mol_key_store.get(value); + if (key) + return key; + key = $mol_guid(); + $.$mol_key_store.set(value, key); + return key; + }); + } + $.$mol_key = $mol_key; +})($ || ($ = {})); +//mol/key/key.ts +; +"use strict"; +var $; +(function ($) { + $.$mol_compare_deep_cache = new WeakMap(); + function $mol_compare_deep(left, right) { + if (Object.is(left, right)) + return true; + if (left === null) + return false; + if (right === null) + return false; + if (typeof left !== 'object') + return false; + if (typeof right !== 'object') + return false; + const left_proto = Reflect.getPrototypeOf(left); + const right_proto = Reflect.getPrototypeOf(right); + if (left_proto !== right_proto) + return false; + if (left instanceof Boolean) + return Object.is(left.valueOf(), right['valueOf']()); + if (left instanceof Number) + return Object.is(left.valueOf(), right['valueOf']()); + if (left instanceof String) + return Object.is(left.valueOf(), right['valueOf']()); + if (left instanceof Date) + return Object.is(left.valueOf(), right['valueOf']()); + if (left instanceof RegExp) + return left.source === right['source'] && left.flags === right['flags']; + let left_cache = $.$mol_compare_deep_cache.get(left); + if (left_cache) { + const right_cache = left_cache.get(right); + if (typeof right_cache === 'boolean') + return right_cache; + } + else { + left_cache = new WeakMap([[right, true]]); + $.$mol_compare_deep_cache.set(left, left_cache); + } + let result; + try { + if (left_proto && !Reflect.getPrototypeOf(left_proto)) + result = compare_pojo(left, right); + else if (Array.isArray(left)) + result = compare_array(left, right); + else if (left instanceof Set) + result = compare_set(left, right); + else if (left instanceof Map) + result = compare_map(left, right); + else if (left instanceof Error) + result = left.stack === right.stack; + else if (ArrayBuffer.isView(left)) + result = compare_buffer(left, right); + else if (Symbol.toPrimitive in left) + result = compare_primitive(left, right); + else + result = false; + } + finally { + left_cache.set(right, result); + } + return result; + } + $.$mol_compare_deep = $mol_compare_deep; + function compare_array(left, right) { + const len = left.length; + if (len !== right.length) + return false; + for (let i = 0; i < len; ++i) { + if (!$mol_compare_deep(left[i], right[i])) + return false; + } + return true; + } + function compare_buffer(left, right) { + const len = left.byteLength; + if (len !== right.byteLength) + return false; + for (let i = 0; i < len; ++i) { + if (left[i] !== right[i]) + return false; + } + return true; + } + function compare_iterator(left, right, compare) { + while (true) { + const left_next = left.next(); + const right_next = right.next(); + if (left_next.done !== right_next.done) + return false; + if (left_next.done) + break; + if (!compare(left_next.value, right_next.value)) + return false; + } + return true; + } + function compare_set(left, right) { + if (left.size !== right.size) + return false; + return compare_iterator(left.values(), right.values(), $mol_compare_deep); + } + function compare_map(left, right) { + if (left.size !== right.size) + return false; + return compare_iterator(left.keys(), right.keys(), Object.is) + && compare_iterator(left.values(), right.values(), $mol_compare_deep); + } + function compare_pojo(left, right) { + const left_keys = Object.getOwnPropertyNames(left); + const right_keys = Object.getOwnPropertyNames(right); + if (left_keys.length !== right_keys.length) + return false; + for (let key of left_keys) { + if (!$mol_compare_deep(left[key], Reflect.get(right, key))) + return false; + } + return true; + } + function compare_primitive(left, right) { + return Object.is(left[Symbol.toPrimitive]('default'), right[Symbol.toPrimitive]('default')); + } +})($ || ($ = {})); +//mol/compare/deep/deep.ts +; +"use strict"; +var $; +(function ($) { + class $mol_wire_task extends $mol_wire_fiber { + static getter(task) { + return function $mol_wire_task_get(host, args) { + const existen = $mol_wire_auto()?.track_next(); + reuse: if (existen) { + if (!(existen instanceof $mol_wire_task)) + break reuse; + if (existen.host !== host) + break reuse; + if (existen.task !== task) + break reuse; + if (!$mol_compare_deep(existen.args, args)) + break reuse; + return existen; + } + return new $mol_wire_task(`${host?.[Symbol.toStringTag] ?? host}.${task.name}(#)`, task, host, args); + }; + } + complete() { + this.destructor(); + } + put(next) { + const prev = this.cache; + this.cache = next; + if (next instanceof Promise) { + this.cursor = $mol_wire_cursor.fresh; + if (next !== prev) + this.emit(); + return next; + } + this.cursor = $mol_wire_cursor.final; + if (this.sub_empty) + this.destructor(); + else if (next !== prev) + this.emit(); + return next; + } + } + $.$mol_wire_task = $mol_wire_task; +})($ || ($ = {})); +//mol/wire/task/task.ts +; +"use strict"; +var $; +(function ($) { + function $mol_wire_method(host, field, descr) { + if (!descr) + descr = Reflect.getOwnPropertyDescriptor(host, field); + const orig = descr?.value ?? host[field]; + const sup = Reflect.getPrototypeOf(host); + if (typeof sup[field] === 'function') { + Object.defineProperty(orig, 'name', { value: sup[field].name }); + } + const temp = $mol_wire_task.getter(orig); + const value = function (...args) { + const fiber = temp(this ?? null, args); + return fiber.sync(); + }; + Object.defineProperty(value, 'name', { value: orig.name + ' ' }); + Object.assign(value, { orig }); + const descr2 = { ...descr, value }; + Reflect.defineProperty(host, field, descr2); + return descr2; + } + $.$mol_wire_method = $mol_wire_method; +})($ || ($ = {})); +//mol/wire/method/method.ts +; +"use strict"; +var $; +(function ($) { + class $mol_wire_atom extends $mol_wire_fiber { + static getter(task, keys) { + const field = task.name + '()'; + if (keys) { + return function $mol_wire_atom_get(host, args) { + let dict, key, fiber; + key = `${host?.[Symbol.toStringTag] ?? host}.${task.name}(${args.map(v => $mol_key(v)).join(',')})`; + dict = Object.getOwnPropertyDescriptor(host ?? task, field)?.value; + if (dict) { + const existen = dict.get(key); + if (existen) + return existen; + } + else { + dict = (host ?? task)[field] = new Map(); + } + fiber = new $mol_wire_atom(key, task, host, args); + dict.set(key, fiber); + return fiber; + }; + } + else { + return function $mol_wire_atom_get(host, args) { + const existen = Object.getOwnPropertyDescriptor(host ?? task, field)?.value; + if (existen) + return existen; + const key = `${host?.[Symbol.toStringTag] ?? host}.${field}`; + const fiber = new $mol_wire_atom(key, task, host, args); + (host ?? task)[field] = fiber; + return fiber; + }; + } + } + static watching = new Set(); + static watch() { + new $mol_after_frame($mol_wire_atom.watch); + for (const atom of $mol_wire_atom.watching) { + if (atom.cursor === $mol_wire_cursor.final) { + $mol_wire_atom.watching.delete(atom); + } + else { + atom.cursor = $mol_wire_cursor.stale; + atom.fresh(); + } + } + } + watch() { + $mol_wire_atom.watching.add(this); + } + resync(args) { + return this.put(this.task.call(this.host, ...args)); + } + once() { + return this.sync(); + } + destructor() { + super.destructor(); + const prev = this.cache; + if ($mol_owning_check(this, prev)) { + prev.destructor(); + } + if (this.pub_from === 0) { + ; + (this.host ?? this.task)[this.field()] = null; + } + else { + ; + (this.host ?? this.task)[this.field()].delete(this[Symbol.toStringTag]); + } + } + put(next) { + const prev = this.cache; + if (next !== prev) { + if ($mol_owning_check(this, prev)) { + prev.destructor(); + } + this.cache = next; + if ($mol_owning_catch(this, next)) { + try { + next[Symbol.toStringTag] = this[Symbol.toStringTag]; + } + catch { } + } + if (this.sub_from < this.data.length) { + if (!$mol_compare_deep(prev, next)) { + this.emit(); + } + } + } + this.cursor = $mol_wire_cursor.fresh; + if (next instanceof Promise) + return next; + this.complete_pubs(); + return next; + } + } + __decorate([ + $mol_wire_method + ], $mol_wire_atom.prototype, "resync", null); + __decorate([ + $mol_wire_method + ], $mol_wire_atom.prototype, "once", null); + $.$mol_wire_atom = $mol_wire_atom; + $mol_wire_atom.watch(); +})($ || ($ = {})); +//mol/wire/atom/atom.ts +; +"use strict"; +var $; +(function ($) { + function $mol_wire_mem(keys) { + const wrap = $mol_wire_mem_func(keys); + return (host, field, descr) => { + if (!descr) + descr = Reflect.getOwnPropertyDescriptor(host, field); + const orig = descr?.value ?? host[field]; + const sup = Reflect.getPrototypeOf(host); + if (typeof sup[field] === 'function') { + Object.defineProperty(orig, 'name', { value: sup[field].name }); + } + const descr2 = { + ...descr, + value: wrap(orig) + }; + Reflect.defineProperty(host, field, descr2); + return descr2; + }; + } + $.$mol_wire_mem = $mol_wire_mem; + function $mol_wire_mem_func(keys) { + return (func) => { + const persist = $mol_wire_atom.getter(func, keys); + const wrapper = function (...args) { + let atom = persist(this, args.slice(0, keys)); + if (args.length <= keys || args[keys] === undefined) { + if (!$mol_wire_fiber.warm) + return atom.result(); + if ($mol_wire_auto() instanceof $mol_wire_task) { + return atom.once(); + } + else { + return atom.sync(); + } + } + return atom.resync(args); + }; + Object.defineProperty(wrapper, 'name', { value: func.name + ' ' }); + Object.assign(wrapper, { orig: func }); + return wrapper; + }; + } + $.$mol_wire_mem_func = $mol_wire_mem_func; +})($ || ($ = {})); +//mol/wire/mem/mem.ts +; +"use strict"; +var $; +(function ($) { + $.$mol_mem = $mol_wire_mem(0); + $.$mol_mem_key = $mol_wire_mem(1); + $.$mol_mem_key2 = $mol_wire_mem(2); + $.$mol_mem_key3 = $mol_wire_mem(3); +})($ || ($ = {})); +//mol/mem/mem.ts +; +"use strict"; +var $; +(function ($) { + class $mol_window extends $mol_object { + static size() { + this.resizes(); + return { + width: self.innerWidth, + height: self.innerHeight, + }; + } + static resizes(next) { return next; } + } + __decorate([ + $mol_mem + ], $mol_window, "size", null); + __decorate([ + $mol_mem + ], $mol_window, "resizes", null); + $.$mol_window = $mol_window; + self.addEventListener('resize', event => $mol_window.resizes(event)); +})($ || ($ = {})); +//mol/window/window.web.ts +; +"use strict"; +var $; +(function ($) { + const cacthed = new WeakMap(); + function $mol_fail_catch(error) { + if (typeof error !== 'object') + return false; + if (cacthed.get(error)) + return false; + cacthed.set(error, true); + return true; + } + $.$mol_fail_catch = $mol_fail_catch; +})($ || ($ = {})); +//mol/fail/catch/catch.ts +; +"use strict"; +var $; +(function ($) { + function $mol_fail_log(error) { + if (error instanceof Promise) + return false; + if (!$mol_fail_catch(error)) + return false; + console.error(error); + return true; + } + $.$mol_fail_log = $mol_fail_log; +})($ || ($ = {})); +//mol/fail/log/log.ts +; +"use strict"; +var $; +(function ($) { + class $mol_view_selection extends $mol_object { + static focused(next) { + const parents = []; + let element = next?.[0] ?? $mol_dom_context.document.activeElement; + while (element) { + parents.push(element); + element = element.parentNode; + } + new $mol_after_tick(() => { + const element = this.focused()[0]; + if (element) + element.focus(); + else + $mol_dom_context.blur(); + }); + return parents; + } + } + __decorate([ + $mol_mem + ], $mol_view_selection, "focused", null); + $.$mol_view_selection = $mol_view_selection; +})($ || ($ = {})); +//mol/view/selection/selection.ts +; +"use strict"; +var $; +(function ($) { + function $mol_maybe(value) { + return (value == null) ? [] : [value]; + } + $.$mol_maybe = $mol_maybe; +})($ || ($ = {})); +//mol/maybe/maybe.ts +; +"use strict"; +var $; +(function ($) { + if ($mol_dom_context.document) { + $mol_dom_context.document.documentElement.addEventListener('focus', (event) => { + $mol_view_selection.focused($mol_maybe($mol_dom_context.document.activeElement)); + }, true); + } +})($ || ($ = {})); +//mol/view/selection/selection.web.ts +; +"use strict"; +var $; +(function ($) { + class $mol_wrapper extends $mol_object2 { + static wrap; + static run(task) { + return this.func(task)(); + } + static func(func) { + return this.wrap(func); + } + static get class() { + return (Class) => { + const construct = (target, args) => new Class(...args); + const handler = { + construct: this.func(construct) + }; + handler[Symbol.toStringTag] = Class.name + '#'; + return new Proxy(Class, handler); + }; + } + static get method() { + return (obj, name, descr) => { + descr.value = this.func(descr.value); + return descr; + }; + } + static get field() { + return (obj, name, descr) => { + descr.get = descr.set = this.func(descr.get); + return descr; + }; + } + } + $.$mol_wrapper = $mol_wrapper; +})($ || ($ = {})); +//mol/wrapper/wrapper.ts +; +"use strict"; +var $; +(function ($) { + class $mol_memo extends $mol_wrapper { + static wrap(task) { + const store = new WeakMap(); + return function (next) { + if (next === undefined && store.has(this)) + return store.get(this); + const val = task.call(this, next) ?? next; + store.set(this, val); + return val; + }; + } + } + $.$mol_memo = $mol_memo; +})($ || ($ = {})); +//mol/memo/memo.ts +; +"use strict"; +var $; +(function ($) { + function $mol_dom_qname(name) { + return name.replace(/\W/g, '').replace(/^(?=\d+)/, '_'); + } + $.$mol_dom_qname = $mol_dom_qname; +})($ || ($ = {})); +//mol/dom/qname/qname.ts +; +"use strict"; +var $; +(function ($) { + function $mol_wire_watch() { + const atom = $mol_wire_auto(); + if (atom instanceof $mol_wire_atom) { + atom.watch(); + } + else { + $mol_fail(new Error('Atom is equired for watching')); + } + } + $.$mol_wire_watch = $mol_wire_watch; +})($ || ($ = {})); +//mol/wire/watch/watch.ts +; +"use strict"; +var $; +(function ($) { + function $mol_const(value) { + var getter = (() => value); + getter['()'] = value; + getter[Symbol.toStringTag] = value; + return getter; + } + $.$mol_const = $mol_const; +})($ || ($ = {})); +//mol/const/const.ts +; +"use strict"; +var $; +(function ($) { + function $mol_dom_render_attributes(el, attrs) { + for (let name in attrs) { + let val = attrs[name]; + if (val === null || val === false) { + if (!el.hasAttribute(name)) + continue; + el.removeAttribute(name); + } + else { + const str = String(val); + if (el.getAttribute(name) === str) + continue; + el.setAttribute(name, str); + } + } + } + $.$mol_dom_render_attributes = $mol_dom_render_attributes; +})($ || ($ = {})); +//mol/dom/render/attributes/attributes.ts +; +"use strict"; +var $; +(function ($) { + function $mol_wire_async(obj) { + return new Proxy(obj, { + get(obj, field) { + const val = obj[field]; + if (typeof val !== 'function') + return val; + let fiber; + const temp = $mol_wire_task.getter(val); + return function $mol_wire_async(...args) { + fiber?.destructor(); + fiber = temp(obj, args); + return fiber.async(); + }; + }, + apply(obj, self, args) { + const temp = $mol_wire_task.getter(obj); + const fiber = temp(self, args); + return fiber.async(); + }, + }); + } + $.$mol_wire_async = $mol_wire_async; +})($ || ($ = {})); +//mol/wire/async/async.ts +; +"use strict"; +var $; +(function ($) { + function $mol_dom_render_styles(el, styles) { + for (let name in styles) { + let val = styles[name]; + const style = el.style; + if (typeof val === 'number') { + style[name] = `${val}px`; + } + else { + style[name] = val; + } + } + } + $.$mol_dom_render_styles = $mol_dom_render_styles; +})($ || ($ = {})); +//mol/dom/render/styles/styles.ts +; +"use strict"; +var $; +(function ($) { + function $mol_dom_render_children(el, childNodes) { + const node_set = new Set(childNodes); + let nextNode = el.firstChild; + for (let view of childNodes) { + if (view == null) + continue; + if (view instanceof $mol_dom_context.Node) { + while (true) { + if (!nextNode) { + el.appendChild(view); + break; + } + if (nextNode == view) { + nextNode = nextNode.nextSibling; + break; + } + else { + if (node_set.has(nextNode)) { + el.insertBefore(view, nextNode); + break; + } + else { + const nn = nextNode.nextSibling; + el.removeChild(nextNode); + nextNode = nn; + } + } + } + } + else { + if (nextNode && nextNode.nodeName === '#text') { + const str = String(view); + if (nextNode.nodeValue !== str) + nextNode.nodeValue = str; + nextNode = nextNode.nextSibling; + } + else { + const textNode = $mol_dom_context.document.createTextNode(String(view)); + el.insertBefore(textNode, nextNode); + } + } + } + while (nextNode) { + const currNode = nextNode; + nextNode = currNode.nextSibling; + el.removeChild(currNode); + } + } + $.$mol_dom_render_children = $mol_dom_render_children; +})($ || ($ = {})); +//mol/dom/render/children/children.ts +; +"use strict"; +var $; +(function ($) { + function $mol_dom_render_fields(el, fields) { + for (let key in fields) { + const val = fields[key]; + if (val === undefined) + continue; + el[key] = val; + } + } + $.$mol_dom_render_fields = $mol_dom_render_fields; +})($ || ($ = {})); +//mol/dom/render/fields/fields.ts +; +"use strict"; +var $; +(function ($) { + function $mol_func_name(func) { + let name = func.name; + if (name?.length > 1) + return name; + for (let key in this) { + try { + if (this[key] !== func) + continue; + name = key; + Object.defineProperty(func, 'name', { value: name }); + break; + } + catch { } + } + return name; + } + $.$mol_func_name = $mol_func_name; + function $mol_func_name_from(target, source) { + Object.defineProperty(target, 'name', { value: source.name }); + return target; + } + $.$mol_func_name_from = $mol_func_name_from; +})($ || ($ = {})); +//mol/func/name/name.ts +; +"use strict"; +//mol/type/keys/extract/extract.ts +; +"use strict"; +//mol/type/pick/pick.ts +; +"use strict"; +var $; +(function ($) { + function $mol_view_visible_width() { + return $mol_window.size().width; + } + $.$mol_view_visible_width = $mol_view_visible_width; + function $mol_view_visible_height() { + return $mol_window.size().height; + } + $.$mol_view_visible_height = $mol_view_visible_height; + function $mol_view_state_key(suffix) { + return suffix; + } + $.$mol_view_state_key = $mol_view_state_key; + const error_shower = new WeakMap(); + class $mol_view extends $mol_object { + static Root(id) { + return new this; + } + autorun() { + try { + this.dom_tree(); + document.title = this.title(); + } + catch (error) { + $mol_fail_log(error); + } + } + static autobind() { + const nodes = $mol_dom_context.document.querySelectorAll('[mol_view_root]:not([mol_view_root=""])'); + for (let i = nodes.length - 1; i >= 0; --i) { + const name = nodes.item(i).getAttribute('mol_view_root'); + const View = $[name]; + if (!View) { + console.error(`Can not attach view. Class not found: ${name}`); + continue; + } + const view = View.Root(i); + view.dom_node(nodes.item(i)); + view.autorun(); + } + } + title() { + return this.constructor.toString(); + } + focused(next) { + let node = this.dom_node(); + const value = $mol_view_selection.focused(next === undefined ? undefined : (next ? [node] : [])); + return value.indexOf(node) !== -1; + } + state_key(suffix = '') { + return this.$.$mol_view_state_key(suffix); + } + dom_name() { + return $mol_dom_qname(this.constructor.toString()) || 'div'; + } + dom_name_space() { return 'http://www.w3.org/1999/xhtml'; } + sub() { + return []; + } + sub_visible() { + return this.sub(); + } + minimal_width() { + let min = 0; + try { + const sub = this.sub(); + if (!sub) + return 0; + sub.forEach(view => { + if (view instanceof $mol_view) { + min = Math.max(min, view.minimal_width()); + } + }); + } + catch (error) { + $mol_fail_log(error); + return 24; + } + return min; + } + maximal_width() { + return this.minimal_width(); + } + minimal_height() { + let min = 0; + try { + for (const view of this.sub() ?? []) { + if (view instanceof $mol_view) { + min = Math.max(min, view.minimal_height()); + } + } + } + catch (error) { + $mol_fail_log(error); + return 24; + } + return min; + } + static watchers = new Set(); + view_rect() { + $mol_wire_watch(); + const { width, height, left, right, top, bottom } = this.dom_node().getBoundingClientRect(); + return { width, height, left, right, top, bottom }; + } + dom_id() { + return this.toString(); + } + dom_node(next) { + const node = next || $mol_dom_context.document.createElementNS(this.dom_name_space(), this.dom_name()); + const id = this.dom_id(); + node.setAttribute('id', id); + node.toString = $mol_const('<#' + id + '>'); + $mol_dom_render_attributes(node, this.attr_static()); + const events = $mol_wire_async(this.event()); + for (let event_name in events) { + node.addEventListener(event_name, events[event_name], { passive: false }); + } + return node; + } + dom_final() { + this.render(); + const sub = this.sub_visible(); + if (!sub) + return; + for (const el of sub) { + if (el && typeof el === 'object' && 'dom_final' in el) { + el['dom_final'](); + } + } + return this.dom_node(); + } + dom_tree(next) { + const node = this.dom_node(next); + try { + $mol_dom_render_attributes(node, { mol_view_error: null }); + try { + this.render(); + } + finally { + for (let plugin of this.plugins()) { + if (plugin instanceof $mol_plugin) { + plugin.dom_tree(); + } + } + } + this.auto(); + } + catch (error) { + $mol_fail_log(error); + $mol_dom_render_attributes(node, { mol_view_error: error.name || error.constructor.name }); + if (error instanceof Promise) + return node; + if ((error_shower.get(error) ?? this) !== this) + return node; + try { + const message = error.message || error; + node.innerText = message.replace(/^|$/mg, '\xA0\xA0'); + } + catch { } + error_shower.set(error, this); + } + return node; + } + dom_node_actual() { + const node = this.dom_node(); + $mol_dom_render_styles(node, this.style_size()); + const attr = this.attr(); + const style = this.style(); + const fields = this.field(); + $mol_dom_render_attributes(node, attr); + $mol_dom_render_styles(node, style); + return node; + } + auto() { + return null; + } + render() { + const node = this.dom_node_actual(); + const sub = this.sub_visible(); + if (!sub) + return; + const nodes = sub.map(child => { + if (child == null) + return null; + return (child instanceof $mol_view) + ? child.dom_node() + : child instanceof $mol_dom_context.Node + ? child + : String(child); + }); + $mol_dom_render_children(node, nodes); + for (const el of sub) + if (el && typeof el === 'object' && 'dom_tree' in el) + el['dom_tree'](); + $mol_dom_render_fields(node, this.field()); + } + static view_classes() { + const proto = this.prototype; + let current = proto; + const classes = []; + while (current) { + classes.push(current.constructor); + if (!(current instanceof $mol_view)) + break; + current = Object.getPrototypeOf(current); + } + return classes; + } + view_names_owned() { + const names = []; + let owner = $mol_owning_get(this); + if (owner?.host instanceof $mol_view) { + const suffix = owner.task.name.trim(); + const suffix2 = '_' + suffix[0].toLowerCase() + suffix.substring(1); + for (let Class of owner.host.constructor.view_classes()) { + if (suffix in Class.prototype) + names.push(this.$.$mol_func_name(Class) + suffix2); + else + break; + } + for (let prefix of owner.host.view_names_owned()) { + names.push(prefix + suffix2); + } + } + return names; + } + view_names() { + const names = []; + for (let name of this.view_names_owned()) { + if (names.indexOf(name) < 0) + names.push(name); + } + for (let Class of this.constructor.view_classes()) { + const name = this.$.$mol_func_name(Class); + if (!name) + continue; + if (names.indexOf(name) < 0) + names.push(name); + } + return names; + } + attr_static() { + let attrs = {}; + for (let name of this.view_names()) + attrs[name.replace(/\$/g, '').replace(/^(?=\d)/, '_').toLowerCase()] = ''; + return attrs; + } + attr() { + return {}; + } + style_size() { + return { + minHeight: this.minimal_height(), + minWidth: this.minimal_width(), + }; + } + style() { + return {}; + } + field() { + return {}; + } + event() { + return {}; + } + plugins() { + return []; + } + [$mol_dev_format_head]() { + return $mol_dev_format_span({}, $mol_dev_format_native(this)); + } + *view_find(check, path = []) { + if (check(this)) + return yield [...path, this]; + try { + for (const item of this.sub()) { + if (item instanceof $mol_view) { + yield* item.view_find(check, [...path, this]); + } + } + } + catch (error) { + if (error instanceof Promise) + $mol_fail_hidden(error); + $mol_fail_log(error); + } + } + force_render(path) { + const kids = this.sub(); + const index = kids.findIndex(item => { + if (item instanceof $mol_view) { + return path.has(item); + } + else { + return false; + } + }); + if (index >= 0) { + kids[index].force_render(path); + } + } + async ensure_visible(view, align = "start") { + const path = this.view_find(v => v === view).next().value; + this.force_render(new Set(path)); + $mol_wire_fiber.sync(); + view.dom_node().scrollIntoView({ block: align }); + } + } + __decorate([ + $mol_mem + ], $mol_view.prototype, "autorun", null); + __decorate([ + $mol_mem + ], $mol_view.prototype, "focused", null); + __decorate([ + $mol_memo.method + ], $mol_view.prototype, "dom_name", null); + __decorate([ + $mol_mem + ], $mol_view.prototype, "minimal_width", null); + __decorate([ + $mol_mem + ], $mol_view.prototype, "minimal_height", null); + __decorate([ + $mol_mem + ], $mol_view.prototype, "view_rect", null); + __decorate([ + $mol_mem + ], $mol_view.prototype, "dom_node", null); + __decorate([ + $mol_mem + ], $mol_view.prototype, "dom_final", null); + __decorate([ + $mol_mem + ], $mol_view.prototype, "dom_tree", null); + __decorate([ + $mol_mem + ], $mol_view.prototype, "dom_node_actual", null); + __decorate([ + $mol_mem + ], $mol_view.prototype, "render", null); + __decorate([ + $mol_memo.method + ], $mol_view.prototype, "view_names_owned", null); + __decorate([ + $mol_memo.method + ], $mol_view.prototype, "view_names", null); + __decorate([ + $mol_mem_key + ], $mol_view, "Root", null); + __decorate([ + $mol_mem + ], $mol_view, "autobind", null); + __decorate([ + $mol_memo.method + ], $mol_view, "view_classes", null); + $.$mol_view = $mol_view; +})($ || ($ = {})); +//mol/view/view/view.ts +; +"use strict"; +var $; +(function ($) { + $mol_style_attach("mol/view/view/view.css", "[mol_view] {\n\ttransition-property: height, width, min-height, min-width, max-width, max-height, transform;\n\ttransition-duration: .2s;\n\ttransition-timing-function: ease-out;\n\t-webkit-appearance: none;\n\tword-break: break-word;\n\tbox-sizing: border-box;\n\tdisplay: flex;\n\tflex-shrink: 0;\n\tcontain: style;\n\ttab-size: 4;\n}\n\n[mol_view]::selection {\n\tbackground: var(--mol_theme_line);\n}\n\n[mol_view] > * {\n\tword-break: inherit;\n}\n\n[mol_view_root] {\n\tmargin: 0;\n\tpadding: 0;\n\twidth: 100%;\n\theight: 100%;\n\tbox-sizing: border-box;\n\tfont-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n\tfont-size: 1rem;\n\tline-height: 1.5rem;\n\tbackground: var(--mol_theme_back);\n\tcolor: var(--mol_theme_text);\n\tcontain: unset; /** Fixes bg ignoring when applied to body on Chrome */\n}\n\n[mol_view][mol_view_error]:not([mol_view_error=\"Promise\"]) {\n\tbackground-image: repeating-linear-gradient(\n\t\t-45deg,\n\t\t#f92323,\n\t\t#f92323 .5rem,\n\t\t#ff3d3d .5rem,\n\t\t#ff3d3d 1.5rem\n\t);\n\tcolor: black;\n\talign-items: center;\n justify-content: center;\n}\n\n@keyframes mol_view_wait_move {\n\tfrom {\n\t\tbackground-position: 0 0;\n\t}\n\tto {\n\t\tbackground-position: 200vmax 0;\n\t}\n}\n\n@keyframes mol_view_wait_show {\n\tto {\n\t\tbackground-image: repeating-linear-gradient(\n\t\t\t45deg,\n\t\t\thsla( 0 , 0% , 50% , .5 ) 0% ,\n\t\t\thsla( 0 , 0% , 50% , 0 ) 5% ,\n\t\t\thsla( 0 , 0% , 50% , 0 ) 45% ,\n\t\t\thsla( 0 , 0% , 50% , .5 ) 50% ,\n\t\t\thsla( 0 , 0% , 50% , 0 ) 55% ,\n\t\t\thsla( 0 , 0% , 50% , 0 ) 95% ,\n\t\t\thsla( 0 , 0% , 50% , .5 ) 100%\n\t\t);\n\t\tbackground-size: 200vmax 200vmax;\n\t}\n}\n\n[mol_view][mol_view_error=\"Promise\"] {\n\tanimation: mol_view_wait_show .5s .5s linear forwards , mol_view_wait_move 1s linear infinite;\n\topacity: .75;\n}\n"); +})($ || ($ = {})); +//mol/view/view/-css/view.css.ts +; +"use strict"; +var $; +(function ($) { + if ($mol_dom_context.document) { + setTimeout(() => $mol_view.autobind()); + } +})($ || ($ = {})); +//mol/view/view/view.web.ts +; +"use strict"; +var $; +(function ($) { + class $mol_plugin extends $mol_view { + dom_node(next) { + const node = next || $mol_owning_get(this).host.dom_node(); + $mol_dom_render_attributes(node, this.attr_static()); + const events = $mol_wire_async(this.event()); + for (let event_name in events) { + node.addEventListener(event_name, events[event_name], { passive: false }); + } + return node; + } + attr_static() { + return {}; + } + event() { + return {}; + } + render() { + this.dom_node_actual(); + } + } + __decorate([ + $mol_mem + ], $mol_plugin.prototype, "dom_node", null); + $.$mol_plugin = $mol_plugin; +})($ || ($ = {})); +//mol/plugin/plugin.ts +; +"use strict"; +var $; +(function ($) { + class $mol_hotkey extends $mol_plugin { + event() { + return { + ...super.event(), + keydown: (event) => this.keydown(event) + }; + } + key() { + return {}; + } + mod_ctrl() { + return false; + } + mod_alt() { + return false; + } + mod_shift() { + return false; + } + keydown(event) { + if (event !== undefined) + return event; + return null; + } + } + __decorate([ + $mol_mem + ], $mol_hotkey.prototype, "keydown", null); + $.$mol_hotkey = $mol_hotkey; +})($ || ($ = {})); +//mol/hotkey/-view.tree/hotkey.view.tree.ts +; +"use strict"; +var $; +(function ($) { + let $mol_keyboard_code; + (function ($mol_keyboard_code) { + $mol_keyboard_code[$mol_keyboard_code["backspace"] = 8] = "backspace"; + $mol_keyboard_code[$mol_keyboard_code["tab"] = 9] = "tab"; + $mol_keyboard_code[$mol_keyboard_code["enter"] = 13] = "enter"; + $mol_keyboard_code[$mol_keyboard_code["shift"] = 16] = "shift"; + $mol_keyboard_code[$mol_keyboard_code["ctrl"] = 17] = "ctrl"; + $mol_keyboard_code[$mol_keyboard_code["alt"] = 18] = "alt"; + $mol_keyboard_code[$mol_keyboard_code["pause"] = 19] = "pause"; + $mol_keyboard_code[$mol_keyboard_code["capsLock"] = 20] = "capsLock"; + $mol_keyboard_code[$mol_keyboard_code["escape"] = 27] = "escape"; + $mol_keyboard_code[$mol_keyboard_code["space"] = 32] = "space"; + $mol_keyboard_code[$mol_keyboard_code["pageUp"] = 33] = "pageUp"; + $mol_keyboard_code[$mol_keyboard_code["pageDown"] = 34] = "pageDown"; + $mol_keyboard_code[$mol_keyboard_code["end"] = 35] = "end"; + $mol_keyboard_code[$mol_keyboard_code["home"] = 36] = "home"; + $mol_keyboard_code[$mol_keyboard_code["left"] = 37] = "left"; + $mol_keyboard_code[$mol_keyboard_code["up"] = 38] = "up"; + $mol_keyboard_code[$mol_keyboard_code["right"] = 39] = "right"; + $mol_keyboard_code[$mol_keyboard_code["down"] = 40] = "down"; + $mol_keyboard_code[$mol_keyboard_code["insert"] = 45] = "insert"; + $mol_keyboard_code[$mol_keyboard_code["delete"] = 46] = "delete"; + $mol_keyboard_code[$mol_keyboard_code["key0"] = 48] = "key0"; + $mol_keyboard_code[$mol_keyboard_code["key1"] = 49] = "key1"; + $mol_keyboard_code[$mol_keyboard_code["key2"] = 50] = "key2"; + $mol_keyboard_code[$mol_keyboard_code["key3"] = 51] = "key3"; + $mol_keyboard_code[$mol_keyboard_code["key4"] = 52] = "key4"; + $mol_keyboard_code[$mol_keyboard_code["key5"] = 53] = "key5"; + $mol_keyboard_code[$mol_keyboard_code["key6"] = 54] = "key6"; + $mol_keyboard_code[$mol_keyboard_code["key7"] = 55] = "key7"; + $mol_keyboard_code[$mol_keyboard_code["key8"] = 56] = "key8"; + $mol_keyboard_code[$mol_keyboard_code["key9"] = 57] = "key9"; + $mol_keyboard_code[$mol_keyboard_code["A"] = 65] = "A"; + $mol_keyboard_code[$mol_keyboard_code["B"] = 66] = "B"; + $mol_keyboard_code[$mol_keyboard_code["C"] = 67] = "C"; + $mol_keyboard_code[$mol_keyboard_code["D"] = 68] = "D"; + $mol_keyboard_code[$mol_keyboard_code["E"] = 69] = "E"; + $mol_keyboard_code[$mol_keyboard_code["F"] = 70] = "F"; + $mol_keyboard_code[$mol_keyboard_code["G"] = 71] = "G"; + $mol_keyboard_code[$mol_keyboard_code["H"] = 72] = "H"; + $mol_keyboard_code[$mol_keyboard_code["I"] = 73] = "I"; + $mol_keyboard_code[$mol_keyboard_code["J"] = 74] = "J"; + $mol_keyboard_code[$mol_keyboard_code["K"] = 75] = "K"; + $mol_keyboard_code[$mol_keyboard_code["L"] = 76] = "L"; + $mol_keyboard_code[$mol_keyboard_code["M"] = 77] = "M"; + $mol_keyboard_code[$mol_keyboard_code["N"] = 78] = "N"; + $mol_keyboard_code[$mol_keyboard_code["O"] = 79] = "O"; + $mol_keyboard_code[$mol_keyboard_code["P"] = 80] = "P"; + $mol_keyboard_code[$mol_keyboard_code["Q"] = 81] = "Q"; + $mol_keyboard_code[$mol_keyboard_code["R"] = 82] = "R"; + $mol_keyboard_code[$mol_keyboard_code["S"] = 83] = "S"; + $mol_keyboard_code[$mol_keyboard_code["T"] = 84] = "T"; + $mol_keyboard_code[$mol_keyboard_code["U"] = 85] = "U"; + $mol_keyboard_code[$mol_keyboard_code["V"] = 86] = "V"; + $mol_keyboard_code[$mol_keyboard_code["W"] = 87] = "W"; + $mol_keyboard_code[$mol_keyboard_code["X"] = 88] = "X"; + $mol_keyboard_code[$mol_keyboard_code["Y"] = 89] = "Y"; + $mol_keyboard_code[$mol_keyboard_code["Z"] = 90] = "Z"; + $mol_keyboard_code[$mol_keyboard_code["metaLeft"] = 91] = "metaLeft"; + $mol_keyboard_code[$mol_keyboard_code["metaRight"] = 92] = "metaRight"; + $mol_keyboard_code[$mol_keyboard_code["select"] = 93] = "select"; + $mol_keyboard_code[$mol_keyboard_code["numpad0"] = 96] = "numpad0"; + $mol_keyboard_code[$mol_keyboard_code["numpad1"] = 97] = "numpad1"; + $mol_keyboard_code[$mol_keyboard_code["numpad2"] = 98] = "numpad2"; + $mol_keyboard_code[$mol_keyboard_code["numpad3"] = 99] = "numpad3"; + $mol_keyboard_code[$mol_keyboard_code["numpad4"] = 100] = "numpad4"; + $mol_keyboard_code[$mol_keyboard_code["numpad5"] = 101] = "numpad5"; + $mol_keyboard_code[$mol_keyboard_code["numpad6"] = 102] = "numpad6"; + $mol_keyboard_code[$mol_keyboard_code["numpad7"] = 103] = "numpad7"; + $mol_keyboard_code[$mol_keyboard_code["numpad8"] = 104] = "numpad8"; + $mol_keyboard_code[$mol_keyboard_code["numpad9"] = 105] = "numpad9"; + $mol_keyboard_code[$mol_keyboard_code["multiply"] = 106] = "multiply"; + $mol_keyboard_code[$mol_keyboard_code["add"] = 107] = "add"; + $mol_keyboard_code[$mol_keyboard_code["subtract"] = 109] = "subtract"; + $mol_keyboard_code[$mol_keyboard_code["decimal"] = 110] = "decimal"; + $mol_keyboard_code[$mol_keyboard_code["divide"] = 111] = "divide"; + $mol_keyboard_code[$mol_keyboard_code["F1"] = 112] = "F1"; + $mol_keyboard_code[$mol_keyboard_code["F2"] = 113] = "F2"; + $mol_keyboard_code[$mol_keyboard_code["F3"] = 114] = "F3"; + $mol_keyboard_code[$mol_keyboard_code["F4"] = 115] = "F4"; + $mol_keyboard_code[$mol_keyboard_code["F5"] = 116] = "F5"; + $mol_keyboard_code[$mol_keyboard_code["F6"] = 117] = "F6"; + $mol_keyboard_code[$mol_keyboard_code["F7"] = 118] = "F7"; + $mol_keyboard_code[$mol_keyboard_code["F8"] = 119] = "F8"; + $mol_keyboard_code[$mol_keyboard_code["F9"] = 120] = "F9"; + $mol_keyboard_code[$mol_keyboard_code["F10"] = 121] = "F10"; + $mol_keyboard_code[$mol_keyboard_code["F11"] = 122] = "F11"; + $mol_keyboard_code[$mol_keyboard_code["F12"] = 123] = "F12"; + $mol_keyboard_code[$mol_keyboard_code["numLock"] = 144] = "numLock"; + $mol_keyboard_code[$mol_keyboard_code["scrollLock"] = 145] = "scrollLock"; + $mol_keyboard_code[$mol_keyboard_code["semicolon"] = 186] = "semicolon"; + $mol_keyboard_code[$mol_keyboard_code["equals"] = 187] = "equals"; + $mol_keyboard_code[$mol_keyboard_code["comma"] = 188] = "comma"; + $mol_keyboard_code[$mol_keyboard_code["dash"] = 189] = "dash"; + $mol_keyboard_code[$mol_keyboard_code["period"] = 190] = "period"; + $mol_keyboard_code[$mol_keyboard_code["forwardSlash"] = 191] = "forwardSlash"; + $mol_keyboard_code[$mol_keyboard_code["graveAccent"] = 192] = "graveAccent"; + $mol_keyboard_code[$mol_keyboard_code["bracketOpen"] = 219] = "bracketOpen"; + $mol_keyboard_code[$mol_keyboard_code["slashBack"] = 220] = "slashBack"; + $mol_keyboard_code[$mol_keyboard_code["slashBackLeft"] = 226] = "slashBackLeft"; + $mol_keyboard_code[$mol_keyboard_code["bracketClose"] = 221] = "bracketClose"; + $mol_keyboard_code[$mol_keyboard_code["quoteSingle"] = 222] = "quoteSingle"; + })($mol_keyboard_code = $.$mol_keyboard_code || ($.$mol_keyboard_code = {})); +})($ || ($ = {})); +//mol/keyboard/code.ts +; +"use strict"; +var $; +(function ($) { + var $$; + (function ($$) { + class $mol_hotkey extends $.$mol_hotkey { + key() { + return super.key(); + } + keydown(event) { + if (!event) + return; + if (event.defaultPrevented) + return; + let name = $mol_keyboard_code[event.keyCode]; + if (this.mod_ctrl() !== event.ctrlKey) + return; + if (this.mod_alt() !== event.altKey) + return; + if (this.mod_shift() !== event.shiftKey) + return; + const handle = this.key()[name]; + if (handle) + handle(event); + } + } + $$.$mol_hotkey = $mol_hotkey; + })($$ = $.$$ || ($.$$ = {})); +})($ || ($ = {})); +//mol/hotkey/hotkey.view.ts +; +"use strict"; +var $; +(function ($) { + class $mol_string extends $mol_view { + dom_name() { + return "input"; + } + enabled() { + return true; + } + minimal_height() { + return 40; + } + autocomplete() { + return false; + } + selection(val) { + if (val !== undefined) + return val; + return []; + } + auto() { + return [ + this.selection_watcher() + ]; + } + field() { + return { + ...super.field(), + disabled: this.disabled(), + value: this.value_changed(), + placeholder: this.hint_visible(), + spellcheck: this.spellcheck(), + autocomplete: this.autocomplete_native(), + selectionEnd: this.selection_end(), + selectionStart: this.selection_start() + }; + } + attr() { + return { + ...super.attr(), + maxlength: this.length_max(), + type: this.type() + }; + } + event() { + return { + ...super.event(), + input: (event) => this.event_change(event), + keydown: (event) => this.event_key_press(event) + }; + } + plugins() { + return [ + this.Submit() + ]; + } + selection_watcher() { + return null; + } + disabled() { + return false; + } + value(val) { + if (val !== undefined) + return val; + return ""; + } + value_changed(val) { + return this.value(val); + } + hint() { + return ""; + } + hint_visible() { + return this.hint(); + } + spellcheck() { + return false; + } + autocomplete_native() { + return ""; + } + selection_end() { + return 0; + } + selection_start() { + return 0; + } + length_max() { + return Infinity; + } + type(val) { + if (val !== undefined) + return val; + return "text"; + } + event_change(event) { + if (event !== undefined) + return event; + return null; + } + event_key_press(event) { + if (event !== undefined) + return event; + return null; + } + submit(event) { + if (event !== undefined) + return event; + return null; + } + Submit() { + const obj = new this.$.$mol_hotkey(); + obj.key = () => ({ + enter: (event) => this.submit(event) + }); + return obj; + } + } + __decorate([ + $mol_mem + ], $mol_string.prototype, "selection", null); + __decorate([ + $mol_mem + ], $mol_string.prototype, "value", null); + __decorate([ + $mol_mem + ], $mol_string.prototype, "type", null); + __decorate([ + $mol_mem + ], $mol_string.prototype, "event_change", null); + __decorate([ + $mol_mem + ], $mol_string.prototype, "event_key_press", null); + __decorate([ + $mol_mem + ], $mol_string.prototype, "submit", null); + __decorate([ + $mol_mem + ], $mol_string.prototype, "Submit", null); + $.$mol_string = $mol_string; +})($ || ($ = {})); +//mol/string/-view.tree/string.view.tree.ts +; +"use strict"; +var $; +(function ($) { + $mol_style_attach("mol/gap/gap.css", ":root {\n\t--mol_gap_block: .75rem;\n\t--mol_gap_text: .5rem .75rem;\n\t--mol_gap_round: .25rem;\n\t--mol_gap_space: .25rem;\n\t--mol_gap_blur: .5rem;\n}\n"); +})($ || ($ = {})); +//mol/gap/-css/gap.css.ts +; +"use strict"; +var $; +(function ($) { + const { vary } = $mol_style_func; + $.$mol_gap = { + block: vary('--mol_gap_block'), + text: vary('--mol_gap_text'), + round: vary('--mol_gap_round'), + space: vary('--mol_gap_space'), + blur: vary('--mol_gap_blur'), + }; +})($ || ($ = {})); +//mol/gap/gap.ts +; +"use strict"; +var $; +(function ($) { + class $mol_dom_listener extends $mol_object { + _node; + _event; + _handler; + _config; + constructor(_node, _event, _handler, _config = { passive: true }) { + super(); + this._node = _node; + this._event = _event; + this._handler = _handler; + this._config = _config; + this._node.addEventListener(this._event, this._handler, this._config); + } + destructor() { + this._node.removeEventListener(this._event, this._handler, this._config); + super.destructor(); + } + } + $.$mol_dom_listener = $mol_dom_listener; +})($ || ($ = {})); +//mol/dom/listener/listener.ts +; +"use strict"; +var $; +(function ($) { + $mol_style_attach("mol/string/string.view.css", "[mol_string] {\n\tbox-sizing: border-box;\n\toutline-offset: 0;\n\tborder: none;\n\tborder-radius: var(--mol_gap_round);\n\twhite-space: nowrap;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\tpadding: var(--mol_gap_text);\n\ttext-align: left;\n\tposition: relative;\n\tz-index: 0;\n\tfont: inherit;\n\tflex: 1 1 auto;\n\tbackground: transparent;\n\tmin-width: 0;\n\tcolor: inherit;\n\tbackground: var(--mol_theme_card);\n}\n\n[mol_string]:disabled:not(:placeholder-shown) {\n\tbackground-color: transparent;\n\tcolor: var(--mol_theme_text);\n}\n\n[mol_string]:hover:where(:not(:disabled)) {\n\tbackground: var(--mol_theme_hover);\n}\n\n[mol_string]:focus {\n\toutline: none;\n\tz-index: 1;\n\tbackground: var(--mol_theme_field);\n\tcolor: var(--mol_theme_text);\n\tbox-shadow: inset 0 0 0 1px var(--mol_theme_focus);\n}\n\n[mol_string]::-ms-clear {\n\tdisplay: none;\n}\n"); +})($ || ($ = {})); +//mol/string/-css/string.view.css.ts +; +"use strict"; +var $; +(function ($) { + var $$; + (function ($$) { + class $mol_string extends $.$mol_string { + event_change(next) { + if (!next) + return; + this.value(next.target.value); + this.selection_change(next); + } + hint_visible() { + return (this.enabled() ? this.hint() : '') || ' '; + } + disabled() { + return !this.enabled(); + } + autocomplete_native() { + return this.autocomplete() ? 'on' : 'off'; + } + selection_watcher() { + return new $mol_dom_listener(this.$.$mol_dom_context.document, 'selectionchange', event => this.selection_change(event)); + } + selection_change(event) { + const el = this.dom_node(); + this.selection([ + el.selectionStart, + el.selectionEnd, + ]); + } + selection_start() { + return this.selection()[0]; + } + selection_end() { + return this.selection()[1]; + } + } + __decorate([ + $mol_mem + ], $mol_string.prototype, "selection_watcher", null); + $$.$mol_string = $mol_string; + })($$ = $.$$ || ($.$$ = {})); +})($ || ($ = {})); +//mol/string/string.view.ts +; +"use strict"; +var $; +(function ($) { + class $mol_speck extends $mol_view { + attr() { + return { + ...super.attr(), + mol_theme: "$mol_theme_accent" + }; + } + style() { + return { + ...super.style(), + minHeight: "1em" + }; + } + sub() { + return [ + this.value() + ]; + } + value() { + return null; + } + } + $.$mol_speck = $mol_speck; +})($ || ($ = {})); +//mol/speck/-view.tree/speck.view.tree.ts +; +"use strict"; +var $; +(function ($) { + $mol_style_attach("mol/speck/speck.view.css", "[mol_speck] {\n\tfont-size: .625rem;\n\tborder-radius: 1rem;\n\tmargin: -0.5rem -0.25rem;\n\talign-self: flex-start;\n\tmin-height: 1em;\n\tmin-width: .5em;\n\tvertical-align: sub;\n\tpadding: .25em .5em;\n\tposition: absolute;\n\tz-index: 2;\n\ttext-align: center;\n\tline-height: 1;\n\tdisplay: inline-block;\n\twhite-space: nowrap;\n\ttext-overflow: ellipsis;\n}\n"); +})($ || ($ = {})); +//mol/speck/-css/speck.view.css.ts +; +"use strict"; +var $; +(function ($) { + class $mol_button extends $mol_view { + enabled() { + return true; + } + click(event) { + if (event !== undefined) + return event; + return null; + } + event_click(event) { + if (event !== undefined) + return event; + return null; + } + event() { + return { + ...super.event(), + click: (event) => this.event_activate(event), + keydown: (event) => this.event_key_press(event) + }; + } + attr() { + return { + ...super.attr(), + disabled: this.disabled(), + role: "button", + tabindex: this.tab_index(), + title: this.hint() + }; + } + sub() { + return [ + this.title() + ]; + } + Speck() { + const obj = new this.$.$mol_speck(); + obj.value = () => this.error(); + return obj; + } + event_activate(event) { + if (event !== undefined) + return event; + return null; + } + event_key_press(event) { + if (event !== undefined) + return event; + return null; + } + disabled() { + return false; + } + tab_index() { + return 0; + } + hint() { + return ""; + } + error() { + return ""; + } + } + __decorate([ + $mol_mem + ], $mol_button.prototype, "click", null); + __decorate([ + $mol_mem + ], $mol_button.prototype, "event_click", null); + __decorate([ + $mol_mem + ], $mol_button.prototype, "Speck", null); + __decorate([ + $mol_mem + ], $mol_button.prototype, "event_activate", null); + __decorate([ + $mol_mem + ], $mol_button.prototype, "event_key_press", null); + $.$mol_button = $mol_button; +})($ || ($ = {})); +//mol/button/-view.tree/button.view.tree.ts +; +"use strict"; +var $; +(function ($) { + $mol_style_attach("mol/button/button.view.css", "[mol_button] {\n\tborder: none;\n\tfont: inherit;\n\tdisplay: inline-flex;\n\tflex-shrink: 0;\n\ttext-decoration: inherit;\n\tcursor: inherit;\n\tposition: relative;\n\tbox-sizing: border-box;\n\tword-break: normal;\n\tcursor: default;\n\tuser-select: none;\n\tborder-radius: var(--mol_gap_round);\n}\n\n[mol_button]:focus {\n\toutline: none;\n}\n"); +})($ || ($ = {})); +//mol/button/-css/button.view.css.ts +; +"use strict"; +var $; +(function ($) { + var $$; + (function ($$) { + class $mol_button extends $.$mol_button { + status(next = [null]) { return next; } + disabled() { + return !this.enabled(); + } + event_activate(next) { + if (!next) + return; + if (!this.enabled()) + return; + try { + this.event_click(next); + this.click(next); + this.status([null]); + } + catch (error) { + this.status([error]); + $mol_fail_hidden(error); + } + } + event_key_press(event) { + if (event.keyCode === $mol_keyboard_code.enter) { + return this.event_activate(event); + } + } + tab_index() { + return this.enabled() ? super.tab_index() : -1; + } + error() { + const [error] = this.status(); + if (!error) + return ''; + if (error instanceof Promise) { + return $mol_fail_hidden(error); + } + return String(error.message ?? error); + } + sub_visible() { + return [ + ...this.error() ? [this.Speck()] : [], + ...this.sub(), + ]; + } + } + __decorate([ + $mol_mem + ], $mol_button.prototype, "status", null); + $$.$mol_button = $mol_button; + })($$ = $.$$ || ($.$$ = {})); +})($ || ($ = {})); +//mol/button/button.view.ts +; +"use strict"; +//mol/type/result/result.ts +; +"use strict"; +//mol/type/error/error.ts +; +"use strict"; +//mol/type/override/override.ts +; +"use strict"; +//mol/style/properties/properties.ts +; +"use strict"; +//mol/style/pseudo/class.ts +; +"use strict"; +//mol/style/pseudo/element.ts +; +"use strict"; +//mol/style/guard/guard.ts +; +"use strict"; +var $; +(function ($) { + function $mol_style_sheet(Component, config0) { + let rules = []; + const block = $mol_dom_qname($mol_ambient({}).$mol_func_name(Component)); + const kebab = (name) => name.replace(/[A-Z]/g, letter => '-' + letter.toLowerCase()); + const make_class = (prefix, path, config) => { + const props = []; + const selector = (prefix, path) => { + if (path.length === 0) + return prefix || `[${block}]`; + let res = `[${block}_${path.join('_')}]`; + if (prefix) + res = prefix + ' :where(' + res + ')'; + return res; + }; + for (const key of Object.keys(config).reverse()) { + if (/^[a-z]/.test(key)) { + const addProp = (keys, val) => { + if (Array.isArray(val)) { + if (val[0] && [Array, Object].includes(val[0].constructor)) { + val = val.map(v => { + return Object.entries(v).map(([n, a]) => { + if (a === true) + return kebab(n); + if (a === false) + return null; + return String(a); + }).filter(Boolean).join(' '); + }).join(','); + } + else { + val = val.join(' '); + } + props.push(`\t${keys.join('-')}: ${val};\n`); + } + else if (val.constructor === Object) { + for (let suffix in val) { + addProp([...keys, kebab(suffix)], val[suffix]); + } + } + else { + props.push(`\t${keys.join('-')}: ${val};\n`); + } + }; + addProp([kebab(key)], config[key]); + } + else if (/^[A-Z]/.test(key)) { + make_class(prefix, [...path, key.toLowerCase()], config[key]); + } + else if (key[0] === '$') { + make_class(selector(prefix, path) + ' :where([' + $mol_dom_qname(key) + '])', [], config[key]); + } + else if (key === '>') { + const types = config[key]; + for (let type in types) { + make_class(selector(prefix, path) + ' > :where([' + $mol_dom_qname(type) + '])', [], types[type]); + } + } + else if (key === '@') { + const attrs = config[key]; + for (let name in attrs) { + for (let val in attrs[name]) { + make_class(selector(prefix, path) + ':where([' + name + '=' + JSON.stringify(val) + '])', [], attrs[name][val]); + } + } + } + else if (key === '@media') { + const media = config[key]; + for (let query in media) { + rules.push('}\n'); + make_class(prefix, path, media[query]); + rules.push(`${key} ${query} {\n`); + } + } + else { + make_class(selector(prefix, path) + key, [], config[key]); + } + } + if (props.length) { + rules.push(`${selector(prefix, path)} {\n${props.reverse().join('')}}\n`); + } + }; + make_class('', [], config0); + return rules.reverse().join(''); + } + $.$mol_style_sheet = $mol_style_sheet; +})($ || ($ = {})); +//mol/style/sheet/sheet.ts +; +"use strict"; +var $; +(function ($) { + function $mol_style_define(Component, config) { + return $mol_style_attach(Component.name, $mol_style_sheet(Component, config)); + } + $.$mol_style_define = $mol_style_define; +})($ || ($ = {})); +//mol/style/define/define.ts +; +"use strict"; +var $; +(function ($) { + class $mol_svg extends $mol_view { + dom_name() { + return "svg"; + } + dom_name_space() { + return "http://www.w3.org/2000/svg"; + } + font_size() { + return 16; + } + font_family() { + return ""; + } + style_size() { + return {}; + } + } + $.$mol_svg = $mol_svg; +})($ || ($ = {})); +//mol/svg/-view.tree/svg.view.tree.ts +; +"use strict"; +var $; +(function ($) { + class $mol_after_timeout extends $mol_object2 { + delay; + task; + id; + constructor(delay, task) { + super(); + this.delay = delay; + this.task = task; + this.id = setTimeout(task, delay); + } + destructor() { + clearTimeout(this.id); + } + } + $.$mol_after_timeout = $mol_after_timeout; +})($ || ($ = {})); +//mol/after/timeout/timeout.ts +; +"use strict"; +var $; +(function ($) { + class $mol_state_time extends $mol_object { + static task(precision, reset) { + if (precision) { + return new $mol_after_timeout(precision, () => this.task(precision, null)); + } + else { + return new $mol_after_frame(() => this.task(precision, null)); + } + } + static now(precision) { + this.task(precision); + return Date.now(); + } + } + __decorate([ + $mol_mem_key + ], $mol_state_time, "task", null); + __decorate([ + $mol_mem_key + ], $mol_state_time, "now", null); + $.$mol_state_time = $mol_state_time; +})($ || ($ = {})); +//mol/state/time/time.ts +; +"use strict"; +var $; +(function ($) { + var $$; + (function ($$) { + class $mol_svg extends $.$mol_svg { + computed_style() { + const win = this.$.$mol_dom_context; + const style = win.getComputedStyle(this.dom_node()); + if (!style['font-size']) + $mol_state_time.now(0); + return style; + } + font_size() { + return parseInt(this.computed_style()['font-size']) || 16; + } + font_family() { + return this.computed_style()['font-family']; + } + } + __decorate([ + $mol_mem + ], $mol_svg.prototype, "computed_style", null); + __decorate([ + $mol_mem + ], $mol_svg.prototype, "font_size", null); + __decorate([ + $mol_mem + ], $mol_svg.prototype, "font_family", null); + $$.$mol_svg = $mol_svg; + })($$ = $.$$ || ($.$$ = {})); +})($ || ($ = {})); +//mol/svg/svg.view.ts +; +"use strict"; +var $; +(function ($) { + class $mol_svg_root extends $mol_svg { + dom_name() { + return "svg"; + } + attr() { + return { + ...super.attr(), + viewBox: this.view_box(), + preserveAspectRatio: this.aspect() + }; + } + view_box() { + return "0 0 100 100"; + } + aspect() { + return "xMidYMid"; + } + } + $.$mol_svg_root = $mol_svg_root; +})($ || ($ = {})); +//mol/svg/root/-view.tree/root.view.tree.ts +; +"use strict"; +var $; +(function ($) { + $mol_style_attach("mol/svg/root/root.view.css", "[mol_svg_root] {\n\toverflow: hidden;\n}\n"); +})($ || ($ = {})); +//mol/svg/root/-css/root.view.css.ts +; +"use strict"; +var $; +(function ($) { + class $mol_svg_path extends $mol_svg { + dom_name() { + return "path"; + } + attr() { + return { + ...super.attr(), + d: this.geometry() + }; + } + geometry() { + return ""; + } + } + $.$mol_svg_path = $mol_svg_path; +})($ || ($ = {})); +//mol/svg/path/-view.tree/path.view.tree.ts +; +"use strict"; +var $; +(function ($) { + class $mol_icon extends $mol_svg_root { + view_box() { + return "0 0 24 24"; + } + minimal_width() { + return 16; + } + minimal_height() { + return 16; + } + sub() { + return [ + this.Path() + ]; + } + path() { + return ""; + } + Path() { + const obj = new this.$.$mol_svg_path(); + obj.geometry = () => this.path(); + return obj; + } + } + __decorate([ + $mol_mem + ], $mol_icon.prototype, "Path", null); + $.$mol_icon = $mol_icon; +})($ || ($ = {})); +//mol/icon/-view.tree/icon.view.tree.ts +; +"use strict"; +var $; +(function ($) { + $mol_style_attach("mol/icon/icon.view.css", "[mol_icon] {\n\tfill: currentColor;\n\tstroke: none;\n\twidth: 1rem;\n\theight: 1rem;\n\tflex: 0 0 auto;\n\tvertical-align: top;\n\tmargin: .25rem 0;\n\tdisplay: inline-block;\n\tfilter: drop-shadow(0px 1px 1px var(--mol_theme_back));\n\ttransform-origin: center;\n}\n\n[mol_icon_path] {\n\ttransform-origin: center;\n}\n"); +})($ || ($ = {})); +//mol/icon/-css/icon.view.css.ts +; +"use strict"; +var $; +(function ($) { + class $mol_link extends $mol_view { + dom_name() { + return "a"; + } + attr() { + return { + ...super.attr(), + href: this.uri(), + title: this.hint(), + target: this.target(), + download: this.file_name(), + mol_link_current: this.current() + }; + } + sub() { + return [ + this.title() + ]; + } + arg() { + return {}; + } + event() { + return { + ...super.event(), + click: (event) => this.click(event) + }; + } + uri() { + return ""; + } + hint() { + return ""; + } + target() { + return "_self"; + } + file_name() { + return ""; + } + current() { + return false; + } + event_click(event) { + if (event !== undefined) + return event; + return null; + } + click(event) { + return this.event_click(event); + } + } + __decorate([ + $mol_mem + ], $mol_link.prototype, "event_click", null); + $.$mol_link = $mol_link; +})($ || ($ = {})); +//mol/link/-view.tree/link.view.tree.ts +; +"use strict"; +var $; +(function ($) { + class $mol_state_arg extends $mol_object { + prefix; + static href(next) { + if (next === undefined) { + next = $mol_dom_context.location.href; + } + else if (!/^about:srcdoc/.test(next)) { + new $mol_after_frame(() => { + const next = this.href(); + const prev = $mol_dom_context.location.href; + if (next === prev) + return; + const history = $mol_dom_context.history; + history.replaceState(history.state, $mol_dom_context.document.title, next); + }); + } + if ($mol_dom_context.parent !== $mol_dom_context.self) { + $mol_dom_context.parent.postMessage(['hashchange', next], '*'); + } + return next; + } + static href_normal() { + return this.link({}); + } + static href_absolute() { + return new URL(this.href(), $mol_dom_context.location.href).toString(); + } + static dict(next) { + var href = this.href(next && this.make_link(next)).split(/#!?/)[1] || ''; + var chunks = href.split(this.separator); + var params = {}; + chunks.forEach(chunk => { + if (!chunk) + return; + var vals = chunk.split('=').map(decodeURIComponent); + params[vals.shift()] = vals.join('='); + }); + return params; + } + static dict_cut(except) { + const dict = this.dict(); + const cut = {}; + for (const key in dict) { + if (except.indexOf(key) >= 0) + continue; + cut[key] = dict[key]; + } + return cut; + } + static value(key, next) { + const nextDict = (next === void 0) ? void 0 : { ...this.dict(), [key]: next }; + const next2 = this.dict(nextDict)[key]; + return (next2 == null) ? null : next2; + } + static link(next) { + return this.make_link({ + ...this.dict_cut(Object.keys(next)), + ...next, + }); + } + static prolog = '!'; + static separator = '/'; + static make_link(next) { + const chunks = []; + for (let key in next) { + if (null == next[key]) + continue; + const val = next[key]; + chunks.push([key].concat(val ? [val] : []).map(this.encode).join('=')); + } + return new URL('#' + this.prolog + chunks.join(this.separator), this.href_absolute()).toString(); + } + static encode(str) { + return encodeURIComponent(str).replace(/\(/g, '%28').replace(/\)/g, '%29'); + } + constructor(prefix = '') { + super(); + this.prefix = prefix; + } + value(key, next) { + return this.constructor.value(this.prefix + key, next); + } + sub(postfix) { + return new this.constructor(this.prefix + postfix + '.'); + } + link(next) { + var prefix = this.prefix; + var dict = {}; + for (var key in next) { + dict[prefix + key] = next[key]; + } + return this.constructor.link(dict); + } + } + __decorate([ + $mol_mem + ], $mol_state_arg, "href", null); + __decorate([ + $mol_mem + ], $mol_state_arg, "href_normal", null); + __decorate([ + $mol_mem + ], $mol_state_arg, "href_absolute", null); + __decorate([ + $mol_mem + ], $mol_state_arg, "dict", null); + __decorate([ + $mol_mem_key + ], $mol_state_arg, "dict_cut", null); + __decorate([ + $mol_mem_key + ], $mol_state_arg, "value", null); + __decorate([ + $mol_mem_key + ], $mol_state_arg, "make_link", null); + $.$mol_state_arg = $mol_state_arg; + const $mol_state_arg_change = (event) => { + $mol_state_arg.href($mol_dom_context.location.href); + }; + self.addEventListener('hashchange', $mol_state_arg_change); +})($ || ($ = {})); +//mol/state/arg/arg.web.ts +; +"use strict"; +var $; +(function ($) { + const { rem } = $mol_style_unit; + const { scale } = $mol_style_func; + $mol_style_define($mol_link, { + textDecoration: 'none', + color: $mol_theme.control, + stroke: 'currentcolor', + cursor: 'pointer', + padding: $mol_gap.text, + boxSizing: 'border-box', + position: 'relative', + minWidth: rem(2.5), + gap: $mol_gap.space, + border: { + radius: $mol_gap.round, + }, + ':hover': { + background: { + color: $mol_theme.hover, + }, + $mol_icon: { + transform: 'scale(1.5)', + }, + }, + ':focus': { + outline: 'none', + background: { + color: $mol_theme.hover, + }, + $mol_icon: { + transform: 'scale(1.5)', + }, + }, + ':focus-within': { + outline: 'none', + background: { + color: $mol_theme.hover, + } + }, + '@': { + mol_link_current: { + 'true': { + color: $mol_theme.current, + textShadow: '0 0', + } + } + }, + }); +})($ || ($ = {})); +//mol/link/link.view.css.ts +; +"use strict"; +var $; +(function ($) { + var $$; + (function ($$) { + class $mol_link extends $.$mol_link { + uri() { + const arg = this.arg(); + const uri = new this.$.$mol_state_arg(this.state_key()).link(arg); + if (uri !== this.$.$mol_state_arg.href()) + return uri; + const arg2 = {}; + for (let i in arg) + arg2[i] = null; + return new this.$.$mol_state_arg(this.state_key()).link(arg2); + } + uri_native() { + const base = this.$.$mol_state_arg.href(); + return new URL(this.uri(), base); + } + current() { + const base = this.$.$mol_state_arg.href_normal(); + const target = this.uri_native().toString(); + if (base === target) + return true; + const args = this.arg(); + const keys = Object.keys(args).filter(key => args[key] != null); + if (keys.length === 0) + return false; + for (const key of keys) { + if (this.$.$mol_state_arg.value(key) !== args[key]) + return false; + } + return true; + } + file_name() { + return null; + } + minimal_height() { + return Math.max(super.minimal_height(), 24); + } + target() { + return (this.uri_native().origin === $mol_dom_context.location.origin) ? '_self' : '_blank'; + } + } + __decorate([ + $mol_mem + ], $mol_link.prototype, "uri", null); + __decorate([ + $mol_mem + ], $mol_link.prototype, "uri_native", null); + __decorate([ + $mol_mem + ], $mol_link.prototype, "current", null); + $$.$mol_link = $mol_link; + })($$ = $.$$ || ($.$$ = {})); +})($ || ($ = {})); +//mol/link/link.view.ts +; +"use strict"; +var $; +(function ($) { + class $mol_button_typed extends $mol_button { + minimal_height() { + return 40; + } + minimal_width() { + return 40; + } + } + $.$mol_button_typed = $mol_button_typed; +})($ || ($ = {})); +//mol/button/typed/-view.tree/typed.view.tree.ts +; +"use strict"; +var $; +(function ($) { + $mol_style_attach("mol/button/typed/typed.view.css", "[mol_button_typed] {\n\talign-content: center;\n\talign-items: center;\n\tpadding: var(--mol_gap_text);\n\tborder-radius: var(--mol_gap_round);\n\tgap: var(--mol_gap_space);\n\tuser-select: none;\n\tcursor: pointer;\n}\n\n[mol_button_typed][disabled] {\n\tpointer-events: none;\n}\n\n[mol_button_typed]:hover ,\n[mol_button_typed]:focus {\n\tbackground-color: var(--mol_theme_hover);\n}\n\n[mol_button_typed]:hover [mol_icon] ,\n[mol_button_typed]:focus [mol_icon] {\n\ttransform: scale(1.5);\n}\n"); +})($ || ($ = {})); +//mol/button/typed/-css/typed.view.css.ts +; +"use strict"; +var $; +(function ($) { + class $mol_button_minor extends $mol_button_typed { + } + $.$mol_button_minor = $mol_button_minor; +})($ || ($ = {})); +//mol/button/minor/-view.tree/minor.view.tree.ts +; +"use strict"; +var $; +(function ($) { + $mol_style_attach("mol/button/minor/minor.view.css", "[mol_button_minor] {\n\tcolor: var(--mol_theme_control);\n}\n\n[mol_button_minor][disabled] {\n\tcolor: var(--mol_theme_shade);\n}\n"); +})($ || ($ = {})); +//mol/button/minor/-css/minor.view.css.ts +; +"use strict"; +var $; +(function ($) { + class $mol_check extends $mol_button_minor { + attr() { + return { + ...super.attr(), + mol_check_checked: this.checked(), + "aria-checked": this.checked(), + role: "checkbox" + }; + } + sub() { + return [ + this.Icon(), + this.label() + ]; + } + checked(val) { + if (val !== undefined) + return val; + return false; + } + Icon() { + return null; + } + title() { + return ""; + } + Title() { + const obj = new this.$.$mol_view(); + obj.sub = () => [ + this.title() + ]; + return obj; + } + label() { + return [ + this.Title() + ]; + } + } + __decorate([ + $mol_mem + ], $mol_check.prototype, "checked", null); + __decorate([ + $mol_mem + ], $mol_check.prototype, "Title", null); + $.$mol_check = $mol_check; +})($ || ($ = {})); +//mol/check/-view.tree/check.view.tree.ts +; +"use strict"; +var $; +(function ($) { + $mol_style_attach("mol/check/check.css", "[mol_check] {\n\tflex: 0 0 auto;\n\tjustify-content: flex-start;\n\talign-content: center;\n\talign-items: flex-start;\n\tborder: none;\n\tfont-weight: inherit;\n\tbox-shadow: none;\n\ttext-align: left;\n\tpadding: var(--mol_gap_text);\n\tdisplay: inline-flex;\n\tflex-wrap: nowrap;\n}\n\n[mol_check_title] {\n\tflex-shrink: 1;\n}\n"); +})($ || ($ = {})); +//mol/check/-css/check.css.ts +; +"use strict"; +var $; +(function ($) { + var $$; + (function ($$) { + class $mol_check extends $.$mol_check { + click(next) { + if (next?.defaultPrevented) + return; + this.checked(!this.checked()); + if (next) + next.preventDefault(); + } + sub() { + return [ + ...$mol_maybe(this.Icon()), + ...this.label(), + ]; + } + label() { + return this.title() ? super.label() : []; + } + } + $$.$mol_check = $mol_check; + })($$ = $.$$ || ($.$$ = {})); +})($ || ($ = {})); +//mol/check/check.view.ts +; +"use strict"; +var $; +(function ($) { + class $mol_scroll extends $mol_view { + scroll_top(val) { + if (val !== undefined) + return val; + return 0; + } + scroll_left(val) { + if (val !== undefined) + return val; + return 0; + } + field() { + return { + ...super.field(), + tabIndex: this.tabindex() + }; + } + event() { + return { + ...super.event(), + scroll: (event) => this.event_scroll(event) + }; + } + tabindex() { + return -1; + } + event_scroll(event) { + if (event !== undefined) + return event; + return null; + } + } + __decorate([ + $mol_mem + ], $mol_scroll.prototype, "scroll_top", null); + __decorate([ + $mol_mem + ], $mol_scroll.prototype, "scroll_left", null); + __decorate([ + $mol_mem + ], $mol_scroll.prototype, "event_scroll", null); + $.$mol_scroll = $mol_scroll; +})($ || ($ = {})); +//mol/scroll/-view.tree/scroll.view.tree.ts +; +"use strict"; +var $; +(function ($) { + class $mol_print extends $mol_object { + static before() { + return new $mol_dom_listener(this.$.$mol_dom_context, 'beforeprint', () => { + this.active(true); + }); + } + static after() { + return new $mol_dom_listener(this.$.$mol_dom_context, 'afterprint', () => { + this.active(false); + }); + } + static active(next) { + this.before(); + this.after(); + return next || false; + } + } + __decorate([ + $mol_mem + ], $mol_print, "before", null); + __decorate([ + $mol_mem + ], $mol_print, "after", null); + __decorate([ + $mol_mem + ], $mol_print, "active", null); + $.$mol_print = $mol_print; +})($ || ($ = {})); +//mol/print/print.ts +; +"use strict"; +var $; +(function ($) { + var $$; + (function ($$) { + const { per, rem, px } = $mol_style_unit; + $mol_style_define($mol_scroll, { + overflow: 'auto', + }); + $mol_style_define($mol_scroll, { + display: 'flex', + overflow: 'overlay', + flex: { + direction: 'column', + grow: 1, + shrink: 1, + basis: 0, + }, + outline: 'none', + alignSelf: 'stretch', + boxSizing: 'border-box', + willChange: 'scroll-position', + maxHeight: per(100), + maxWidth: per(100), + webkitOverflowScrolling: 'touch', + contain: 'content', + '>': { + $mol_view: { + transform: 'translateZ(0)', + }, + }, + scrollbar: { + color: [$mol_theme.line, 'transparent'], + width: 'thin', + }, + '::-webkit-scrollbar': { + width: rem(.25), + height: rem(.25), + }, + ':hover': { + '::-webkit-scrollbar': { + width: rem(.5), + height: rem(.5), + }, + }, + '::-webkit-scrollbar-corner': { + background: { + color: $mol_theme.line, + }, + }, + '::-webkit-scrollbar-track': { + background: { + color: 'transparent', + }, + }, + '::-webkit-scrollbar-thumb': { + background: { + color: $mol_theme.line, + }, + border: { + radius: $mol_gap.round, + }, + }, + '@media': { + 'print': { + overflow: 'visible', + contain: 'none', + maxHeight: 'unset', + }, + }, + }); + })($$ = $.$$ || ($.$$ = {})); +})($ || ($ = {})); +//mol/scroll/scroll.view.css.ts +; +"use strict"; +var $; +(function ($) { + var $$; + (function ($$) { + class $mol_scroll extends $.$mol_scroll { + scroll_top(next, cache) { + const el = this.dom_node(); + if (next !== undefined && !cache) + el.scrollTop = next; + return el.scrollTop; + } + scroll_left(next, cache) { + const el = this.dom_node(); + if (next !== undefined && !cache) + el.scrollLeft = next; + return el.scrollLeft; + } + event_scroll(next) { + const el = this.dom_node(); + this.scroll_left(el.scrollLeft, 'cache'); + this.scroll_top(el.scrollTop, 'cache'); + } + minimal_height() { + return this.$.$mol_print.active() ? null : 0; + } + minimal_width() { + return this.$.$mol_print.active() ? null : 0; + } + } + __decorate([ + $mol_mem + ], $mol_scroll.prototype, "scroll_top", null); + __decorate([ + $mol_mem + ], $mol_scroll.prototype, "scroll_left", null); + $$.$mol_scroll = $mol_scroll; + })($$ = $.$$ || ($.$$ = {})); +})($ || ($ = {})); +//mol/scroll/scroll.view.ts +; +"use strict"; +var $; +(function ($) { + class $mol_paragraph extends $mol_view { + line_height() { + return 24; + } + letter_width() { + return 7; + } + width_limit() { + return Infinity; + } + sub() { + return [ + this.title() + ]; + } + } + $.$mol_paragraph = $mol_paragraph; +})($ || ($ = {})); +//mol/paragraph/-view.tree/paragraph.view.tree.ts +; +"use strict"; +var $; +(function ($) { + $mol_style_attach("mol/paragraph/paragraph.view.css", ":where([mol_paragraph]) {\n\tmargin: 0;\n\tmax-width: 100%;\n}\n"); +})($ || ($ = {})); +//mol/paragraph/-css/paragraph.view.css.ts +; +"use strict"; +var $; +(function ($) { + var $$; + (function ($$) { + class $mol_paragraph extends $.$mol_paragraph { + maximal_width() { + let width = 0; + const letter = this.letter_width(); + for (const kid of this.sub()) { + if (!kid) + continue; + if (kid instanceof $mol_view) { + width += kid.maximal_width(); + } + else if (typeof kid !== 'object') { + width += String(kid).length * letter; + } + } + return width; + } + width_limit() { + return this.$.$mol_window.size().width; + } + minimal_width() { + return this.letter_width(); + } + row_width() { + return Math.max(Math.min(this.width_limit(), this.maximal_width()), this.letter_width()); + } + minimal_height() { + return Math.max(1, Math.ceil(this.maximal_width() / this.row_width())) * this.line_height(); + } + } + __decorate([ + $mol_mem + ], $mol_paragraph.prototype, "maximal_width", null); + __decorate([ + $mol_mem + ], $mol_paragraph.prototype, "row_width", null); + __decorate([ + $mol_mem + ], $mol_paragraph.prototype, "minimal_height", null); + $$.$mol_paragraph = $mol_paragraph; + })($$ = $.$$ || ($.$$ = {})); +})($ || ($ = {})); +//mol/paragraph/paragraph.view.ts +; +"use strict"; +var $; +(function ($) { + class $mol_list extends $mol_view { + render_visible_only() { + return true; + } + render_over() { + return 0; + } + sub() { + return this.rows(); + } + Empty() { + const obj = new this.$.$mol_view(); + return obj; + } + Gap_before() { + const obj = new this.$.$mol_view(); + obj.style = () => ({ + paddingTop: this.gap_before() + }); + return obj; + } + Gap_after() { + const obj = new this.$.$mol_view(); + obj.style = () => ({ + paddingTop: this.gap_after() + }); + return obj; + } + view_window() { + return [ + 0, + 0 + ]; + } + rows() { + return []; + } + gap_before() { + return 0; + } + gap_after() { + return 0; + } + } + __decorate([ + $mol_mem + ], $mol_list.prototype, "Empty", null); + __decorate([ + $mol_mem + ], $mol_list.prototype, "Gap_before", null); + __decorate([ + $mol_mem + ], $mol_list.prototype, "Gap_after", null); + $.$mol_list = $mol_list; +})($ || ($ = {})); +//mol/list/-view.tree/list.view.tree.ts +; +"use strict"; +var $; +(function ($) { + let cache = null; + function $mol_support_css_overflow_anchor() { + return cache ?? (cache = this.$mol_dom_context.CSS?.supports('overflow-anchor:auto') ?? false); + } + $.$mol_support_css_overflow_anchor = $mol_support_css_overflow_anchor; +})($ || ($ = {})); +//mol/support/css/css.ts +; +"use strict"; +var $; +(function ($) { + function $mol_wire_probe(task, next) { + const warm = $mol_wire_fiber.warm; + try { + $mol_wire_fiber.warm = false; + return task(); + } + finally { + $mol_wire_fiber.warm = warm; + } + } + $.$mol_wire_probe = $mol_wire_probe; +})($ || ($ = {})); +//mol/wire/probe/probe.ts +; +"use strict"; +var $; +(function ($) { + $.$mol_mem_cached = $mol_wire_probe; +})($ || ($ = {})); +//mol/mem/cached/cached.ts +; +"use strict"; +var $; +(function ($) { + $mol_style_attach("mol/list/list.view.css", "[mol_list] {\n\twill-change: contents;\n\tdisplay: flex;\n\tflex-direction: column;\n\tflex-shrink: 0;\n\tmax-width: 100%;\n\t/* display: flex;\n\talign-items: stretch;\n\talign-content: stretch; */\n\ttransition: none;\n\tmin-height: .5rem;\n}\n\n[mol_list_gap_before] ,\n[mol_list_gap_after] {\n\tdisplay: block !important;\n\tflex: none;\n\ttransition: none;\n\toverflow-anchor: none;\n}\n"); +})($ || ($ = {})); +//mol/list/-css/list.view.css.ts +; +"use strict"; +var $; +(function ($) { + var $$; + (function ($$) { + class $mol_list extends $.$mol_list { + sub() { + const rows = this.rows(); + return (rows.length === 0) ? [this.Empty()] : rows; + } + render_visible_only() { + return this.$.$mol_support_css_overflow_anchor(); + } + view_window(next) { + const kids = this.sub(); + if (kids.length < 3) + return [0, kids.length]; + if (this.$.$mol_print.active()) + return [0, kids.length]; + const rect = this.view_rect(); + if (next) + return next; + let [min, max] = $mol_mem_cached(() => this.view_window()) ?? [0, 0]; + let max2 = max = Math.min(max, kids.length); + let min2 = min = Math.max(0, Math.min(min, max - 1)); + const anchoring = this.render_visible_only(); + const window_height = this.$.$mol_window.size().height + 40; + const over = Math.ceil(window_height * this.render_over()); + const limit_top = -over; + const limit_bottom = window_height + over; + const gap_before = $mol_mem_cached(() => this.gap_before()) ?? 0; + const gap_after = $mol_mem_cached(() => this.gap_after()) ?? 0; + let top = Math.ceil(rect?.top ?? 0) + gap_before; + let bottom = Math.ceil(rect?.bottom ?? 0) - gap_after; + if (top <= limit_top && bottom >= limit_bottom) { + return [min2, max2]; + } + if (anchoring && ((bottom < limit_top) || (top > limit_bottom))) { + min = 0; + top = Math.ceil(rect?.top ?? 0); + while (min < (kids.length - 1)) { + const height = kids[min].minimal_height(); + if (top + height >= limit_top) + break; + top += height; + ++min; + } + min2 = min; + max2 = max = min; + bottom = top; + } + let top2 = top; + let bottom2 = bottom; + if (anchoring && (top <= limit_top) && (bottom2 < limit_bottom)) { + min2 = Math.max(0, max - 1); + top2 = bottom; + } + if ((bottom >= limit_bottom) && (top2 >= limit_top)) { + max2 = Math.min(min + 1, kids.length); + bottom2 = top; + } + while (bottom2 < limit_bottom && max2 < kids.length) { + bottom2 += kids[max2].minimal_height(); + ++max2; + } + while (anchoring && ((top2 >= limit_top) && (min2 > 0))) { + --min2; + top2 -= kids[min2].minimal_height(); + } + return [min2, max2]; + } + gap_before() { + const skipped = this.sub().slice(0, this.view_window()[0]); + return Math.max(0, skipped.reduce((sum, view) => sum + view.minimal_height(), 0)); + } + gap_after() { + const skipped = this.sub().slice(this.view_window()[1]); + return Math.max(0, skipped.reduce((sum, view) => sum + view.minimal_height(), 0)); + } + sub_visible() { + return [ + ...this.gap_before() ? [this.Gap_before()] : [], + ...this.sub().slice(...this.view_window()), + ...this.gap_after() ? [this.Gap_after()] : [], + ]; + } + minimal_height() { + return this.sub().reduce((sum, view) => { + try { + return sum + view.minimal_height(); + } + catch (error) { + $mol_fail_log(error); + return sum; + } + }, 0); + } + force_render(path) { + const kids = this.rows(); + const index = kids.findIndex(item => path.has(item)); + if (index >= 0) { + const win = this.view_window(); + if (index < win[0] || index >= win[1]) { + this.view_window([index, index + 1]); + } + kids[index].force_render(path); + } + } + } + __decorate([ + $mol_mem + ], $mol_list.prototype, "sub", null); + __decorate([ + $mol_mem + ], $mol_list.prototype, "view_window", null); + __decorate([ + $mol_mem + ], $mol_list.prototype, "gap_before", null); + __decorate([ + $mol_mem + ], $mol_list.prototype, "gap_after", null); + __decorate([ + $mol_mem + ], $mol_list.prototype, "sub_visible", null); + __decorate([ + $mol_mem + ], $mol_list.prototype, "minimal_height", null); + $$.$mol_list = $mol_list; + })($$ = $.$$ || ($.$$ = {})); +})($ || ($ = {})); +//mol/list/list.view.ts +; +"use strict"; +var $; +(function ($) { + class $mol_bar extends $mol_view { + } + $.$mol_bar = $mol_bar; +})($ || ($ = {})); +//mol/bar/-view.tree/bar.view.tree.ts +; +"use strict"; +var $; +(function ($) { + $mol_style_attach("mol/bar/bar.view.css", "[mol_bar] {\n\tdisplay: flex;\n\t/* box-shadow: inset 0 0 0 1px var(--mol_theme_line); */\n\tborder-radius: var(--mol_gap_round);\n}\n"); +})($ || ($ = {})); +//mol/bar/-css/bar.view.css.ts +; +"use strict"; +var $; +(function ($) { + class $hyoo_todomvc extends $mol_scroll { + title() { + return "Todos"; + } + attr() { + return { + ...super.attr(), + mol_theme: "$mol_theme_light" + }; + } + sub() { + return [ + this.Page() + ]; + } + Title() { + const obj = new this.$.$mol_paragraph(); + obj.minimal_height = () => 176; + obj.title = () => this.title(); + return obj; + } + head_complete_enabled() { + return false; + } + completed_all(next) { + if (next !== undefined) + return next; + return false; + } + Head_complete() { + const obj = new this.$.$mol_check(); + obj.enabled = () => this.head_complete_enabled(); + obj.checked = (next) => this.completed_all(next); + obj.title = () => "❯"; + return obj; + } + task_title_new(next) { + if (next !== undefined) + return next; + return ""; + } + add(next) { + if (next !== undefined) + return next; + return null; + } + Add() { + const obj = new this.$.$hyoo_todomvc_add(); + obj.value = (next) => this.task_title_new(next); + obj.done = (next) => this.add(next); + return obj; + } + Head_content() { + return [ + this.Head_complete(), + this.Add() + ]; + } + Head() { + const obj = new this.$.$mol_view(); + obj.minimal_height = () => 64; + obj.sub = () => this.Head_content(); + return obj; + } + task_completed(id, next) { + if (next !== undefined) + return next; + return false; + } + task_title(id, next) { + if (next !== undefined) + return next; + return ""; + } + task_drop(id, next) { + if (next !== undefined) + return next; + return null; + } + Task_row(id) { + const obj = new this.$.$hyoo_todomvc_task_row(); + obj.completed = (next) => this.task_completed(id, next); + obj.title = (next) => this.task_title(id, next); + obj.drop = (next) => this.task_drop(id, next); + return obj; + } + task_rows() { + return [ + this.Task_row("0") + ]; + } + List() { + const obj = new this.$.$mol_list(); + obj.rows = () => this.task_rows(); + return obj; + } + pending_message() { + return "0 items left "; + } + Pending() { + const obj = new this.$.$mol_paragraph(); + obj.title = () => this.pending_message(); + return obj; + } + Filter_all() { + const obj = new this.$.$mol_link(); + obj.title = () => "All"; + obj.arg = () => ({ + completed: null + }); + return obj; + } + Filter_active() { + const obj = new this.$.$mol_link(); + obj.title = () => "Active"; + obj.arg = () => ({ + completed: "false" + }); + return obj; + } + Filter_completed() { + const obj = new this.$.$mol_link(); + obj.title = () => "Completed"; + obj.arg = () => ({ + completed: "true" + }); + return obj; + } + filterOptions() { + return [ + this.Filter_all(), + this.Filter_active(), + this.Filter_completed() + ]; + } + Filter() { + const obj = new this.$.$mol_bar(); + obj.sub = () => this.filterOptions(); + return obj; + } + sweep_enabled() { + return true; + } + sweep(next) { + if (next !== undefined) + return next; + return null; + } + sweep_label() { + return "Clear completed"; + } + Sweep() { + const obj = new this.$.$mol_button_minor(); + obj.enabled = () => this.sweep_enabled(); + obj.click = (next) => this.sweep(next); + obj.sub = () => [ + this.sweep_label() + ]; + return obj; + } + foot_content() { + return [ + this.Pending(), + this.Filter(), + this.Sweep() + ]; + } + Foot() { + const obj = new this.$.$mol_view(); + obj.sub = () => this.foot_content(); + return obj; + } + panels() { + return [ + this.Head(), + this.List(), + this.Foot() + ]; + } + Panel() { + const obj = new this.$.$mol_list(); + obj.rows = () => this.panels(); + return obj; + } + Page() { + const obj = new this.$.$mol_list(); + obj.rows = () => [ + this.Title(), + this.Panel() + ]; + return obj; + } + } + __decorate([ + $mol_mem + ], $hyoo_todomvc.prototype, "Title", null); + __decorate([ + $mol_mem + ], $hyoo_todomvc.prototype, "completed_all", null); + __decorate([ + $mol_mem + ], $hyoo_todomvc.prototype, "Head_complete", null); + __decorate([ + $mol_mem + ], $hyoo_todomvc.prototype, "task_title_new", null); + __decorate([ + $mol_mem + ], $hyoo_todomvc.prototype, "add", null); + __decorate([ + $mol_mem + ], $hyoo_todomvc.prototype, "Add", null); + __decorate([ + $mol_mem + ], $hyoo_todomvc.prototype, "Head", null); + __decorate([ + $mol_mem_key + ], $hyoo_todomvc.prototype, "task_completed", null); + __decorate([ + $mol_mem_key + ], $hyoo_todomvc.prototype, "task_title", null); + __decorate([ + $mol_mem_key + ], $hyoo_todomvc.prototype, "task_drop", null); + __decorate([ + $mol_mem_key + ], $hyoo_todomvc.prototype, "Task_row", null); + __decorate([ + $mol_mem + ], $hyoo_todomvc.prototype, "List", null); + __decorate([ + $mol_mem + ], $hyoo_todomvc.prototype, "Pending", null); + __decorate([ + $mol_mem + ], $hyoo_todomvc.prototype, "Filter_all", null); + __decorate([ + $mol_mem + ], $hyoo_todomvc.prototype, "Filter_active", null); + __decorate([ + $mol_mem + ], $hyoo_todomvc.prototype, "Filter_completed", null); + __decorate([ + $mol_mem + ], $hyoo_todomvc.prototype, "Filter", null); + __decorate([ + $mol_mem + ], $hyoo_todomvc.prototype, "sweep", null); + __decorate([ + $mol_mem + ], $hyoo_todomvc.prototype, "Sweep", null); + __decorate([ + $mol_mem + ], $hyoo_todomvc.prototype, "Foot", null); + __decorate([ + $mol_mem + ], $hyoo_todomvc.prototype, "Panel", null); + __decorate([ + $mol_mem + ], $hyoo_todomvc.prototype, "Page", null); + $.$hyoo_todomvc = $hyoo_todomvc; + class $hyoo_todomvc_add extends $mol_string { + hint() { + return "What needs to be done?"; + } + event() { + return { + ...super.event(), + keydown: (next) => this.press(next) + }; + } + done(next) { + if (next !== undefined) + return next; + return null; + } + press(next) { + if (next !== undefined) + return next; + return null; + } + } + __decorate([ + $mol_mem + ], $hyoo_todomvc_add.prototype, "done", null); + __decorate([ + $mol_mem + ], $hyoo_todomvc_add.prototype, "press", null); + $.$hyoo_todomvc_add = $hyoo_todomvc_add; + class $hyoo_todomvc_task_row extends $mol_view { + minimal_height() { + return 64; + } + attr() { + return { + ...super.attr(), + hyoo_todomvc_task_row_completed: this.completed() + }; + } + sub() { + return [ + this.Complete(), + this.Title(), + this.Drop() + ]; + } + completed(next) { + if (next !== undefined) + return next; + return false; + } + Complete() { + const obj = new this.$.$mol_check(); + obj.checked = (next) => this.completed(next); + return obj; + } + title_hint() { + return "Task title"; + } + title(next) { + if (next !== undefined) + return next; + return ""; + } + Title() { + const obj = new this.$.$mol_string(); + obj.hint = () => this.title_hint(); + obj.value = (next) => this.title(next); + return obj; + } + drop(next) { + if (next !== undefined) + return next; + return null; + } + Drop() { + const obj = new this.$.$mol_button_typed(); + obj.sub = () => [ + "✖" + ]; + obj.click = (next) => this.drop(next); + return obj; + } + } + __decorate([ + $mol_mem + ], $hyoo_todomvc_task_row.prototype, "completed", null); + __decorate([ + $mol_mem + ], $hyoo_todomvc_task_row.prototype, "Complete", null); + __decorate([ + $mol_mem + ], $hyoo_todomvc_task_row.prototype, "title", null); + __decorate([ + $mol_mem + ], $hyoo_todomvc_task_row.prototype, "Title", null); + __decorate([ + $mol_mem + ], $hyoo_todomvc_task_row.prototype, "drop", null); + __decorate([ + $mol_mem + ], $hyoo_todomvc_task_row.prototype, "Drop", null); + $.$hyoo_todomvc_task_row = $hyoo_todomvc_task_row; +})($ || ($ = {})); +//hyoo/todomvc/-view.tree/todomvc.view.tree.ts +; +"use strict"; +var $; +(function ($) { + class $mol_state_local extends $mol_object { + static 'native()'; + static native() { + if (this['native()']) + return this['native()']; + check: try { + const native = $mol_dom_context.localStorage; + if (!native) + break check; + native.setItem('', ''); + native.removeItem(''); + return this['native()'] = native; + } + catch (error) { + console.warn(error); + } + return this['native()'] = { + getItem(key) { + return this[':' + key]; + }, + setItem(key, value) { + this[':' + key] = value; + }, + removeItem(key) { + this[':' + key] = void 0; + } + }; + } + static changes(next) { return next; } + static value(key, next) { + this.changes(); + if (next === void 0) + return JSON.parse(this.native().getItem(key) || 'null'); + if (next === null) + this.native().removeItem(key); + else + this.native().setItem(key, JSON.stringify(next)); + return next; + } + prefix() { return ''; } + value(key, next) { + return $mol_state_local.value(this.prefix() + '.' + key, next); + } + } + __decorate([ + $mol_mem + ], $mol_state_local, "changes", null); + __decorate([ + $mol_mem_key + ], $mol_state_local, "value", null); + $.$mol_state_local = $mol_state_local; +})($ || ($ = {})); +//mol/state/local/local.ts +; +"use strict"; +var $; +(function ($) { + self.addEventListener('storage', event => $.$mol_state_local.changes(event)); +})($ || ($ = {})); +//mol/state/local/local.web.ts +; +"use strict"; +var $; +(function ($) { + $mol_style_attach("hyoo/todomvc/todomvc.css", "[hyoo_todomvc] {\n\talign-self: stretch;\n\twidth: 100%;\n\tmargin: 0;\n\ttransition: none;\n}\n\n[hyoo_todomvc] [mol_string] ,\n[hyoo_todomvc] [mol_string]:focus ,\n[hyoo_todomvc] [mol_string]:hover ,\n[hyoo_todomvc] [mol_button] ,\n[hyoo_todomvc] [mol_button]:focus ,\n[hyoo_todomvc] [mol_button]:hover ,\n[hyoo_todomvc] [mol_link] ,\n[hyoo_todomvc] [mol_link]:focus ,\n[hyoo_todomvc] [mol_link]:hover {\n\tbox-shadow: none;\n\tbackground-color: transparent;\n}\n\n[hyoo_todomvc] [mol_link_current] {\n\tcolor: black;\n}\n\n[hyoo_todomvc] [mol_link]:not([mol_link_current]):hover ,\n[hyoo_todomvc] [mol_link]:not([mol_link_current]):focus {\n\ttext-decoration: underline;\n}\n\n[hyoo_todomvc_head_complete] {\n\tflex: 0 0 4rem;\n\ttransform: rotate( 90deg );\n\talign-items: center;\n\topacity: .5;\n\tpadding: 0;\n\tjustify-content: center;\n}\n[hyoo_todomvc_head_complete]:disabled {\n\tvisibility: hidden;\n}\n[hyoo_todomvc_head_complete][mol_check_checked] {\n\topacity: 1;\n}\n\n[hyoo_todomvc_add] {\n\tpadding: 0;\n\tflex: 1 1 auto;\n}\n\n[hyoo_todomvc_list] {\n\tfont-size: 1.5rem;\n\ttransition: none;\n}\n\n[hyoo_todomvc_page] {\n\tflex: 1 1 auto;\n\ttransition: none;\n}\n\n[hyoo_todomvc_panel] {\n\tbox-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.2), 0 25px 50px 0 rgba(0, 0, 0, 0.1);\n\twidth: 38rem;\n\t--mol_theme_back: white;\n\t--mol_theme_text: black;\n\tbackground-color: var(--mol_theme_back);\n\tdisplay: flex;\n\tflex-direction: column;\n\tmargin: 0 auto 2rem;\n\ttransition: none;\n}\n\n[hyoo_todomvc_head] {\n\tfont-size: 1.5rem;\n\tpadding: 0;\n\tdisplay: flex;\n\theight: 4rem;\n}\n\n[hyoo_todomvc_title] {\n\tword-break: normal;\n\tdisplay: block;\n\tpadding: .25rem;\n\tfont-size: 7rem;\n\tfont-weight: 100;\n\ttext-align: center;\n\tcolor: rgba(275, 147, 147, 0.2);\n\ttext-rendering: optimizeLegibility;\n\ttext-transform: lowercase;\n\tline-height: 1.5;\n}\n\n[hyoo_todomvc_task_row] {\n\tdisplay: flex;\n\tbackground-color: white;\n\tbox-shadow: 0 -1px 0 0 #ededed;\n\theight: 4rem;\n}\n\n[hyoo_todomvc_task_row_complete] {\n\tflex: 0 0 4rem;\n\tpadding: 1rem;\n\tbackground: no-repeat center center url('hyoo/todomvc/todomvc_active.svg');\n}\n[hyoo_todomvc_task_row_complete][mol_check_checked] {\n\tbackground: no-repeat center center url('hyoo/todomvc/todomvc_completed.svg');\n}\n\n[hyoo_todomvc_task_row_title] {\n\tpadding: 0;\n\tflex: 1 1 auto;\n}\n\n[hyoo_todomvc_task_row_completed] [hyoo_todomvc_task_row_title] {\n\tcolor: #d9d9d9;\n\ttext-decoration: line-through;\n}\n\n[hyoo_todomvc_task_row_drop] {\n\tfont-size: 1.25rem;\n\tflex: 0 04rem;\n\tpadding: 1.25rem;\n}\n[hyoo_todomvc_task_row]:not(:hover) [hyoo_todomvc_task_row_drop]:not(:focus) {\n\topacity: 0;\n\tcolor: #cc9a9a;\n}\n\n[hyoo_todomvc_foot] {\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\talign-items: baseline;\n\tpadding: .5rem 1rem;\n\tcolor: #777;\n\tfont-size: .85rem;\n\tborder-top: 1px solid #ededed;\n\tbox-shadow: 0 1px 1px rgba(0, 0, 0, 0.2), 0 8px 0 -3px #f6f6f6, 0 9px 1px -3px rgba(0, 0, 0, 0.2), 0 16px 0 -6px #f6f6f6, 0 17px 2px -6px rgba(0, 0, 0, 0.2);\n}\n\n[hyoo_todomvc_pending] {\n\tpadding: .25rem;\n\tflex: 0 1 6rem;\n}\n\n[hyoo_todomvc_filter] {\n\tflex: 1 100 auto;\n\tdisplay: flex;\n\tjustify-content: center;\n\tmargin: .25rem;\n\tbox-shadow: none;\n}\n\n[hyoo_todomvc_sweep] {\n\tflex: 0 1 auto;\n\tpadding: .25rem;\n}\n[hyoo_todomvc_sweep][disabled] {\n\tvisibility: hidden;\n}\n\n[hyoo_todomvc_sweep]:hover ,\n[hyoo_todomvc_sweep]:focus {\n\ttext-decoration: underline;\n}\n"); +})($ || ($ = {})); +//hyoo/todomvc/-css/todomvc.css.ts +; +"use strict"; +var $; +(function ($) { + var $$; + (function ($$) { + class $hyoo_todomvc_add extends $.$hyoo_todomvc_add { + press(next) { + switch (next.keyCode) { + case $mol_keyboard_code.enter: return this.done(next); + } + } + } + $$.$hyoo_todomvc_add = $hyoo_todomvc_add; + class $hyoo_todomvc extends $.$hyoo_todomvc { + task_ids(next) { + return this.$.$mol_state_local.value(this.state_key('mol-todos'), next) || []; + } + arg_completed() { + return this.$.$mol_state_arg.value(this.state_key('completed')); + } + groups_completed() { + var groups = { 'true': [], 'false': [] }; + for (let id of this.task_ids()) { + var task = this.task(id); + groups[String(task.completed)].push(id); + } + return groups; + } + task_ids_filtered() { + var completed = this.arg_completed(); + if (completed) { + return this.groups_completed()[completed] || []; + } + else { + return this.task_ids(); + } + } + completed_all(next) { + if (next === void 0) + return this.groups_completed()['false'].length === 0; + for (let id of this.groups_completed()[String(!next)]) { + var task = this.task(id); + this.task(id, { title: task.title, completed: next }); + } + return next; + } + head_complete_enabled() { + return this.task_ids().length > 0; + } + pending_message() { + let count = this.groups_completed()['false'].length; + return (count === 1) ? '1 item left' : `${count} items left`; + } + new_id() { + return Math.max(1, 1 + Math.max(...this.task_ids())); + } + add(next) { + var title = this.task_title_new(); + if (!title) + return; + var id = this.new_id(); + var task = { completed: false, title }; + this.task(id, task); + this.task_ids([...this.task_ids(), id]); + this.task_title_new(''); + } + task_rows() { + return this.task_ids_filtered().map(id => this.Task_row(id)); + } + task(id, next) { + const key = this.state_key(`mol-todos-${id}`); + if (next === void 0) { + return this.$.$mol_state_local.value(key) || { title: '', completed: false }; + } + this.$.$mol_state_local.value(key, next); + return next || null; + } + task_completed(id, next) { + return this.task(id, next === undefined ? undefined : { ...this.task(id), completed: next }).completed ?? false; + } + task_title(id, next) { + return this.task(id, next === undefined ? undefined : { ...this.task(id), title: next }).title ?? ''; + } + task_drop(id, next) { + this.task(id, null); + this.task_ids(this.task_ids().filter(id2 => id !== id2)); + } + sweep() { + this.task_ids(this.task_ids().filter(id => { + if (!this.task(id).completed) + return true; + this.task(id, null); + return false; + })); + } + panels() { + return [ + this.Head(), + this.List(), + ...this.foot_visible() ? [this.Foot()] : [], + ]; + } + foot_visible() { + return this.task_ids().length > 0; + } + sweep_enabled() { + return this.groups_completed()['true'].length > 0; + } + } + __decorate([ + $mol_mem + ], $hyoo_todomvc.prototype, "groups_completed", null); + __decorate([ + $mol_mem + ], $hyoo_todomvc.prototype, "task_ids_filtered", null); + __decorate([ + $mol_mem + ], $hyoo_todomvc.prototype, "completed_all", null); + __decorate([ + $mol_mem + ], $hyoo_todomvc.prototype, "pending_message", null); + __decorate([ + $mol_mem + ], $hyoo_todomvc.prototype, "new_id", null); + __decorate([ + $mol_mem + ], $hyoo_todomvc.prototype, "task_rows", null); + __decorate([ + $mol_mem_key + ], $hyoo_todomvc.prototype, "task_completed", null); + __decorate([ + $mol_mem_key + ], $hyoo_todomvc.prototype, "task_title", null); + $$.$hyoo_todomvc = $hyoo_todomvc; + })($$ = $.$$ || ($.$$ = {})); +})($ || ($ = {})); +//hyoo/todomvc/todomvc.view.ts +; +var $node = $node || {} ; $node[ "/hyoo/todomvc/todomvc_active.svg" ] = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0MCIgaGVpZ2h0PSI0MCIgdmlld0JveD0iMCAtMTggMTAwIDEzNSI+DQoJPGNpcmNsZSBjeD0iNTAiIGN5PSI1MCIgcj0iNTAiIGZpbGw9Im5vbmUiICBzdHJva2U9IiNlZGVkZWQiIHN0cm9rZS13aWR0aD0iMyIvPg0KPC9zdmc+" + +; +var $node = $node || {} ; $node[ "/hyoo/todomvc/todomvc_completed.svg" ] = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0MCIgaGVpZ2h0PSI0MCIgdmlld0JveD0iMCAtMTggMTAwIDEzNSI+DQoJPGNpcmNsZSBjeD0iNTAiIGN5PSI1MCIgcj0iNTAiIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2JkZGFkNSIgc3Ryb2tlLXdpZHRoPSIzIi8+DQoJPHBhdGggZmlsbD0iJTIzNWRjMmFmIiBkPSJNNzIgMjVMNDIgNzEgMjcgNTZsLTQgNCAyMCAyMCAzNC01MnoiLz4NCjwvc3ZnPg0K" + + +//# sourceMappingURL=web.js.map diff --git a/examples/mol/web.js.map b/examples/mol/web.js.map new file mode 100644 index 0000000000..da97d7c222 --- /dev/null +++ b/examples/mol/web.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../../mam.jam.js","-","../../../mam.ts","../../hyoo.ts","../../../mol/ambient/mol/ambient/ambient.ts","../../../mol/delegate/mol/delegate/delegate.ts","../../../mol/owning/mol/owning/owning.ts","../../../mol/fail/mol/fail/fail.ts","../../../mol/fail/hidden/mol/fail/hidden/hidden.ts","../../../mol/type/writable/writable.ts","../../../mol/object2/mol/object2/object2.ts","../../../mol/after/tick/mol/after/tick/tick.ts","../../../mol/dom/context/mol/dom/context/context.ts","../../../mol/dom/context/mol/dom/context/context.web.ts","../../../mol/style/attach/mol/style/attach/attach.ts","../../../mol/decor/mol/decor/decor.ts","../../../mol/style/unit/mol/style/unit/unit.ts","../../../mol/style/func/mol/style/func/func.ts","../../../mol/theme/-css/mol/theme/-css/theme.css.ts","../../../mol/theme/mol/theme/theme.ts","../../../mol/object/mol/object/object.ts","../../../mol/wire/cursor/mol/wire/cursor/cursor.ts","../../../mol/wire/pub/mol/wire/pub/pub.ts","../../../mol/wire/sub/sub.ts","../../../mol/wire/mol/wire/wire.ts","../../../mol/dev/format/mol/dev/format/format.ts","../../../mol/wire/pub/sub/mol/wire/pub/sub/sub.ts","../../../mol/after/frame/mol/after/frame/frame.web.ts","../../../mol/wire/fiber/mol/wire/fiber/fiber.ts","../../../mol/guid/mol/guid/guid.ts","../../../mol/key/mol/key/key.ts","../../../mol/compare/deep/mol/compare/deep/deep.ts","../../../mol/wire/task/mol/wire/task/task.ts","../../../mol/wire/method/mol/wire/method/method.ts","../../../mol/wire/atom/mol/wire/atom/atom.ts","../../../mol/wire/mem/mol/wire/mem/mem.ts","../../../mol/mem/mol/mem/mem.ts","../../../mol/window/mol/window/window.web.ts","../../../mol/fail/catch/mol/fail/catch/catch.ts","../../../mol/fail/log/mol/fail/log/log.ts","../../../mol/view/selection/mol/view/selection/selection.ts","../../../mol/maybe/mol/maybe/maybe.ts","../../../mol/view/selection/mol/view/selection/selection.web.ts","../../../mol/wrapper/mol/wrapper/wrapper.ts","../../../mol/memo/mol/memo/memo.ts","../../../mol/dom/qname/mol/dom/qname/qname.ts","../../../mol/wire/watch/mol/wire/watch/watch.ts","../../../mol/const/mol/const/const.ts","../../../mol/dom/render/attributes/mol/dom/render/attributes/attributes.ts","../../../mol/wire/async/mol/wire/async/async.ts","../../../mol/dom/render/styles/mol/dom/render/styles/styles.ts","../../../mol/dom/render/children/mol/dom/render/children/children.ts","../../../mol/dom/render/fields/mol/dom/render/fields/fields.ts","../../../mol/func/name/mol/func/name/name.ts","../../../mol/type/keys/extract/extract.ts","../../../mol/type/pick/pick.ts","../../../mol/view/view/mol/view/view/view.ts","../../../mol/view/view/-css/mol/view/view/-css/view.css.ts","../../../mol/view/view/mol/view/view/view.web.ts","../../../mol/plugin/mol/plugin/plugin.ts","../../../mol/hotkey/-view.tree/mol/hotkey/-view.tree/hotkey.view.tree.ts","../../../mol/keyboard/mol/keyboard/code.ts","../../../mol/hotkey/mol/hotkey/hotkey.view.ts","../../../mol/string/-view.tree/mol/string/-view.tree/string.view.tree.ts","../../../mol/gap/-css/mol/gap/-css/gap.css.ts","../../../mol/gap/mol/gap/gap.ts","../../../mol/dom/listener/mol/dom/listener/listener.ts","../../../mol/string/-css/mol/string/-css/string.view.css.ts","../../../mol/string/mol/string/string.view.ts","../../../mol/speck/-view.tree/mol/speck/-view.tree/speck.view.tree.ts","../../../mol/speck/-css/mol/speck/-css/speck.view.css.ts","../../../mol/button/-view.tree/mol/button/-view.tree/button.view.tree.ts","../../../mol/button/-css/mol/button/-css/button.view.css.ts","../../../mol/button/mol/button/button.view.ts","../../../mol/type/result/result.ts","../../../mol/type/error/error.ts","../../../mol/type/override/override.ts","../../../mol/style/properties/properties.ts","../../../mol/style/pseudo/class.ts","../../../mol/style/pseudo/element.ts","../../../mol/style/guard/guard.ts","../../../mol/style/sheet/mol/style/sheet/sheet.ts","../../../mol/style/define/mol/style/define/define.ts","../../../mol/svg/-view.tree/mol/svg/-view.tree/svg.view.tree.ts","../../../mol/after/timeout/mol/after/timeout/timeout.ts","../../../mol/state/time/mol/state/time/time.ts","../../../mol/svg/mol/svg/svg.view.ts","../../../mol/svg/root/-view.tree/mol/svg/root/-view.tree/root.view.tree.ts","../../../mol/svg/root/-css/mol/svg/root/-css/root.view.css.ts","../../../mol/svg/path/-view.tree/mol/svg/path/-view.tree/path.view.tree.ts","../../../mol/icon/-view.tree/mol/icon/-view.tree/icon.view.tree.ts","../../../mol/icon/-css/mol/icon/-css/icon.view.css.ts","../../../mol/link/-view.tree/mol/link/-view.tree/link.view.tree.ts","../../../mol/state/arg/mol/state/arg/arg.web.ts","../../../mol/link/mol/link/link.view.css.ts","../../../mol/link/mol/link/link.view.ts","../../../mol/button/typed/-view.tree/mol/button/typed/-view.tree/typed.view.tree.ts","../../../mol/button/typed/-css/mol/button/typed/-css/typed.view.css.ts","../../../mol/button/minor/-view.tree/mol/button/minor/-view.tree/minor.view.tree.ts","../../../mol/button/minor/-css/mol/button/minor/-css/minor.view.css.ts","../../../mol/check/-view.tree/mol/check/-view.tree/check.view.tree.ts","../../../mol/check/-css/mol/check/-css/check.css.ts","../../../mol/check/mol/check/check.view.ts","../../../mol/scroll/-view.tree/mol/scroll/-view.tree/scroll.view.tree.ts","../../../mol/print/mol/print/print.ts","../../../mol/scroll/mol/scroll/scroll.view.css.ts","../../../mol/scroll/mol/scroll/scroll.view.ts","../../../mol/paragraph/-view.tree/mol/paragraph/-view.tree/paragraph.view.tree.ts","../../../mol/paragraph/-css/mol/paragraph/-css/paragraph.view.css.ts","../../../mol/paragraph/mol/paragraph/paragraph.view.ts","../../../mol/list/-view.tree/mol/list/-view.tree/list.view.tree.ts","../../../mol/support/css/mol/support/css/css.ts","../../../mol/wire/probe/mol/wire/probe/probe.ts","../../../mol/mem/cached/mol/mem/cached/cached.ts","../../../mol/list/-css/mol/list/-css/list.view.css.ts","../../../mol/list/mol/list/list.view.ts","../../../mol/bar/-view.tree/mol/bar/-view.tree/bar.view.tree.ts","../../../mol/bar/-css/mol/bar/-css/bar.view.css.ts","../-view.tree/hyoo/todomvc/-view.tree/todomvc.view.tree.ts","../../../mol/state/local/mol/state/local/local.ts","../../../mol/state/local/mol/state/local/local.web.ts","../-css/hyoo/todomvc/-css/todomvc.css.ts","../hyoo/todomvc/todomvc.view.ts","../-bin/todomvc_active.svg.js","../-bin/todomvc_completed.svg.js"],"names":[],"mappings":"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","file":"web.js","sourcesContent":[null,null,"Error.stackTraceLimit = 50;\n\ndeclare let _$_: { new(): {} } & typeof globalThis\ndeclare class $ extends _$_ {}\n\nnamespace $ {\n\texport type $ = typeof $$\n\texport declare class $$ extends $ {}\n\tnamespace $$ {\n\t\texport type $$ = $\n\t}\n}\n\nmodule.exports = $\n",null,"namespace $ {\n\n\texport const $mol_ambient_ref : unique symbol = Symbol( '$mol_ambient_ref' )\n\n\t/** @deprecated use $ instead */\n\texport type $mol_ambient_context = $\n\n\texport function $mol_ambient( this : $ | void , overrides : Partial< $ > ) : $ {\n\t\treturn Object.setPrototypeOf( overrides , this || $ )\n\t}\n\n}\n","namespace $ {\n\n\tconst instances = new WeakSet< any >()\n\n\t/**\n\t * Proxy that delegates all to lazy returned target.\n\t * \n\t * \t$mol_delegate( Array.prototype , ()=> fetch_array() )\n\t */\n export function $mol_delegate< Value extends object >(\n\t\tproto : Value ,\n\t\ttarget : ()=> Value ,\n\t) {\n\n\t\tconst proxy = new Proxy( proto , {\n\n\t\t\tget: ( _ , field )=> {\n\t\t\t\tconst obj = target()\n\t\t\t\tlet val = Reflect.get( obj , field )\n\t\t\t\tif( typeof val === 'function' ) {\n\t\t\t\t\tval = val.bind( obj )\n\t\t\t\t} \n\t\t\t\treturn val\n\t\t\t},\n\t\t\thas: ( _ , field )=> Reflect.has( target(), field ),\n\t\t\tset: ( _ , field , value )=> Reflect.set( target() , field , value ),\n\t\t\t\n\t\t\tgetOwnPropertyDescriptor: ( _ , field )=> Reflect.getOwnPropertyDescriptor( target() , field ),\n\t\t\townKeys: ()=> Reflect.ownKeys( target() ),\n\t\t\t\n\t\t\tgetPrototypeOf: ()=> Reflect.getPrototypeOf( target() ),\n\t\t\tsetPrototypeOf: ( _ , donor )=> Reflect.setPrototypeOf( target() , donor ),\n\t\t\t\n\t\t\tisExtensible: ()=> Reflect.isExtensible( target() ),\n\t\t\tpreventExtensions: ()=> Reflect.preventExtensions( target() ),\n\t\t\t\n\t\t\tapply: ( _ , self , args )=> Reflect.apply( target() as Function , self , args ),\n\t\t\tconstruct: ( _ , args , retarget )=> Reflect.construct( target() as Function , args , retarget ),\n\t\t\t\n\t\t\tdefineProperty: ( _ , field , descr )=> Reflect.defineProperty( target() , field , descr ),\n\t\t\tdeleteProperty: ( _ , field )=> Reflect.deleteProperty( target() , field ),\n\n\t\t} )\n\n\t\tinstances.add( proxy )\n\n\t\treturn proxy\n\n\t}\n\n\tReflect.defineProperty(\n\t\t$mol_delegate ,\n\t\tSymbol.hasInstance ,\n\t\t{\n\t\t\tvalue : ( obj : object )=> instances.has( obj ),\n\t\t},\n\t)\n\n}\n","namespace $ {\n\n\texport const $mol_owning_map = new WeakMap< any , any >()\n\n\texport function $mol_owning_allow< Having >(\n\t\thaving : Having ,\n\t) : having is Having & {\n\t\tdestructor() : void\n\t} {\n\t\ttry {\n\t\t\tif( !having ) return false\n\t\t\tif( typeof having !== 'object' ) return false\n\t\t\tif( having instanceof $mol_delegate ) return false\n\t\t\tif( typeof having['destructor'] !== 'function' ) return false\n\t\t\treturn true\n\t\t} catch {\n\t\t\treturn false\n\t\t}\n\t}\n\n\texport function $mol_owning_get< Having , Owner extends object >( having : Having , Owner? : { new() : Owner } ) : Owner | null {\n\t\n\t\tif( !$mol_owning_allow( having ) ) return null\n\n\t\twhile( true ) {\n\n\t\t\tconst owner = $mol_owning_map.get( having )\n\t\t\tif( !owner ) return owner\n\t\t\tif( !Owner ) return owner\n\t\t\t\n\t\t\tif( owner instanceof Owner ) return owner\n\n\t\t\thaving = owner\n\t\t}\n\n\t}\n\t\n\texport function $mol_owning_check< Owner , Having >(\n\t\towner : Owner ,\n\t\thaving : Having ,\n\t) : having is Having & { destructor() : void } {\n\t\tif( !$mol_owning_allow( having ) ) return false\n\t\tif( $mol_owning_map.get( having ) !== owner ) return false\n\t\treturn true\n\t}\n\t\n\texport function $mol_owning_catch< Owner , Having >(\n\t\towner : Owner ,\n\t\thaving : Having ,\n\t) {\n\t\tif( !$mol_owning_allow( having ) ) return false\n\t\tif( $mol_owning_map.get( having ) ) return false\n\n\t\t$mol_owning_map.set( having , owner )\n\t\treturn true\n\t}\n\n}\n","namespace $ {\n\n\texport function $mol_fail( error : any ) : never {\n\t\tthrow error\n\t}\n\n}\n","namespace $ {\n\n\texport function $mol_fail_hidden( error : any ) : never {\n\t\tthrow error /// Use 'Never Pause Here' breakpoint in DevTools or simply blackbox this script\n\t}\n\n}\n",null,"namespace $ {\n\n\texport class $mol_object2 {\n\t\t\n\t\tstatic $ = $ as $\n\t\t\n\t\t[ $mol_ambient_ref ] = null as any as $\n\t\tget $() {\n\t\t\tif( this[ $mol_ambient_ref ] ) return this[ $mol_ambient_ref ]\n\t\t\tconst owner = $mol_owning_get( this ) as any\n\t\t\treturn this[ $mol_ambient_ref ] = owner?.$ || $mol_object2.$ as $\n\t\t}\n\t\tset $( next : $ ) {\n\t\t\tif( this[ $mol_ambient_ref ] ) $mol_fail_hidden( new Error( 'Context already defined' ) )\n\t\t\tthis[ $mol_ambient_ref ] = next\n\t\t}\n\n\t\tpublic static create< Instance >(\n\t\t\tthis : new( init? : ( instance : any )=> void )=> Instance ,\n\t\t\tinit? : ( instance : $mol_type_writable )=> void\n\t\t) : Instance {\n\t\t\tconst obj = new this\n\t\t\tif( init ) init( obj )\n\t\t\treturn obj\n\t\t}\n\t\t\n\t\tstatic [ Symbol.toPrimitive ]() {\n\t\t\treturn this.toString()\n\t\t}\n\t\t\n\t\tstatic toString() {\n\t\t\tif( Symbol.toStringTag in this ) return this[ Symbol.toStringTag ]\n\t\t\treturn this.name\n\t\t}\n\t\t\n\t\tdestructor() { }\n\t\t\n\t\t//[ Symbol.toPrimitive ]( hint: string ) {\n\t\t//\treturn hint === 'number' ? this.valueOf() : this.toString()\n\t\t//}\n\t\t\n\t\ttoString() {\n\t\t\treturn this[ Symbol.toStringTag ] || this.constructor.name + '()'\n\t\t}\n\t\t\n\t\ttoJSON() {\n\t\t\treturn this.toString()\n\t\t}\n\n\t}\n}\n","namespace $ {\n\n\texport class $mol_after_tick extends $mol_object2 {\n\n\t\tpromise : any\n\t\tcancelled = false\n\n\t\tconstructor(\n\t\t\tpublic task : ()=> void ,\n\t\t) {\n\t\t\tsuper()\n\t\t\tthis.promise = Promise.resolve().then( ()=> {\n\t\t\t\tif( this.cancelled ) return\n\t\t\t\ttask()\n\t\t\t} )\n\t\t}\n\n\t\tdestructor() {\n\t\t\tthis.cancelled = true\n\t\t}\n\n\t}\n\t\n}\n","namespace $ {\n\t\n\texport var $mol_dom_context : typeof globalThis\n\t\n}\n","namespace $ {\n\t\n\t$.$mol_dom_context = self as any\n\t\n}\n","namespace $ {\n\n\tlet all = [] as string[]\n\tlet el : HTMLStyleElement | null = null\n\tlet timer : $mol_after_tick | null = null\n\n\texport function $mol_style_attach(\n\t\tid : string ,\n\t\ttext : string ,\n\t) {\n\n\t\tall.push( `/* ${ id } */\\n\\n${ text }`)\n\n\t\tif( timer ) return el!\n\t\t\n\t\tconst doc = $mol_dom_context.document\n\t\tif( !doc ) return null\n\n\t\tel = doc.createElement('style')\n\t\tel.id = `$mol_style_attach`\n\t\tdoc.head.appendChild( el )\n\n\t\ttimer = new $mol_after_tick( ()=> {\n\t\t\tel!.innerHTML = '\\n' + all.join( '\\n\\n' )\n\t\t\tall = []\n\t\t\tel = null\n\t\t\ttimer = null\n\t\t} )\n\n\t\treturn el\n\n\t}\n\n}\n","namespace $ {\n\n\texport class $mol_decor< Value > {\n\t\t\n\t\tconstructor(\n\t\t\treadonly value : Value\n\t\t) {}\n\n\t\tprefix() { return '' }\n\t\tvalueOf() { return this.value }\n\t\tpostfix() { return '' }\n\n\t\ttoString(){\n\t\t\treturn `${ this.prefix() }${ this.valueOf() }${ this.postfix() }`\n\t\t}\n\n\t}\n\n}\n","namespace $ {\n\t\n\texport type $mol_style_unit_length =\n\t| '%'\n\t| 'px' | 'cm' | 'mm' | 'Q' | 'in' | 'pc' | 'pt'\n\t| 'cap' | 'ch' | 'em' | 'rem' | 'ex' | 'ic' | 'lh' | 'rlh'\n\t| 'vh' | 'vw' | 'vi' | 'vb' | 'vmin' | 'vmax'\n\t\n\texport type $mol_style_unit_angle = 'deg' | 'rad' | 'grad' | 'turn'\n\t\n\texport type $mol_style_unit_time = 's' | 'ms'\n\n\texport type $mol_style_unit_any = $mol_style_unit_length | $mol_style_unit_angle | $mol_style_unit_time\n\t\n\texport class $mol_style_unit<\n\t\tLiteral extends $mol_style_unit_any\n\t> extends $mol_decor< number > {\n\n\t\tconstructor(\n\t\t\tvalue : number,\n\t\t\treadonly literal : Literal,\n\t\t) {\n\t\t\tsuper( value )\n\t\t}\n\n\t\tpostfix() {\n\t\t\treturn this.literal\n\t\t}\n\n\t\tstatic per( value : number ) { return new $mol_style_unit( value , '%' ) }\n\t\tstatic px( value : number ) { return new $mol_style_unit( value , 'px' ) }\n\t\tstatic mm( value : number ) { return new $mol_style_unit( value , 'mm' ) }\n\t\tstatic cm( value : number ) { return new $mol_style_unit( value , 'cm' ) }\n\t\tstatic Q( value : number ) { return new $mol_style_unit( value , 'Q' ) }\n\t\tstatic in( value : number ) { return new $mol_style_unit( value , 'in' ) }\n\t\tstatic pc( value : number ) { return new $mol_style_unit( value , 'pc' ) }\n\t\tstatic pt( value : number ) { return new $mol_style_unit( value , 'pt' ) }\n\t\tstatic cap( value : number ) { return new $mol_style_unit( value , 'cap' ) }\n\t\tstatic ch( value : number ) { return new $mol_style_unit( value , 'ch' ) }\n\t\tstatic em( value : number ) { return new $mol_style_unit( value , 'em' ) }\n\t\tstatic rem( value : number ) { return new $mol_style_unit( value , 'rem' ) }\n\t\tstatic ex( value : number ) { return new $mol_style_unit( value , 'ex' ) }\n\t\tstatic ic( value : number ) { return new $mol_style_unit( value , 'ic' ) }\n\t\tstatic lh( value : number ) { return new $mol_style_unit( value , 'lh' ) }\n\t\tstatic rlh( value : number ) { return new $mol_style_unit( value , 'rlh' ) }\n\t\tstatic vh( value : number ) { return new $mol_style_unit( value , 'vh' ) }\n\t\tstatic vw( value : number ) { return new $mol_style_unit( value , 'vw' ) }\n\t\tstatic vi( value : number ) { return new $mol_style_unit( value , 'vi' ) }\n\t\tstatic vb( value : number ) { return new $mol_style_unit( value , 'vb' ) }\n\t\tstatic vmin( value : number ) { return new $mol_style_unit( value , 'vmin' ) }\n\t\tstatic vmax( value : number ) { return new $mol_style_unit( value , 'vmax' ) }\n\t\t\n\t\tstatic deg( value : number ) { return new $mol_style_unit( value , 'deg' ) }\n\t\tstatic rad( value : number ) { return new $mol_style_unit( value , 'rad' ) }\n\t\tstatic grad( value : number ) { return new $mol_style_unit( value , 'grad' ) }\n\t\tstatic turn( value : number ) { return new $mol_style_unit( value , 'turn' ) }\n\n\t\tstatic s( value : number ) { return new $mol_style_unit( value , 's' ) }\n\t\tstatic ms( value : number ) { return new $mol_style_unit( value , 'ms' ) }\n\t\n\t}\n\n}\n","namespace $ {\n\n\texport type $mol_style_func_name =\n\t| 'calc'\n\t| 'hsla'\n\t| 'rgba'\n\t| 'var'\n\t| 'clamp'\n\t| 'url'\n\t| 'scale'\n\n\tconst { per } = $mol_style_unit\n\t\n\texport class $mol_style_func<\n\t\tName extends $mol_style_func_name ,\n\t\tValue = unknown,\n\t> extends $mol_decor< Value > {\n\n\t\tconstructor(\n\t\t\treadonly name : Name,\n\t\t\tvalue : Value,\n\t\t) {\n\t\t\tsuper( value )\n\t\t}\n\n\t\tprefix() { return this.name + '(' }\n\t\tpostfix() { return ')' }\n\n\t\tstatic calc< Value >( value : Value ) {\n\t\t\treturn new $mol_style_func( 'calc' , value )\n\t\t}\n\n\t\tstatic vary< Name extends string >( name : Name ) {\n\t\t\treturn new $mol_style_func( 'var' , name )\n\t\t}\n\n\t\tstatic url< Href extends string >( href : Href ) {\n\t\t\treturn new $mol_style_func( 'url' , JSON.stringify( href ) )\n\t\t}\n\n\t\tstatic hsla(\n\t\t\thue: number,\n\t\t\tsaturation: number,\n\t\t\tlightness: number,\n\t\t\talpha: number,\n\t\t) {\n\t\t\treturn new $mol_style_func(\n\t\t\t\t'hsla',\n\t\t\t\t[ hue , per( saturation ) , per( lightness ) , alpha ],\n\t\t\t)\n\t\t}\n\t\n\t\tstatic clamp(\n\t\t\tmin: $mol_style_unit< any >,\n\t\t\tmid: $mol_style_unit< any >,\n\t\t\tmax: $mol_style_unit< any >,\n\t\t) {\n\t\t\treturn new $mol_style_func(\n\t\t\t\t'clamp',\n\t\t\t\t[ min, mid, max ],\n\t\t\t)\n\t\t}\n\t\n\t\tstatic rgba(\n\t\t\tred: number,\n\t\t\tgreen: number,\n\t\t\tblue: number,\n\t\t\talpha: number,\n\t\t) {\n\t\t\treturn new $mol_style_func(\n\t\t\t\t'rgba',\n\t\t\t\t[ red , green , blue , alpha ],\n\t\t\t)\n\t\t}\n\t\n\t\tstatic scale(\n\t\t\tzoom: number,\n\t\t) {\n\t\t\treturn new $mol_style_func( 'scale', [ zoom ] )\n\t\t}\n\t\n\t}\n\n}\n","namespace $ { $mol_style_attach( \"mol/theme/theme.css\",\n \":root {\\n\\t--mol_theme_hue: 210deg;\\n\\t--mol_theme_luma: -1;\\n\\t--mol_theme_image: none;\\n}\\n\\n[mol_theme] {\\n\\tbackground-color: var(--mol_theme_back);\\n\\tcolor: var(--mol_theme_text);\\n\\tfill: var(--mol_theme_text);\\n}\\n\\t\\n:root, [mol_theme] {\\n\\t--mol_theme_back: hsl( var(--mol_theme_hue), 50% , calc( 54% + 44% * var(--mol_theme_luma) ) );\\n\\t--mol_theme_text: hsl( var(--mol_theme_hue), 0% , calc( 50% - 30% * var(--mol_theme_luma) ) );\\n\\t--mol_theme_field: hsl( var(--mol_theme_hue), 0%, calc( 50% + 50% * var(--mol_theme_luma) ), .2 );\\n\\t\\n\\t--mol_theme_card: hsl( var(--mol_theme_hue), 0%, 50%, .05 );\\n\\t--mol_theme_hover: hsl( var(--mol_theme_hue), 0%, 50%, .1 );\\n\\t--mol_theme_line: hsl( var(--mol_theme_hue), 0%, 50%, .25 );\\n\\t--mol_theme_shade: hsl( var(--mol_theme_hue), 0%, 50%, 1 );\\n\\t\\n\\t--mol_theme_control: hsl( var(--mol_theme_hue), 50%, calc( 50% - 5% * var(--mol_theme_luma) ) );\\n\\t--mol_theme_current: hsl( calc( var(--mol_theme_hue) - 90deg ), 50%, calc( 50% - 10% * var(--mol_theme_luma) ) );\\n\\t--mol_theme_special: hsl( calc( var(--mol_theme_hue) + 90deg ), 50%, calc( 50% - 10% * var(--mol_theme_luma) ) );\\n\\t--mol_theme_focus: hsl( calc( var(--mol_theme_hue) + 180deg ), 100%, calc( 50% - 15% * var(--mol_theme_luma) ) );\\n\\t\\n}\\n\\n[mol_theme=\\\"$mol_theme_light\\\"] {\\n\\t--mol_theme_luma: 1;\\n\\t--mol_theme_image: none;\\n}\\n\\n[mol_theme=\\\"$mol_theme_dark\\\"] {\\n\\t--mol_theme_luma: -1;\\n\\t--mol_theme_image: invert(1) hue-rotate( 180deg );\\n}\\n\\n[mol_theme=\\\"$mol_theme_base\\\"] {\\n\\t--mol_theme_luma: -2;\\n\\t--mol_theme_back: hsl( var(--mol_theme_hue), 50%, 40% );\\n\\t--mol_theme_hover: hsl( var(--mol_theme_hue), 60%, 30% );\\n\\t--mol_theme_current: hsl( var(--mol_theme_hue), 100%, 20% );\\n}\\n\\n[mol_theme=\\\"$mol_theme_current\\\"] {\\n\\t--mol_theme_back: hsl( calc( var(--mol_theme_hue) - 90deg ), 50%, calc( 50% + 25% * var(--mol_theme_luma) ) );\\n}\\n\\n[mol_theme=\\\"$mol_theme_special\\\"] {\\n\\t--mol_theme_back: hsl( calc( var(--mol_theme_hue) + 90deg ), 50%, calc( 50% + 25% * var(--mol_theme_luma) ) );\\n}\\n\\n[mol_theme=\\\"$mol_theme_accent\\\"] {\\n\\t--mol_theme_luma: -2;\\n\\t--mol_theme_back: hsl( calc( var(--mol_theme_hue) + 180deg ), 80%, 40% );\\n\\t--mol_theme_hover: hsl( calc( var(--mol_theme_hue) + 180deg ), 80%, 35% );\\n}\\n\\n[mol_theme=\\\"$mol_theme_accent\\\"] [mol_theme=\\\"$mol_theme_accent\\\"] {\\n\\t--mol_theme_back: black;\\n}\\n\"\n) }","namespace $ {\n\n\tconst { vary } = $mol_style_func\n\n\texport const $mol_theme = {\n\t\tback: vary('--mol_theme_back'),\n\t\thover: vary('--mol_theme_hover'),\n\t\tcard: vary('--mol_theme_card'),\n\t\tcurrent: vary('--mol_theme_current'),\n\t\tspecial: vary('--mol_theme_special'),\n\t\ttext: vary('--mol_theme_text'),\n\t\tcontrol: vary('--mol_theme_control'),\n\t\tshade: vary('--mol_theme_shade'),\n\t\tline: vary('--mol_theme_line'),\n\t\tfocus: vary('--mol_theme_focus'),\n\t\tfield: vary('--mol_theme_field'),\n\t\timage: vary('--mol_theme_image'),\n\t}\n\n}\n","namespace $ {\n\n\texport namespace $$ { let $ }\n\n\texport const $mol_object_field = Symbol( '$mol_object_field' )\n\t\n\texport class $mol_object extends $mol_object2 {\n\t\t\n\t\tpublic static make< Instance >( this : { new() : Instance } , config : Partial< Instance > ) : Instance {\n\t\t\treturn super.create( obj => {\n\t\t\t\tfor( let key in config ) ( obj as any )[ key ] = config[ key ]!\n\t\t\t} ) as any\n\t\t}\n\t\t\n\t}\n\n}\n","namespace $ {\n\t\n\t/** Special status statuses. */\n\texport enum $mol_wire_cursor {\n\t\t\n\t\t/** Update required. */\n\t\tstale = -1,\n\t\t\n\t\t/** Some of (transitive) pub update required. */\n\t\tdoubt = -2,\n\t\t\n\t\t/** Actual state but may be dropped. */\n\t\tfresh = -3,\n\t\t\n\t\t/** State will never be changed. */\n\t\tfinal = -4,\n\t\t\n\t}\n\t\n}\n","namespace $ {\n\t\n\t/**\n\t * Collects subscribers in compact array. 28B\n\t */\n\texport class $mol_wire_pub extends Object {\n\t\t\n\t\tdata = [] as unknown[]\n\t\t\n\t\t// Derived objects should be Arrays.\n\t\tstatic get [ Symbol.species ]() {\n\t\t\treturn Array\n\t\t}\n\t\t\n\t\t/**\n\t\t * Index of first subscriber.\n\t\t */\n\t\tprotected sub_from = 0 // 4B\n\t\t\n\t\t/**\n\t\t * All current subscribers.\n\t\t */\n\t\tget sub_list() {\n\t\t\tconst res = [] as $mol_wire_sub[]\n\t\t\tfor( let i = this.sub_from; i < this.data.length; i += 2 ) {\n\t\t\t\tres.push( this.data[i] as $mol_wire_sub )\n\t\t\t}\n\t\t\treturn res as readonly $mol_wire_sub[]\n\t\t}\n\t\t\n\t\t/**\n\t\t * Has any subscribers or not.\n\t\t */\n\t\tget sub_empty() {\n\t\t\treturn this.sub_from === this.data.length\n\t\t}\n\t\t\n\t\t/**\n\t\t * Subscribe subscriber to this publisher events and return position of subscriber that required to unsubscribe.\n\t\t */\n\t\tsub_on( sub: $mol_wire_pub, pub_pos: number ) {\n\t\t\tconst pos = this.data.length\n\t\t\tthis.data.push( sub, pub_pos )\n\t\t\treturn pos\n\t\t}\n\t\t\n\t\t/**\n\t\t * Unsubscribe subscriber from this publisher events by subscriber position provided by `on(pub)`.\n\t\t */\n\t\tsub_off( sub_pos: number ) {\n\t\t\t\n\t\t\tif(!( sub_pos < this.data.length )) {\n\t\t\t\t$mol_fail( new Error( `Wrong pos ${ sub_pos }` ) )\n\t\t\t}\n\t\t\t\n\t\t\tconst end = this.data.length - 2\n\t\t\tif( sub_pos !== end ) {\n\t\t\t\tthis.peer_move( end, sub_pos )\n\t\t\t}\n\t\t\t\n\t\t\tthis.data.pop()\n\t\t\tthis.data.pop()\n\t\t\t\n\t\t\tif( this.data.length === this.sub_from ) this.reap()\n\t\t\t\n\t\t}\n\t\t\n\t\t/**\n\t\t * Called when last sub was unsubscribed.\n\t\t **/\n\t\treap() { }\n\t\t\n\t\t/**\n\t\t * Autowire this publisher with current subscriber.\n\t\t **/\n\t\tpromote() {\n\t\t\t$mol_wire_auto()?.track_next( this )\n\t\t}\n\t\t\n\t\t/**\n\t\t * Enforce actualization. Should not throw errors.\n\t\t */\n\t\tfresh() {}\n\t\t\n\t\t/**\n\t\t * Allow to put data to caches in the subtree.\n\t\t */\n\t\tcomplete() {}\n\t\t\n\t\t/**\n\t\t * Notify subscribers about self changes.\n\t\t */\n\t\temit( quant = $mol_wire_cursor.stale ) {\n\t\t\tfor( let i = this.sub_from; i < this.data.length; i += 2 ) {\n\t\t\t\t;( this.data[i] as $mol_wire_sub ).absorb( quant )\n\t\t\t}\n\t\t}\n\t\t\n\t\t/**\n\t\t * Moves peer from one position to another. Doesn't clear data at old position!\n\t\t */\n\t\tpeer_move( from_pos: number, to_pos: number ) {\n\t\t\t\n\t\t\tconst peer = this.data[ from_pos ] as $mol_wire_pub\n\t\t\tconst self_pos = this.data[ from_pos + 1 ] as number\n\t\t\t\n\t\t\tthis.data[ to_pos ] = peer\n\t\t\tthis.data[ to_pos + 1 ] = self_pos\n\t\t\t\n\t\t\tpeer.peer_repos( self_pos, to_pos )\n\t\t}\n\t\t\n\t\t/**\n\t\t * Updates self position in the peer.\n\t\t */\n\t\tpeer_repos( peer_pos: number, self_pos: number ) {\n\t\t\tthis.data[ peer_pos + 1 ] = self_pos\n\t\t}\n\t\t\n\t}\n\t\n}\n",null,"namespace $ {\n\t\n\tlet auto: $mol_wire_sub | null = null\n\t\n\t/**\n\t * When fulfilled, all publishers are promoted to this subscriber on access to its.\n\t */\n\texport function $mol_wire_auto( next = auto ) {\n\t\treturn auto = next\n\t}\n\t\n\t/**\n\t * Affection queue. Used to prevent accidental stack overflow on emit.\n\t */\n\texport const $mol_wire_affected = [] as ( $mol_wire_sub | number )[]\n\t\n}\n","namespace $ {\n\n\t// https://docs.google.com/document/d/1FTascZXT9cxfetuPRT2eXPQKXui4nWFivUnS_335T3U/preview#\n\t$['devtoolsFormatters'] = $['devtoolsFormatters'] || []\n\n\texport function $mol_dev_format_register( config : {\n\t\theader : ( val : any , config : any )=> any\n\t\thasBody : ( val : any , config : any )=> false\n\t} | {\n\t\theader : ( val : any , config : any )=> any\n\t\thasBody : ( val : any , config : any )=> boolean\n\t\tbody : ( val : any , config : any )=> any\n\t} ) {\n\t\t$['devtoolsFormatters'].push( config )\n\t}\n\n\texport let $mol_dev_format_head = Symbol( '$mol_dev_format_head' )\n\texport let $mol_dev_format_body = Symbol( '$mol_dev_format_body' )\n\n\t$mol_dev_format_register({\n\n\t\theader : ( val : any , config = false ) => {\n\t\t\t\n\t\t\tif( config ) return null\n\n\t\t\tif( !val ) return null\n\t\t\t\n\t\t\tif( $mol_dev_format_head in val ) {\n\t\t\t\treturn val[ $mol_dev_format_head ]()\n\t\t\t}\n\t\t\t\n\t\t\tif( typeof val === 'function' ) {\n\t\t\t\treturn $mol_dev_format_native( val )\n\t\t\t}\n\n\t\t\treturn null\n\t\t\t\n\t\t} ,\n\t\t\n\t\thasBody : val => val[ $mol_dev_format_body ] ,\n\n\t\tbody : val => val[ $mol_dev_format_body ]() ,\n\n\t})\n\n\texport function $mol_dev_format_native( obj : any ) {\n\t\t\n\t\tif( typeof obj === 'undefined' ) return $mol_dev_format_shade( 'undefined' )\n\t\tif( typeof obj !== 'object' && typeof obj !== 'function' ) return obj\n\n\t\treturn [\n\t\t\t'object' ,\n\t\t\t{\n\t\t\t\tobject : obj ,\n\t\t\t\tconfig : true ,\n\t\t\t} ,\n\t\t]\n\n\t}\n\n\texport function $mol_dev_format_auto( obj : any ) {\n\t\t\n\t\tif( obj == null ) return $mol_dev_format_shade( String( obj ) )\n\n\t\tif( typeof obj === 'object' && $mol_dev_format_head in obj ) {\n\t\t\treturn obj[ $mol_dev_format_head ]()\n\t\t}\n\n\t\treturn [\n\t\t\t'object' ,\n\t\t\t{\n\t\t\t\tobject : obj ,\n\t\t\t\tconfig : false ,\n\t\t\t} ,\n\t\t]\n\n\t}\n\n\texport function $mol_dev_format_element( element : string , style : object , ...content : any[] ) {\n\t\t\t\n\t\tconst styles = [] as string[]\n\t\t\n\t\tfor( let key in style ) styles.push( `${ key } : ${ style[key] }` )\n\t\t\n\t\treturn [\n\t\t\telement ,\n\t\t\t{\n\t\t\t\tstyle : styles.join( ' ; ' ) ,\n\t\t\t} ,\n\t\t\t... content ,\n\t\t]\n\n\t}\n\n\texport function $mol_dev_format_span( style : object , ...content : any[] ) {\n\t\treturn $mol_dev_format_element(\n\t\t\t'span' ,\n\t\t\t{\n\t\t\t\t'vertical-align' : '8%',\n\t\t\t\t... style ,\n\t\t\t} ,\n\t\t\t... content ,\n\t\t)\n\t}\n\n\texport let $mol_dev_format_div = $mol_dev_format_element.bind( null , 'div' )\n\texport let $mol_dev_format_ol = $mol_dev_format_element.bind( null , 'ol' )\n\texport let $mol_dev_format_li = $mol_dev_format_element.bind( null , 'li' )\n\texport let $mol_dev_format_table = $mol_dev_format_element.bind( null , 'table' )\n\texport let $mol_dev_format_tr = $mol_dev_format_element.bind( null , 'tr' )\n\texport let $mol_dev_format_td = $mol_dev_format_element.bind( null , 'td' )\n\n\texport let $mol_dev_format_accent = $mol_dev_format_span.bind( null , {\n\t\t'color' : 'magenta' ,\n\t} )\n\n\texport let $mol_dev_format_strong = $mol_dev_format_span.bind( null , {\n\t\t'font-weight' : 'bold' ,\n\t} )\n\n\texport let $mol_dev_format_string = $mol_dev_format_span.bind( null , {\n\t\t'color' : 'green',\n\t} )\n\n\texport let $mol_dev_format_shade = $mol_dev_format_span.bind( null , {\n\t\t'color' : 'gray',\n\t} )\n\n\texport let $mol_dev_format_indent = $mol_dev_format_div.bind( null , {\n\t\t'margin-left': '13px'\n\t} )\n\n}\n","namespace $ {\n\t\n\t/**\n\t * Publisher that can auto collect other publishers. 32B\n\t * \n\t * \tP1 P2 P3 P4 S1 S2 S3\n\t * \t^ ^\n\t * \tpubs_from subs_from\n\t */\n\texport class $mol_wire_pub_sub extends $mol_wire_pub implements $mol_wire_sub {\n\t\t\n\t\tprotected pub_from = 0 // 4B\n\t\tprotected cursor = $mol_wire_cursor.stale // 4B\n\t\t\n\t\tget pub_list() {\n\t\t\tconst res = [] as $mol_wire_pub[]\n\t\t\tconst max = this.cursor >=0 ? this.cursor : this.sub_from\n\t\t\tfor( let i = this.pub_from; i < max; i += 2 ) {\n\t\t\t\tres.push( this.data[i] as $mol_wire_pub )\n\t\t\t}\n\t\t\treturn res\n\t\t}\n\t\t\n\t\ttrack_on() {\n\t\t\tthis.cursor = this.pub_from\n\t\t\tconst sub = $mol_wire_auto()\n\t\t\t$mol_wire_auto( this )\n\t\t\treturn sub\n\t\t}\n\t\t\n\t\tpromote() {\n\t\t\t\n\t\t\tif( this.cursor >= this.pub_from ) {\n\t\t\t\t$mol_fail( new Error( 'Circular subscription' ) )\n\t\t\t}\n\t\t\t\n\t\t\tsuper.promote()\n\t\t}\n\t\t\n\t\ttrack_next( pub?: $mol_wire_pub ): $mol_wire_pub | null {\n\t\t\t\n\t\t\tif( this.cursor < 0 ) $mol_fail( new Error( 'Promo to non begun sub' ) )\n\t\t\t\n\t\t\tif( this.cursor < this.sub_from ) {\n\t\t\t\n \t\t\t\tconst next = this.data[ this.cursor ] as $mol_wire_pub | undefined\n\t\t\t\tif( pub === undefined ) return next ?? null\n\t\t\t\t\n\t\t\t\tif( next === pub ) {\n\t\t\t\t\tthis.cursor += 2\n\t\t\t\t\treturn next\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif( next ) {\n\t\t\t\t\t\n\t\t\t\t\tif( this.sub_from < this.data.length ) {\n\t\t\t\t\t\tthis.peer_move( this.sub_from, this.data.length )\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tthis.peer_move( this.cursor, this.sub_from )\n\t\t\t\t\tthis.sub_from += 2\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\t\n\t\t\t} else {\n\t\t\t\t\n\t\t\t\tif( pub === undefined ) return null\n\t\t\t\t\n\t\t\t\tif( this.sub_from < this.data.length ) {\n\t\t\t\t\tthis.peer_move( this.sub_from, this.data.length )\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.sub_from += 2\n\t\t\t\t\n\t\t\t}\t\t\t\n\t\t\t\n\t\t\tthis.data[ this.cursor ] = pub\n\t\t\tthis.data[ this.cursor + 1 ] = pub.sub_on( this, this.cursor )\n\t\t\t\n\t\t\tthis.cursor += 2\n\t\t\t\n\t\t\treturn pub\n\t\t}\n\t\t\n\t\ttrack_off( sub: $mol_wire_sub | null ) {\n\t\t\t\n\t\t\t$mol_wire_auto( sub )\n\t\t\t\n\t\t\tif( this.cursor < 0 ) {\n\t\t\t\t$mol_fail( new Error( 'End of non begun sub' ) )\n\t\t\t}\n\t\t\t\n\t\t\tfor(\n\t\t\t\tlet cursor = this.pub_from;\n\t\t\t\tcursor < this.cursor;\n\t\t\t\tcursor += 2\n\t\t\t) {\n\t\t\t\tconst pub = this.data[ cursor ] as $mol_wire_pub\n\t\t\t\tpub.fresh()\n\t\t\t}\n\t\t\t\n\t\t\tthis.cursor = $mol_wire_cursor.fresh\n\t\t\t\n\t\t}\n\t\t\n\t\tpub_off( sub_pos: number ) {\n\t\t\tthis.data[ sub_pos ] = undefined as any\n\t\t\tthis.data[ sub_pos + 1 ] = undefined as any \n\t\t}\n\t\t\n\t\tdestructor() {\n\t\t\t\n\t\t\tfor(\n\t\t\t\tlet cursor = this.data.length - 2;\n\t\t\t\tcursor >= this.sub_from;\n\t\t\t\tcursor -= 2\n\t\t\t) {\n\t\t\t\tconst sub = this.data[ cursor ] as $mol_wire_sub\n\t\t\t\tconst pos = this.data[ cursor + 1 ] as number\n\t\t\t\tsub.pub_off( pos )\n\t\t\t\tthis.data.pop()\n\t\t\t\tthis.data.pop()\n\t\t\t}\n\t\t\t\n\t\t\tthis.cursor = this.pub_from\n\t\t\tthis.track_cut()\n\t\t\tthis.cursor = $mol_wire_cursor.final\n\t\t\t\n\t\t}\n\t\t\n\t\ttrack_cut() {\n\t\t\t\n\t\t\tif( this.cursor < this.pub_from ) {\n\t\t\t\t$mol_fail( new Error( 'Cut of non begun sub' ) )\n\t\t\t}\n\t\t\t\n\t\t\tlet tail = 0\n\t\t\t\n\t\t\tfor(\n\t\t\t\tlet cursor = this.cursor;\n\t\t\t\tcursor < this.sub_from;\n\t\t\t\tcursor += 2\n\t\t\t) {\n\t\t\t\t\n\t\t\t\tconst pub = this.data[ cursor ] as $mol_wire_pub | undefined\n\t\t\t\tpub?.sub_off( this.data[ cursor + 1 ] as number )\n\t\t\t\t\n\t\t\t\tif( this.sub_from < this.data.length ) {\n\t\t\t\t\tthis.peer_move( this.data.length - 2, cursor )\n\t\t\t\t\tthis.data.pop()\n\t\t\t\t\tthis.data.pop()\n\t\t\t\t} else {\n\t\t\t\t\t++ tail\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t\tfor(; tail; -- tail ) {\n\t\t\t\tthis.data.pop()\n\t\t\t\tthis.data.pop()\n\t\t\t}\n\t\t\t\n\t\t\tthis.sub_from = this.cursor\n\t\t\t\n\t\t}\n\t\t\n\t\tcomplete() { }\n\t\t\n\t\tcomplete_pubs() {\n\t\t\t\n\t\t\tconst limit = this.cursor < 0 ? this.sub_from : this.cursor \n\t\t\t\n\t\t\tfor(\n\t\t\t\tlet cursor = this.pub_from;\n\t\t\t\tcursor < limit;\n\t\t\t\tcursor += 2\n\t\t\t) {\n\t\t\t\tconst pub = this.data[ cursor ] as $mol_wire_pub\n\t\t\t\tpub?.complete()\n\t\t\t}\n\t\t\t\n\t\t}\n\n\t\tabsorb( quant = $mol_wire_cursor.stale ) {\n\t\t\t\n\t\t\tif( this.cursor === $mol_wire_cursor.final ) return\n\t\t\tif( this.cursor >= quant ) return\n\t\t\t\n\t\t\tthis.cursor = quant\n\t\t\tthis.emit( $mol_wire_cursor.doubt )\n\t\t\t\n\t\t}\n\t\t\n\t\t[ $mol_dev_format_head ]() {\n\t\t\treturn $mol_dev_format_native( this )\n\t\t}\n\t\t\n\t\t/**\n\t\t * Is subscribed to any publisher or not.\n\t\t */\n\t\tget pub_empty() {\n\t\t\treturn this.sub_from === this.pub_from\n\t\t}\n\t\t\n\t}\n\t\n}\n","namespace $ {\n\n\texport class $mol_after_frame extends $mol_object2 {\n\n\t\tstatic _promise = null as Promise | null\n\n\t\tstatic get promise() {\n\n\t\t\tif( this._promise ) return this._promise\n\t\t\t\n\t\t\treturn this._promise = new Promise( done => {\n\t\t\t\t\n\t\t\t\tconst complete = ()=> {\n\t\t\t\t\tthis._promise = null\n\t\t\t\t\tdone()\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif( typeof requestAnimationFrame === 'function' ) {\n\t\t\t\t\trequestAnimationFrame( complete )\n\t\t\t\t} else {\n\t\t\t\t\tsetTimeout( complete, 16 )\n\t\t\t\t}\n\t\t\t\t\n\t\t\t} )\n\n\t\t}\n\n\t\tcancelled = false\n\t\tpromise!: Promise\n\n\t\tconstructor(\n\t\t\tpublic task : ()=> void ,\n\t\t) {\n\t\t\tsuper()\n\n\t\t\tthis.promise = $mol_after_frame.promise.then( ()=> {\n\t\t\t\tif( this.cancelled ) return\n\t\t\t\ttask()\n\t\t\t} )\n\n\t\t}\n\n\t\tdestructor() {\n\t\t\tthis.cancelled = true\n\t\t}\n\n\t}\n\t\n}\n","namespace $ {\n\t\n\tconst handled = new WeakSet< Promise< unknown > >()\n\t\n\t/**\n\t * Suspendable task with support both sync/async api.\n\t * \n\t * \tA1 A2 A3 A4 P1 P2 P3 P4 S1 S2 S3\n\t * \t^ ^ ^\n\t * \targs_from pubs_from subs_from\n\t **/\n\texport abstract class $mol_wire_fiber<\n\t\tHost,\n\t\tArgs extends readonly unknown[],\n\t\tResult,\n\t> extends $mol_wire_pub_sub {\n\t\t\n\t\tstatic warm = true\n\t\t\n\t\tstatic planning = new Set< $mol_wire_fiber< any, any, any > >()\n\t\tstatic reaping = new Set< $mol_wire_fiber< any, any, any > >()\n\t\t\n\t\tstatic plan_task: $mol_after_frame | null = null\n\t\tstatic plan() {\n\t\t\t\n\t\t\tif( this.plan_task ) return\n\t\t\t\n\t\t\tthis.plan_task = new $mol_after_frame( ()=> {\n\t\t\t\t\n\t\t\t\ttry {\n\t\t\t\t\tthis.sync()\n\t\t\t\t} finally {\n\t\t\t\t\t$mol_wire_fiber.plan_task = null\n\t\t\t\t}\n\n\t\t\t} )\n\t\t\t\n\t\t}\n\t\t\n\t\tstatic sync() {\n\t\t\t\n\t\t\t// Sync whole fiber graph\n\t\t\twhile( this.planning.size ) {\n\t\t\t\tfor( const fiber of this.planning ) {\n\t\t\t\t\tthis.planning.delete( fiber )\n\t\t\t\t\tif( fiber.cursor >= 0 ) continue\n\t\t\t\t\tif( fiber.cursor === $mol_wire_cursor.final ) continue\n\t\t\t\t\tfiber.fresh()\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t// Collect garbage\n\t\t\twhile( this.reaping.size ) {\n\t\t\t\t\n\t\t\t\tconst fibers = this.reaping\n\t\t\t\tthis.reaping = new Set\n\t\t\t\t\n\t\t\t\tfor( const fiber of fibers ) {\n\t\t\t\t\tif( !fiber.sub_empty ) continue\n\t\t\t\t\tfiber.destructor()\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t}\n\t\t\n\t\tpublic cache: Result | Error | Promise< Result | Error > = undefined as any\n\t\t\n\t\tget args() {\n\t\t\treturn this.data.slice( 0 , this.pub_from ) as any as Args\n\t\t}\n\t\t\n\t\tresult() {\n\t\t\tif( this.cache instanceof Promise ) return\n\t\t\tif( this.cache instanceof Error ) return\n\t\t\treturn this.cache\n\t\t}\n\t\t\n\t\tfield() {\n\t\t\treturn this.task.name + '()'\n\t\t}\n\t\t\n\t\tconstructor(\n\t\t\tid: string,\n\t\t\treadonly task: ( this : Host , ... args : Args )=> Result,\n\t\t\treadonly host?: Host,\n\t\t\targs?: Args\n\t\t) {\n\t\t\t\n\t\t\tsuper()\n\t\t\tif( args ) this.data.push( ... args )\n\t\t\tthis.pub_from = this.sub_from = args?.length ?? 0\n\t\t\tthis[ Symbol.toStringTag ] = id\n\t\t\t\n\t\t}\n\t\t\n\t\tplan() {\n\t\t\t$mol_wire_fiber.planning.add( this )\n\t\t\t$mol_wire_fiber.plan()\n\t\t}\n\t\t\n\t\treap() {\n\t\t\t$mol_wire_fiber.reaping.add( this )\n\t\t\t$mol_wire_fiber.plan()\n\t\t}\n\t\t\n\t\ttoString() {\n\t\t\treturn this[ Symbol.toStringTag ]\n\t\t}\n\t\t\n\t\ttoJSON() {\n\t\t\treturn this[ Symbol.toStringTag ]\n\t\t}\n\n\t\t[ $mol_dev_format_head ]() {\n\t\t\t\n\t\t\tconst cursor = {\n\t\t\t\t[-1]: '🔴',\n\t\t\t\t[-2]: '🟡',\n\t\t\t\t[-3]: '🟢',\n\t\t\t\t[-4]: '🔵',\n\t\t\t}[ this.cursor ] ?? this.cursor.toString()\n\t\t\t\n\t\t\treturn $mol_dev_format_div( {},\n\t\t\t\t$mol_dev_format_native( this ),\n\t\t\t\t$mol_dev_format_shade( cursor + ' ' ),\n\t\t\t\t$mol_dev_format_auto( this.cache ),\n\t\t\t)\n\t\t\t\n\t\t}\n\t\t\n\t\tget $() {\n\t\t\treturn ( this.host ?? this.task )['$']\n\t\t}\n\t\t\n\t\temit( quant = $mol_wire_cursor.stale ) {\n\t\t\tif( this.sub_empty ) this.plan()\n\t\t\telse super.emit( quant )\n\t\t}\n\t\t\n\t\tfresh() {\n\n\t\t\ttype Result = typeof this.cache\n\t\t\t\n\t\t\tif( this.cursor === $mol_wire_cursor.fresh ) return\n\t\t\tif( this.cursor === $mol_wire_cursor.final ) return\n\t\t\t\n\t\t\tcheck: if( this.cursor === $mol_wire_cursor.doubt ) {\n\t\t\t\t\n\t\t\t\tfor( let i = this.pub_from ; i < this.sub_from; i += 2 ) {\n\t\t\t\t\t;( this.data[i] as $mol_wire_pub )?.fresh()\n\t\t\t\t\tif( this.cursor !== $mol_wire_cursor.doubt ) break check\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.cursor = $mol_wire_cursor.fresh\n\t\t\t\treturn\n\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t\tconst bu = this.track_on()\n\t\t\tlet result: typeof this.cache\n\n\t\t\ttry {\n\n\t\t\t\tswitch( this.pub_from ) {\n\t\t\t\t\tcase 0: result = (this.task as any).call( this.host! ); break\n\t\t\t\t\tcase 1: result = (this.task as any).call( this.host!, this.data[0] ); break\n\t\t\t\t\tdefault: result = (this.task as any).call( this.host!, ... this.args ); break\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif( result instanceof Promise ) {\n\t\t\t\t\t\n\t\t\t\t\tconst put = ( res: Result )=> {\n\t\t\t\t\t\tif( this.cache === result ) this.put( res )\n\t\t\t\t\t\treturn res\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tresult = Object.assign( result.then( put, put ), {\n\t\t\t\t\t\tdestructor: result['destructor']\n\t\t\t\t\t} )\n\t\t\t\t\t\n\t\t\t\t\thandled.add( result )\n\t\t\t\t}\n\t\t\t\t\n\t\t\t} catch( error: any ) {\n\t\t\t\t\n\t\t\t\tif( error instanceof Error || error instanceof Promise ) {\n\t\t\t\t\tresult = error\n\t\t\t\t} else {\n\t\t\t\t\tresult = new Error( String( error ), { cause: error } )\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif( result instanceof Promise && !handled.has( result ) ) {\n\t\t\t\t\t\n\t\t\t\t\tresult = Object.assign( result.finally( ()=> {\n\t\t\t\t\t\tif( this.cache === result ) this.absorb()\n\t\t\t\t\t} ), {\n\t\t\t\t\t\tdestructor: result['destructor']\n\t\t\t\t\t} )\n\t\t\t\t\t\n\t\t\t\t\thandled.add( result )\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t\tif(!( result instanceof Promise )) {\n\t\t\t\tthis.track_cut()\n\t\t\t}\n\t\t\t\n\t\t\tthis.track_off( bu )\n\t\t\tthis.put( result )\n\n\t\t}\n\t\t\n\t\trefresh() {\n\t\t\tthis.cursor = $mol_wire_cursor.stale\n\t\t\tthis.fresh()\n\t\t}\n\t\t\n\t\tabstract put( next: Result | Error | Promise< Result | Error > ): Result | Error | Promise< Result | Error >\n\t\t\n\t\t/**\n\t\t * Synchronous execution. Throws Promise when waits async task (SuspenseAPI provider).\n\t\t * Should be called inside SuspenseAPI consumer (ie fiber).\n\t\t */\n\t\tsync() {\n\t\t\t\n\t\t\tif( !$mol_wire_fiber.warm ) {\n\t\t\t\treturn this.result() as Awaited< Result >\n\t\t\t}\n\t\t\t\n\t\t\tthis.promote()\n\t\t\tthis.fresh()\n\t\t\t\n\t\t\tif( this.cache instanceof Error ) {\n\t\t\t\treturn $mol_fail_hidden( this.cache )\n\t\t\t}\n\t\t\t\n\t\t\tif( this.cache instanceof Promise ) {\n\t\t\t\treturn $mol_fail_hidden( this.cache )\n\t\t\t}\n\t\t\t\n\t\t\treturn this.cache as Awaited< Result >\n\t\t}\n\n\t\t/**\n\t\t * Asynchronous execution.\n\t\t * It's SuspenseAPI consumer. So SuspenseAPI providers can be called inside.\n\t\t */\n\t\tasync async() {\n\t\t\t\n\t\t\twhile( true ) {\n\t\t\t\t\n\t\t\t\tthis.fresh()\n\t\t\t\t\n\t\t\t\tif( this.cache instanceof Error ) {\n\t\t\t\t\t$mol_fail_hidden( this.cache )\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(!( this.cache instanceof Promise )) return this.cache\n\t\t\t\t\t\n\t\t\t\tawait this.cache\n\t\t\t\t\t\n\t\t\t\tif( this.cursor === $mol_wire_cursor.final ) {\n\t\t\t\t\t// never ends on destructed fiber\n\t\t\t\t\tawait new Promise( ()=> {} )\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t}\n\t\t\n\t}\n\t\n}\n","namespace $ {\n\n\t/** Generates unique identifier. */\n\texport function $mol_guid(\n\t\tlength = 8,\n\t\texists: ( id: string )=> boolean = ()=> false,\n\t) {\n\n\t\tfor(;;) {\n\n\t\t\tlet id = Math.random().toString( 36 ).substring( 2, length + 2 ).toUpperCase()\n\t\t\tif( exists( id ) ) continue\n\t\t\t\n\t\t\treturn id\n\t\t}\n\n\t}\n\n}\n","namespace $ {\n\t\n\texport const $mol_key_store = new WeakMap< object, string >()\n\n\texport function $mol_key< Value >( value : Value ) : string {\n\t\t\n\t\tif( !value ) return JSON.stringify( value )\n\t\tif( typeof value !== 'object' && typeof value !== 'function' ) return JSON.stringify( value )\n\t\t\n\t\treturn JSON.stringify( value, ( field, value )=> {\n\t\t\t\n\t\t\tif( !value ) return value\n\t\t\tif( typeof value !== 'object' && typeof value !== 'function' ) return value\n\t\t\tif( Array.isArray( value ) ) return value\n\t\t\t\n\t\t\tconst proto = Reflect.getPrototypeOf( value )\n\t\t\tif( !proto ) return value\n\t\t\tif( Reflect.getPrototypeOf( proto ) === null ) return value\n\t\t\t\n\t\t\tif( 'toJSON' in value ) return value\n\t\t\tif( value instanceof RegExp ) return value.toString()\n\t\t\t\n\t\t\tlet key = $mol_key_store.get( value )\n\t\t\tif( key ) return key\n\t\t\t\n\t\t\tkey = $mol_guid()\n\t\t\t$mol_key_store.set( value, key )\n\t\t\t\n\t\t\treturn key\n\t\t} )\n\n\t}\n\t\n}\n","namespace $ {\n\n\texport let $mol_compare_deep_cache = new WeakMap< any , WeakMap< any , boolean > >()\n\t\n\t/**\n\t * Deeply compares two values. Returns true if equal.\n\t * Define `Symbol.toPrimitive` to customize.\n\t */\n\texport function $mol_compare_deep< Value >( left: Value, right: Value ): boolean {\n\n\t\tif( Object.is( left , right ) ) return true\n\n\t\tif( left === null ) return false\n\t\tif( right === null ) return false\n\n\t\tif( typeof left !== 'object' ) return false\n\t\tif( typeof right !== 'object' ) return false\n\n\t\tconst left_proto = Reflect.getPrototypeOf( left as any )\n\t\tconst right_proto = Reflect.getPrototypeOf( right as any )\n\t\t\n\t\tif( left_proto !== right_proto ) return false\n\n\t\tif( left instanceof Boolean ) return Object.is( left.valueOf(), right['valueOf']() )\n\t\tif( left instanceof Number ) return Object.is( left.valueOf(), right['valueOf']() )\n\t\tif( left instanceof String ) return Object.is( left.valueOf(), right['valueOf']() )\n\t\tif( left instanceof Date ) return Object.is( left.valueOf(), right['valueOf']() )\n\t\tif( left instanceof RegExp ) return left.source === right['source'] && left.flags === right['flags']\n\n\t\tlet left_cache = $mol_compare_deep_cache.get( left )\n\t\tif( left_cache ) {\n\n\t\t\tconst right_cache = left_cache.get( right )\n\t\t\tif( typeof right_cache === 'boolean' ) return right_cache\n\n\t\t} else {\n\t\t\t\n\t\t\tleft_cache = new WeakMap< any , boolean >([[ right, true ]])\n\t\t\t$mol_compare_deep_cache.set( left , left_cache )\n\n\t\t}\n\n\t\tlet result!: boolean\n\n\t\ttry {\n\t\t\t\n\t\t\tif( left_proto && !Reflect.getPrototypeOf( left_proto ) ) result = compare_pojo( left, right as any )\n\t\t\telse if( Array.isArray( left ) ) result = compare_array( left, right as any )\n\t\t\telse if( left instanceof Set ) result = compare_set( left, right as any )\n\t\t\telse if( left instanceof Map ) result = compare_map( left, right as any )\n\t\t\telse if( left instanceof Error ) result = left.stack === ( right as any ).stack\n\t\t\telse if( ArrayBuffer.isView( left ) ) result = compare_buffer( left, right as any )\n\t\t\telse if( Symbol.toPrimitive in left ) result = compare_primitive( left, right )\n\t\t\telse result = false\n\n\t\t} finally {\n\t\t\tleft_cache.set( right , result )\n\t\t}\n\t\t\n\t\treturn result\n\t}\n\n\tfunction compare_array< Value extends any[] >( left: Value, right: Value ): boolean {\n\t\t\n\t\tconst len = left.length\n\t\tif( len !== right.length ) return false\n\t\t\n\t\tfor( let i = 0; i < len; ++i ) {\n\t\t\tif( !$mol_compare_deep( left[i] , right[i] ) ) return false\n\t\t}\n\t\t\n\t\treturn true\n\t}\n\t\n\tfunction compare_buffer( left: ArrayBufferView, right: ArrayBufferView ): boolean {\n\t\t\n\t\tconst len = left.byteLength\n\t\tif( len !== right.byteLength ) return false\n\t\t\n\t\tfor( let i = 0; i < len; ++i ) {\n\t\t\tif( left[i] !== right[i] ) return false\n\t\t}\n\t\t\n\t\treturn true\n\t}\n\t\n\tfunction compare_iterator< Value extends IterableIterator >(\n\t\tleft: Value,\n\t\tright: Value,\n\t\tcompare: ( left: any, right: any )=> boolean\n\t): boolean {\n\t\t\n\t\twhile( true ) {\n\n\t\t\tconst left_next = left.next()\n\t\t\tconst right_next = right.next()\n\n\t\t\tif( left_next.done !== right_next.done ) return false\n\t\t\tif( left_next.done ) break\n\n\t\t\tif( !compare( left_next.value , right_next.value ) ) return false\n\n\t\t}\n\n\t\treturn true\n\n\t}\n\t\n\tfunction compare_set< Value extends Set >( left: Value, right: Value ): boolean {\n\t\tif( left.size !== right.size ) return false\n\t\treturn compare_iterator( left.values(), right.values(), $mol_compare_deep )\n\t}\n\t\n\tfunction compare_map< Key, Value >( left: Map< Key, Value > , right: Map< Key, Value > ): boolean {\n\t\tif( left.size !== right.size ) return false\n\t\treturn compare_iterator( left.keys(), right.keys(), Object.is )\n\t\t\t&& compare_iterator( left.values(), right.values(), $mol_compare_deep )\n\t}\n\t\n\tfunction compare_pojo( left: {}, right: {} ): boolean {\n\t\t\n\t\tconst left_keys = Object.getOwnPropertyNames( left )\n\t\tconst right_keys = Object.getOwnPropertyNames( right )\n\t\t\n\t\tif( left_keys.length !== right_keys.length ) return false\n\n\t\tfor( let key of left_keys ) {\n\t\t\tif( !$mol_compare_deep( left[ key ], Reflect.get( right, key ) ) ) return false\n\t\t}\n\n\t\treturn true\n\t}\n\t\n\tfunction compare_primitive( left: {}, right: {} ): boolean {\n\t\treturn Object.is(\n\t\t\tleft[ Symbol.toPrimitive ]( 'default' ),\n\t\t\tright[ Symbol.toPrimitive ]( 'default' ),\n\t\t)\n\t}\n\t\n}\n","namespace $ {\n\t\n\texport class $mol_wire_task<\n\t\tHost,\n\t\tArgs extends readonly unknown[],\n\t\tResult,\n\t> extends $mol_wire_fiber< Host, Args, Result > {\n\t\t\n\t\tstatic getter<\n\t\t\tHost,\n\t\t\tArgs extends readonly unknown[],\n\t\t\tResult,\n\t\t>(\n\t\t\ttask: ( this : Host , ... args : Args )=> Result,\n\t\t): ( host: Host, args: Args )=> $mol_wire_task< Host, [ ... Args ], Result > {\n\t\t\t\n\t\t\treturn function $mol_wire_task_get( host: Host, args: Args ) {\n\t\t\t\t\n\t\t\t\tconst existen = $mol_wire_auto()?.track_next()\n\t\t\t\n\t\t\t\treuse: if( existen ) {\n\t\t\t\t\t\n\t\t\t\t\tif(!( existen instanceof $mol_wire_task )) break reuse\n\t\t\t\t\n\t\t\t\t\tif( existen.host !== host ) break reuse\n\t\t\t\t\tif( existen.task !== task ) break reuse\n\t\t\t\t\tif( !$mol_compare_deep( existen.args, args ) ) break reuse\n\t\t\t\t\t\n\t\t\t\t\treturn existen\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn new $mol_wire_task( `${ host?.[ Symbol.toStringTag ] ?? host }.${ task.name }(#)`, task, host, args )\n\t\t\t}\n\t\t\t\n\t\t}\n\n\t\tcomplete() {\n\t\t\tthis.destructor()\n\t\t}\n\t\t\n\t\tput( next: Result | Error | Promise< Result | Error > ) {\n\t\t\t\n\t\t\tconst prev = this.cache\n\t\t\tthis.cache = next\n\t\t\t\n\t\t\tif( next instanceof Promise ) {\n\t\t\t\t\n\t\t\t\tthis.cursor = $mol_wire_cursor.fresh\n\t\t\t\tif( next !== prev ) this.emit()\n\t\t\t\t\n\t\t\t\treturn next\n\t\t\t}\n\t\t\t\n\t\t\tthis.cursor = $mol_wire_cursor.final\n\t\t\t\n\t\t\tif( this.sub_empty ) this.destructor()\n\t\t\telse if( next !== prev ) this.emit()\n\t\t\t\n\t\t\treturn next\n\t\t}\n\t\t\n\t}\n\n}\n","namespace $ {\n\t\n\texport function $mol_wire_method<\n\t\tHost extends object,\n\t\tArgs extends readonly any[],\n\t\tResult,\n\t>(\n\t\thost : Host,\n\t\tfield : PropertyKey,\n\t\tdescr? : TypedPropertyDescriptor< ( ... args: Args )=> Result >,\n\t) {\n\t\t\n\t\tif( !descr ) descr = Reflect.getOwnPropertyDescriptor( host , field )\n\t\tconst orig = descr?.value! ?? host[ field ]\n\t\t\n\t\tconst sup = Reflect.getPrototypeOf( host )!\t\n\t\tif( typeof sup[ field as any ] === 'function' ) {\n\t\t\tObject.defineProperty( orig , 'name' , { value : sup[ field as any ].name } )\n\t\t}\n\t\t\n\t\tconst temp = $mol_wire_task.getter( orig )\n\t\tconst value = function( this: Host, ... args: Args ) {\n\t\t\tconst fiber = temp( this ?? null as any, args )\n\t\t\treturn fiber.sync() as Result\n\t\t}\n\t\t\n\t\tObject.defineProperty( value , 'name' , { value : orig.name + ' ' } )\n\t\t\n\t\tObject.assign( value, { orig } )\n\t\tconst descr2 = { ... descr, value }\n\t\tReflect.defineProperty( host, field, descr2 )\n\t\t\n\t\treturn descr2\n\t\t\n\t}\n\t\n}\n","namespace $ {\n\n\texport class $mol_wire_atom<\n\t\tHost,\n\t\tArgs extends readonly unknown[],\n\t\tResult,\n\t> extends $mol_wire_fiber< Host, Args, Result > {\n\n\t\tstatic getter<\n\t\t\tHost,\n\t\t\tArgs extends readonly unknown[],\n\t\t\tResult,\n\t\t>(\n\t\t\ttask: ( this : Host , ... args : Args )=> Result,\n\t\t\tkeys: number,\n\t\t): ( host: Host, args: Args )=> $mol_wire_atom< Host, [ ... Args ], Result > {\n\t\t\t\n\t\t\tconst field = task.name + '()'\n\t\t\t\n\t\t\tif( keys ) {\n\t\t\t\t\n\t\t\t\treturn function $mol_wire_atom_get( host: Host, args: Args ) {\n\t\t\t\t\t\n\t\t\t\t\tlet dict, key!: string, fiber\n\t\t\t\t\t\n\t\t\t\t\tkey = `${ host?.[ Symbol.toStringTag ] ?? host }.${ task.name }(${ args.map( v => $mol_key( v ) ).join(',') })`\n\t\t\t\t\tdict = Object.getOwnPropertyDescriptor( host ?? task, field )?.value\n\t\t\t\t\t\n\t\t\t\t\tif( dict ) {\n\t\t\t\t\t\tconst existen = dict.get( key )\n\t\t\t\t\t\tif( existen ) return existen\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdict = ( host ?? task )[ field ] = new Map()\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tfiber = new $mol_wire_atom( key, task, host, args )\n\t\t\t\t\tdict.set( key, fiber )\n\t\t\t\t\t\n\t\t\t\t\treturn fiber\n\t\t\t\t}\n\t\t\t\t\n\t\t\t} else {\n\t\t\t\t\n\t\t\t\treturn function $mol_wire_atom_get( host: Host, args: Args ) {\n\t\t\t\t\t\n\t\t\t\t\tconst existen = Object.getOwnPropertyDescriptor( host ?? task, field )?.value\n\t\t\t\t\tif( existen ) return existen\n\t\t\t\t\t\n\t\t\t\t\tconst key = `${ host?.[ Symbol.toStringTag ] ?? host }.${ field }`\n\t\t\t\t\t\n\t\t\t\t\tconst fiber = new $mol_wire_atom( key, task, host, args )\n\t\t\t\t\t;( host ?? task )[ field ] = fiber\n\t\t\t\t\t\n\t\t\t\t\treturn fiber\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t}\n\t\t\n\t\tstatic watching = new Set< $mol_wire_atom< any, any, any > >()\n\t\t\n\t\tstatic watch() {\n\t\t\n\t\t\tnew $mol_after_frame( $mol_wire_atom.watch )\n\t\t\t\n\t\t\tfor( const atom of $mol_wire_atom.watching ) {\n\t\t\t\t\n\t\t\t\tif( atom.cursor === $mol_wire_cursor.final ) {\n\t\t\t\t\t$mol_wire_atom.watching.delete( atom )\n\t\t\t\t} else {\n\t\t\t\t\tatom.cursor = $mol_wire_cursor.stale\n\t\t\t\t\tatom.fresh()\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t}\n\t\t\n\t\twatch() {\n\t\t\t$mol_wire_atom.watching.add( this )\n\t\t}\n\t\t\n\t\t/**\n\t\t * Update fiber value through another temp fiber.\n\t\t */\n\t\t@ $mol_wire_method\n\t\tresync( args: Args ) {\n\t\t\treturn this.put( this.task.call( this.host!, ... args ) )\n\t\t}\n\t\t\n\t\t@ $mol_wire_method\n\t\tonce() {\n\t\t\treturn this.sync()\n\t\t}\n\t\t\n\t\tdestructor() {\n\t\t\t\n\t\t\tsuper.destructor()\n\t\t\t\n\t\t\tconst prev = this.cache\n\t\t\tif( $mol_owning_check( this, prev ) ) {\n\t\t\t\tprev.destructor()\n\t\t\t}\n\t\t\t\n\t\t\tif( this.pub_from === 0 ) {\n\t\t\t\t;( this.host ?? this.task )[ this.field() ] = null\n\t\t\t} else {\n\t\t\t\t;( this.host ?? this.task )[ this.field() ].delete( this[ Symbol.toStringTag ] )\n\t\t\t}\n\t\t\t\n\t\t}\n\t\t\n\t\tput( next: Result | Error | Promise< Result | Error > ) {\n\t\t\t\n\t\t\tconst prev = this.cache\n\t\t\t\n\t\t\tif( next !== prev ) {\n\t\t\t\t\n\t\t\t\tif( $mol_owning_check( this, prev ) ) {\n\t\t\t\t\tprev.destructor()\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.cache = next\n\t\t\t\t\n\t\t\t\tif( $mol_owning_catch( this, next ) ) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tnext[ Symbol.toStringTag ] = this[ Symbol.toStringTag ]\n\t\t\t\t\t} catch {} // Promises throws in strict mode\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif( this.sub_from < this.data.length ) {\n\t\t\t\t\tif( !$mol_compare_deep( prev, next ) ) {\n\t\t\t\t\t\tthis.emit()\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t\tthis.cursor = $mol_wire_cursor.fresh\n\t\t\t\n\t\t\tif( next instanceof Promise ) return next\n\t\t\t\n\t\t\tthis.complete_pubs()\n\t\t\t\n\t\t\treturn next\n\t\t}\n\t\t\n\t}\n\t\n\t$mol_wire_atom.watch()\n\t\n}\n","namespace $ {\n\t\n\texport function $mol_wire_mem< Keys extends number >( keys: Keys ) {\n\t\t\n\t\tconst wrap = $mol_wire_mem_func( keys )\n\t\n\t\treturn <\n\t\t\tHost extends object ,\n\t\t\tField extends keyof Host ,\n\t\t\tProp extends Extract< Host[ Field ] , ( ... args: any[] )=> any >,\n\t\t>(\n\t\t\thost : Host ,\n\t\t\tfield : Field ,\n\t\t\tdescr? : TypedPropertyDescriptor< Prop >\n\t\t)=> {\n\n\t\t\tif( !descr ) descr = Reflect.getOwnPropertyDescriptor( host , field )\n\t\t\tconst orig = descr?.value! ?? host[ field ]\n\t\t\t\n\t\t\tconst sup = Reflect.getPrototypeOf( host )!\n\t\t\tif( typeof sup[ field as any ] === 'function' ) {\n\t\t\t\tObject.defineProperty( orig , 'name' , { value : sup[ field as any ].name } )\n\t\t\t}\n\t\t\t\n\t\t\tconst descr2 = {\n\t\t\t\t... descr,\n\t\t\t\tvalue: wrap( orig )\n\t\t\t}\n\t\t\t\n\t\t\tReflect.defineProperty( host, field, descr2 )\n\t\t\t\n\t\t\treturn descr2\n\n\t\t}\n\t\t\n\t}\n\t\n\texport function $mol_wire_mem_func< Keys extends number >( keys: Keys ) {\n\t\t\n\t\treturn <\n\t\t\tResult,\n\t\t\tHost,\n\t\t\tArgs extends unknown[],\n\t\t\tFunc extends ( this: Host, ... args: Args )=> Result\n\t\t>( func: Func )=> {\n\t\t\t\n\t\t\tconst persist = $mol_wire_atom.getter( func, keys )\n\t\t\t\n\t\t\tconst wrapper = function( this: Host, ... args: Parameters< Func > ){\n\t\t\t\t\n\t\t\t\tlet atom = persist( this, args.slice( 0, keys ) as Args )\n\t\t\t\t\n\t\t\t\tif( args.length <= keys || args[ keys ] === undefined ) {\n\t\t\t\t\t\n\t\t\t\t\tif( !$mol_wire_fiber.warm ) return atom.result()\n\t\t\t\t\t\n\t\t\t\t\tif( $mol_wire_auto() instanceof $mol_wire_task ) {\n\t\t\t\t\t\treturn atom.once()\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn atom.sync()\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn atom.resync( args )\n\n\t\t\t}\n\t\t\t\n\t\t\tObject.defineProperty( wrapper , 'name' , { value : func.name + ' ' } )\n\t\t\tObject.assign( wrapper, { orig: func } )\n\t\t\t\n\t\t\treturn wrapper as unknown as Func\n\t\t}\n\t\t\n\t}\n\n}\n","namespace $ {\n\texport let $mol_mem = $mol_wire_mem(0)\n\texport let $mol_mem_key = $mol_wire_mem(1)\n\texport let $mol_mem_key2 = $mol_wire_mem(2)\n\texport let $mol_mem_key3 = $mol_wire_mem(3)\n}\n","namespace $ {\n\t\n\texport class $mol_window extends $mol_object {\n\t\t\n\t\t@ $mol_mem\n\t\tstatic size() {\n\t\t\tthis.resizes()\n\t\t\treturn {\n\t\t\t\twidth: self.innerWidth,\n\t\t\t\theight: self.innerHeight,\n\t\t\t}\n\t\t}\n\t\t\n\t\t@ $mol_mem\n\t\tstatic resizes( next?: Event ) { return next }\n\t\t\n\t}\n\n\tself.addEventListener( 'resize', event => $mol_window.resizes( event ) )\n\t\n}\n","namespace $ {\n\n\tconst cacthed = new WeakMap< any , boolean >()\n\n\texport function $mol_fail_catch( error: unknown ) {\n\t\t\n\t\tif( typeof error !== 'object' ) return false\n\t\tif( cacthed.get( error ) ) return false\n\t\t\n\t\tcacthed.set( error , true )\n\t\treturn true\n\t\t\n\t}\n\t\n}\n","namespace $ {\n\t\n\texport function $mol_fail_log( error: unknown ) {\n\t\t\n\t\tif( error instanceof Promise ) return false\n\t\tif( !$mol_fail_catch( error ) ) return false\n\t\t\n\t\tconsole.error( error )\n\t\treturn true\n\t\t\n\t}\n\n}\n","namespace $ {\n\t\n\texport class $mol_view_selection extends $mol_object {\n\t\t\n\t\t@ $mol_mem\n\t\tstatic focused( next? : Element[] ) : Element[] {\n\t\t\t\n\t\t\tconst parents : Element[] = []\n\t\t\tlet element = next?.[ 0 ] ?? $mol_dom_context.document.activeElement\n\t\t\t\n\t\t\twhile( element ) {\n\t\t\t\tparents.push( element )\n\t\t\t\telement = element.parentNode as HTMLElement\n\t\t\t}\n\n\t\t\tnew $mol_after_tick( ()=> {\n\n\t\t\t\tconst element = this.focused()![0] as HTMLElement\n\t\t\t\t\n\t\t\t\tif( element ) element.focus()\n\t\t\t\telse $mol_dom_context.blur()\n\n\t\t\t} )\n\n\t\t\treturn parents\n\t\t}\n\t\t\n\t}\n\t\n}\n","namespace $ {\n\t\n\texport function $mol_maybe< Value >( value : Value | null | undefined ) : Value[] {\n\t\treturn ( value == null ) ? [] : [ value ]\n\t}\n\t\n}\n","namespace $ {\n\t\n\tif( $mol_dom_context.document ) {\n\n\t\t$mol_dom_context.document.documentElement.addEventListener(\n\t\t\t'focus' ,\n\t\t\t( event : FocusEvent )=> {\n\t\t\t\t$mol_view_selection.focused( $mol_maybe( $mol_dom_context.document.activeElement ) )\n\t\t\t} ,\n\t\t\ttrue ,\n\t\t)\n\t\t\n\t\t// $mol_dom_context.document.documentElement.addEventListener(\n\t\t// \t'blur' ,\n\t\t// \t( event : FocusEvent )=> {\n\t\t// \t\t$mol_view_selection.focused( $mol_maybe( $mol_dom_context.document.activeElement ) )\n\t\t// \t} ,\n\t\t// \ttrue ,\n\t\t// )\n\t\n\t}\n\t\n}\n","namespace $ {\n\n\texport class $mol_wrapper extends $mol_object2 {\n\n\t\tstatic wrap : ( task : ( ... ags : any[] )=> any )=> ( ... ags : any[] )=> any\n\t\t\n\t\tstatic run< Result >( task : ()=> Result ) : Result {\n\t\t\treturn this.func( task )()\n\t\t}\n\t\n\t\tstatic func< Args extends any[] , Result , Host = void >(\n\t\t\tfunc : ( this : Host , ... args : Args )=> Result\n\t\t) : ( this : Host , ... args : Args )=> Result {\n\t\t\treturn this.wrap( func )\n\t\t}\n\n\t\tstatic get class() {\n\n\t\t\treturn < Class extends new ( ... args : any[] )=> any >(\n\t\t\t\tClass : Class\n\t\t\t) => {\n\n\t\t\t\ttype Args = ConstructorParameters< Class >\n\t\t\t\ttype Result = InstanceType< Class >\n\n\t\t\t\tconst construct = ( target : new ( ... args : Args )=> Result , args : Args )=> new Class( ... args )\n\n\t\t\t\tconst handler = {\n\t\t\t\t\tconstruct : this.func( construct )\n\t\t\t\t}\n\n\t\t\t\thandler[ Symbol.toStringTag ] = Class.name + '#'\n\n\t\t\t\treturn new Proxy( Class , handler )\n\t\t\t\t\n\t\t\t}\n\n\t\t}\n\n\t\tstatic get method() {\n\t\t\t\n\t\t\treturn (\n\t\t\t\tobj : object,\n\t\t\t\tname : PropertyKey,\n\t\t\t\tdescr : PropertyDescriptor,\n\t\t\t) => {\n\t\t\t\tdescr.value = this.func( descr.value! )\n\t\t\t\treturn descr\n\t\t\t}\n\t\t\t\n\t\t}\n\n\t\tstatic get field() {\n\t\t\t\n\t\t\treturn <\n\t\t\t\tHost ,\n\t\t\t\tField extends keyof Host ,\n\t\t\t\tArgs extends any[] ,\n\t\t\t\tResult ,\n\t\t\t>(\n\t\t\t\tobj : Host ,\n\t\t\t\tname : Field ,\n\t\t\t\tdescr : TypedPropertyDescriptor< Result >\n\t\t\t) => {\n\t\t\t\tdescr.get = descr.set = this.func( descr.get! )\n\t\t\t\treturn descr\n\t\t\t}\n\t\t\t\n\t\t}\n\n\t}\n\n}\n","namespace $ {\n\n\texport class $mol_memo extends $mol_wrapper {\n\t\t\n\t\tstatic wrap< This extends object , Value >( task : ( this : This , next? : Value )=> Value ) {\n\n\t\t\tconst store = new WeakMap< This , Value >()\n\n\t\t\treturn function( this : This , next? : Value ) {\n\n\t\t\t\tif( next === undefined && store.has( this ) ) return store.get( this )\n\t\t\t\t\n\t\t\t\tconst val = task.call( this , next ) ?? next\n\t\t\t\t\n\t\t\t\tstore.set( this , val! )\n\t\t\t\t\n\t\t\t\treturn val\n\n\t\t\t}\n\n\t\t}\n\t\t\n\t}\n\n}\n","namespace $ {\n\n\texport function $mol_dom_qname( name : string ) {\n\t\treturn name.replace( /\\W/g , '' ).replace( /^(?=\\d+)/ , '_' )\n\t}\n\n}\n","namespace $ {\n\t\n\t/**\n\t * Real-time refresh current atom.\n\t * Don't use if possible. May reduce performance.\n\t */\n\texport function $mol_wire_watch() {\n\t\tconst atom = $mol_wire_auto()\n\t\tif( atom instanceof $mol_wire_atom ) {\n\t\t\tatom.watch()\n\t\t} else {\n\t\t\t$mol_fail( new Error( 'Atom is equired for watching' ) )\n\t\t}\n\t}\n\t\n}\n","namespace $ { \n\texport function $mol_const< Value >( value : Value ) {\n\t\tvar getter = <{ () : Value , '()' : Value }> ( () => value )\n\t\tgetter['()'] = value\n\t\tgetter[ Symbol.toStringTag ] = value\n\t\treturn getter\n\t}\n}\n","namespace $ {\n\t\n\texport function $mol_dom_render_attributes (\n\t\tel : Element ,\n\t\tattrs : { [ key : string ] : string|number|boolean|null }\n\t) {\n\n\t\tfor( let name in attrs ) {\n\n\t\t\tlet val = attrs[ name ] as any\n\n\t\t\tif( val === null || val === false ) {\n\n\t\t\t\tif( !el.hasAttribute( name ) ) continue\n\t\t\t\t\n\t\t\t\tel.removeAttribute( name )\n\n\t\t\t} else {\n\t\t\t\t\n\t\t\t\tconst str = String( val )\n\t\t\t\tif( el.getAttribute( name ) === str ) continue\n\t\t\t\t\n\t\t\t\tel.setAttribute( name , str )\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n","namespace $ {\n\t\n\texport function $mol_wire_async< Host extends object >( obj: Host ) {\n\t\treturn new Proxy( obj, {\n\t\t\t\n\t\t\tget( obj, field ) {\n\t\t\t\t\n\t\t\t\tconst val = obj[ field ]\n\t\t\t\tif( typeof val !== 'function' ) return val\n\t\t\t\t\n\t\t\t\tlet fiber: $mol_wire_fiber< any, any, any >\n\t\t\t\tconst temp = $mol_wire_task.getter( val ) \n\t\t\t\t\n\t\t\t\treturn function $mol_wire_async( this: Host, ... args: any[] ) {\n\t\t\t\t\t\n\t\t\t\t\tfiber?.destructor()\n\t\t\t\t\t\n\t\t\t\t\tfiber = temp( obj, args )\n\t\t\t\t\treturn fiber.async()\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\t\n\t\t\t},\n\t\t\t\n\t\t\tapply( obj, self, args ) {\n\t\t\t\tconst temp = $mol_wire_task.getter( obj as ( ... args: any[] )=> any )\n\t\t\t\tconst fiber = temp( self, args )\n\t\t\t\treturn fiber.async()\n\t\t\t},\n\t\t\t\n\t\t} ) as any as (\n\t\t\tHost extends ( ... args: infer Args )=> infer Res\n\t\t\t\t? Res extends Promise\n\t\t\t\t\t? Host\n\t\t\t\t\t: ( ... args: Args )=> Promise< Res >\n\t\t\t\t: {}\n\t\t) & {\n\t\t\t[ key in keyof Host ]: Host[ key ] extends ( ... args: infer Args )=> infer Res\n\t\t\t\t? Res extends Promise\n\t\t\t\t\t? Host[ key ]\n\t\t\t\t\t: ( ... args: Args )=> Promise< Res >\n\t\t\t\t: Host[ key ]\n\t\t}\n\t}\n\t\n}\n","namespace $ {\n\t\n\texport function $mol_dom_render_styles (\n\t\tel : Element ,\n\t\tstyles : { [ key : string ] : string|number }\n\t) {\n\t\tfor( let name in styles ) {\n\t\t\tlet val = styles[ name ]\n\t\t\t\n\t\t\tconst style = ( el as HTMLElement ).style as any\n\t\t\t\n\t\t\tif( typeof val === 'number' ) {\n\t\t\t\tstyle[ name ] = `${ val }px`\n\t\t\t} else {\n\t\t\t\tstyle[ name ] = val\n\t\t\t}\n\t\t\t\n\t\t}\n\t}\n\n}\n","namespace $ {\n\n\texport function $mol_dom_render_children (\n\t\tel : Element | DocumentFragment ,\n\t\tchildNodes : NodeList | Array< Node | string | null >\n\t) {\n\t\tconst node_set = new Set< Node | string | null >( childNodes )\n\t\t\n\t\tlet nextNode : Node | null = el.firstChild\n\t\tfor( let view of childNodes ) {\n\n\t\t\tif( view == null ) continue\n\n\t\t\tif( view instanceof $mol_dom_context.Node ) {\n\t\t\t\t\n\t\t\t\twhile( true ) {\n\t\t\t\t\tif( !nextNode ) {\n\t\t\t\t\t\tel.appendChild( view )\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\tif( nextNode == view ) {\n\t\t\t\t\t\tnextNode = nextNode.nextSibling\n\t\t\t\t\t\tbreak\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif( node_set.has( nextNode ) ) {\n\t\t\t\t\t\t\tel.insertBefore( view , nextNode )\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconst nn = nextNode.nextSibling\n\t\t\t\t\t\t\tel.removeChild( nextNode )\n\t\t\t\t\t\t\tnextNode = nn\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t} else {\n\t\t\t\tif( nextNode && nextNode.nodeName === '#text' ) {\n\t\t\t\t\tconst str = String( view )\n\t\t\t\t\tif( nextNode.nodeValue !== str ) nextNode.nodeValue = str\n\t\t\t\t\tnextNode = nextNode.nextSibling\n\t\t\t\t} else {\n\t\t\t\t\tconst textNode = $mol_dom_context.document.createTextNode( String( view ) )\n\t\t\t\t\tel.insertBefore( textNode , nextNode )\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t}\n\t\t\n\t\twhile( nextNode ) {\n\t\t\tconst currNode = nextNode\n\t\t\tnextNode = currNode.nextSibling\n\t\t\tel.removeChild( currNode )\n\t\t}\n\t}\n\n}\n","namespace $ {\n\t\n\texport function $mol_dom_render_fields (\n\t\tel : Element ,\n\t\tfields : { [ key : string ] : any }\n\t) {\n\t\tfor( let key in fields ) {\n\t\t\t\n\t\t\tconst val : any = fields[ key ]\n\t\t\t\n\t\t\tif( val === undefined ) continue\n\t\t\t// if( el[ key ] === val ) continue\n\t\t\t\n\t\t\tel[ key ] = val\n\t\t}\n\t}\n\n}\n","namespace $ {\n\t\n\texport function $mol_func_name( this : $ , func : Function ) : string {\n\t\t\n\t\tlet name = func.name\n\t\tif( name?.length > 1 ) return name\n\n\t\tfor( let key in this ) {\n\t\t\ttry {\n\t\t\t\tif( this[ key ] !== func ) continue\n\t\t\t\tname = key\n\t\t\t\tObject.defineProperty( func , 'name' , { value : name } )\n\t\t\t\tbreak\n\t\t\t} catch {}\n\t\t}\n\n\t\treturn name\n\t}\n\n\texport function $mol_func_name_from< Target extends Function >( target : Target , source : Function ) {\n\t\tObject.defineProperty( target , 'name' , { value : source.name } )\n\t\treturn target\n\t}\n\n}\n",null,null,"namespace $ {\n\n\texport type $mol_view_content = $mol_view|Node|string|number|boolean\n\t\n\texport function $mol_view_visible_width() {\n\t\treturn $mol_window.size().width\n\t}\n\t\n\texport function $mol_view_visible_height() {\n\t\treturn $mol_window.size().height\n\t}\n\t\n\texport function $mol_view_state_key( suffix : string ) {\n\t\treturn suffix\n\t}\n\t\n\tconst error_shower = new WeakMap< Error, $mol_view >()\n\n\t/// Reactive statefull lazy ViewModel\n\texport class $mol_view extends $mol_object {\n\t\t\n\t\t@ $mol_mem_key\n\t\tstatic Root< This extends typeof $mol_view >( this : This , id: number ) {\n\t\t\treturn new this as InstanceType< This >\n\t\t}\n\n\t\t@ $mol_mem\n\t\tautorun() {\n\t\t\ttry {\n\t\t\t\tthis.dom_tree()\n\t\t\t\tdocument.title = this.title()\n\t\t\t} catch( error ) {\n\t\t\t\t$mol_fail_log( error )\n\t\t\t}\n\t\t}\n\t\t\n\t\t@ $mol_mem\n\t\tstatic autobind() {\n\t\t\t\n\t\t\tconst nodes = $mol_dom_context.document.querySelectorAll( '[mol_view_root]:not([mol_view_root=\"\"])' )\n\t\t\t\n\t\t\tfor( let i = nodes.length - 1 ; i >= 0 ; --i ) {\n\n\t\t\t\tconst name = nodes.item( i ).getAttribute( 'mol_view_root' )!\n\t\t\t\t\n\t\t\t\tconst View = $[ name ] as typeof $mol_view\n\t\t\t\tif( !View ) {\n\t\t\t\t\tconsole.error( `Can not attach view. Class not found: ${ name }` )\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tconst view = View.Root( i )\n\t\t\t\tview.dom_node( nodes.item( i ) )\n\t\t\t\tview.autorun()\n\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t}\n\t\t\n\t\ttitle() : string {\n\t\t\treturn this.constructor.toString()\n\t\t}\n\t\t\n\t\t@ $mol_mem\n\t\tfocused( next?: boolean ) {\n\t\t\tlet node = this.dom_node()\n\t\t\tconst value = $mol_view_selection.focused( next === undefined ? undefined : ( next ? [ node ] : [] ) )\n\t\t\treturn value.indexOf( node ) !== -1\n\t\t} \n\t\t\n\t\tstate_key( suffix = '' ) {\n\t\t\treturn this.$.$mol_view_state_key( suffix )\n\t\t}\n\t\t\n\t\t/// Name of element that created when element not found in DOM\n\t\t@ $mol_memo.method\n\t\tdom_name() {\n\t\t\treturn $mol_dom_qname( this.constructor.toString() ) || 'div'\n\t\t}\n\t\t\n\t\t/// NameSpace of element that created when element not found in DOM\n\t\tdom_name_space() { return 'http://www.w3.org/1999/xhtml' }\n\t\t\n\t\t/// Raw child views\n\t\tsub() {\n\t\t\treturn [] as readonly ($mol_view|Node|string|number|boolean)[]\n\t\t}\n\t\t\n\t\t/// Visible sub views with defined ambient context\n\t\t/// Render all by default\n\t\tsub_visible() {\n\t\t\treturn this.sub()\n\t\t}\n\t\t\n\t\t/// Minimal width that used for lazy rendering\n\t\t@ $mol_mem\n\t\tminimal_width() {\n\t\t\t\n\t\t\tlet min = 0\n\t\t\ttry {\n\t\t\t\t\n\t\t\t\tconst sub = this.sub()\n\t\t\t\tif( !sub ) return 0\n\t\t\t\t\n\t\t\t\tsub.forEach( view => {\n\t\t\t\t\tif( view instanceof $mol_view ) {\n\t\t\t\t\t\tmin = Math.max( min , view.minimal_width() )\n\t\t\t\t\t}\n\t\t\t\t} )\n\t\t\t\t\n\t\t\t} catch( error: any ) {\n\t\t\t\t$mol_fail_log( error )\n\t\t\t\treturn 24\n\t\t\t}\n\t\t\n\t\t\treturn min\n\t\t}\n\t\t\n\t\tmaximal_width() {\n\t\t\treturn this.minimal_width()\n\t\t}\n\t\t\n\t\t/// Minimal height that used for lazy rendering\n\t\t@ $mol_mem\n\t\tminimal_height() {\n\t\t\t\n\t\t\tlet min = 0\n\t\t\ttry {\n\t\t\t\t\n\t\t\t\tfor( const view of this.sub() ?? [] ) {\n\n\t\t\t\t\tif( view instanceof $mol_view ) {\n\t\t\t\t\t\tmin = Math.max( min , view.minimal_height() )\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\t \n\t\t\t} catch( error: any ) {\n\t\t\t\t$mol_fail_log( error )\n\t\t\t\treturn 24\n\t\t\t}\n\n\t\t\treturn min\n\t\t}\n\n\t\tstatic watchers = new Set< $mol_view >()\n\n\t\t@ $mol_mem\n\t\tview_rect() {\n\t\t\t$mol_wire_watch()\n\t\t\tconst { width, height, left, right, top, bottom } = this.dom_node().getBoundingClientRect()\n\t\t\treturn { width, height, left, right, top, bottom } // pick to optimize compare\n\t\t}\n\n\t\tdom_id() {\n\t\t\treturn this.toString()\n\t\t}\n\t\t\n\t\t@ $mol_mem\n\t\tdom_node( next? : Element ) {\n\t\t\t\n\t\t\tconst node = next || $mol_dom_context.document.createElementNS( this.dom_name_space() , this.dom_name() )\n\n\t\t\tconst id = this.dom_id()\n\t\t\tnode.setAttribute( 'id' , id )\n\t\t\tnode.toString = $mol_const( '<#' + id + '>' )\n\n\t\t\t$mol_dom_render_attributes( node , this.attr_static() )\n\t\t\t\n\t\t\tconst events = $mol_wire_async( this.event() )\n\t\t\tfor( let event_name in events ) {\n\t\t\t\tnode.addEventListener(\n\t\t\t\t\tevent_name ,\n\t\t\t\t\tevents[ event_name ] ,\n\t\t\t\t\t{ passive : false } as any ,\n\t\t\t\t)\n\t\t\t}\n\n\t\t\treturn node\n\t\t}\n\t\t\n\t\t@ $mol_mem\n\t\tdom_final() {\n\t\t\t\n\t\t\tthis.render()\n\t\t\t\n\t\t\tconst sub = this.sub_visible()\n\t\t\tif( !sub ) return\n\t\t\t\n\t\t\tfor( const el of sub ) {\n\t\t\t\tif( el && typeof el === 'object' && 'dom_final' in el ) {\n\t\t\t\t\tel['dom_final']()\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\treturn this.dom_node()\n\t\t\t\n\t\t}\n\t\t\n\t\t@ $mol_mem\n\t\tdom_tree( next? : Element ) : Element {\n\t\t\tconst node = this.dom_node( next )\n\t\t\t\n\t\t\ttry {\n\n\t\t\t\t$mol_dom_render_attributes( node , { mol_view_error : null } )\n\n\t\t\t\ttry {\n\t\t\t\t\n\t\t\t\t\tthis.render()\n\t\t\t\t\t\n\t\t\t\t} finally {\n\t\t\t\t\t\n\t\t\t\t\tfor( let plugin of this.plugins() ) {\n\t\t\t\t\t\tif( plugin instanceof $mol_plugin ) {\n\t\t\t\t\t\t\tplugin.dom_tree()\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.auto()\n\t\t\t\t\n\t\t\t} catch( error: any ) {\n\t\t\t\t\n\t\t\t\t$mol_fail_log( error )\n\t\t\t\t\n\t\t\t\t$mol_dom_render_attributes( node , { mol_view_error : error.name || error.constructor.name } )\n\t\t\t\t\n\t\t\t\tif( error instanceof Promise ) return node\n\t\t\t\tif( ( error_shower.get( error ) ?? this ) !== this ) return node\n\t\t\t\t\n\t\t\t\ttry {\n\t\t\t\t\tconst message = error.message || error\n\t\t\t\t\t;( node as HTMLElement ).innerText = message.replace( /^|$/mg, '\\xA0\\xA0' )\n\t\t\t\t} catch {}\n\t\t\t\t\n\t\t\t\terror_shower.set( error, this )\n\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t\treturn node\n\t\t}\n\n\t\t@ $mol_mem\n\t\tdom_node_actual() {\n\t\t\tconst node = this.dom_node()\n\n\t\t\t$mol_dom_render_styles( node, this.style_size() )\n\n\t\t\tconst attr = this.attr()\n\t\t\tconst style = this.style()\n\t\t\tconst fields = this.field()\n\n\t\t\t$mol_dom_render_attributes( node , attr )\n\t\t\t$mol_dom_render_styles( node , style )\n\n\t\t\treturn node\n\t\t}\n\t\t\n\t\tauto() {\n\t\t\treturn null as any\n\t\t}\n\n\t\t@ $mol_mem\n\t\trender() {\n\n\t\t\tconst node = this.dom_node_actual()\n\n\t\t\tconst sub = this.sub_visible()\n\t\t\tif( !sub ) return\n\t\t\t\n\t\t\tconst nodes = sub.map( child => {\n\t\t\t\tif( child == null ) return null\n\t\t\t\treturn ( child instanceof $mol_view )\n\t\t\t\t\t? child.dom_node()\n\t\t\t\t\t: child instanceof $mol_dom_context.Node\n\t\t\t\t\t? child\n\t\t\t\t\t: String( child )\n\t\t\t})\n\t\t\t\n\t\t\t$mol_dom_render_children( node , nodes )\n\n\t\t\tfor( const el of sub ) if( el && typeof el === 'object' && 'dom_tree' in el ) el['dom_tree']()\n\n\t\t\t$mol_dom_render_fields( node , this.field() )\n\t\t\t\n\t\t}\n\n\t\t@ $mol_memo.method\n\t\tstatic view_classes() {\n\t\t\tconst proto = this.prototype\n\t\t\t\n\t\t\tlet current = proto\n\t\t\tconst classes = [] as ( typeof $mol_view )[]\n\t\t\t\n\t\t\twhile( current ) {\n\t\t\t\tclasses.push( current.constructor as typeof $mol_view )\n\t\t\t\tif(!( current instanceof $mol_view )) break\n\t\t\t\tcurrent = Object.getPrototypeOf( current )\n\t\t\t}\n\t\t\t\n\t\t\treturn classes\n\t\t}\n\t\t\n\t\t@ $mol_memo.method\n\t\tview_names_owned() {\n\t\t\tconst names = [] as string[]\n\t\t\tlet owner = $mol_owning_get( this ) as $mol_wire_fiber< any, any[], any >\n\n\t\t\tif( owner?.host instanceof $mol_view ) {\n\n\t\t\t\tconst suffix = owner.task.name.trim()\n\t\t\t\tconst suffix2 = '_' + suffix[0].toLowerCase() + suffix.substring(1)\n\t\t\t\t\n\t\t\t\tfor( let Class of ( owner.host.constructor as typeof $mol_view ).view_classes() ) {\n\t\t\t\t\tif( suffix in Class.prototype ) names.push( this.$.$mol_func_name( Class ) + suffix2 )\n\t\t\t\t\telse break\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tfor( let prefix of owner.host.view_names_owned() ) {\n\t\t\t\t\tnames.push( prefix + suffix2 )\n\t\t\t\t}\n\t\t\t\n\t\t\t}\n\n\t\t\treturn names\n\t\t}\n\n\t\t@ $mol_memo.method\n\t\tview_names() {\n\t\t\tconst names = [] as string[]\n\t\t\t\n\t\t\tfor( let name of this.view_names_owned() ) {\n\t\t\t\tif( names.indexOf( name ) < 0 ) names.push( name )\n\t\t\t}\n\n\t\t\tfor( let Class of ( this.constructor as typeof $mol_view ).view_classes() ) {\n\t\t\t\tconst name = this.$.$mol_func_name( Class )\n\t\t\t\tif( !name ) continue\n\t\t\t\tif( names.indexOf( name ) < 0 ) names.push( name )\n\t\t\t}\n\n\t\t\treturn names\n\t\t}\n\t\t\n\t\tattr_static() : { [ key : string ] : string|number|boolean|null } {\n\t\t\tlet attrs : any = {}\n\t\t\t\n\t\t\tfor( let name of this.view_names() ) attrs[ name.replace( /\\$/g , '' ).replace( /^(?=\\d)/ , '_' ).toLowerCase() ] = ''\n\t\t\t\n\t\t\treturn attrs\n\t\t}\n\t\t\n\t\tattr() {\n\t\t\treturn {}\n\t\t}\n\t\t\n\t\tstyle_size() {\n\t\t\treturn {\n\t\t\t\tminHeight: this.minimal_height(),\n\t\t\t\tminWidth: this.minimal_width(),\n\t\t\t} as {\n\t\t\t\t[key: string]: string | number;\n\t\t\t}\n\t\t}\n\t\t\n\t\tstyle() : { [ key : string ] : string|number } {\n\t\t\treturn {}\n\t\t}\n\t\t\n\t\tfield() : { [ key : string ] : any } {\n\t\t\treturn {}\n\t\t}\n\t\t\n\t\tevent() : { [ key : string ] : ( event : Event )=> void } {\n\t\t\treturn {}\n\t\t}\n\t\t\n\t\tplugins() {\n\t\t\treturn [] as readonly $mol_view[]\n\t\t}\n\t\t\n\t\t[ $mol_dev_format_head ]() {\n\t\t\treturn $mol_dev_format_span( {} ,\n\t\t\t\t$mol_dev_format_native( this ) ,\n\t\t\t\t// $mol_dev_format_shade( '/' ) ,\n\t\t\t\t// $mol_dev_format_auto( $mol_wire_cache( this ).sub().cache ) ,\n\t\t\t)\n\t\t}\n\n\t\t/** Deep search view by predicate. */\n\t\t*view_find(\n\t\t\tcheck: ( path : $mol_view, text?: string )=> boolean,\n\t\t\tpath = [] as $mol_view[],\n\t\t): Generator< $mol_view[] > {\n\n\t\t\tif( check( this ) ) return yield [ ... path, this ]\n\t\t\t\n\t\t\ttry {\n\t\t\t\tfor( const item of this.sub() ) {\n\t\t\t\t\tif( item instanceof $mol_view ) {\n\t\t\t\t\t\tyield* item.view_find( check, [ ... path, this ] )\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch( error: unknown ) {\n\t\t\t\tif( error instanceof Promise ) $mol_fail_hidden( error )\n\t\t\t\t$mol_fail_log( error )\n\t\t\t}\n\t\t\t\n\t\t}\n\n\t\t/** Renders path of views to DOM. */\n\t\tforce_render(\n\t\t\tpath : Set< $mol_view >,\n\t\t) {\n\n\t\t\tconst kids = this.sub()\n\n\t\t\tconst index = kids.findIndex( item => {\n\t\t\t\tif( item instanceof $mol_view ) {\n\t\t\t\t\treturn path.has( item )\n\t\t\t\t} else {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t})\n\n\t\t\tif( index >= 0 ) {\n\t\t\t\t( kids[ index ] as $mol_view ).force_render( path )\n\t\t\t}\n\t\t\t\n\t\t}\n\n\t\t/** Renders view to DOM and scroll to it. */\n\t\tasync ensure_visible( view: $mol_view, align: ScrollLogicalPosition = \"start\" ) {\n\t\t\t\n\t\t\tconst path = this.view_find( v => v === view ).next().value\n\t\t\tthis.force_render( new Set( path ) )\n\t\t\t\n\t\t\t$mol_wire_fiber.sync()\n\n\t\t\tview.dom_node().scrollIntoView({ block: align })\n\n\t\t}\n\n\t}\n\n\texport type $mol_view_all = $mol_type_pick< $ , typeof $mol_view >\n\n}\n","namespace $ { $mol_style_attach( \"mol/view/view/view.css\",\n \"[mol_view] {\\n\\ttransition-property: height, width, min-height, min-width, max-width, max-height, transform;\\n\\ttransition-duration: .2s;\\n\\ttransition-timing-function: ease-out;\\n\\t-webkit-appearance: none;\\n\\tword-break: break-word;\\n\\tbox-sizing: border-box;\\n\\tdisplay: flex;\\n\\tflex-shrink: 0;\\n\\tcontain: style;\\n\\ttab-size: 4;\\n}\\n\\n[mol_view]::selection {\\n\\tbackground: var(--mol_theme_line);\\n}\\n\\n[mol_view] > * {\\n\\tword-break: inherit;\\n}\\n\\n[mol_view_root] {\\n\\tmargin: 0;\\n\\tpadding: 0;\\n\\twidth: 100%;\\n\\theight: 100%;\\n\\tbox-sizing: border-box;\\n\\tfont-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\\n\\tfont-size: 1rem;\\n\\tline-height: 1.5rem;\\n\\tbackground: var(--mol_theme_back);\\n\\tcolor: var(--mol_theme_text);\\n\\tcontain: unset; /** Fixes bg ignoring when applied to body on Chrome */\\n}\\n\\n[mol_view][mol_view_error]:not([mol_view_error=\\\"Promise\\\"]) {\\n\\tbackground-image: repeating-linear-gradient(\\n\\t\\t-45deg,\\n\\t\\t#f92323,\\n\\t\\t#f92323 .5rem,\\n\\t\\t#ff3d3d .5rem,\\n\\t\\t#ff3d3d 1.5rem\\n\\t);\\n\\tcolor: black;\\n\\talign-items: center;\\n justify-content: center;\\n}\\n\\n@keyframes mol_view_wait_move {\\n\\tfrom {\\n\\t\\tbackground-position: 0 0;\\n\\t}\\n\\tto {\\n\\t\\tbackground-position: 200vmax 0;\\n\\t}\\n}\\n\\n@keyframes mol_view_wait_show {\\n\\tto {\\n\\t\\tbackground-image: repeating-linear-gradient(\\n\\t\\t\\t45deg,\\n\\t\\t\\thsla( 0 , 0% , 50% , .5 ) 0% ,\\n\\t\\t\\thsla( 0 , 0% , 50% , 0 ) 5% ,\\n\\t\\t\\thsla( 0 , 0% , 50% , 0 ) 45% ,\\n\\t\\t\\thsla( 0 , 0% , 50% , .5 ) 50% ,\\n\\t\\t\\thsla( 0 , 0% , 50% , 0 ) 55% ,\\n\\t\\t\\thsla( 0 , 0% , 50% , 0 ) 95% ,\\n\\t\\t\\thsla( 0 , 0% , 50% , .5 ) 100%\\n\\t\\t);\\n\\t\\tbackground-size: 200vmax 200vmax;\\n\\t}\\n}\\n\\n[mol_view][mol_view_error=\\\"Promise\\\"] {\\n\\tanimation: mol_view_wait_show .5s .5s linear forwards , mol_view_wait_move 1s linear infinite;\\n\\topacity: .75;\\n}\\n\"\n) }","interface Window {\n\tcordova : any\n}\n\nnamespace $ {\n\n\tif( $mol_dom_context.document ) {\n\t\tsetTimeout( ()=> $mol_view.autobind() )\n\t}\n\t\n}\n","namespace $ {\n\n\texport class $mol_plugin extends $mol_view {\n\n\t\t@ $mol_mem\n\t\tdom_node( next? : Element ) {\n\n\t\t\tconst node = next || ( ( $mol_owning_get( this ) as $mol_wire_fiber ).host as $mol_view )!.dom_node()\n\n\t\t\t$mol_dom_render_attributes( node , this.attr_static() )\n\n\t\t\tconst events = $mol_wire_async( this.event() )\n\t\t\tfor( let event_name in events ) {\n\t\t\t\tnode.addEventListener(\n\t\t\t\t\tevent_name ,\n\t\t\t\t\tevents[ event_name ] ,\n\t\t\t\t\t{ passive : false } as any ,\n\t\t\t\t)\n\t\t\t}\n\n\t\t\treturn node\n\t\t}\n\n\t\tattr_static() : { [ key : string ] : string|number|boolean } {\n\t\t\treturn {}\n\t\t}\n\n\t\tevent() : { [ key : string ] : ( event : Event )=> void } {\n\t\t\treturn {}\n\t\t}\n\t\t\n\t\trender() {\n\t\t\tthis.dom_node_actual()\n\t\t}\n\t\t\n\t}\n\n}\n","namespace $ {\n\texport class $mol_hotkey extends $mol_plugin {\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * event *\n\t\t * \t^\n\t\t * \tkeydown?event <=> keydown?event\n\t\t * ```\n\t\t */\n\t\tevent() {\n\t\t\treturn {\n\t\t\t\t...super.event(),\n\t\t\t\tkeydown: (event?: any) => this.keydown(event)\n\t\t\t}\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * key *\n\t\t * ```\n\t\t */\n\t\tkey() {\n\t\t\treturn {\n\t\t\t}\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * mod_ctrl false\n\t\t * ```\n\t\t */\n\t\tmod_ctrl() {\n\t\t\treturn false\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * mod_alt false\n\t\t * ```\n\t\t */\n\t\tmod_alt() {\n\t\t\treturn false\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * mod_shift false\n\t\t * ```\n\t\t */\n\t\tmod_shift() {\n\t\t\treturn false\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * keydown?event null\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tkeydown(event?: any) {\n\t\t\tif ( event !== undefined ) return event as never\n\t\t\treturn null as any\n\t\t}\n\t}\n\t\n}\n\n","namespace $ {\n export enum $mol_keyboard_code {\n backspace = 8,\n tab = 9,\n enter = 13,\n shift= 16,\n ctrl = 17,\n alt = 18,\n pause = 19,\n capsLock = 20,\n escape = 27,\n space = 32,\n pageUp = 33,\n pageDown = 34,\n end = 35,\n home = 36,\n left = 37,\n up = 38,\n right = 39,\n down = 40,\n insert = 45,\n delete = 46,\n key0 = 48,\n key1 = 49,\n key2 = 50,\n key3 = 51,\n key4 = 52,\n key5 = 53,\n key6 = 54,\n key7 = 55,\n key8 = 56,\n key9 = 57,\n A = 65,\n B = 66,\n C = 67,\n D = 68,\n E = 69,\n F = 70,\n G = 71,\n H = 72,\n I = 73,\n J = 74,\n K = 75,\n L = 76,\n M = 77,\n N = 78,\n O = 79,\n P = 80,\n Q = 81,\n R = 82,\n S = 83,\n T = 84,\n U = 85,\n V = 86,\n W = 87,\n X = 88,\n Y = 89,\n Z = 90,\n metaLeft = 91,\n metaRight = 92,\n select = 93,\n numpad0 = 96,\n numpad1 = 97,\n numpad2 = 98,\n numpad3 = 99,\n numpad4 = 100,\n numpad5 = 101,\n numpad6 = 102,\n numpad7 = 103,\n numpad8 = 104,\n numpad9 = 105,\n multiply = 106,\n add = 107,\n subtract = 109,\n decimal = 110,\n divide = 111,\n F1 = 112,\n F2 = 113,\n F3 = 114,\n F4 = 115,\n F5 = 116,\n F6 = 117,\n F7 = 118,\n F8 = 119,\n F9 = 120,\n F10 = 121,\n F11 = 122,\n F12 = 123,\n numLock = 144,\n scrollLock = 145,\n semicolon = 186,\n equals = 187,\n comma = 188,\n dash = 189,\n period = 190,\n forwardSlash = 191,\n graveAccent = 192,\n bracketOpen = 219,\n slashBack = 220,\n slashBackLeft = 226,\n bracketClose = 221,\n quoteSingle = 222\n }\n}\n","namespace $.$$ {\n\texport class $mol_hotkey extends $.$mol_hotkey {\n\n\t\tkey() {\n\t\t\treturn super.key() as {\n\t\t\t\t[ key in keyof typeof $mol_keyboard_code ]? : ( event : KeyboardEvent )=> void\n\t\t\t}\n\t\t}\n\t\t\n\t\tkeydown( event? : KeyboardEvent ) {\n\n\t\t\tif( !event ) return\n\t\t\tif( event.defaultPrevented ) return\n\n\t\t\tlet name = $mol_keyboard_code[ event.keyCode ] as keyof typeof $mol_keyboard_code\n\t\t\t\n\t\t\tif( this.mod_ctrl() !== event.ctrlKey ) return\n\t\t\tif( this.mod_alt() !== event.altKey ) return\n\t\t\tif( this.mod_shift() !== event.shiftKey ) return\n\t\t\t\n\t\t\tconst handle = this.key()[ name ]\n\t\t\tif( handle ) handle( event )\n\n\t\t}\n\t\t\n\t}\n}\n","namespace $ {\n\texport class $mol_string extends $mol_view {\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * dom_name \\input\n\t\t * ```\n\t\t */\n\t\tdom_name() {\n\t\t\treturn \"input\"\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * enabled true\n\t\t * ```\n\t\t */\n\t\tenabled() {\n\t\t\treturn true\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * minimal_height 40\n\t\t * ```\n\t\t */\n\t\tminimal_height() {\n\t\t\treturn 40\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * autocomplete false\n\t\t * ```\n\t\t */\n\t\tautocomplete() {\n\t\t\treturn false\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * selection?val /number\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tselection(val?: any) {\n\t\t\tif ( val !== undefined ) return val as never\n\t\t\treturn [\n\t\t\t] as readonly number[]\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * auto / <= selection_watcher\n\t\t * ```\n\t\t */\n\t\tauto() {\n\t\t\treturn [\n\t\t\t\tthis.selection_watcher()\n\t\t\t] as readonly any[]\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * field *\n\t\t * \t^\n\t\t * \tdisabled <= disabled\n\t\t * \tvalue <= value_changed?val\n\t\t * \tplaceholder <= hint_visible\n\t\t * \tspellcheck <= spellcheck\n\t\t * \tautocomplete <= autocomplete_native\n\t\t * \tselectionEnd <= selection_end\n\t\t * \tselectionStart <= selection_start\n\t\t * ```\n\t\t */\n\t\tfield() {\n\t\t\treturn {\n\t\t\t\t...super.field(),\n\t\t\t\tdisabled: this.disabled(),\n\t\t\t\tvalue: this.value_changed(),\n\t\t\t\tplaceholder: this.hint_visible(),\n\t\t\t\tspellcheck: this.spellcheck(),\n\t\t\t\tautocomplete: this.autocomplete_native(),\n\t\t\t\tselectionEnd: this.selection_end(),\n\t\t\t\tselectionStart: this.selection_start()\n\t\t\t}\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * attr *\n\t\t * \t^\n\t\t * \tmaxlength <= length_max\n\t\t * \ttype <= type?val\n\t\t * ```\n\t\t */\n\t\tattr() {\n\t\t\treturn {\n\t\t\t\t...super.attr(),\n\t\t\t\tmaxlength: this.length_max(),\n\t\t\t\ttype: this.type()\n\t\t\t}\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * event *\n\t\t * \t^\n\t\t * \tinput?event <=> event_change?event\n\t\t * \tkeydown?event <=> event_key_press?event\n\t\t * ```\n\t\t */\n\t\tevent() {\n\t\t\treturn {\n\t\t\t\t...super.event(),\n\t\t\t\tinput: (event?: any) => this.event_change(event),\n\t\t\t\tkeydown: (event?: any) => this.event_key_press(event)\n\t\t\t}\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * plugins / <= Submit\n\t\t * ```\n\t\t */\n\t\tplugins() {\n\t\t\treturn [\n\t\t\t\tthis.Submit()\n\t\t\t] as readonly any[]\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * selection_watcher null\n\t\t * ```\n\t\t */\n\t\tselection_watcher() {\n\t\t\treturn null as any\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * disabled false\n\t\t * ```\n\t\t */\n\t\tdisabled() {\n\t\t\treturn false\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * value?val \\\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tvalue(val?: any) {\n\t\t\tif ( val !== undefined ) return val as never\n\t\t\treturn \"\"\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * value_changed?val <=> value?val\n\t\t * ```\n\t\t */\n\t\tvalue_changed(val?: any) {\n\t\t\treturn this.value(val)\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * hint \\\n\t\t * ```\n\t\t */\n\t\thint() {\n\t\t\treturn \"\"\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * hint_visible <= hint\n\t\t * ```\n\t\t */\n\t\thint_visible() {\n\t\t\treturn this.hint()\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * spellcheck false\n\t\t * ```\n\t\t */\n\t\tspellcheck() {\n\t\t\treturn false\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * autocomplete_native \\\n\t\t * ```\n\t\t */\n\t\tautocomplete_native() {\n\t\t\treturn \"\"\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * selection_end 0\n\t\t * ```\n\t\t */\n\t\tselection_end() {\n\t\t\treturn 0\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * selection_start 0\n\t\t * ```\n\t\t */\n\t\tselection_start() {\n\t\t\treturn 0\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * length_max Infinity\n\t\t * ```\n\t\t */\n\t\tlength_max() {\n\t\t\treturn Infinity\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * type?val \\text\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\ttype(val?: any) {\n\t\t\tif ( val !== undefined ) return val as never\n\t\t\treturn \"text\"\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * event_change?event null\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tevent_change(event?: any) {\n\t\t\tif ( event !== undefined ) return event as never\n\t\t\treturn null as any\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * event_key_press?event null\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tevent_key_press(event?: any) {\n\t\t\tif ( event !== undefined ) return event as never\n\t\t\treturn null as any\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * submit?event null\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tsubmit(event?: any) {\n\t\t\tif ( event !== undefined ) return event as never\n\t\t\treturn null as any\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * Submit $mol_hotkey key * enter?event <=> submit?event\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tSubmit() {\n\t\t\tconst obj = new this.$.$mol_hotkey()\n\t\t\t\n\t\t\tobj.key = () => ({\n\t\t\t\tenter: (event?: any) => this.submit(event)\n\t\t\t})\n\t\t\t\n\t\t\treturn obj\n\t\t}\n\t}\n\t\n}\n\n","namespace $ { $mol_style_attach( \"mol/gap/gap.css\",\n \":root {\\n\\t--mol_gap_block: .75rem;\\n\\t--mol_gap_text: .5rem .75rem;\\n\\t--mol_gap_round: .25rem;\\n\\t--mol_gap_space: .25rem;\\n\\t--mol_gap_blur: .5rem;\\n}\\n\"\n) }","namespace $ {\n\tconst { vary } = $mol_style_func\n\texport let $mol_gap = {\n\t\tblock: vary( '--mol_gap_block' ) ,\n\t\ttext: vary( '--mol_gap_text' ),\n\t\tround: vary( '--mol_gap_round' ),\n\t\tspace: vary( '--mol_gap_space' ),\n\t\tblur: vary( '--mol_gap_blur' ),\n\t} as const\n}\n","namespace $ {\n\n\texport class $mol_dom_listener extends $mol_object {\n\n\t\tconstructor(\n\t\t\tpublic _node : any ,\n\t\t\tpublic _event : string ,\n\t\t\tpublic _handler : ( event : any )=> any ,\n\t\t\tpublic _config : boolean|{ passive : boolean } = { passive : true }\n\t\t) {\n\t\t\tsuper()\n\t\t\tthis._node.addEventListener( this._event , this._handler , this._config )\n\t\t}\n\n\t\tdestructor() {\n\t\t\tthis._node.removeEventListener( this._event , this._handler , this._config )\n\t\t\tsuper.destructor()\n\t\t}\n\n\t}\n\n}\n","namespace $ { $mol_style_attach( \"mol/string/string.view.css\",\n \"[mol_string] {\\n\\tbox-sizing: border-box;\\n\\toutline-offset: 0;\\n\\tborder: none;\\n\\tborder-radius: var(--mol_gap_round);\\n\\twhite-space: nowrap;\\n\\toverflow: hidden;\\n\\ttext-overflow: ellipsis;\\n\\tpadding: var(--mol_gap_text);\\n\\ttext-align: left;\\n\\tposition: relative;\\n\\tz-index: 0;\\n\\tfont: inherit;\\n\\tflex: 1 1 auto;\\n\\tbackground: transparent;\\n\\tmin-width: 0;\\n\\tcolor: inherit;\\n\\tbackground: var(--mol_theme_card);\\n}\\n\\n[mol_string]:disabled:not(:placeholder-shown) {\\n\\tbackground-color: transparent;\\n\\tcolor: var(--mol_theme_text);\\n}\\n\\n[mol_string]:hover:where(:not(:disabled)) {\\n\\tbackground: var(--mol_theme_hover);\\n}\\n\\n[mol_string]:focus {\\n\\toutline: none;\\n\\tz-index: 1;\\n\\tbackground: var(--mol_theme_field);\\n\\tcolor: var(--mol_theme_text);\\n\\tbox-shadow: inset 0 0 0 1px var(--mol_theme_focus);\\n}\\n\\n[mol_string]::-ms-clear {\\n\\tdisplay: none;\\n}\\n\"\n) }","namespace $.$$ {\n\texport class $mol_string extends $.$mol_string {\n\t\t\n\t\t// _timer = null as any\n\t\t\n\t\tevent_change( next? : Event ) {\n\t\t\tif( !next ) return\n\t\t\tthis.value( ( next.target as HTMLInputElement ).value )\n\t\t\tthis.selection_change( next )\n\t\t}\n\n\t\thint_visible() {\n\t\t\treturn ( this.enabled() ? this.hint() : '' ) || ' '\n\t\t}\n\n\t\tdisabled() {\n\t\t\treturn !this.enabled()\n\t\t}\n\n\t\tautocomplete_native() {\n\t\t\treturn this.autocomplete() ? 'on' : 'off'\n\t\t}\n\t\t\n\t\t@ $mol_mem\n\t\tselection_watcher() {\n\t\t\treturn new $mol_dom_listener(\n\t\t\t\tthis.$.$mol_dom_context.document,\n\t\t\t\t'selectionchange',\n\t\t\t\tevent => this.selection_change( event ),\n\t\t\t)\n\t\t}\n\t\t\n\t\tselection_change( event: Event ) {\n\t\t\tconst el = this.dom_node() as HTMLInputElement\n\t\t\tthis.selection([\n\t\t\t\tel.selectionStart,\n\t\t\t\tel.selectionEnd,\n\t\t\t])\n\t\t}\n\t\t\n\t\tselection_start() {\n\t\t\treturn this.selection()[0]\n\t\t}\n\n\t\tselection_end() {\n\t\t\treturn this.selection()[1]\n\t\t}\n\n\t}\n}\n","namespace $ {\n\texport class $mol_speck extends $mol_view {\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * attr *\n\t\t * \t^\n\t\t * \tmol_theme \\$mol_theme_accent\n\t\t * ```\n\t\t */\n\t\tattr() {\n\t\t\treturn {\n\t\t\t\t...super.attr(),\n\t\t\t\tmol_theme: \"$mol_theme_accent\"\n\t\t\t}\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * style *\n\t\t * \t^\n\t\t * \tminHeight \\1em\n\t\t * ```\n\t\t */\n\t\tstyle() {\n\t\t\treturn {\n\t\t\t\t...super.style(),\n\t\t\t\tminHeight: \"1em\"\n\t\t\t}\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * sub / <= value\n\t\t * ```\n\t\t */\n\t\tsub() {\n\t\t\treturn [\n\t\t\t\tthis.value()\n\t\t\t] as readonly any[]\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * value null\n\t\t * ```\n\t\t */\n\t\tvalue() {\n\t\t\treturn null as any\n\t\t}\n\t}\n\t\n}\n\n","namespace $ { $mol_style_attach( \"mol/speck/speck.view.css\",\n \"[mol_speck] {\\n\\tfont-size: .625rem;\\n\\tborder-radius: 1rem;\\n\\tmargin: -0.5rem -0.25rem;\\n\\talign-self: flex-start;\\n\\tmin-height: 1em;\\n\\tmin-width: .5em;\\n\\tvertical-align: sub;\\n\\tpadding: .25em .5em;\\n\\tposition: absolute;\\n\\tz-index: 2;\\n\\ttext-align: center;\\n\\tline-height: 1;\\n\\tdisplay: inline-block;\\n\\twhite-space: nowrap;\\n\\ttext-overflow: ellipsis;\\n}\\n\"\n) }","namespace $ {\n\texport class $mol_button extends $mol_view {\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * enabled true\n\t\t * ```\n\t\t */\n\t\tenabled() {\n\t\t\treturn true\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * click?event null\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tclick(event?: any) {\n\t\t\tif ( event !== undefined ) return event as never\n\t\t\treturn null as any\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * event_click?event null\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tevent_click(event?: any) {\n\t\t\tif ( event !== undefined ) return event as never\n\t\t\treturn null as any\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * event *\n\t\t * \t^\n\t\t * \tclick?event <=> event_activate?event\n\t\t * \tkeydown?event <=> event_key_press?event\n\t\t * ```\n\t\t */\n\t\tevent() {\n\t\t\treturn {\n\t\t\t\t...super.event(),\n\t\t\t\tclick: (event?: any) => this.event_activate(event),\n\t\t\t\tkeydown: (event?: any) => this.event_key_press(event)\n\t\t\t}\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * attr *\n\t\t * \t^\n\t\t * \tdisabled <= disabled\n\t\t * \trole \\button\n\t\t * \ttabindex <= tab_index\n\t\t * \ttitle <= hint\n\t\t * ```\n\t\t */\n\t\tattr() {\n\t\t\treturn {\n\t\t\t\t...super.attr(),\n\t\t\t\tdisabled: this.disabled(),\n\t\t\t\trole: \"button\",\n\t\t\t\ttabindex: this.tab_index(),\n\t\t\t\ttitle: this.hint()\n\t\t\t}\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * sub /$mol_view_content <= title\n\t\t * ```\n\t\t */\n\t\tsub() {\n\t\t\treturn [\n\t\t\t\tthis.title()\n\t\t\t] as readonly $mol_view_content[]\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * Speck $mol_speck value <= error\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tSpeck() {\n\t\t\tconst obj = new this.$.$mol_speck()\n\t\t\t\n\t\t\tobj.value = () => this.error()\n\t\t\t\n\t\t\treturn obj\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * event_activate?event null\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tevent_activate(event?: any) {\n\t\t\tif ( event !== undefined ) return event as never\n\t\t\treturn null as any\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * event_key_press?event null\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tevent_key_press(event?: any) {\n\t\t\tif ( event !== undefined ) return event as never\n\t\t\treturn null as any\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * disabled false\n\t\t * ```\n\t\t */\n\t\tdisabled() {\n\t\t\treturn false\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * tab_index 0\n\t\t * ```\n\t\t */\n\t\ttab_index() {\n\t\t\treturn 0\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * hint \\\n\t\t * ```\n\t\t */\n\t\thint() {\n\t\t\treturn \"\"\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * error \\\n\t\t * ```\n\t\t */\n\t\terror() {\n\t\t\treturn \"\"\n\t\t}\n\t}\n\t\n}\n\n","namespace $ { $mol_style_attach( \"mol/button/button.view.css\",\n \"[mol_button] {\\n\\tborder: none;\\n\\tfont: inherit;\\n\\tdisplay: inline-flex;\\n\\tflex-shrink: 0;\\n\\ttext-decoration: inherit;\\n\\tcursor: inherit;\\n\\tposition: relative;\\n\\tbox-sizing: border-box;\\n\\tword-break: normal;\\n\\tcursor: default;\\n\\tuser-select: none;\\n\\tborder-radius: var(--mol_gap_round);\\n}\\n\\n[mol_button]:focus {\\n\\toutline: none;\\n}\\n\"\n) }","namespace $.$$ {\n\texport class $mol_button extends $.$mol_button {\n\n\t\t@ $mol_mem\n\t\tstatus( next = [ null as any ] ) { return next }\n\t\t\n\t\tdisabled() {\n\t\t\treturn !this.enabled()\n\t\t}\n\t\t\n\t\tevent_activate( next : Event ) {\n\t\t\t\n\t\t\tif( !next ) return\n\t\t\tif( !this.enabled() ) return\n\n\t\t\ttry {\n\t\t\t\t\n\t\t\t\tthis.event_click( next )\n\t\t\t\tthis.click( next )\n\t\t\t\tthis.status([ null ])\n\t\t\t\t\n\t\t\t} catch( error: any ) {\n\t\t\t\t\n\t\t\t\tthis.status([ error ])\n\t\t\t\t$mol_fail_hidden( error )\n\t\t\t\t\n\t\t\t}\n\n\t\t}\n\t\t\n\t\tevent_key_press ( event: KeyboardEvent ) { \n\t\t\tif( event.keyCode === $mol_keyboard_code.enter ) {\n\t\t\t\treturn this.event_activate( event )\n\t\t\t}\n\t\t} \n\t\t\n\t\ttab_index() {\n\t\t\treturn this.enabled() ? super.tab_index() : -1\n\t\t}\n\n\t\terror() {\n\n\t\t\tconst [ error ] = this.status()\n\t\t\tif( !error ) return ''\n\n\t\t\tif( error instanceof Promise ) {\n\t\t\t\treturn $mol_fail_hidden( error )\n\t\t\t}\n\t\t\t\n\t\t\treturn String( error.message ?? error )\n\n\t\t}\n\n\t\tsub_visible() {\n\t\t\treturn [\n\t\t\t\t... this.error() ? [ this.Speck() ] : [] ,\n\t\t\t\t... this.sub() ,\n\t\t\t]\n\t\t}\n\t\t\n\t}\n}\n",null,null,null,null,null,null,null,"namespace $ {\n\n\texport function $mol_style_sheet<\n\t\tComponent extends $mol_view,\n\t\tConfig extends $mol_style_guard< Component , Config >,\n\t>(\n\t\tComponent : new()=> Component,\n\t\tconfig0 : Config ,\n\t) {\n\n\t\tlet rules = [] as string[]\n\n\t\tconst block = $mol_dom_qname( $mol_ambient({}).$mol_func_name( Component ) )\n\t\tconst kebab = ( name : string )=> name.replace( /[A-Z]/g , letter => '-' + letter.toLowerCase() )\n\n\t\tconst make_class = ( prefix : string , path : string[] , config : typeof config0 )=> {\n\n\t\t\tconst props = [] as string[]\n\n\t\t\tconst selector = ( prefix : string , path : string[] )=> {\n\t\t\t\tif( path.length === 0 ) return prefix || `[${ block }]`\n\t\t\t\tlet res = `[${ block }_${ path.join('_') }]`\n\t\t\t\tif( prefix ) res = prefix + ' :where(' + res + ')'\n\t\t\t\treturn res\n\t\t\t}\n\t\t\t\n\t\t\tfor( const key of Object.keys( config ).reverse() ) {\n\n\t\t\t\tif( /^[a-z]/.test(key) ) {\n\t\t\t\t\t\n\t\t\t\t\tconst addProp = ( keys : string[] , val : any )=> {\n\n\t\t\t\t\t\tif( Array.isArray( val ) ) {\n\n\t\t\t\t\t\t\tif( val[0] && [ Array , Object ].includes( val[0].constructor ) ) {\n\t\t\t\t\t\t\t\tval = val.map( v => {\n\t\t\t\t\t\t\t\t\treturn Object.entries( v ).map( ([ n , a ])=> {\n\t\t\t\t\t\t\t\t\t\tif( a === true ) return kebab( n )\n\t\t\t\t\t\t\t\t\t\tif( a === false ) return null\n\t\t\t\t\t\t\t\t\t\treturn String( a )\n\t\t\t\t\t\t\t\t\t} ).filter( Boolean ).join(' ')\n\t\t\t\t\t\t\t\t}).join( ',' )\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tval = val.join(' ')\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tprops.push(`\\t${ keys.join('-') }: ${ val };\\n`)\n\n\t\t\t\t\t\t} else if( val.constructor === Object ) {\n\n\t\t\t\t\t\t\tfor( let suffix in val ) {\n\t\t\t\t\t\t\t\taddProp( [ ... keys , kebab( suffix ) ] , val[ suffix ] )\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tprops.push(`\\t${ keys.join('-') }: ${ val };\\n`)\n\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t}\n\n\t\t\t\t\taddProp( [ kebab(key) ] , config[key] )\n\n\t\t\t\t} else if( /^[A-Z]/.test(key) ) {\n\n\t\t\t\t\tmake_class( prefix , [ ... path , key.toLowerCase() ] , config[key] )\n\n\t\t\t\t} else if( key[0] === '$' ) {\n\n\t\t\t\t\tmake_class( selector( prefix , path ) + ' :where([' + $mol_dom_qname( key ) + '])' , [] , config[key] )\n\n\t\t\t\t} else if( key === '>' ) {\n\n\t\t\t\t\tconst types = config[key] as any\n\n\t\t\t\t\tfor( let type in types ) {\n\t\t\t\t\t\tmake_class( selector( prefix , path ) + ' > :where([' + $mol_dom_qname( type ) + '])' , [] , types[type] )\n\t\t\t\t\t}\n\n\t\t\t\t} else if( key === '@' ) {\n\n\t\t\t\t\tconst attrs = config[key] as any\n\n\t\t\t\t\tfor( let name in attrs ) {\n\t\t\t\t\t\tfor( let val in attrs[name] ) {\n\t\t\t\t\t\t\tmake_class( selector( prefix , path ) + ':where([' + name + '=' + JSON.stringify( val ) + '])' , [] , attrs[name][val] )\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t} else if( key === '@media' ) {\n\n\t\t\t\t\tconst media = config[key] as any\n\n\t\t\t\t\tfor( let query in media ) {\n\n\t\t\t\t\t\trules.push('}\\n')\n\t\t\t\t\t\t\n\t\t\t\t\t\tmake_class( prefix , path , media[query] )\n\t\t\t\t\t\t\n\t\t\t\t\t\trules.push( `${ key } ${ query } {\\n` )\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tmake_class( selector( prefix , path ) + key , [] , config[key] )\n\n\t\t\t\t}\n\n\t\t\t}\n\t\t\t\n\t\t\tif( props.length ) {\n\t\t\t\trules.push( `${ selector( prefix , path ) } {\\n${ props.reverse().join('') }}\\n` )\n\t\t\t}\n\n\t\t}\n\n\t\tmake_class( '' , [] , config0 )\n\n\t\treturn rules.reverse().join('')\n\n\t}\n\n}\n","namespace $ {\n\n\texport function $mol_style_define<\n\t\tComponent extends $mol_view,\n\t\tConfig extends $mol_style_guard< Component , Config >,\n\t>(\n\t\tComponent : new()=> Component,\n\t\tconfig : Config ,\n\t) {\n\n\t\treturn $mol_style_attach(\n\t\t\tComponent.name,\n\t\t\t$mol_style_sheet( Component , config ),\n\t\t)\n\n\t}\n\n}\n","namespace $ {\n\texport class $mol_svg extends $mol_view {\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * dom_name \\svg\n\t\t * ```\n\t\t */\n\t\tdom_name() {\n\t\t\treturn \"svg\"\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * dom_name_space \\http://www.w3.org/2000/svg\n\t\t * ```\n\t\t */\n\t\tdom_name_space() {\n\t\t\treturn \"http://www.w3.org/2000/svg\"\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * font_size 16\n\t\t * ```\n\t\t */\n\t\tfont_size() {\n\t\t\treturn 16\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * font_family \\\n\t\t * ```\n\t\t */\n\t\tfont_family() {\n\t\t\treturn \"\"\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * style_size *\n\t\t * ```\n\t\t */\n\t\tstyle_size() {\n\t\t\treturn {\n\t\t\t}\n\t\t}\n\t}\n\t\n}\n\n","namespace $ {\n\n\texport class $mol_after_timeout extends $mol_object2 {\n\n\t\tid : any\n\n\t\tconstructor(\n\t\t\tpublic delay : number ,\n\t\t\tpublic task : ()=> void ,\n\t\t) {\n\t\t\tsuper()\n\t\t\tthis.id = setTimeout( task , delay )\n\t\t}\n\n\t\tdestructor() {\n\t\t\tclearTimeout( this.id )\n\t\t}\n\n\t}\n\t\n}\n","namespace $ {\n\t\n\texport class $mol_state_time extends $mol_object {\n\t\t\n\t\t@ $mol_mem_key\n\t\tstatic task( precision: number, reset?: null ): $mol_after_timeout | $mol_after_frame {\n\t\t\t\n\t\t\tif( precision ) {\n\t\t\t\treturn new $mol_after_timeout( precision, ()=> this.task( precision, null ) )\n\t\t\t} else {\n\t\t\t\treturn new $mol_after_frame( ()=> this.task( precision, null ) )\n\t\t\t}\n\t\t\n\t\t}\n\t\t\n\t\t@ $mol_mem_key\n\t\tstatic now( precision: number ) {\n\t\t\tthis.task( precision )\n\t\t\treturn Date.now()\n\t\t}\n\t\t\n\t}\n\t\n}\n","namespace $.$$ {\n\texport class $mol_svg extends $.$mol_svg {\n\t\t@$mol_mem\n\t\tcomputed_style() {\n\t\t\tconst win = this.$.$mol_dom_context\n\t\t\tconst style = win.getComputedStyle(this.dom_node())\n\n\t\t\tif(!style['font-size']) $mol_state_time.now( 0 )\n\n\t\t\treturn style\n\t\t}\n\n\t\t@$mol_mem\n\t\tfont_size(): number {\n\t\t\treturn parseInt(this.computed_style()['font-size']) || 16\n\t\t}\n\n\t\t@$mol_mem\n\t\tfont_family() {\n\t\t\treturn this.computed_style()['font-family']\n\t\t}\n\n\t}\n}\n","namespace $ {\n\texport class $mol_svg_root extends $mol_svg {\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * dom_name \\svg\n\t\t * ```\n\t\t */\n\t\tdom_name() {\n\t\t\treturn \"svg\"\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * attr *\n\t\t * \t^\n\t\t * \tviewBox <= view_box\n\t\t * \tpreserveAspectRatio <= aspect\n\t\t * ```\n\t\t */\n\t\tattr() {\n\t\t\treturn {\n\t\t\t\t...super.attr(),\n\t\t\t\tviewBox: this.view_box(),\n\t\t\t\tpreserveAspectRatio: this.aspect()\n\t\t\t}\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * view_box \\0 0 100 100\n\t\t * ```\n\t\t */\n\t\tview_box() {\n\t\t\treturn \"0 0 100 100\"\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * aspect \\xMidYMid\n\t\t * ```\n\t\t */\n\t\taspect() {\n\t\t\treturn \"xMidYMid\"\n\t\t}\n\t}\n\t\n}\n\n","namespace $ { $mol_style_attach( \"mol/svg/root/root.view.css\",\n \"[mol_svg_root] {\\n\\toverflow: hidden;\\n}\\n\"\n) }","namespace $ {\n\texport class $mol_svg_path extends $mol_svg {\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * dom_name \\path\n\t\t * ```\n\t\t */\n\t\tdom_name() {\n\t\t\treturn \"path\"\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * attr *\n\t\t * \t^\n\t\t * \td <= geometry\n\t\t * ```\n\t\t */\n\t\tattr() {\n\t\t\treturn {\n\t\t\t\t...super.attr(),\n\t\t\t\td: this.geometry()\n\t\t\t}\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * geometry \\\n\t\t * ```\n\t\t */\n\t\tgeometry() {\n\t\t\treturn \"\"\n\t\t}\n\t}\n\t\n}\n\n","namespace $ {\n\texport class $mol_icon extends $mol_svg_root {\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * view_box \\0 0 24 24\n\t\t * ```\n\t\t */\n\t\tview_box() {\n\t\t\treturn \"0 0 24 24\"\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * minimal_width 16\n\t\t * ```\n\t\t */\n\t\tminimal_width() {\n\t\t\treturn 16\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * minimal_height 16\n\t\t * ```\n\t\t */\n\t\tminimal_height() {\n\t\t\treturn 16\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * sub / <= Path\n\t\t * ```\n\t\t */\n\t\tsub() {\n\t\t\treturn [\n\t\t\t\tthis.Path()\n\t\t\t] as readonly any[]\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * path \\\n\t\t * ```\n\t\t */\n\t\tpath() {\n\t\t\treturn \"\"\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * Path $mol_svg_path geometry <= path\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tPath() {\n\t\t\tconst obj = new this.$.$mol_svg_path()\n\t\t\t\n\t\t\tobj.geometry = () => this.path()\n\t\t\t\n\t\t\treturn obj\n\t\t}\n\t}\n\t\n}\n\n","namespace $ { $mol_style_attach( \"mol/icon/icon.view.css\",\n \"[mol_icon] {\\n\\tfill: currentColor;\\n\\tstroke: none;\\n\\twidth: 1rem;\\n\\theight: 1rem;\\n\\tflex: 0 0 auto;\\n\\tvertical-align: top;\\n\\tmargin: .25rem 0;\\n\\tdisplay: inline-block;\\n\\tfilter: drop-shadow(0px 1px 1px var(--mol_theme_back));\\n\\ttransform-origin: center;\\n}\\n\\n[mol_icon_path] {\\n\\ttransform-origin: center;\\n}\\n\"\n) }","namespace $ {\n\texport class $mol_link extends $mol_view {\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * dom_name \\a\n\t\t * ```\n\t\t */\n\t\tdom_name() {\n\t\t\treturn \"a\"\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * attr *\n\t\t * \t^\n\t\t * \thref <= uri\n\t\t * \ttitle <= hint\n\t\t * \ttarget <= target\n\t\t * \tdownload <= file_name\n\t\t * \tmol_link_current <= current\n\t\t * ```\n\t\t */\n\t\tattr() {\n\t\t\treturn {\n\t\t\t\t...super.attr(),\n\t\t\t\thref: this.uri(),\n\t\t\t\ttitle: this.hint(),\n\t\t\t\ttarget: this.target(),\n\t\t\t\tdownload: this.file_name(),\n\t\t\t\tmol_link_current: this.current()\n\t\t\t}\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * sub /$mol_view_content <= title\n\t\t * ```\n\t\t */\n\t\tsub() {\n\t\t\treturn [\n\t\t\t\tthis.title()\n\t\t\t] as readonly $mol_view_content[]\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * arg *\n\t\t * ```\n\t\t */\n\t\targ() {\n\t\t\treturn {\n\t\t\t}\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * event *\n\t\t * \t^\n\t\t * \tclick?event <=> click?event\n\t\t * ```\n\t\t */\n\t\tevent() {\n\t\t\treturn {\n\t\t\t\t...super.event(),\n\t\t\t\tclick: (event?: any) => this.click(event)\n\t\t\t}\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * uri \\\n\t\t * ```\n\t\t */\n\t\turi() {\n\t\t\treturn \"\"\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * hint \\\n\t\t * ```\n\t\t */\n\t\thint() {\n\t\t\treturn \"\"\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * target \\_self\n\t\t * ```\n\t\t */\n\t\ttarget() {\n\t\t\treturn \"_self\"\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * file_name \\\n\t\t * ```\n\t\t */\n\t\tfile_name() {\n\t\t\treturn \"\"\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * current false\n\t\t * ```\n\t\t */\n\t\tcurrent() {\n\t\t\treturn false\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * event_click?event null\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tevent_click(event?: any) {\n\t\t\tif ( event !== undefined ) return event as never\n\t\t\treturn null as any\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * click?event <=> event_click?event\n\t\t * ```\n\t\t */\n\t\tclick(event?: any) {\n\t\t\treturn this.event_click(event)\n\t\t}\n\t}\n\t\n}\n\n","namespace $ {\n\t\n\texport class $mol_state_arg extends $mol_object {\n\t\t\n\t\t@ $mol_mem\n\t\tstatic href( next?: string ) {\n\t\t\t\n\t\t\tif( next === undefined ) {\n\t\t\t\t\n\t\t\t\tnext = $mol_dom_context.location.href\n\t\t\t\t\n\t\t\t} else if( !/^about:srcdoc/.test( next ) ) {\n\t\t\t\t\n\t\t\t\tnew $mol_after_frame( ()=> {\n\t\t\t\t\t\n\t\t\t\t\tconst next = this.href()\n\t\t\t\t\tconst prev = $mol_dom_context.location.href\n\t\t\t\t\tif( next === prev ) return\n\t\t\t\t\t\n\t\t\t\t\tconst history = $mol_dom_context.history\n\t\t\t\t\thistory.replaceState( history.state, $mol_dom_context.document.title, next )\n\t\t\t\t\t\n\t\t\t\t} )\n\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t\tif( $mol_dom_context.parent !== $mol_dom_context.self ) {\n\t\t\t\t$mol_dom_context.parent.postMessage( [ 'hashchange', next ], '*' )\n\t\t\t}\n\t\t\t\n\t\t\treturn next\n\t\t}\n\t\t\n\t\t@ $mol_mem\n\t\tstatic href_normal(): string {\n\t\t\treturn this.link({})\n\t\t}\n\t\t\n\t\t@ $mol_mem\n\t\tstatic href_absolute(): string {\n\t\t\treturn new URL( this.href(), $mol_dom_context.location.href ).toString()\n\t\t}\n\t\t\n\t\t@ $mol_mem\n\t\tstatic dict( next? : { [ key : string ] : string | null } ) {\n\t\t\t\n\t\t\tvar href = this.href( next && this.make_link( next ) ).split( /#!?/ )[1] || ''\n\t\t\tvar chunks = href.split( this.separator )\n\t\t\t\n\t\t\tvar params : { [ key : string ] : string } = {}\n\t\t\tchunks.forEach(\n\t\t\t\tchunk => {\n\t\t\t\t\tif( !chunk ) return\n\t\t\t\t\tvar vals = chunk.split( '=' ).map( decodeURIComponent )\n\t\t\t\t\tparams[ vals.shift()! ] = vals.join( '=' )\n\t\t\t\t}\n\t\t\t)\n\t\t\t\n\t\t\treturn params\n\t\t}\n\n\t\t@ $mol_mem_key\n\t\tstatic dict_cut( except : string[] ) {\n\t\t\t\n\t\t\tconst dict = this.dict()\n\t\t\tconst cut : { [ key : string ] : string } = {}\n\t\t\t\n\t\t\tfor( const key in dict ) {\n\t\t\t\tif( except.indexOf( key ) >= 0 ) continue\n\t\t\t\tcut[ key ] = dict[ key ]\n\t\t\t}\n\t\t\t\n\t\t\treturn cut\n\t\t}\n\t\t\n\t\t@ $mol_mem_key\n\t\tstatic value( key : string , next? : string | null ) {\n\t\t\tconst nextDict = ( next === void 0 ) ? void 0 : { ... this.dict() , [ key ] : next }\n\t\t\tconst next2 = this.dict( nextDict )[ key ]\n\t\t\treturn ( next2 == null ) ? null : next2\n\t\t}\n\t\t\n\t\tstatic link( next : { [ key : string ] : string } ) {\n\t\t\treturn this.make_link({\n\t\t\t\t... this.dict_cut( Object.keys( next ) ),\n\t\t\t\t... next,\n\t\t\t})\n\t\t}\n\t\t\n\t\tstatic prolog = '!'\n\t\tstatic separator = '/'\n\t\t\n\t\t@ $mol_mem_key\n\t\tstatic make_link( next : { [ key : string ] : string | null } ) {\n\t\t\tconst chunks : string[] = []\n\t\t\tfor( let key in next ) {\n\t\t\t\tif( null == next[ key ] ) continue\n\t\t\t\tconst val = next[ key ]\n\t\t\t\tchunks.push( [ key ].concat( val ? [ val ] : [] ).map( this.encode ).join( '=' ) )\n\t\t\t}\n\t\t\t\n\t\t\treturn new URL( '#' + this.prolog + chunks.join( this.separator ) , this.href_absolute() ).toString()\n\t\t}\n\n\t\tstatic encode( str : string ) {\n\t\t\treturn encodeURIComponent( str ).replace( /\\(/g , '%28' ).replace( /\\)/g , '%29' )\n\t\t}\n\t\t\n\t\tconstructor( public prefix = '' ) {\n\t\t\tsuper()\n\t\t}\n\t\t\n\t\tvalue( key : string , next? : string ) {\n\t\t\treturn ( this.constructor as typeof $mol_state_arg ).value( this.prefix + key , next )\n\t\t}\n\t\t\n\t\tsub( postfix : string ) {\n\t\t\treturn new ( this.constructor as typeof $mol_state_arg )( this.prefix + postfix + '.' )\n\t\t}\n\t\t\n\t\tlink( next : { [ key : string ] : string } ) {\n\t\t\tvar prefix = this.prefix\n\t\t\tvar dict : { [ key : string ] : string } = {}\n\t\t\tfor( var key in next ) {\n\t\t\t\tdict[ prefix + key ] = next[ key ]\n\t\t\t}\n\t\t\treturn ( this.constructor as typeof $mol_state_arg ).link( dict )\n\t\t}\n\t\t\n\t}\n\n\tconst $mol_state_arg_change = ( event : Event )=> {\n\t\t$mol_state_arg.href( $mol_dom_context.location.href ) \n\t}\n\n\tself.addEventListener( 'hashchange' , $mol_state_arg_change )\n\t\n}\n","namespace $ {\n\n\tconst { rem } = $mol_style_unit\n\tconst { scale } = $mol_style_func\n\n\t$mol_style_define( $mol_link , {\n\t\t\n\t\ttextDecoration: 'none',\n\t\tcolor: $mol_theme.control,\n\t\tstroke: 'currentcolor',\n\t\tcursor: 'pointer',\n\t\tpadding: $mol_gap.text,\n\t\tboxSizing: 'border-box',\n\t\tposition: 'relative',\n\t\tminWidth: rem(2.5),\n\t\tgap: $mol_gap.space,\n\t\t\n\t\tborder: {\n\t\t\tradius: $mol_gap.round,\n\t\t},\n\n\t\t':hover': {\n\t\t\t\n\t\t\tbackground: {\n\t\t\t\tcolor: $mol_theme.hover,\n\t\t\t},\n\t\t\t\n\t\t\t$mol_icon: {\n\t\t\t\ttransform: 'scale(1.5)',\n\t\t\t},\n\t\t\t\n\t\t},\n\n\t\t':focus': {\n\t\t\t\n\t\t\toutline: 'none',\n\t\t\t\n\t\t\tbackground: {\n\t\t\t\tcolor: $mol_theme.hover,\n\t\t\t},\n\t\t\t\n\t\t\t$mol_icon: {\n\t\t\t\ttransform: 'scale(1.5)',\n\t\t\t},\n\t\t\t\n\t\t},\n\n\t\t':focus-within': {\n\t\t\toutline: 'none',\n\t\t\tbackground: {\n\t\t\t\tcolor: $mol_theme.hover,\n\t\t\t}\n\t\t},\n\n\t\t'@': {\n\t\t\tmol_link_current: {\n\t\t\t\t'true': {\n\t\t\t\t\tcolor: $mol_theme.current,\n\t\t\t\t\ttextShadow: '0 0',\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\n\t} )\n\n}\n","namespace $.$$ {\n\t\n\texport class $mol_link extends $.$mol_link {\n\t\t\n\t\t@ $mol_mem\n\t\turi() {\n\t\t\t\n\t\t\tconst arg = this.arg()\n\t\t\t\n\t\t\tconst uri = new this.$.$mol_state_arg( this.state_key() ).link( arg )\n\t\t\tif( uri !== this.$.$mol_state_arg.href() ) return uri\n\t\t\t\n\t\t\tconst arg2 = {}\n\t\t\tfor( let i in arg ) arg2[i] = null\n\t\t\t\n\t\t\treturn new this.$.$mol_state_arg( this.state_key() ).link( arg2 )\n\t\t}\n\t\t\n\t\t@ $mol_mem\n\t\turi_native() {\n\t\t\tconst base = this.$.$mol_state_arg.href()\n\t\t\treturn new URL( this.uri() , base )\n\t\t}\n\n\t\t@ $mol_mem\n\t\tcurrent() {\n\n\t\t\tconst base = this.$.$mol_state_arg.href_normal()\n\t\t\tconst target = this.uri_native().toString()\n\n\t\t\tif( base === target ) return true\n\t\t\t\n\t\t\tconst args = this.arg()\n\t\t\t\n\t\t\tconst keys = Object.keys( args ).filter( key => args[ key ] != null )\n\t\t\tif( keys.length === 0 ) return false\n\n\t\t\tfor( const key of keys ) {\n\t\t\t\tif( this.$.$mol_state_arg.value( key ) !== args[ key ] ) return false\n\t\t\t}\n\n\t\t\treturn true\n\t\t}\n\n\t\tfile_name() {\n\t\t\treturn null as unknown as string\n\t\t}\n\n\t\tminimal_height() {\n\t\t\treturn Math.max( super.minimal_height(), 24 )\n\t\t}\n\t\t\n\t\ttarget(): '_self' | '_blank' | '_top' | '_parent' | string {\n\t\t\treturn ( this.uri_native().origin === $mol_dom_context.location.origin ) ? '_self' : '_blank'\n\t\t}\n\n\t}\n\t\n}\n","namespace $ {\n\texport class $mol_button_typed extends $mol_button {\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * minimal_height 40\n\t\t * ```\n\t\t */\n\t\tminimal_height() {\n\t\t\treturn 40\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * minimal_width 40\n\t\t * ```\n\t\t */\n\t\tminimal_width() {\n\t\t\treturn 40\n\t\t}\n\t}\n\t\n}\n\n","namespace $ { $mol_style_attach( \"mol/button/typed/typed.view.css\",\n \"[mol_button_typed] {\\n\\talign-content: center;\\n\\talign-items: center;\\n\\tpadding: var(--mol_gap_text);\\n\\tborder-radius: var(--mol_gap_round);\\n\\tgap: var(--mol_gap_space);\\n\\tuser-select: none;\\n\\tcursor: pointer;\\n}\\n\\n[mol_button_typed][disabled] {\\n\\tpointer-events: none;\\n}\\n\\n[mol_button_typed]:hover ,\\n[mol_button_typed]:focus {\\n\\tbackground-color: var(--mol_theme_hover);\\n}\\n\\n[mol_button_typed]:hover [mol_icon] ,\\n[mol_button_typed]:focus [mol_icon] {\\n\\ttransform: scale(1.5);\\n}\\n\"\n) }","namespace $ {\n\texport class $mol_button_minor extends $mol_button_typed {\n\t}\n\t\n}\n\n","namespace $ { $mol_style_attach( \"mol/button/minor/minor.view.css\",\n \"[mol_button_minor] {\\n\\tcolor: var(--mol_theme_control);\\n}\\n\\n[mol_button_minor][disabled] {\\n\\tcolor: var(--mol_theme_shade);\\n}\\n\"\n) }","namespace $ {\n\texport class $mol_check extends $mol_button_minor {\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * attr *\n\t\t * \t^\n\t\t * \tmol_check_checked <= checked?val\n\t\t * \taria-checked <= checked?val\n\t\t * \trole \\checkbox\n\t\t * ```\n\t\t */\n\t\tattr() {\n\t\t\treturn {\n\t\t\t\t...super.attr(),\n\t\t\t\tmol_check_checked: this.checked(),\n\t\t\t\t\"aria-checked\": this.checked(),\n\t\t\t\trole: \"checkbox\"\n\t\t\t}\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * sub /$mol_view_content\n\t\t * \t<= Icon\n\t\t * \t<= label\n\t\t * ```\n\t\t */\n\t\tsub() {\n\t\t\treturn [\n\t\t\t\tthis.Icon(),\n\t\t\t\tthis.label()\n\t\t\t] as readonly $mol_view_content[]\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * checked?val false\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tchecked(val?: any) {\n\t\t\tif ( val !== undefined ) return val as never\n\t\t\treturn false\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * Icon null\n\t\t * ```\n\t\t */\n\t\tIcon() {\n\t\t\treturn null as any\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * title \\\n\t\t * ```\n\t\t */\n\t\ttitle() {\n\t\t\treturn \"\"\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * Title $mol_view sub / <= title\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tTitle() {\n\t\t\tconst obj = new this.$.$mol_view()\n\t\t\t\n\t\t\tobj.sub = () => [\n\t\t\t\tthis.title()\n\t\t\t] as readonly any[]\n\t\t\t\n\t\t\treturn obj\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * label / <= Title\n\t\t * ```\n\t\t */\n\t\tlabel() {\n\t\t\treturn [\n\t\t\t\tthis.Title()\n\t\t\t] as readonly any[]\n\t\t}\n\t}\n\t\n}\n\n","namespace $ { $mol_style_attach( \"mol/check/check.css\",\n \"[mol_check] {\\n\\tflex: 0 0 auto;\\n\\tjustify-content: flex-start;\\n\\talign-content: center;\\n\\talign-items: flex-start;\\n\\tborder: none;\\n\\tfont-weight: inherit;\\n\\tbox-shadow: none;\\n\\ttext-align: left;\\n\\tpadding: var(--mol_gap_text);\\n\\tdisplay: inline-flex;\\n\\tflex-wrap: nowrap;\\n}\\n\\n[mol_check_title] {\\n\\tflex-shrink: 1;\\n}\\n\"\n) }","namespace $.$$ {\n\texport class $mol_check extends $.$mol_check {\n\n\t\tclick( next? : Event ) {\n\t\t\tif( next?.defaultPrevented ) return\n\t\t\tthis.checked( !this.checked() )\n\t\t\tif( next ) next.preventDefault()\n\t\t}\n\n\t\tsub() {\n\t\t\treturn [\n\t\t\t\t... $mol_maybe( this.Icon() ) ,\n\t\t\t\t... this.label() ,\n\t\t\t] as readonly $mol_view_content[]\n\t\t}\n\n\t\tlabel() {\n\t\t\treturn this.title() ? super.label() : []\n\t\t}\n\n\t}\n}\n","namespace $ {\n\texport class $mol_scroll extends $mol_view {\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * scroll_top?val 0\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tscroll_top(val?: any) {\n\t\t\tif ( val !== undefined ) return val as never\n\t\t\treturn 0\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * scroll_left?val 0\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tscroll_left(val?: any) {\n\t\t\tif ( val !== undefined ) return val as never\n\t\t\treturn 0\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * field *\n\t\t * \t^\n\t\t * \ttabIndex <= tabindex\n\t\t * ```\n\t\t */\n\t\tfield() {\n\t\t\treturn {\n\t\t\t\t...super.field(),\n\t\t\t\ttabIndex: this.tabindex()\n\t\t\t}\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * event *\n\t\t * \t^\n\t\t * \tscroll?event <=> event_scroll?event\n\t\t * ```\n\t\t */\n\t\tevent() {\n\t\t\treturn {\n\t\t\t\t...super.event(),\n\t\t\t\tscroll: (event?: any) => this.event_scroll(event)\n\t\t\t}\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * tabindex -1\n\t\t * ```\n\t\t */\n\t\ttabindex() {\n\t\t\treturn -1\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * event_scroll?event null\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tevent_scroll(event?: any) {\n\t\t\tif ( event !== undefined ) return event as never\n\t\t\treturn null as any\n\t\t}\n\t}\n\t\n}\n\n","namespace $ {\n\n\texport class $mol_print extends $mol_object {\n\n\t\t@ $mol_mem\n\t\tstatic before() {\n\t\t\treturn new $mol_dom_listener( this.$.$mol_dom_context , 'beforeprint' , ()=> {\n\t\t\t\tthis.active( true )\n\t\t\t} )\n\t\t}\n\n\t\t@ $mol_mem\n\t\tstatic after() {\n\t\t\treturn new $mol_dom_listener( this.$.$mol_dom_context , 'afterprint' , ()=> {\n\t\t\t\tthis.active( false )\n\t\t\t} )\n\t\t}\n\n\t\t@ $mol_mem\n\t\tstatic active( next? : boolean ) {\n\t\t\tthis.before()\n\t\t\tthis.after()\n\t\t\treturn next || false\n\t\t}\n\n\t}\n\n}\n","namespace $.$$ {\n\n\tconst { per , rem , px } = $mol_style_unit\n\n\t$mol_style_define( $mol_scroll , {\n\t\toverflow: 'auto',\n\t} )\n\t\n\t$mol_style_define( $mol_scroll , {\n\n\t\tdisplay: 'flex',\n\t\toverflow: 'overlay',\n\t\tflex: {\n\t\t\tdirection: 'column',\n\t\t\tgrow: 1,\n\t\t\tshrink: 1,\n\t\t\tbasis: 0,\n\t\t},\n\t\toutline: 'none',\n\t\talignSelf: 'stretch',\n\t\tboxSizing: 'border-box',\n\t\twillChange: 'scroll-position',\n\t\tmaxHeight: per(100),\n\t\tmaxWidth: per(100),\n\t\twebkitOverflowScrolling: 'touch',\n\t\tcontain: 'content',\n\n\t\t'>': {\n\t\t\t$mol_view: {\n\t\t\t\ttransform: 'translateZ(0)', // enforce gpu scroll in all agents\n\t\t\t},\n\t\t},\n\n\t\tscrollbar: {\n\t\t\tcolor: [ $mol_theme.line , 'transparent' ],\n\t\t\twidth: 'thin',\n\t\t},\n\t\n\t\t'::-webkit-scrollbar': {\n\t\t\twidth: rem(.25),\n\t\t\theight: rem(.25),\n\t\t},\n\t\t\n\t\t':hover': {\n\t\t\t'::-webkit-scrollbar': {\n\t\t\t\twidth: rem(.5),\n\t\t\t\theight: rem(.5),\n\t\t\t},\n\t\t},\n\t\t\n\t\t'::-webkit-scrollbar-corner': {\n\t\t\tbackground: {\n\t\t\t\tcolor: $mol_theme.line,\n\t\t\t},\n\t\t},\n\n\t\t'::-webkit-scrollbar-track': {\n\t\t\tbackground: {\n\t\t\t\tcolor: 'transparent',\n\t\t\t},\n\t\t},\n\n\t\t'::-webkit-scrollbar-thumb': {\n\t\t\tbackground: {\n\t\t\t\tcolor: $mol_theme.line,\n\t\t\t},\n\t\t\tborder: {\n\t\t\t\tradius: $mol_gap.round,\n\t\t\t},\n\t\t},\n\n\t\t'@media' : {\n\t\t\t'print' : {\n\t\t\t\toverflow: 'visible',\n\t\t\t\tcontain: 'none',\n\t\t\t\tmaxHeight: 'unset',\n\t\t\t},\n\t\t},\n\n\t})\n\n}\n","namespace $.$$ {\n\t\n\texport class $mol_scroll extends $.$mol_scroll {\n\n\t\t@ $mol_mem\n\t\tscroll_top( next? : number, cache?: 'cache' ): number {\n\t\t\t\n\t\t\tconst el = this.dom_node()\n\t\t\tif( next !== undefined && !cache ) el.scrollTop = next\n\t\t\t\n\t\t\treturn el.scrollTop\n\t\t}\n\t\t\n\t\t@ $mol_mem\n\t\tscroll_left( next? : number, cache?: 'cache' ): number {\n\t\t\t\n\t\t\tconst el = this.dom_node()\n\t\t\tif( next !== undefined && !cache ) el.scrollLeft = next\n\t\t\t\n\t\t\treturn el.scrollLeft\n\t\t}\n\t\t\n\t\tevent_scroll( next? : Event ) {\n\t\t\t\n\t\t\tconst el = this.dom_node() as HTMLElement\n\t\t\t\n\t\t\tthis.scroll_left( el.scrollLeft, 'cache' )\n\t\t\tthis.scroll_top( el.scrollTop, 'cache' )\n\t\t\t\n\t\t}\n\n\t\tminimal_height() {\n\t\t\treturn this.$.$mol_print.active() ? null! : 0\n\t\t}\n\t\t\n\t\tminimal_width() {\n\t\t\treturn this.$.$mol_print.active() ? null! : 0\n\t\t}\n\t\t\n\t}\n\n}\n","namespace $ {\n\texport class $mol_paragraph extends $mol_view {\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * line_height 24\n\t\t * ```\n\t\t */\n\t\tline_height() {\n\t\t\treturn 24\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * letter_width 7\n\t\t * ```\n\t\t */\n\t\tletter_width() {\n\t\t\treturn 7\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * width_limit Infinity\n\t\t * ```\n\t\t */\n\t\twidth_limit() {\n\t\t\treturn Infinity\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * sub / <= title\n\t\t * ```\n\t\t */\n\t\tsub() {\n\t\t\treturn [\n\t\t\t\tthis.title()\n\t\t\t] as readonly any[]\n\t\t}\n\t}\n\t\n}\n\n","namespace $ { $mol_style_attach( \"mol/paragraph/paragraph.view.css\",\n \":where([mol_paragraph]) {\\n\\tmargin: 0;\\n\\tmax-width: 100%;\\n}\\n\"\n) }","namespace $.$$ {\n\n\texport class $mol_paragraph extends $.$mol_paragraph {\n\n\t\t@ $mol_mem\n\t\tmaximal_width() {\n\n\t\t\tlet width = 0\n\t\t\tconst letter = this.letter_width()\n\t\t\t\n\t\t\tfor( const kid of this.sub() ) {\n\t\t\t\t\n\t\t\t\tif( !kid ) continue\n\t\t\t\t\n\t\t\t\tif( kid instanceof $mol_view ) {\n\t\t\t\t\twidth += kid.maximal_width()\n\t\t\t\t} else if( typeof kid !== 'object' ) {\n\t\t\t\t\twidth += String( kid ).length * letter\n\t\t\t\t}\n\n\t\t\t}\n\t\t\t\n\t\t\treturn width\n\n\t\t}\n\n\t\twidth_limit() {\n\t\t\treturn this.$.$mol_window.size().width\n\t\t}\n\t\t\n\t\tminimal_width() {\n\t\t\treturn this.letter_width()\n\t\t}\n\n\t\t@ $mol_mem\n\t\trow_width() {\n\t\t\treturn Math.max( Math.min( this.width_limit() , this.maximal_width() ) , this.letter_width() )\n\t\t}\n\n\t\t@ $mol_mem\n\t\tminimal_height() {\n\t\t\treturn Math.max( 1 , Math.ceil( this.maximal_width() / this.row_width() ) ) * this.line_height()\n\t\t}\n\n\t}\n\n}\n","namespace $ {\n\texport class $mol_list extends $mol_view {\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * render_visible_only true\n\t\t * ```\n\t\t */\n\t\trender_visible_only() {\n\t\t\treturn true\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * render_over 0\n\t\t * ```\n\t\t */\n\t\trender_over() {\n\t\t\treturn 0\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * sub <= rows\n\t\t * ```\n\t\t */\n\t\tsub() {\n\t\t\treturn this.rows()\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * Empty $mol_view\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tEmpty() {\n\t\t\tconst obj = new this.$.$mol_view()\n\t\t\t\n\t\t\treturn obj\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * Gap_before $mol_view style * paddingTop <= gap_before\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tGap_before() {\n\t\t\tconst obj = new this.$.$mol_view()\n\t\t\t\n\t\t\tobj.style = () => ({\n\t\t\t\tpaddingTop: this.gap_before()\n\t\t\t})\n\t\t\t\n\t\t\treturn obj\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * Gap_after $mol_view style * paddingTop <= gap_after\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tGap_after() {\n\t\t\tconst obj = new this.$.$mol_view()\n\t\t\t\n\t\t\tobj.style = () => ({\n\t\t\t\tpaddingTop: this.gap_after()\n\t\t\t})\n\t\t\t\n\t\t\treturn obj\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * view_window /\n\t\t * \t0\n\t\t * \t0\n\t\t * ```\n\t\t */\n\t\tview_window() {\n\t\t\treturn [\n\t\t\t\t0,\n\t\t\t\t0\n\t\t\t] as readonly any[]\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * rows /$mol_view\n\t\t * ```\n\t\t */\n\t\trows() {\n\t\t\treturn [\n\t\t\t] as readonly $mol_view[]\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * gap_before 0\n\t\t * ```\n\t\t */\n\t\tgap_before() {\n\t\t\treturn 0\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * gap_after 0\n\t\t * ```\n\t\t */\n\t\tgap_after() {\n\t\t\treturn 0\n\t\t}\n\t}\n\t\n}\n\n","namespace $ {\n\n\tlet cache = null as null | boolean\n\texport function $mol_support_css_overflow_anchor( this: $ ) {\n\t\treturn cache ?? ( cache = this.$mol_dom_context.CSS?.supports( 'overflow-anchor:auto' ) ?? false )\n\t}\n\n}\n","namespace $ {\n\t\n\texport function $mol_wire_probe< Value >(\n\t\ttask : ()=> Value, next?: Value\n\t) : Value | undefined {\n\t\t\n\t\tconst warm = $mol_wire_fiber.warm\n\t\t\n\t\ttry {\n\t\t\t$mol_wire_fiber.warm = false\n\t\t\treturn task()\n\t\t} finally {\n\t\t\t$mol_wire_fiber.warm = warm\n\t\t}\n\t\t\n\t}\n\t\n}\n","namespace $ {\n\texport let $mol_mem_cached = $mol_wire_probe\n}\n","namespace $ { $mol_style_attach( \"mol/list/list.view.css\",\n \"[mol_list] {\\n\\twill-change: contents;\\n\\tdisplay: flex;\\n\\tflex-direction: column;\\n\\tflex-shrink: 0;\\n\\tmax-width: 100%;\\n\\t/* display: flex;\\n\\talign-items: stretch;\\n\\talign-content: stretch; */\\n\\ttransition: none;\\n\\tmin-height: .5rem;\\n}\\n\\n[mol_list_gap_before] ,\\n[mol_list_gap_after] {\\n\\tdisplay: block !important;\\n\\tflex: none;\\n\\ttransition: none;\\n\\toverflow-anchor: none;\\n}\\n\"\n) }","namespace $.$$ {\n\n\texport class $mol_list extends $.$mol_list {\n\t\t\n\t\t@ $mol_mem\n\t\tsub() {\n\t\t\tconst rows = this.rows()\n\t\t\treturn ( rows.length === 0 ) ? [ this.Empty() ] : rows\n\t\t}\n\n\t\trender_visible_only() {\n\t\t\treturn this.$.$mol_support_css_overflow_anchor()\n\t\t}\n\n\t\t@ $mol_mem\n\t\tview_window( next?: [ number , number ] ) : [ number , number ] {\n\t\t\t\n\t\t\tconst kids = this.sub()\n\t\t\t\n\t\t\tif( kids.length < 3 ) return [ 0 , kids.length ]\n\t\t\tif( this.$.$mol_print.active() ) return [ 0 , kids.length ]\n\t\t\t\n\t\t\tconst rect = this.view_rect()\n\t\t\tif( next ) return next\n\t\t\t\n\t\t\tlet [ min , max ] = $mol_mem_cached( ()=> this.view_window() ) ?? [ 0 , 0 ]\n\n\t\t\tlet max2 = max = Math.min( max , kids.length )\n\t\t\tlet min2 = min = Math.max( 0 , Math.min( min , max - 1 ) )\n\t\t\t\n\t\t\tconst anchoring = this.render_visible_only()\n\t\t\tconst window_height = this.$.$mol_window.size().height + 40\n\t\t\tconst over = Math.ceil( window_height * this.render_over() )\n\t\t\tconst limit_top = -over\n\t\t\tconst limit_bottom = window_height + over\n\n\t\t\tconst gap_before = $mol_mem_cached( ()=> this.gap_before() ) ?? 0\n\t\t\tconst gap_after = $mol_mem_cached( ()=> this.gap_after() ) ?? 0\n\n\t\t\tlet top = Math.ceil( rect?.top ?? 0 ) + gap_before\n\t\t\tlet bottom = Math.ceil( rect?.bottom ?? 0 ) - gap_after\n\n\t\t\t// change nothing when already covers all limits\n\t\t\tif( top <= limit_top && bottom >= limit_bottom ) {\n\t\t\t\treturn [ min2 , max2 ]\n\t\t\t}\n\n\t\t\t// jumps when fully over limits\n\t\t\tif( anchoring && (( bottom < limit_top )||( top > limit_bottom )) ) {\n\n\t\t\t\tmin = 0\n\t\t\t\ttop = Math.ceil( rect?.top ?? 0 )\n\t\t\t\t\n\t\t\t\twhile( min < ( kids.length - 1 ) ) {\n\t\t\t\t\t\n\t\t\t\t\tconst height = kids[ min ].minimal_height()\n\t\t\t\t\tif( top + height >= limit_top ) break\n\t\t\t\t\t\n\t\t\t\t\ttop += height\n\t\t\t\t\t++ min\n\n\t\t\t\t}\n\n\t\t\t\tmin2 = min\n\t\t\t\tmax2 = max = min\n\t\t\t\tbottom = top\n\n\t\t\t}\n\n\t\t\tlet top2 = top\n\t\t\tlet bottom2 = bottom\n\n\t\t\t// force recalc min when overlapse top limit\n\t\t\tif( anchoring && ( top <= limit_top ) && ( bottom2 < limit_bottom ) ) {\n\t\t\t\tmin2 = Math.max( 0, max - 1 )\n\t\t\t\ttop2 = bottom\n\t\t\t}\n\n\t\t\t// force recalc max when overlapse bottom limit\n\t\t\tif( ( bottom >= limit_bottom ) && ( top2 >= limit_top ) ) {\n\t\t\t\tmax2 = Math.min( min + 1, kids.length )\n\t\t\t\tbottom2 = top\n\t\t\t}\n\n\t\t\t// extend max to cover bottom limit\n\t\t\twhile( bottom2 < limit_bottom && max2 < kids.length ) {\n\t\t\t\tbottom2 += kids[ max2 ].minimal_height()\n\t\t\t\t++ max2\n\t\t\t}\n\n\t\t\t// extend min to cover top limit\n\t\t\twhile( anchoring && (( top2 >= limit_top )&&( min2 > 0 )) ) {\n\t\t\t\t-- min2\n\t\t\t\ttop2 -= kids[ min2 ].minimal_height()\n\t\t\t}\n\n\t\t\treturn [ min2 , max2 ]\n\t\t}\n\n\t\t@ $mol_mem\n\t\tgap_before() {\n\t\t\tconst skipped = this.sub().slice( 0 , this.view_window()[0] )\n\t\t\treturn Math.max( 0 , skipped.reduce( ( sum , view )=> sum + view.minimal_height() , 0 ) )\n\t\t}\n\n\t\t@ $mol_mem\n\t\tgap_after() {\n\t\t\tconst skipped = this.sub().slice( this.view_window()[1] )\n\t\t\treturn Math.max( 0 , skipped.reduce( ( sum , view )=> sum + view.minimal_height() , 0 ) )\n\t\t}\n\n\t\t@ $mol_mem\n\t\tsub_visible() {\n\t\t\treturn [\n\t\t\t\t... this.gap_before() ? [ this.Gap_before() ] : [],\n\t\t\t\t... this.sub().slice( ... this.view_window() ),\n\t\t\t\t... this.gap_after() ? [ this.Gap_after() ] : [],\n\t\t\t]\n\t\t}\n\t\t\n\t\t@ $mol_mem\n\t\tminimal_height() {\n\n\t\t\treturn this.sub().reduce( ( sum , view )=> {\n\n\t\t\t\ttry {\n\t\t\t\t\treturn sum + view.minimal_height() \n\t\t\t\t} catch( error: any ) {\n\t\t\t\t\t$mol_fail_log( error )\n\t\t\t\t\treturn sum\n\t\t\t\t}\n\n\t\t\t} , 0 )\n\n\t\t}\n\n\t\tforce_render(\n\t\t\tpath : Set< $mol_view >,\n\t\t) {\n\n\t\t\tconst kids = this.rows()\n\n\t\t\tconst index = kids.findIndex( item => path.has( item ) )\n\n\t\t\tif( index >= 0 ) {\n\t\t\t\tconst win = this.view_window()\n\t\t\t\tif( index < win[0] || index >= win[1] ) {\n\t\t\t\t\tthis.view_window([ index, index + 1 ])\n\t\t\t\t}\n\t\t\t\t( kids[ index ] as $mol_view ).force_render( path )\n\t\t\t}\n\t\t\t\n\t\t}\n\n\t}\n}\n","namespace $ {\n\texport class $mol_bar extends $mol_view {\n\t}\n\t\n}\n\n","namespace $ { $mol_style_attach( \"mol/bar/bar.view.css\",\n \"[mol_bar] {\\n\\tdisplay: flex;\\n\\t/* box-shadow: inset 0 0 0 1px var(--mol_theme_line); */\\n\\tborder-radius: var(--mol_gap_round);\\n}\\n\"\n) }","namespace $ {\n\texport class $hyoo_todomvc extends $mol_scroll {\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * title \\Todos\n\t\t * ```\n\t\t */\n\t\ttitle() {\n\t\t\treturn \"Todos\"\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * attr *\n\t\t * \t^\n\t\t * \tmol_theme \\$mol_theme_light\n\t\t * ```\n\t\t */\n\t\tattr() {\n\t\t\treturn {\n\t\t\t\t...super.attr(),\n\t\t\t\tmol_theme: \"$mol_theme_light\"\n\t\t\t}\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * sub / <= Page\n\t\t * ```\n\t\t */\n\t\tsub() {\n\t\t\treturn [\n\t\t\t\tthis.Page()\n\t\t\t] as readonly any[]\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * Title $mol_paragraph\n\t\t * \tminimal_height 176\n\t\t * \ttitle <= title\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tTitle() {\n\t\t\tconst obj = new this.$.$mol_paragraph()\n\t\t\t\n\t\t\tobj.minimal_height = () => 176\n\t\t\tobj.title = () => this.title()\n\t\t\t\n\t\t\treturn obj\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * head_complete_enabled false\n\t\t * ```\n\t\t */\n\t\thead_complete_enabled() {\n\t\t\treturn false\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * completed_all? false\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tcompleted_all(next?: any) {\n\t\t\tif ( next !== undefined ) return next as never\n\t\t\treturn false\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * Head_complete $mol_check\n\t\t * \tenabled <= head_complete_enabled\n\t\t * \tchecked? <=> completed_all?\n\t\t * \ttitle \\❯\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tHead_complete() {\n\t\t\tconst obj = new this.$.$mol_check()\n\t\t\t\n\t\t\tobj.enabled = () => this.head_complete_enabled()\n\t\t\tobj.checked = (next?: any) => this.completed_all(next)\n\t\t\tobj.title = () => \"❯\"\n\t\t\t\n\t\t\treturn obj\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * task_title_new? \\\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\ttask_title_new(next?: any) {\n\t\t\tif ( next !== undefined ) return next as never\n\t\t\treturn \"\"\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * add? null\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tadd(next?: any) {\n\t\t\tif ( next !== undefined ) return next as never\n\t\t\treturn null as any\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * Add $hyoo_todomvc_add\n\t\t * \tvalue? <=> task_title_new?\n\t\t * \tdone? <=> add?\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tAdd() {\n\t\t\tconst obj = new this.$.$hyoo_todomvc_add()\n\t\t\t\n\t\t\tobj.value = (next?: any) => this.task_title_new(next)\n\t\t\tobj.done = (next?: any) => this.add(next)\n\t\t\t\n\t\t\treturn obj\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * Head_content /\n\t\t * \t<= Head_complete\n\t\t * \t<= Add\n\t\t * ```\n\t\t */\n\t\tHead_content() {\n\t\t\treturn [\n\t\t\t\tthis.Head_complete(),\n\t\t\t\tthis.Add()\n\t\t\t] as readonly any[]\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * Head $mol_view\n\t\t * \tminimal_height 64\n\t\t * \tsub <= Head_content\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tHead() {\n\t\t\tconst obj = new this.$.$mol_view()\n\t\t\t\n\t\t\tobj.minimal_height = () => 64\n\t\t\tobj.sub = () => this.Head_content()\n\t\t\t\n\t\t\treturn obj\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * task_completed*? false\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem_key\n\t\ttask_completed(id: any, next?: any) {\n\t\t\tif ( next !== undefined ) return next as never\n\t\t\treturn false\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * task_title*? \\\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem_key\n\t\ttask_title(id: any, next?: any) {\n\t\t\tif ( next !== undefined ) return next as never\n\t\t\treturn \"\"\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * task_drop*? null\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem_key\n\t\ttask_drop(id: any, next?: any) {\n\t\t\tif ( next !== undefined ) return next as never\n\t\t\treturn null as any\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * Task_row*0 $hyoo_todomvc_task_row\n\t\t * \tcompleted? <=> task_completed*?\n\t\t * \ttitle? <=> task_title*?\n\t\t * \tdrop? <=> task_drop*?\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem_key\n\t\tTask_row(id: any) {\n\t\t\tconst obj = new this.$.$hyoo_todomvc_task_row()\n\t\t\t\n\t\t\tobj.completed = (next?: any) => this.task_completed(id, next)\n\t\t\tobj.title = (next?: any) => this.task_title(id, next)\n\t\t\tobj.drop = (next?: any) => this.task_drop(id, next)\n\t\t\t\n\t\t\treturn obj\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * task_rows /$mol_view <= Task_row*0\n\t\t * ```\n\t\t */\n\t\ttask_rows() {\n\t\t\treturn [\n\t\t\t\tthis.Task_row(\"0\")\n\t\t\t] as readonly $mol_view[]\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * List $mol_list rows <= task_rows\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tList() {\n\t\t\tconst obj = new this.$.$mol_list()\n\t\t\t\n\t\t\tobj.rows = () => this.task_rows()\n\t\t\t\n\t\t\treturn obj\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * pending_message \\0 items left\n\t\t * ```\n\t\t */\n\t\tpending_message() {\n\t\t\treturn \"0 items left \"\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * Pending $mol_paragraph title <= pending_message\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tPending() {\n\t\t\tconst obj = new this.$.$mol_paragraph()\n\t\t\t\n\t\t\tobj.title = () => this.pending_message()\n\t\t\t\n\t\t\treturn obj\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * Filter_all $mol_link\n\t\t * \ttitle \\All\n\t\t * \targ * completed null\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tFilter_all() {\n\t\t\tconst obj = new this.$.$mol_link()\n\t\t\t\n\t\t\tobj.title = () => \"All\"\n\t\t\tobj.arg = () => ({\n\t\t\t\tcompleted: null as any\n\t\t\t})\n\t\t\t\n\t\t\treturn obj\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * Filter_active $mol_link\n\t\t * \ttitle \\Active\n\t\t * \targ * completed \\false\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tFilter_active() {\n\t\t\tconst obj = new this.$.$mol_link()\n\t\t\t\n\t\t\tobj.title = () => \"Active\"\n\t\t\tobj.arg = () => ({\n\t\t\t\tcompleted: \"false\"\n\t\t\t})\n\t\t\t\n\t\t\treturn obj\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * Filter_completed $mol_link\n\t\t * \ttitle \\Completed\n\t\t * \targ * completed \\true\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tFilter_completed() {\n\t\t\tconst obj = new this.$.$mol_link()\n\t\t\t\n\t\t\tobj.title = () => \"Completed\"\n\t\t\tobj.arg = () => ({\n\t\t\t\tcompleted: \"true\"\n\t\t\t})\n\t\t\t\n\t\t\treturn obj\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * filterOptions /\n\t\t * \t<= Filter_all\n\t\t * \t<= Filter_active\n\t\t * \t<= Filter_completed\n\t\t * ```\n\t\t */\n\t\tfilterOptions() {\n\t\t\treturn [\n\t\t\t\tthis.Filter_all(),\n\t\t\t\tthis.Filter_active(),\n\t\t\t\tthis.Filter_completed()\n\t\t\t] as readonly any[]\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * Filter $mol_bar sub <= filterOptions\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tFilter() {\n\t\t\tconst obj = new this.$.$mol_bar()\n\t\t\t\n\t\t\tobj.sub = () => this.filterOptions()\n\t\t\t\n\t\t\treturn obj\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * sweep_enabled true\n\t\t * ```\n\t\t */\n\t\tsweep_enabled() {\n\t\t\treturn true\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * sweep? null\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tsweep(next?: any) {\n\t\t\tif ( next !== undefined ) return next as never\n\t\t\treturn null as any\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * sweep_label \\Clear completed\n\t\t * ```\n\t\t */\n\t\tsweep_label() {\n\t\t\treturn \"Clear completed\"\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * Sweep $mol_button_minor\n\t\t * \tenabled <= sweep_enabled\n\t\t * \tclick? <=> sweep?\n\t\t * \tsub / <= sweep_label\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tSweep() {\n\t\t\tconst obj = new this.$.$mol_button_minor()\n\t\t\t\n\t\t\tobj.enabled = () => this.sweep_enabled()\n\t\t\tobj.click = (next?: any) => this.sweep(next)\n\t\t\tobj.sub = () => [\n\t\t\t\tthis.sweep_label()\n\t\t\t] as readonly any[]\n\t\t\t\n\t\t\treturn obj\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * foot_content /\n\t\t * \t<= Pending\n\t\t * \t<= Filter\n\t\t * \t<= Sweep\n\t\t * ```\n\t\t */\n\t\tfoot_content() {\n\t\t\treturn [\n\t\t\t\tthis.Pending(),\n\t\t\t\tthis.Filter(),\n\t\t\t\tthis.Sweep()\n\t\t\t] as readonly any[]\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * Foot $mol_view sub <= foot_content\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tFoot() {\n\t\t\tconst obj = new this.$.$mol_view()\n\t\t\t\n\t\t\tobj.sub = () => this.foot_content()\n\t\t\t\n\t\t\treturn obj\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * panels /\n\t\t * \t<= Head\n\t\t * \t<= List\n\t\t * \t<= Foot\n\t\t * ```\n\t\t */\n\t\tpanels() {\n\t\t\treturn [\n\t\t\t\tthis.Head(),\n\t\t\t\tthis.List(),\n\t\t\t\tthis.Foot()\n\t\t\t] as readonly any[]\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * Panel $mol_list rows <= panels\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tPanel() {\n\t\t\tconst obj = new this.$.$mol_list()\n\t\t\t\n\t\t\tobj.rows = () => this.panels()\n\t\t\t\n\t\t\treturn obj\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * Page $mol_list rows /\n\t\t * \t<= Title\n\t\t * \t<= Panel\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tPage() {\n\t\t\tconst obj = new this.$.$mol_list()\n\t\t\t\n\t\t\tobj.rows = () => [\n\t\t\t\tthis.Title(),\n\t\t\t\tthis.Panel()\n\t\t\t] as readonly any[]\n\t\t\t\n\t\t\treturn obj\n\t\t}\n\t}\n\t\n\texport class $hyoo_todomvc_add extends $mol_string {\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * hint \\What needs to be done?\n\t\t * ```\n\t\t */\n\t\thint() {\n\t\t\treturn \"What needs to be done?\"\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * event *\n\t\t * \t^\n\t\t * \tkeydown? <=> press?\n\t\t * ```\n\t\t */\n\t\tevent() {\n\t\t\treturn {\n\t\t\t\t...super.event(),\n\t\t\t\tkeydown: (next?: any) => this.press(next)\n\t\t\t}\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * done? null\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tdone(next?: any) {\n\t\t\tif ( next !== undefined ) return next as never\n\t\t\treturn null as any\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * press? null\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tpress(next?: any) {\n\t\t\tif ( next !== undefined ) return next as never\n\t\t\treturn null as any\n\t\t}\n\t}\n\t\n\texport class $hyoo_todomvc_task_row extends $mol_view {\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * minimal_height 64\n\t\t * ```\n\t\t */\n\t\tminimal_height() {\n\t\t\treturn 64\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * attr *\n\t\t * \t^\n\t\t * \thyoo_todomvc_task_row_completed <= completed?\n\t\t * ```\n\t\t */\n\t\tattr() {\n\t\t\treturn {\n\t\t\t\t...super.attr(),\n\t\t\t\thyoo_todomvc_task_row_completed: this.completed()\n\t\t\t}\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * sub /\n\t\t * \t<= Complete\n\t\t * \t<= Title\n\t\t * \t<= Drop\n\t\t * ```\n\t\t */\n\t\tsub() {\n\t\t\treturn [\n\t\t\t\tthis.Complete(),\n\t\t\t\tthis.Title(),\n\t\t\t\tthis.Drop()\n\t\t\t] as readonly any[]\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * completed? false\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tcompleted(next?: any) {\n\t\t\tif ( next !== undefined ) return next as never\n\t\t\treturn false\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * Complete $mol_check checked? <=> completed?\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tComplete() {\n\t\t\tconst obj = new this.$.$mol_check()\n\t\t\t\n\t\t\tobj.checked = (next?: any) => this.completed(next)\n\t\t\t\n\t\t\treturn obj\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * title_hint \\Task title\n\t\t * ```\n\t\t */\n\t\ttitle_hint() {\n\t\t\treturn \"Task title\"\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * title? \\\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\ttitle(next?: any) {\n\t\t\tif ( next !== undefined ) return next as never\n\t\t\treturn \"\"\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * Title $mol_string\n\t\t * \thint <= title_hint\n\t\t * \tvalue? <=> title?\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tTitle() {\n\t\t\tconst obj = new this.$.$mol_string()\n\t\t\t\n\t\t\tobj.hint = () => this.title_hint()\n\t\t\tobj.value = (next?: any) => this.title(next)\n\t\t\t\n\t\t\treturn obj\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * drop? null\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tdrop(next?: any) {\n\t\t\tif ( next !== undefined ) return next as never\n\t\t\treturn null as any\n\t\t}\n\t\t\n\t\t/**\n\t\t * ```tree\n\t\t * Drop $mol_button_typed\n\t\t * \tsub / \\✖\n\t\t * \tclick? <=> drop?\n\t\t * ```\n\t\t */\n\t\t@ $mol_mem\n\t\tDrop() {\n\t\t\tconst obj = new this.$.$mol_button_typed()\n\t\t\t\n\t\t\tobj.sub = () => [\n\t\t\t\t\"✖\"\n\t\t\t] as readonly any[]\n\t\t\tobj.click = (next?: any) => this.drop(next)\n\t\t\t\n\t\t\treturn obj\n\t\t}\n\t}\n\t\n}\n\n","namespace $ {\n\t\n\texport class $mol_state_local< Value > extends $mol_object {\n\t\t\n\t\tstatic 'native()' : Pick< Storage , 'getItem'|'setItem'|'removeItem' >\n\t\tstatic native() {\n\t\t\tif( this['native()'] ) return this['native()']\n\n\t\t\tcheck : try {\n\t\t\t\tconst native = $mol_dom_context.localStorage\n\t\t\t\tif( !native ) break check\n\t\t\t\t\n\t\t\t\tnative.setItem( '' , '' )\n\t\t\t\tnative.removeItem( '' )\n\t\t\t\treturn this['native()'] = native\n\t\t\t} catch( error: any ) {\n\t\t\t\tconsole.warn( error )\n\t\t\t}\n\n\t\t\treturn this['native()'] = {\n\t\t\t\tgetItem( key : string ) {\n\t\t\t\t\treturn this[ ':' + key ]\n\t\t\t\t} ,\n\t\t\t\tsetItem( key : string , value : string ) {\n\t\t\t\t\tthis[ ':' + key ] = value\n\t\t\t\t} ,\n\t\t\t\tremoveItem( key : string ) {\n\t\t\t\t\tthis[ ':' + key ] = void 0\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t\t\n\t\t@ $mol_mem\n\t\tstatic changes( next?: StorageEvent ) { return next }\n\n\t\t@ $mol_mem_key\n\t\tstatic value< Value >(\n\t\t\tkey : string ,\n\t\t\tnext? : Value | null ,\n\t\t) : Value | null {\n\t\t\t\n\t\t\tthis.changes()\n\t\t\t\n\t\t\tif( next === void 0 ) return JSON.parse( this.native().getItem( key ) || 'null' )\n\t\t\t\n\t\t\tif( next === null ) this.native().removeItem( key )\n\t\t\telse this.native().setItem( key , JSON.stringify( next ) )\n\t\t\t\n\t\t\treturn next\n\t\t}\n\t\t\n\t\tprefix() { return '' }\n\t\t\n\t\tvalue( key : string , next? : Value ) {\n\t\t\treturn $mol_state_local.value( this.prefix() + '.' + key , next )\n\t\t}\n\t\t\n\t}\n\t\n}\n","namespace $ {\n\n\tself.addEventListener( 'storage' , event => $.$mol_state_local.changes( event ) )\n\n}\n","namespace $ { $mol_style_attach( \"hyoo/todomvc/todomvc.css\",\n \"[hyoo_todomvc] {\\n\\talign-self: stretch;\\n\\twidth: 100%;\\n\\tmargin: 0;\\n\\ttransition: none;\\n}\\n\\n[hyoo_todomvc] [mol_string] ,\\n[hyoo_todomvc] [mol_string]:focus ,\\n[hyoo_todomvc] [mol_string]:hover ,\\n[hyoo_todomvc] [mol_button] ,\\n[hyoo_todomvc] [mol_button]:focus ,\\n[hyoo_todomvc] [mol_button]:hover ,\\n[hyoo_todomvc] [mol_link] ,\\n[hyoo_todomvc] [mol_link]:focus ,\\n[hyoo_todomvc] [mol_link]:hover {\\n\\tbox-shadow: none;\\n\\tbackground-color: transparent;\\n}\\n\\n[hyoo_todomvc] [mol_link_current] {\\n\\tcolor: black;\\n}\\n\\n[hyoo_todomvc] [mol_link]:not([mol_link_current]):hover ,\\n[hyoo_todomvc] [mol_link]:not([mol_link_current]):focus {\\n\\ttext-decoration: underline;\\n}\\n\\n[hyoo_todomvc_head_complete] {\\n\\tflex: 0 0 4rem;\\n\\ttransform: rotate( 90deg );\\n\\talign-items: center;\\n\\topacity: .5;\\n\\tpadding: 0;\\n\\tjustify-content: center;\\n}\\n[hyoo_todomvc_head_complete]:disabled {\\n\\tvisibility: hidden;\\n}\\n[hyoo_todomvc_head_complete][mol_check_checked] {\\n\\topacity: 1;\\n}\\n\\n[hyoo_todomvc_add] {\\n\\tpadding: 0;\\n\\tflex: 1 1 auto;\\n}\\n\\n[hyoo_todomvc_list] {\\n\\tfont-size: 1.5rem;\\n\\ttransition: none;\\n}\\n\\n[hyoo_todomvc_page] {\\n\\tflex: 1 1 auto;\\n\\ttransition: none;\\n}\\n\\n[hyoo_todomvc_panel] {\\n\\tbox-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.2), 0 25px 50px 0 rgba(0, 0, 0, 0.1);\\n\\twidth: 38rem;\\n\\t--mol_theme_back: white;\\n\\t--mol_theme_text: black;\\n\\tbackground-color: var(--mol_theme_back);\\n\\tdisplay: flex;\\n\\tflex-direction: column;\\n\\tmargin: 0 auto 2rem;\\n\\ttransition: none;\\n}\\n\\n[hyoo_todomvc_head] {\\n\\tfont-size: 1.5rem;\\n\\tpadding: 0;\\n\\tdisplay: flex;\\n\\theight: 4rem;\\n}\\n\\n[hyoo_todomvc_title] {\\n\\tword-break: normal;\\n\\tdisplay: block;\\n\\tpadding: .25rem;\\n\\tfont-size: 7rem;\\n\\tfont-weight: 100;\\n\\ttext-align: center;\\n\\tcolor: rgba(275, 147, 147, 0.2);\\n\\ttext-rendering: optimizeLegibility;\\n\\ttext-transform: lowercase;\\n\\tline-height: 1.5;\\n}\\n\\n[hyoo_todomvc_task_row] {\\n\\tdisplay: flex;\\n\\tbackground-color: white;\\n\\tbox-shadow: 0 -1px 0 0 #ededed;\\n\\theight: 4rem;\\n}\\n\\n[hyoo_todomvc_task_row_complete] {\\n\\tflex: 0 0 4rem;\\n\\tpadding: 1rem;\\n\\tbackground: no-repeat center center url('hyoo/todomvc/todomvc_active.svg');\\n}\\n[hyoo_todomvc_task_row_complete][mol_check_checked] {\\n\\tbackground: no-repeat center center url('hyoo/todomvc/todomvc_completed.svg');\\n}\\n\\n[hyoo_todomvc_task_row_title] {\\n\\tpadding: 0;\\n\\tflex: 1 1 auto;\\n}\\n\\n[hyoo_todomvc_task_row_completed] [hyoo_todomvc_task_row_title] {\\n\\tcolor: #d9d9d9;\\n\\ttext-decoration: line-through;\\n}\\n\\n[hyoo_todomvc_task_row_drop] {\\n\\tfont-size: 1.25rem;\\n\\tflex: 0 04rem;\\n\\tpadding: 1.25rem;\\n}\\n[hyoo_todomvc_task_row]:not(:hover) [hyoo_todomvc_task_row_drop]:not(:focus) {\\n\\topacity: 0;\\n\\tcolor: #cc9a9a;\\n}\\n\\n[hyoo_todomvc_foot] {\\n\\tdisplay: flex;\\n\\tflex-wrap: wrap;\\n\\talign-items: baseline;\\n\\tpadding: .5rem 1rem;\\n\\tcolor: #777;\\n\\tfont-size: .85rem;\\n\\tborder-top: 1px solid #ededed;\\n\\tbox-shadow: 0 1px 1px rgba(0, 0, 0, 0.2), 0 8px 0 -3px #f6f6f6, 0 9px 1px -3px rgba(0, 0, 0, 0.2), 0 16px 0 -6px #f6f6f6, 0 17px 2px -6px rgba(0, 0, 0, 0.2);\\n}\\n\\n[hyoo_todomvc_pending] {\\n\\tpadding: .25rem;\\n\\tflex: 0 1 6rem;\\n}\\n\\n[hyoo_todomvc_filter] {\\n\\tflex: 1 100 auto;\\n\\tdisplay: flex;\\n\\tjustify-content: center;\\n\\tmargin: .25rem;\\n\\tbox-shadow: none;\\n}\\n\\n[hyoo_todomvc_sweep] {\\n\\tflex: 0 1 auto;\\n\\tpadding: .25rem;\\n}\\n[hyoo_todomvc_sweep][disabled] {\\n\\tvisibility: hidden;\\n}\\n\\n[hyoo_todomvc_sweep]:hover ,\\n[hyoo_todomvc_sweep]:focus {\\n\\ttext-decoration: underline;\\n}\\n\"\n) }","interface $hyoo_todomvc_task {\n\tcompleted? : boolean\n\ttitle? : string\n}\n\nnamespace $.$$ {\n\t\n\texport class $hyoo_todomvc_add extends $.$hyoo_todomvc_add {\n\t\t\n\t\tpress( next : KeyboardEvent ) {\n\t\t\tswitch( next.keyCode ) {\n\t\t\t\tcase $mol_keyboard_code.enter : return this.done( next )\n\t\t\t}\n\t\t}\n\t\t\n\t}\n\t\n\texport class $hyoo_todomvc extends $.$hyoo_todomvc {\n\t\t\n\t\ttask_ids( next? : number[] ) : number[] {\n\t\t\treturn this.$.$mol_state_local.value( this.state_key( 'mol-todos' ) , next ) || []\n\t\t}\n\t\t\n\t\targ_completed() {\n\t\t\treturn this.$.$mol_state_arg.value( this.state_key( 'completed' ) )\n\t\t}\n\n\t\t@ $mol_mem\n\t\tgroups_completed() {\n\t\t\tvar groups : { [ index : string ] : number[] } = { 'true' : [] , 'false' : [] }\n\t\t\tfor( let id of this.task_ids() ) {\n\t\t\t\tvar task = this.task( id )!\n\t\t\t\tgroups[ String( task.completed ) ].push( id )\n\t\t\t}\n\t\t\treturn groups\n\t\t}\n\n\t\t@ $mol_mem\n\t\ttask_ids_filtered() {\n\t\t\tvar completed = this.arg_completed()\n\t\t\tif( completed ) {\n\t\t\t\treturn this.groups_completed()[ completed ] || []\n\t\t\t} else {\n\t\t\t\treturn this.task_ids()\n\t\t\t}\n\t\t}\n\n\t\t@ $mol_mem\n\t\tcompleted_all( next? : boolean ) {\n\t\t\tif( next === void 0 ) return this.groups_completed()[ 'false' ].length === 0\n\t\t\t\n\t\t\tfor( let id of this.groups_completed()[ String( !next ) ] ) {\n\t\t\t\tvar task = this.task( id )!\n\t\t\t\tthis.task( id , { title : task.title , completed : next } )\n\t\t\t}\n\t\t\t\n\t\t\treturn next\n\t\t}\n\t\t\n\t\thead_complete_enabled() {\n\t\t\treturn this.task_ids().length > 0 \n\t\t}\n\n\t\t@ $mol_mem\n\t\tpending_message() {\n\t\t\tlet count = this.groups_completed()[ 'false' ].length\n\t\t\treturn ( count === 1 ) ? '1 item left' : `${count} items left`\n\t\t}\n\t\t\n\t\t@ $mol_mem\n\t\tnew_id() {\n\t\t\treturn Math.max( 1 , 1 + Math.max( ... this.task_ids() ) )\n\t\t}\n\t\t\n\t\tadd( next? : Event ) {\n\t\t\tvar title = this.task_title_new() \n\t\t\tif( !title ) return\n\t\t\t\n\t\t\tvar id = this.new_id()\n\t\t\tvar task = { completed : false , title }\n\t\t\tthis.task( id , task )\n\t\t\t\n\t\t\tthis.task_ids([ ... this.task_ids(), id ])\n\t\t\tthis.task_title_new( '' )\n\t\t}\n\n\t\t@ $mol_mem\n\t\ttask_rows() {\n\t\t\treturn this.task_ids_filtered().map( id => this.Task_row( id ) )\n\t\t}\n\t\t\n\t\ttask( id : number , next? : $hyoo_todomvc_task | null ) {\n\t\t\tconst key = this.state_key( `mol-todos-${id}` )\n\t\t\tif( next === void 0 ) {\n\t\t\t\treturn this.$.$mol_state_local.value<$hyoo_todomvc_task>( key ) || { title : '' , completed : false }\n\t\t\t}\n\t\t\t\n\t\t\tthis.$.$mol_state_local.value( key , next )\n\t\t\t\n\t\t\treturn next || null\n\t\t}\n\t\t\n\t\t@ $mol_mem_key\n\t\ttask_completed( id : number , next? : boolean ) {\n\t\t\treturn this.task( id , next === undefined ? undefined : { ... this.task( id ) , completed : next } )!.completed ?? false\n\t\t}\n\t\t\n\t\t@ $mol_mem_key\n\t\ttask_title( id : number , next? : string ) {\n\t\t\treturn this.task( id , next === undefined ? undefined : { ... this.task( id ) , title : next } )!.title ?? ''\n\t\t}\n\t\t\n\t\ttask_drop( id : number , next? : Event ) {\n\t\t\tthis.task( id , null )\n\t\t\tthis.task_ids( this.task_ids().filter( id2 => id !== id2 ) )\n\t\t}\n\n\t\tsweep() {\n\t\t\tthis.task_ids( this.task_ids().filter( id => {\n\t\t\t\tif( !this.task( id )!.completed ) return true\n\t\t\t\tthis.task( id , null )\n\t\t\t\treturn false\n\t\t\t} ) )\n\t\t}\n\t\t\n\t\tpanels() {\n\t\t\treturn [\n\t\t\t\tthis.Head() , \n\t\t\t\tthis.List() ,\n\t\t\t\t... this.foot_visible() ? [ this.Foot() ] : [] ,\n\t\t\t]\n\t\t}\n\t\t\n\t\tfoot_visible() {\n\t\t\treturn this.task_ids().length > 0\n\t\t}\n\n\t\tsweep_enabled() {\n\t\t\treturn this.groups_completed()[ 'true' ].length > 0\n\t\t}\n\t\t\n\t}\n\t\n}\n",null,null]} \ No newline at end of file diff --git a/examples/mol/web.test.js b/examples/mol/web.test.js new file mode 100644 index 0000000000..a1303e444b --- /dev/null +++ b/examples/mol/web.test.js @@ -0,0 +1,3741 @@ +"use strict"; +function require( path ){ return $node[ path ] }; +"use strict"; +var $; +(function ($_1) { + function $mol_test(set) { + for (let name in set) { + const code = set[name]; + const test = (typeof code === 'string') ? new Function('', code) : code; + $_1.$mol_test_all.push(test); + } + $mol_test_schedule(); + } + $_1.$mol_test = $mol_test; + $_1.$mol_test_mocks = []; + $_1.$mol_test_all = []; + async function $mol_test_run() { + for (var test of $_1.$mol_test_all) { + let context = Object.create($$); + for (let mock of $_1.$mol_test_mocks) + await mock(context); + const res = test(context); + if (res instanceof Promise) { + await new Promise((done, fail) => { + res.then(done, fail); + setTimeout(() => fail(new Error('Test timeout: ' + test.name)), 1000); + }); + } + } + $$.$mol_log3_done({ + place: '$mol_test', + message: 'All tests passed', + count: $_1.$mol_test_all.length, + }); + } + $_1.$mol_test_run = $mol_test_run; + let scheduled = false; + function $mol_test_schedule() { + if (scheduled) + return; + scheduled = true; + setTimeout(async () => { + scheduled = false; + try { + await $mol_test_run(); + } + finally { + $$.$mol_test_complete(); + } + }, 0); + } + $_1.$mol_test_schedule = $mol_test_schedule; + $_1.$mol_test_mocks.push(context => { + let seed = 0; + context.Math = Object.create(Math); + context.Math.random = () => Math.sin(seed++); + const forbidden = ['XMLHttpRequest', 'fetch']; + for (let api of forbidden) { + context[api] = new Proxy(function () { }, { + get() { + $mol_fail_hidden(new Error(`${api} is forbidden in tests`)); + }, + apply() { + $mol_fail_hidden(new Error(`${api} is forbidden in tests`)); + }, + }); + } + }); + $mol_test({ + 'mocked Math.random'($) { + console.assert($.Math.random() === 0); + console.assert($.Math.random() === Math.sin(1)); + }, + 'forbidden XMLHttpRequest'($) { + try { + console.assert(void new $.XMLHttpRequest); + } + catch (error) { + console.assert(error.message === 'XMLHttpRequest is forbidden in tests'); + } + }, + 'forbidden fetch'($) { + try { + console.assert(void $.fetch('')); + } + catch (error) { + console.assert(error.message === 'fetch is forbidden in tests'); + } + }, + }); +})($ || ($ = {})); +//mol/test/test.test.ts +; +"use strict"; +var $; +(function ($) { + function $mol_test_complete() { + } + $.$mol_test_complete = $mol_test_complete; +})($ || ($ = {})); +//mol/test/test.web.test.ts +; +"use strict"; +//mol/type/assert/assert.test.ts +; +"use strict"; +//mol/type/assert/assert.ts +; +"use strict"; +//mol/type/equals/equals.test.ts +; +"use strict"; +//mol/type/equals/equals.ts +; +"use strict"; +//mol/type/partial/deep/deep.test.ts +; +"use strict"; +//mol/type/partial/deep/deep.ts +; +"use strict"; +var $; +(function ($) { + $mol_test({ + 'Make empty div'() { + $mol_assert_equal(($mol_jsx("div", null)).outerHTML, '
'); + }, + 'Define native field'() { + const dom = $mol_jsx("input", { value: '123' }); + $mol_assert_equal(dom.outerHTML, ''); + $mol_assert_equal(dom.value, '123'); + }, + 'Define classes'() { + const dom = $mol_jsx("div", { class: 'foo bar' }); + $mol_assert_equal(dom.outerHTML, '
'); + }, + 'Define styles'() { + const dom = $mol_jsx("div", { style: { color: 'red' } }); + $mol_assert_equal(dom.outerHTML, '
'); + }, + 'Define dataset'() { + const dom = $mol_jsx("div", { dataset: { foo: 'bar' } }); + $mol_assert_equal(dom.outerHTML, '
'); + }, + 'Define attributes'() { + const dom = $mol_jsx("div", { lang: "ru", hidden: true }); + $mol_assert_equal(dom.outerHTML, ''); + }, + 'Define child nodes'() { + const dom = $mol_jsx("div", null, + "hello", + $mol_jsx("strong", null, "world"), + "!"); + $mol_assert_equal(dom.outerHTML, '
helloworld!
'); + }, + 'Function as component'() { + const Button = (props, target) => { + return $mol_jsx("button", { title: props.hint }, target()); + }; + const dom = $mol_jsx(Button, { id: "/foo", hint: "click me" }, () => 'hey!'); + $mol_assert_equal(dom.outerHTML, ''); + }, + 'Nested guid generation'() { + const Foo = () => { + return $mol_jsx("div", null, + $mol_jsx(Bar, { id: "/bar" }, + $mol_jsx("img", { id: "/icon" }))); + }; + const Bar = (props, icon) => { + return $mol_jsx("span", null, icon); + }; + const dom = $mol_jsx(Foo, { id: "/foo" }); + $mol_assert_equal(dom.outerHTML, '
'); + }, + 'Fail on non unique ids'() { + const App = () => { + return $mol_jsx("div", null, + $mol_jsx("span", { id: "/bar" }), + $mol_jsx("span", { id: "/bar" })); + }; + $mol_assert_fail(() => $mol_jsx(App, { id: "/foo" }), 'JSX already has tag with id "/bar"'); + }, + }); +})($ || ($ = {})); +//mol/jsx/jsx.test.tsx +; +"use strict"; +var $; +(function ($) { + $.$mol_jsx_prefix = ''; + $.$mol_jsx_booked = null; + $.$mol_jsx_document = { + getElementById: () => null, + createElementNS: (space, name) => $mol_dom_context.document.createElementNS(space, name), + createDocumentFragment: () => $mol_dom_context.document.createDocumentFragment(), + }; + $.$mol_jsx_frag = ''; + function $mol_jsx(Elem, props, ...childNodes) { + const id = props && props.id || ''; + if (Elem && $.$mol_jsx_booked) { + if ($.$mol_jsx_booked.has(id)) { + $mol_fail(new Error(`JSX already has tag with id ${JSON.stringify(id)}`)); + } + else { + $.$mol_jsx_booked.add(id); + } + } + const guid = $.$mol_jsx_prefix + id; + let node = guid ? $.$mol_jsx_document.getElementById(guid) : null; + if (typeof Elem !== 'string') { + if ('prototype' in Elem) { + const view = node && node[Elem] || new Elem; + Object.assign(view, props); + view[Symbol.toStringTag] = guid; + view.childNodes = childNodes; + if (!view.ownerDocument) + view.ownerDocument = $.$mol_jsx_document; + node = view.valueOf(); + node[Elem] = view; + return node; + } + else { + const prefix = $.$mol_jsx_prefix; + const booked = $.$mol_jsx_booked; + try { + $.$mol_jsx_prefix = guid; + $.$mol_jsx_booked = new Set; + return Elem(props, ...childNodes); + } + finally { + $.$mol_jsx_prefix = prefix; + $.$mol_jsx_booked = booked; + } + } + } + if (!node) { + node = Elem + ? $.$mol_jsx_document.createElementNS(props?.xmlns ?? 'http://www.w3.org/1999/xhtml', Elem) + : $.$mol_jsx_document.createDocumentFragment(); + } + $mol_dom_render_children(node, [].concat(...childNodes)); + if (!Elem) + return node; + for (const key in props) { + if (typeof props[key] === 'string') { + ; + node.setAttribute(key, props[key]); + } + else if (props[key] && + typeof props[key] === 'object' && + Reflect.getPrototypeOf(props[key]) === Reflect.getPrototypeOf({})) { + if (typeof node[key] === 'object') { + Object.assign(node[key], props[key]); + continue; + } + } + else { + node[key] = props[key]; + } + } + if (guid) + node.id = guid; + return node; + } + $.$mol_jsx = $mol_jsx; +})($ || ($ = {})); +//mol/jsx/jsx.ts +; +"use strict"; +var $; +(function ($) { + $mol_test({ + 'nulls & undefineds'() { + $mol_assert_ok($mol_compare_deep(null, null)); + $mol_assert_ok($mol_compare_deep(undefined, undefined)); + $mol_assert_not($mol_compare_deep(undefined, null)); + $mol_assert_not($mol_compare_deep({}, null)); + }, + 'number'() { + $mol_assert_ok($mol_compare_deep(1, 1)); + $mol_assert_ok($mol_compare_deep(Number.NaN, Number.NaN)); + $mol_assert_not($mol_compare_deep(1, 2)); + $mol_assert_ok($mol_compare_deep(Object(1), Object(1))); + $mol_assert_not($mol_compare_deep(Object(1), Object(2))); + }, + 'POJO'() { + $mol_assert_ok($mol_compare_deep({}, {})); + $mol_assert_not($mol_compare_deep({ a: 1 }, { b: 2 })); + $mol_assert_not($mol_compare_deep({ a: 1 }, { a: 2 })); + $mol_assert_not($mol_compare_deep({}, { a: undefined })); + $mol_assert_ok($mol_compare_deep({ a: 1, b: 2 }, { b: 2, a: 1 })); + $mol_assert_ok($mol_compare_deep({ a: { b: 1 } }, { a: { b: 1 } })); + }, + 'Array'() { + $mol_assert_ok($mol_compare_deep([], [])); + $mol_assert_ok($mol_compare_deep([1, [2]], [1, [2]])); + $mol_assert_not($mol_compare_deep([1, 2], [1, 3])); + $mol_assert_not($mol_compare_deep([1, 2,], [1, 3, undefined])); + }, + 'Non POJO are different'() { + class Thing extends Object { + } + $mol_assert_not($mol_compare_deep(new Thing, new Thing)); + $mol_assert_not($mol_compare_deep(() => 1, () => 1)); + $mol_assert_not($mol_compare_deep(new RangeError('Test error'), new RangeError('Test error'))); + }, + 'same POJOs with cyclic reference'() { + const a = { foo: {} }; + a['self'] = a; + const b = { foo: {} }; + b['self'] = b; + $mol_assert_ok($mol_compare_deep(a, b)); + }, + 'Date'() { + $mol_assert_ok($mol_compare_deep(new Date(12345), new Date(12345))); + $mol_assert_not($mol_compare_deep(new Date(12345), new Date(12346))); + }, + 'RegExp'() { + $mol_assert_ok($mol_compare_deep(/\x22/mig, /\x22/mig)); + $mol_assert_not($mol_compare_deep(/\x22/mig, /\x21/mig)); + $mol_assert_not($mol_compare_deep(/\x22/mig, /\x22/mg)); + }, + 'Error'() { + $mol_assert_not($mol_compare_deep(new Error('xxx'), new Error('xxx'))); + const fail = (message) => new Error(message); + $mol_assert_ok($mol_compare_deep(...['xxx', 'xxx'].map(msg => new Error(msg)))); + $mol_assert_not($mol_compare_deep(...['xxx', 'yyy'].map(msg => new Error(msg)))); + }, + 'Map'() { + $mol_assert_ok($mol_compare_deep(new Map, new Map)); + $mol_assert_ok($mol_compare_deep(new Map([[1, [2]]]), new Map([[1, [2]]]))); + $mol_assert_not($mol_compare_deep(new Map([[1, 2]]), new Map([[1, 3]]))); + $mol_assert_not($mol_compare_deep(new Map([[[1], 2]]), new Map([[[1], 2]]))); + }, + 'Set'() { + $mol_assert_ok($mol_compare_deep(new Set, new Set)); + $mol_assert_ok($mol_compare_deep(new Set([1, [2]]), new Set([1, [2]]))); + $mol_assert_not($mol_compare_deep(new Set([1]), new Set([2]))); + }, + 'Uint8Array'() { + $mol_assert_ok($mol_compare_deep(new Uint8Array, new Uint8Array)); + $mol_assert_ok($mol_compare_deep(new Uint8Array([0]), new Uint8Array([0]))); + $mol_assert_not($mol_compare_deep(new Uint8Array([0]), new Uint8Array([1]))); + }, + 'Custom comparator'() { + class User { + name; + rand; + constructor(name, rand = Math.random()) { + this.name = name; + this.rand = rand; + } + [Symbol.toPrimitive](mode) { + return this.name; + } + } + $mol_assert_ok($mol_compare_deep(new User('Jin'), new User('Jin'))); + $mol_assert_not($mol_compare_deep(new User('Jin'), new User('John'))); + }, + }); +})($ || ($ = {})); +//mol/compare/deep/deep.test.tsx +; +"use strict"; +var $; +(function ($) { + function $mol_dom_serialize(node) { + const serializer = new $mol_dom_context.XMLSerializer; + return serializer.serializeToString(node); + } + $.$mol_dom_serialize = $mol_dom_serialize; +})($ || ($ = {})); +//mol/dom/serialize/serialize.ts +; +"use strict"; +var $; +(function ($) { + $mol_test({ + 'must be false'() { + $mol_assert_not(0); + }, + 'must be true'() { + $mol_assert_ok(1); + }, + 'two must be equal'() { + $mol_assert_equal(2, 2); + }, + 'three must be equal'() { + $mol_assert_equal(2, 2, 2); + }, + 'two must be unique'() { + $mol_assert_unique([3], [3]); + }, + 'three must be unique'() { + $mol_assert_unique([3], [3], [3]); + }, + 'two must be alike'() { + $mol_assert_like([3], [3]); + }, + 'three must be alike'() { + $mol_assert_like([3], [3], [3]); + }, + }); +})($ || ($ = {})); +//mol/assert/assert.test.ts +; +"use strict"; +var $; +(function ($) { + function $mol_assert_ok(value) { + if (value) + return; + $mol_fail(new Error(`${value} ≠ true`)); + } + $.$mol_assert_ok = $mol_assert_ok; + function $mol_assert_not(value) { + if (!value) + return; + $mol_fail(new Error(`${value} ≠ false`)); + } + $.$mol_assert_not = $mol_assert_not; + function $mol_assert_fail(handler, ErrorRight) { + const fail = $.$mol_fail; + try { + $.$mol_fail = $.$mol_fail_hidden; + handler(); + } + catch (error) { + if (!ErrorRight) + return error; + $.$mol_fail = fail; + if (typeof ErrorRight === 'string') { + $mol_assert_equal(error.message, ErrorRight); + } + else { + $mol_assert_ok(error instanceof ErrorRight); + } + return error; + } + finally { + $.$mol_fail = fail; + } + $mol_fail(new Error('Not failed')); + } + $.$mol_assert_fail = $mol_assert_fail; + function $mol_assert_equal(...args) { + for (let i = 0; i < args.length; ++i) { + for (let j = 0; j < args.length; ++j) { + if (i === j) + continue; + if (Number.isNaN(args[i]) && Number.isNaN(args[j])) + continue; + if (args[i] !== args[j]) + $mol_fail(new Error(`Not equal (${i + 1}:${j + 1})\n${args[i]}\n${args[j]}`)); + } + } + } + $.$mol_assert_equal = $mol_assert_equal; + function $mol_assert_unique(...args) { + for (let i = 0; i < args.length; ++i) { + for (let j = 0; j < args.length; ++j) { + if (i === j) + continue; + if (args[i] === args[j] || (Number.isNaN(args[i]) && Number.isNaN(args[j]))) { + $mol_fail(new Error(`args[${i}] = args[${j}] = ${args[i]}`)); + } + } + } + } + $.$mol_assert_unique = $mol_assert_unique; + function $mol_assert_like(head, ...tail) { + for (let [index, value] of Object.entries(tail)) { + if (!$mol_compare_deep(value, head)) { + const print = (val) => { + if (!val) + return val; + if (typeof val !== 'object') + return val; + if ('outerHTML' in val) + return val.outerHTML; + try { + return JSON.stringify(val); + } + catch (error) { + console.error(error); + return val; + } + }; + return $mol_fail(new Error(`Not like (1:${+index + 2})\n${print(head)}\n---\n${print(value)}`)); + } + } + } + $.$mol_assert_like = $mol_assert_like; + function $mol_assert_dom(left, right) { + $mol_assert_equal($mol_dom_serialize(left), $mol_dom_serialize(right)); + } + $.$mol_assert_dom = $mol_assert_dom; +})($ || ($ = {})); +//mol/assert/assert.ts +; +"use strict"; +var $; +(function ($) { + $mol_test({ + 'get'() { + const proxy = $mol_delegate({}, () => ({ foo: 777 })); + $mol_assert_equal(proxy.foo, 777); + }, + 'has'() { + const proxy = $mol_delegate({}, () => ({ foo: 777 })); + $mol_assert_equal('foo' in proxy, true); + }, + 'set'() { + const target = { foo: 777 }; + const proxy = $mol_delegate({}, () => target); + proxy.foo = 123; + $mol_assert_equal(target.foo, 123); + }, + 'getOwnPropertyDescriptor'() { + const proxy = $mol_delegate({}, () => ({ foo: 777 })); + $mol_assert_like(Object.getOwnPropertyDescriptor(proxy, 'foo'), { + value: 777, + writable: true, + enumerable: true, + configurable: true, + }); + }, + 'ownKeys'() { + const proxy = $mol_delegate({}, () => ({ foo: 777, [Symbol.toStringTag]: 'bar' })); + $mol_assert_like(Reflect.ownKeys(proxy), ['foo', Symbol.toStringTag]); + }, + 'getPrototypeOf'() { + class Foo { + } + const proxy = $mol_delegate({}, () => new Foo); + $mol_assert_equal(Object.getPrototypeOf(proxy), Foo.prototype); + }, + 'setPrototypeOf'() { + class Foo { + } + const target = {}; + const proxy = $mol_delegate({}, () => target); + Object.setPrototypeOf(proxy, Foo.prototype); + $mol_assert_equal(Object.getPrototypeOf(target), Foo.prototype); + }, + 'instanceof'() { + class Foo { + } + const proxy = $mol_delegate({}, () => new Foo); + $mol_assert_ok(proxy instanceof Foo); + $mol_assert_ok(proxy instanceof $mol_delegate); + }, + 'autobind'() { + class Foo { + } + const proxy = $mol_delegate({}, () => new Foo); + $mol_assert_ok(proxy instanceof Foo); + $mol_assert_ok(proxy instanceof $mol_delegate); + }, + }); +})($ || ($ = {})); +//mol/delegate/delegate.test.ts +; +"use strict"; +//mol/type/writable/writable.test.ts +; +"use strict"; +var $; +(function ($) { + $.$mol_after_mock_queue = []; + function $mol_after_mock_warp() { + const queue = $.$mol_after_mock_queue.splice(0); + for (const task of queue) + task(); + } + $.$mol_after_mock_warp = $mol_after_mock_warp; + class $mol_after_mock_commmon extends $mol_object2 { + task; + promise = Promise.resolve(); + cancelled = false; + id; + constructor(task) { + super(); + this.task = task; + $.$mol_after_mock_queue.push(task); + } + destructor() { + const index = $.$mol_after_mock_queue.indexOf(this.task); + if (index >= 0) + $.$mol_after_mock_queue.splice(index, 1); + } + } + $.$mol_after_mock_commmon = $mol_after_mock_commmon; + class $mol_after_mock_timeout extends $mol_after_mock_commmon { + delay; + constructor(delay, task) { + super(task); + this.delay = delay; + } + } + $.$mol_after_mock_timeout = $mol_after_mock_timeout; +})($ || ($ = {})); +//mol/after/mock/mock.test.ts +; +"use strict"; +var $; +(function ($) { + function $mol_log3_area_lazy(event) { + const self = this; + const stack = self.$mol_log3_stack; + const deep = stack.length; + let logged = false; + stack.push(() => { + logged = true; + self.$mol_log3_area.call(self, event); + }); + return () => { + if (logged) + self.console.groupEnd(); + if (stack.length > deep) + stack.length = deep; + }; + } + $.$mol_log3_area_lazy = $mol_log3_area_lazy; + $.$mol_log3_stack = []; +})($ || ($ = {})); +//mol/log3/log3.ts +; +"use strict"; +//mol/type/keys/extract/extract.test.ts +; +"use strict"; +var $; +(function ($_1) { + $mol_test_mocks.push($ => { + $.$mol_log3_come = () => { }; + $.$mol_log3_done = () => { }; + $.$mol_log3_fail = () => { }; + $.$mol_log3_warn = () => { }; + $.$mol_log3_rise = () => { }; + $.$mol_log3_area = () => () => { }; + }); +})($ || ($ = {})); +//mol/log3/log3.test.ts +; +"use strict"; +var $; +(function ($) { + function $mol_log3_web_make(level, color) { + return function $mol_log3_logger(event) { + const pending = this.$mol_log3_stack.pop(); + if (pending) + pending(); + let tpl = '%c'; + const chunks = Object.values(event); + for (let i = 0; i < chunks.length; ++i) { + tpl += (typeof chunks[i] === 'string') ? ' ⦙ %s' : ' ⦙ %o'; + } + const style = `color:${color};font-weight:bolder`; + this.console[level](tpl, style, ...chunks); + const self = this; + return () => self.console.groupEnd(); + }; + } + $.$mol_log3_web_make = $mol_log3_web_make; + $.$mol_log3_come = $mol_log3_web_make('info', 'royalblue'); + $.$mol_log3_done = $mol_log3_web_make('info', 'forestgreen'); + $.$mol_log3_fail = $mol_log3_web_make('error', 'orangered'); + $.$mol_log3_warn = $mol_log3_web_make('warn', 'goldenrod'); + $.$mol_log3_rise = $mol_log3_web_make('log', 'magenta'); + $.$mol_log3_area = $mol_log3_web_make('group', 'cyan'); +})($ || ($ = {})); +//mol/log3/log3.web.ts +; +"use strict"; +var $; +(function ($_1) { + $mol_test_mocks.push($ => { + $.$mol_after_tick = $mol_after_mock_commmon; + }); +})($ || ($ = {})); +//mol/after/tick/tick.test.ts +; +"use strict"; +var $; +(function ($) { + function $mol_promise() { + let done; + let fail; + const promise = new Promise((d, f) => { + done = d; + fail = f; + }); + return Object.assign(promise, { + done, + fail, + }); + } + $.$mol_promise = $mol_promise; +})($ || ($ = {})); +//mol/promise/promise.ts +; +"use strict"; +var $; +(function ($_1) { + $mol_test_mocks.push($ => { + $.$mol_after_timeout = $mol_after_mock_timeout; + }); +})($ || ($ = {})); +//mol/after/timeout/timeout.test.ts +; +"use strict"; +var $; +(function ($) { + function $mol_wire_sync(obj) { + return new Proxy(obj, { + get(obj, field) { + const val = obj[field]; + if (typeof val !== 'function') + return val; + const temp = $mol_wire_task.getter(val); + return function $mol_wire_sync(...args) { + const fiber = temp(obj, args); + return fiber.sync(); + }; + }, + apply(obj, self, args) { + const temp = $mol_wire_task.getter(obj); + const fiber = temp(self, args); + return fiber.sync(); + }, + }); + } + $.$mol_wire_sync = $mol_wire_sync; +})($ || ($ = {})); +//mol/wire/sync/sync.ts +; +"use strict"; +var $; +(function ($) { + function $mol_wait_timeout_async(timeout) { + const promise = $mol_promise(); + const task = new this.$mol_after_timeout(timeout, () => promise.done()); + return Object.assign(promise, { + destructor: () => task.destructor() + }); + } + $.$mol_wait_timeout_async = $mol_wait_timeout_async; + function $mol_wait_timeout(timeout) { + return this.$mol_wire_sync(this).$mol_wait_timeout_async(timeout); + } + $.$mol_wait_timeout = $mol_wait_timeout; +})($ || ($ = {})); +//mol/wait/timeout/timeout.ts +; +"use strict"; +var $; +(function ($_1) { + $mol_test({ + async 'Latest Calls Wins on Concurrency'($) { + class NameLogger extends $mol_object2 { + static $ = $; + static first = []; + static last = []; + static send(next) { + $mol_wire_sync(this.first).push(next); + this.$.$mol_wait_timeout(0); + this.last.push(next); + } + } + const name = $mol_wire_async(NameLogger).send; + name('john'); + const promise = name('jin'); + $.$mol_after_mock_warp(); + await promise; + $mol_assert_like(NameLogger.first, ['john', 'jin']); + $mol_assert_like(NameLogger.last, ['jin']); + }, + async 'Wrap function'($) { + const name = $mol_wire_async(function (name) { + $.$mol_wait_timeout(0); + return name; + }); + const promise = name('jin'); + $.$mol_after_mock_warp(); + $mol_assert_like(await promise, 'jin'); + }, + }); +})($ || ($ = {})); +//mol/wire/async/async.test.ts +; +"use strict"; +var $; +(function ($_1) { + $mol_test({ + 'Collect deps'() { + const pub1 = new $mol_wire_pub; + const pub2 = new $mol_wire_pub; + const sub = new $mol_wire_pub_sub; + const bu1 = sub.track_on(); + try { + pub1.promote(); + pub2.promote(); + pub2.promote(); + } + finally { + sub.track_cut(); + sub.track_off(bu1); + } + pub1.emit(); + pub2.emit(); + $mol_assert_like(sub.pub_list, [pub1, pub2, pub2]); + const bu2 = sub.track_on(); + try { + pub1.promote(); + pub1.promote(); + pub2.promote(); + } + finally { + sub.track_cut(); + sub.track_off(bu2); + } + pub1.emit(); + pub2.emit(); + $mol_assert_like(sub.pub_list, [pub1, pub1, pub2]); + }, + 'cyclic detection'($) { + const sub1 = new $mol_wire_pub_sub; + const sub2 = new $mol_wire_pub_sub; + const bu1 = sub1.track_on(); + try { + const bu2 = sub2.track_on(); + try { + $mol_assert_fail(() => sub1.promote(), 'Circular subscription'); + } + finally { + sub2.track_cut(); + sub2.track_off(bu2); + } + } + finally { + sub1.track_cut(); + sub1.track_off(bu1); + } + }, + }); +})($ || ($ = {})); +//mol/wire/pub/sub/sub.test.ts +; +"use strict"; +var $; +(function ($_1) { + $mol_test_mocks.push($ => { + $.$mol_after_frame = $mol_after_mock_commmon; + }); +})($ || ($ = {})); +//mol/after/frame/frame.test.ts +; +"use strict"; +var $; +(function ($) { + $mol_test({ + 'Sync execution'() { + class Sync extends $mol_object2 { + static calc(a, b) { + return a + b; + } + } + __decorate([ + $mol_wire_method + ], Sync, "calc", null); + $mol_assert_equal(Sync.calc(1, 2), 3); + }, + async 'async <=> sync'() { + class SyncAsync extends $mol_object2 { + static async val(a) { + return a; + } + static sum(a, b) { + const syn = $mol_wire_sync(this); + return syn.val(a) + syn.val(b); + } + static async calc(a, b) { + return 5 + await $mol_wire_async(this).sum(a, b); + } + } + $mol_assert_equal(await SyncAsync.calc(1, 2), 8); + }, + async 'Idempotence control'() { + class Idempotence extends $mol_object2 { + static logs_idemp = 0; + static logs_unidemp = 0; + static log_idemp() { + this.logs_idemp += 1; + } + static log_unidemp() { + this.logs_unidemp += 1; + } + static async val(a) { + return a; + } + static sum(a, b) { + this.log_idemp(); + this.log_unidemp(); + const syn = $mol_wire_sync(this); + return syn.val(a) + syn.val(b); + } + static async calc(a, b) { + return 5 + await $mol_wire_async(this).sum(a, b); + } + } + __decorate([ + $mol_wire_method + ], Idempotence, "log_idemp", null); + $mol_assert_equal(await Idempotence.calc(1, 2), 8); + $mol_assert_equal(Idempotence.logs_idemp, 1); + $mol_assert_equal(Idempotence.logs_unidemp, 3); + }, + async 'Error handling'() { + class Handle extends $mol_object2 { + static async sum(a, b) { + $mol_fail(new Error('test error ' + (a + b))); + } + static check() { + try { + return $mol_wire_sync(Handle).sum(1, 2); + } + catch (error) { + if (error instanceof Promise) + $mol_fail_hidden(error); + $mol_assert_equal(error.message, 'test error 3'); + } + } + } + await $mol_wire_async(Handle).check(); + }, + }); +})($ || ($ = {})); +//mol/wire/fiber/fiber.test.ts +; +"use strict"; +var $; +(function ($_1) { + $mol_test({ + 'Cached channel'($) { + class App extends $mol_object2 { + static $ = $; + static value(next = 1) { + return next + 1; + } + } + __decorate([ + $mol_wire_mem(0) + ], App, "value", null); + $mol_assert_equal(App.value(), 2); + App.value(2); + $mol_assert_equal(App.value(), 3); + }, + 'Read Pushed'($) { + class App extends $mol_object2 { + static $ = $; + static value(next = 0) { + return next; + } + } + __decorate([ + $mol_wire_mem(0) + ], App, "value", null); + $mol_assert_equal(App.value(1), 1); + $mol_assert_equal(App.value(), 1); + }, + 'Mem overrides mem'($) { + class Base extends $mol_object2 { + static $ = $; + static value(next = 1) { + return next + 1; + } + } + __decorate([ + $mol_wire_mem(0) + ], Base, "value", null); + class Middle extends Base { + static value(next) { + return super.value(next) + 1; + } + } + __decorate([ + $mol_wire_mem(0) + ], Middle, "value", null); + class App extends Middle { + static value(next) { + return super.value(next) * 3; + } + } + __decorate([ + $mol_wire_mem(0) + ], App, "value", null); + $mol_assert_equal(App.value(), 9); + $mol_assert_equal(App.value(5), 21); + $mol_assert_equal(App.value(), 21); + }, + 'Auto recalculation of cached values'($) { + class App extends $mol_object2 { + static $ = $; + static xxx(next) { + return next || 1; + } + static yyy() { + return this.xxx() + 1; + } + static zzz() { + return this.yyy() + 1; + } + } + __decorate([ + $mol_wire_mem(0) + ], App, "xxx", null); + __decorate([ + $mol_wire_mem(0) + ], App, "yyy", null); + __decorate([ + $mol_wire_mem(0) + ], App, "zzz", null); + $mol_assert_equal(App.yyy(), 2); + $mol_assert_equal(App.zzz(), 3); + App.xxx(5); + $mol_assert_equal(App.zzz(), 7); + }, + 'Skip recalculation when actually no dependency changes'($) { + const log = []; + class App extends $mol_object2 { + static $ = $; + static xxx(next) { + log.push('xxx'); + return next || 1; + } + static yyy() { + log.push('yyy'); + return [Math.sign(this.xxx())]; + } + static zzz() { + log.push('zzz'); + return this.yyy()[0] + 1; + } + } + __decorate([ + $mol_wire_mem(0) + ], App, "xxx", null); + __decorate([ + $mol_wire_mem(0) + ], App, "yyy", null); + __decorate([ + $mol_wire_mem(0) + ], App, "zzz", null); + App.zzz(); + $mol_assert_like(log, ['zzz', 'yyy', 'xxx']); + App.xxx(5); + $mol_assert_like(log, ['zzz', 'yyy', 'xxx', 'xxx']); + App.zzz(); + $mol_assert_like(log, ['zzz', 'yyy', 'xxx', 'xxx', 'yyy']); + }, + 'Flow: Auto'($) { + class App extends $mol_object2 { + static get $() { return $; } + static first(next = 1) { return next; } + static second(next = 2) { return next; } + static condition(next = true) { return next; } + static counter = 0; + static result() { + const res = this.condition() ? this.first() : this.second(); + return res + this.counter++; + } + } + __decorate([ + $mol_wire_mem(0) + ], App, "first", null); + __decorate([ + $mol_wire_mem(0) + ], App, "second", null); + __decorate([ + $mol_wire_mem(0) + ], App, "condition", null); + __decorate([ + $mol_wire_mem(0) + ], App, "result", null); + $mol_assert_equal(App.result(), 1); + $mol_assert_equal(App.counter, 1); + App.condition(false); + $mol_assert_equal(App.result(), 3); + $mol_assert_equal(App.counter, 2); + App.first(10); + $mol_assert_equal(App.result(), 3); + $mol_assert_equal(App.counter, 2); + }, + 'Dupes: Equality'($) { + let counter = 0; + class App extends $mol_object2 { + static $ = $; + static foo(next) { + return next ?? { numbs: [1] }; + } + static bar() { + return { ...this.foo(), count: ++counter }; + } + } + __decorate([ + $mol_wire_mem(0) + ], App, "foo", null); + __decorate([ + $mol_wire_mem(0) + ], App, "bar", null); + $mol_assert_like(App.bar(), { numbs: [1], count: 1 }); + App.foo({ numbs: [1] }); + $mol_assert_like(App.bar(), { numbs: [1], count: 1 }); + App.foo({ numbs: [2] }); + $mol_assert_like(App.bar(), { numbs: [2], count: 2 }); + }, + 'Cycle: Fail'($) { + class App extends $mol_object2 { + static $ = $; + static foo() { + return this.bar() + 1; + } + static bar() { + return this.foo() + 1; + } + static test() { + $mol_assert_fail(() => App.foo(), 'Circular subscription'); + } + } + __decorate([ + $mol_wire_mem(0) + ], App, "foo", null); + __decorate([ + $mol_wire_mem(0) + ], App, "bar", null); + __decorate([ + $mol_wire_method + ], App, "test", null); + App.test(); + }, + 'Different order of pull and push'($) { + class App extends $mol_object2 { + static $ = $; + static store(next = 0) { + return next; + } + static fast(next) { + return this.store(next); + } + static slow(next) { + if (next !== undefined) + this.slow(); + return this.store(next); + } + } + __decorate([ + $mol_wire_mem(0) + ], App, "store", null); + __decorate([ + $mol_wire_mem(0) + ], App, "fast", null); + __decorate([ + $mol_wire_mem(0) + ], App, "slow", null); + App.fast(); + $mol_assert_equal(App.slow(666), 666); + $mol_assert_equal(App.fast(), App.slow(), 666); + App.store(777); + $mol_assert_equal(App.fast(), App.slow(), 777); + }, + 'Actions inside invariant'($) { + class App extends $mol_object2 { + static $ = $; + static count(next = 0) { + return next; + } + static count2() { + return this.count(); + } + static res() { + const count = this.count2(); + if (!count) + this.count(count + 1); + return count + 1; + } + } + __decorate([ + $mol_wire_mem(0) + ], App, "count", null); + __decorate([ + $mol_wire_mem(0) + ], App, "count2", null); + __decorate([ + $mol_wire_mem(0) + ], App, "res", null); + $mol_assert_like(App.res(), 1); + App.count(5); + $mol_assert_like(App.res(), 6); + }, + async 'Toggle with async'($) { + class App extends $mol_object2 { + static $ = $; + static checked(next = false) { + $$.$mol_wait_timeout(0); + return next; + } + static toggle() { + const prev = this.checked(); + $mol_assert_unique(this.checked(!prev), prev); + } + static res() { + return this.checked(); + } + static test() { + $mol_assert_equal(App.res(), false); + App.toggle(); + $mol_assert_equal(App.res(), true); + } + } + __decorate([ + $mol_wire_mem(0) + ], App, "checked", null); + __decorate([ + $mol_wire_method + ], App, "toggle", null); + __decorate([ + $mol_wire_mem(0) + ], App, "res", null); + __decorate([ + $mol_wire_method + ], App, "test", null); + await $mol_wire_async(App).test(); + }, + 'Restore after error'($) { + class App extends $mol_object2 { + static get $() { return $; } + static condition(next = false) { return next; } + static broken() { + if (this.condition()) { + $mol_fail(new Error('test error')); + } + return 1; + } + static result() { + return this.broken(); + } + } + __decorate([ + $mol_wire_mem(0) + ], App, "condition", null); + __decorate([ + $mol_wire_mem(0) + ], App, "broken", null); + __decorate([ + $mol_wire_mem(0) + ], App, "result", null); + $mol_assert_equal(App.result(), 1); + App.condition(true); + $mol_assert_fail(() => App.result()); + App.condition(false); + $mol_assert_equal(App.result(), 1); + }, + async 'Wait for data'($) { + class App extends $mol_object2 { + static $ = $; + static async source() { + return 'Jin'; + } + static middle() { + return $mol_wire_sync(this).source(); + } + static target() { + return this.middle(); + } + static test() { + $mol_assert_equal(App.target(), 'Jin'); + } + } + __decorate([ + $mol_wire_mem(0) + ], App, "middle", null); + __decorate([ + $mol_wire_mem(0) + ], App, "target", null); + __decorate([ + $mol_wire_method + ], App, "test", null); + await $mol_wire_async(App).test(); + }, + 'Auto destroy on long alone'($) { + let destroyed = false; + class App extends $mol_object2 { + static $ = $; + static showing(next = true) { + return next; + } + static details() { + return { + destructor() { + destroyed = true; + } + }; + } + static render() { + return this.showing() ? this.details() : null; + } + } + __decorate([ + $mol_wire_mem(0) + ], App, "showing", null); + __decorate([ + $mol_wire_mem(0) + ], App, "details", null); + __decorate([ + $mol_wire_mem(0) + ], App, "render", null); + const details = App.render(); + $mol_assert_ok(details); + App.showing(false); + $mol_assert_not(App.render()); + App.showing(true); + $mol_assert_equal(App.render(), details); + $mol_wire_fiber.sync(); + $mol_assert_not(destroyed); + App.showing(false); + $mol_wire_fiber.sync(); + $mol_assert_ok(destroyed); + App.showing(true); + $mol_assert_unique(App.render(), details); + }, + async 'Hold pubs while wait async task'($) { + class App extends $mol_object2 { + static $ = $; + static counter = 0; + static resets(next) { + return ($mol_wire_probe(() => this.resets()) ?? -1) + 1; + } + static async wait() { } + static value() { + return ++this.counter; + } + static result() { + if (this.resets()) + $mol_wire_sync(this).wait(); + return this.value(); + } + static test() { + } + } + __decorate([ + $mol_wire_mem(0) + ], App, "resets", null); + __decorate([ + $mol_wire_mem(0) + ], App, "value", null); + __decorate([ + $mol_wire_mem(0) + ], App, "result", null); + __decorate([ + $mol_wire_method + ], App, "test", null); + $mol_assert_equal(App.result(), 1); + App.resets(null); + $mol_wire_fiber.sync(); + $mol_assert_equal(await $mol_wire_async(App).result(), 1); + }, + 'Memoize by single simple key'($) { + class Team extends $mol_object2 { + static $ = $; + static user_name(user, next) { + return next ?? user; + } + static user_names() { + return [ + this.user_name('jin'), + this.user_name('john'), + ]; + } + static test() { + } + } + __decorate([ + $mol_wire_mem(1) + ], Team, "user_name", null); + __decorate([ + $mol_wire_mem(1) + ], Team, "user_names", null); + __decorate([ + $mol_wire_method + ], Team, "test", null); + $mol_assert_like(Team.user_names(), ['jin', 'john']); + Team.user_name('jin', 'JIN'); + $mol_assert_like(Team.user_names(), ['JIN', 'john']); + }, + 'Memoize by single complex key'($) { + class Map extends $mol_object2 { + static $ = $; + static tile(pos) { + return new String(`/tile=${pos}`); + } + static test() { + $mol_assert_like(this.tile([0, 1]), new String('/tile=0,1')); + $mol_assert_equal(this.tile([0, 1]), this.tile([0, 1])); + } + } + __decorate([ + $mol_wire_mem(1) + ], Map, "tile", null); + __decorate([ + $mol_wire_method + ], Map, "test", null); + Map.test(); + }, + 'Memoize by multiple keys'($) { + class Map extends $mol_object2 { + static $ = $; + static tile(x, y) { + return new String(`/tile=${x},${y}`); + } + static test() { + $mol_assert_like(this.tile(0, 1), new String('/tile=0,1')); + $mol_assert_equal(this.tile(0, 1), this.tile(0, 1)); + } + } + __decorate([ + $mol_wire_mem(2) + ], Map, "tile", null); + __decorate([ + $mol_wire_method + ], Map, "test", null); + Map.test(); + }, + 'Owned value has js-path name'() { + class App extends $mol_object2 { + static title() { + return new $mol_object2; + } + static like(friend) { + return new $mol_object2; + } + static relation(friend, props) { + return new $mol_object2; + } + } + __decorate([ + $mol_wire_mem(0) + ], App, "title", null); + __decorate([ + $mol_wire_mem(1) + ], App, "like", null); + __decorate([ + $mol_wire_mem(2) + ], App, "relation", null); + $mol_assert_equal(`${App.title()}`, 'App.title()'); + $mol_assert_equal(`${App.like(123)}`, 'App.like(123)'); + $mol_assert_equal(`${App.relation(123, [456])}`, 'App.relation(123,[456])'); + }, + 'Deep deps'($) { + class Fib extends $mol_object2 { + static $ = $; + static sums = 0; + static value(index, next) { + if (next) + return next; + if (index < 2) + return 1; + ++this.sums; + return this.value(index - 1) + this.value(index - 2); + } + } + __decorate([ + $mol_wire_mem(1) + ], Fib, "value", null); + $mol_assert_equal(Fib.value(4), 5); + $mol_assert_equal(Fib.sums, 3); + Fib.value(1, 2); + $mol_assert_equal(Fib.value(4), 8); + $mol_assert_equal(Fib.sums, 6); + }, + }); +})($ || ($ = {})); +//mol/wire/mem/mem.test.ts +; +"use strict"; +var $; +(function ($) { + $mol_test({ + 'Previous value'() { + class Cache extends $mol_object2 { + static store(next) { + if (!next) + return {}; + return { + ...$mol_wire_probe(() => this.store()) ?? {}, + ...next, + }; + } + } + __decorate([ + $mol_wire_mem(0) + ], Cache, "store", null); + $mol_assert_like(Cache.store(), {}); + $mol_assert_like(Cache.store({ foo: 666 }), { foo: 666 }); + $mol_assert_like(Cache.store({ bar: 777 }), { foo: 666, bar: 777 }); + }, + }); +})($ || ($ = {})); +//mol/wire/probe/probe.test.ts +; +"use strict"; +var $; +(function ($) { + $mol_test({ + 'init with overload'() { + class X extends $mol_object { + foo() { + return 1; + } + } + var x = X.make({ + foo: () => 2, + }); + $mol_assert_equal(x.foo(), 2); + }, + }); +})($ || ($ = {})); +//mol/object/object.test.ts +; +"use strict"; +var $; +(function ($) { + $mol_test({ + 'all cases of using maybe'() { + $mol_assert_equal($mol_maybe(0)[0], 0); + $mol_assert_equal($mol_maybe(false)[0], false); + $mol_assert_equal($mol_maybe(null)[0], void 0); + $mol_assert_equal($mol_maybe(void 0)[0], void 0); + $mol_assert_equal($mol_maybe(void 0).map(v => v.toString())[0], void 0); + $mol_assert_equal($mol_maybe(0).map(v => v.toString())[0], '0'); + }, + }); +})($ || ($ = {})); +//mol/maybe/maybe.test.ts +; +"use strict"; +var $; +(function ($) { + $mol_test({ + 'run callback'() { + class Plus1 extends $mol_wrapper { + static wrap(task) { + return function (...args) { + return task.call(this, ...args) + 1; + }; + } + } + $mol_assert_equal(Plus1.run(() => 2), 3); + }, + 'wrap function'() { + class Plus1 extends $mol_wrapper { + static wrap(task) { + return function (...args) { + return task.call(this, ...args) + 1; + }; + } + } + const obj = { + level: 2, + pow: Plus1.func(function (a) { + return a ** this.level; + }) + }; + $mol_assert_equal(obj.pow(2), 5); + }, + 'decorate field getter'() { + class Plus1 extends $mol_wrapper { + static last = 0; + static wrap(task) { + return function (...args) { + return Plus1.last = (task.call(this, ...args) || 0) + 1; + }; + } + } + class Foo { + static get two() { + return 1; + } + static set two(next) { } + } + __decorate([ + Plus1.field + ], Foo, "two", null); + $mol_assert_equal(Foo.two, 2); + Foo.two = 3; + $mol_assert_equal(Plus1.last, 2); + $mol_assert_equal(Foo.two, 2); + }, + 'decorate instance method'() { + class Plus1 extends $mol_wrapper { + static wrap(task) { + return function (...args) { + return task.call(this, ...args) + 1; + }; + } + } + class Foo1 { + level = 2; + pow(a) { + return a ** this.level; + } + } + __decorate([ + Plus1.method + ], Foo1.prototype, "pow", null); + const Foo2 = Foo1; + const foo = new Foo2; + $mol_assert_equal(foo.pow(2), 5); + }, + 'decorate static method'() { + class Plus1 extends $mol_wrapper { + static wrap(task) { + return function (...args) { + return task.call(this, ...args) + 1; + }; + } + } + class Foo { + static level = 2; + static pow(a) { + return a ** this.level; + } + } + __decorate([ + Plus1.method + ], Foo, "pow", null); + $mol_assert_equal(Foo.pow(2), 5); + }, + 'decorate class'() { + class BarInc extends $mol_wrapper { + static wrap(task) { + return function (...args) { + const foo = task.call(this, ...args); + foo.bar++; + return foo; + }; + } + } + let Foo = class Foo { + bar; + constructor(bar) { + this.bar = bar; + } + }; + Foo = __decorate([ + BarInc.class + ], Foo); + $mol_assert_equal(new Foo(2).bar, 3); + }, + }); +})($ || ($ = {})); +//mol/wrapper/wrapper.test.ts +; +"use strict"; +var $; +(function ($) { + $mol_test({ + 'memoize field'() { + class Foo { + static one = 1; + static get two() { + return ++this.one; + } + static set two(next) { } + } + __decorate([ + $mol_memo.field + ], Foo, "two", null); + $mol_assert_equal(Foo.two, 2); + $mol_assert_equal(Foo.two, 2); + Foo.two = 3; + $mol_assert_equal(Foo.two, 3); + $mol_assert_equal(Foo.two, 3); + }, + }); +})($ || ($ = {})); +//mol/memo/memo.test.ts +; +"use strict"; +var $; +(function ($) { + class $mol_wire_log extends $mol_object2 { + static watch(task) { + return task; + } + static track(fiber) { + const prev = $mol_wire_probe(() => this.track(fiber)); + let next; + try { + next = fiber.sync(); + } + finally { + for (const pub of fiber.pub_list) { + if (pub instanceof $mol_wire_fiber) { + this.track(pub); + } + } + } + if (prev !== undefined && !$mol_compare_deep(prev, next)) { + this.$.$mol_log3_rise({ + message: 'Changed', + place: fiber, + }); + } + return next; + } + static active() { + try { + this.watch()?.(); + } + finally { + for (const pub of $mol_wire_auto().pub_list) { + if (pub instanceof $mol_wire_fiber) { + this.track(pub); + } + } + } + } + } + __decorate([ + $mol_mem + ], $mol_wire_log, "watch", null); + __decorate([ + $mol_mem_key + ], $mol_wire_log, "track", null); + __decorate([ + $mol_mem + ], $mol_wire_log, "active", null); + $.$mol_wire_log = $mol_wire_log; +})($ || ($ = {})); +//mol/wire/log/log.ts +; +"use strict"; +var $; +(function ($) { + $mol_test({ + 'Primitives'() { + $mol_assert_equal($mol_key(null), 'null'); + $mol_assert_equal($mol_key(false), 'false'); + $mol_assert_equal($mol_key(true), 'true'); + $mol_assert_equal($mol_key(0), '0'); + $mol_assert_equal($mol_key(''), '""'); + }, + 'Array & POJO'() { + $mol_assert_equal($mol_key([null]), '[null]'); + $mol_assert_equal($mol_key({ foo: 0 }), '{"foo":0}'); + $mol_assert_equal($mol_key({ foo: [false] }), '{"foo":[false]}'); + }, + 'Function'() { + const func = () => { }; + $mol_assert_equal($mol_key(func), $mol_key(func)); + $mol_assert_unique($mol_key(func), $mol_key(() => { })); + }, + 'Objects'() { + class User { + } + const jin = new User(); + $mol_assert_equal($mol_key(jin), $mol_key(jin)); + $mol_assert_unique($mol_key(jin), $mol_key(new User())); + }, + 'Elements'() { + const foo = $mol_jsx("div", null, "bar"); + $mol_assert_equal($mol_key(foo), $mol_key(foo)); + $mol_assert_unique($mol_key(foo), $mol_key($mol_jsx("div", null, "bar"))); + }, + 'Custom JSON representation'() { + class User { + name; + age; + constructor(name, age) { + this.name = name; + this.age = age; + } + toJSON() { return { name: this.name }; } + } + $mol_assert_equal($mol_key(new User('jin', 18)), '{"name":"jin"}'); + }, + 'Special native classes'() { + $mol_assert_equal($mol_key(new Date('xyz')), 'null'); + $mol_assert_equal($mol_key(new Date('2001-01-02T03:04:05.678Z')), '"2001-01-02T03:04:05.678Z"'); + $mol_assert_equal($mol_key(/./), '"/./"'); + $mol_assert_equal($mol_key(/\./gimsu), '"/\\\\./gimsu"'); + }, + }); +})($ || ($ = {})); +//mol/key/key.test.tsx +; +"use strict"; +var $; +(function ($) { + $mol_wire_log.active(); +})($ || ($ = {})); +//mol/wire/atom/atom.test.ts +; +"use strict"; +var $; +(function ($) { + $mol_test({ + 'const returns stored value'() { + const foo = { bar: $mol_const(Math.random()) }; + $mol_assert_equal(foo.bar(), foo.bar()); + $mol_assert_equal(foo.bar(), foo.bar['()']); + }, + }); +})($ || ($ = {})); +//mol/const/const.test.ts +; +"use strict"; +var $; +(function ($_1) { + $mol_test({ + 'FQN of anon function'($) { + const $$ = Object.assign($, { $mol_func_name_test: (() => () => { })() }); + $mol_assert_equal($$.$mol_func_name_test.name, ''); + $mol_assert_equal($$.$mol_func_name($$.$mol_func_name_test), '$mol_func_name_test'); + $mol_assert_equal($$.$mol_func_name_test.name, '$mol_func_name_test'); + }, + }); +})($ || ($ = {})); +//mol/func/name/name.test.ts +; +"use strict"; +var $; +(function ($_1) { + $mol_test({ + 'id auto generation'($) { + class $mol_view_test_item extends $mol_view { + } + class $mol_view_test_block extends $mol_view { + static $ = $; + element(id) { + return new $mol_view_test_item(); + } + } + __decorate([ + $mol_mem_key + ], $mol_view_test_block.prototype, "element", null); + var x = $mol_view_test_block.Root(0); + $mol_assert_equal(x.dom_node().id, '$mol_view_test_block.Root(0)'); + $mol_assert_equal(x.element(0).dom_node().id, '$mol_view_test_block.Root(0).element(0)'); + }, + 'caching ref to dom node'($) { + var x = new class extends $mol_view { + }; + x.$ = $; + $mol_assert_equal(x.dom_node(), x.dom_node()); + }, + 'content render'($) { + class $mol_view_test extends $mol_view { + sub() { + return ['lol', 5]; + } + } + var x = new $mol_view_test(); + x.$ = $; + var node = x.dom_tree(); + $mol_assert_equal(node.innerHTML, 'lol5'); + }, + 'bem attributes generation'($) { + class $mol_view_test_item extends $mol_view { + } + class $mol_view_test_block extends $mol_view { + Element(id) { + return new $mol_view_test_item(); + } + } + __decorate([ + $mol_mem_key + ], $mol_view_test_block.prototype, "Element", null); + var x = new $mol_view_test_block(); + x.$ = $; + $mol_assert_equal(x.dom_node().getAttribute('mol_view_test_block'), ''); + $mol_assert_equal(x.dom_node().getAttribute('mol_view'), ''); + $mol_assert_equal(x.Element(0).dom_node().getAttribute('mol_view_test_block_element'), ''); + $mol_assert_equal(x.Element(0).dom_node().getAttribute('mol_view_test_item'), ''); + $mol_assert_equal(x.Element(0).dom_node().getAttribute('mol_view'), ''); + }, + 'render custom attributes'($) { + class $mol_view_test extends $mol_view { + attr() { + return { + 'href': '#haha', + 'required': true, + 'hidden': false, + }; + } + } + var x = new $mol_view_test(); + x.$ = $; + var node = x.dom_tree(); + $mol_assert_equal(node.getAttribute('href'), '#haha'); + $mol_assert_equal(node.getAttribute('required'), 'true'); + $mol_assert_equal(node.getAttribute('hidden'), null); + }, + 'render custom fields'($) { + class $mol_view_test extends $mol_view { + field() { + return { + 'hidden': true + }; + } + } + var x = new $mol_view_test(); + x.$ = $; + var node = x.dom_tree(); + $mol_assert_equal(node.hidden, true); + }, + 'attach event handlers'($) { + var clicked = false; + class $mol_view_test extends $mol_view { + event() { + return { + 'click': (next) => this.event_click(next) + }; + } + event_click(next) { + clicked = true; + } + } + var x = new $mol_view_test(); + x.$ = $; + var node = x.dom_node(); + node.click(); + $mol_assert_ok(clicked); + }, + }); +})($ || ($ = {})); +//mol/view/view/view.test.ts +; +"use strict"; +var $; +(function ($) { + class $mol_view_tree_test_attributes_super extends $mol_view { + some() { + return { + a: 0, + b: 2 + }; + } + } + $.$mol_view_tree_test_attributes_super = $mol_view_tree_test_attributes_super; + class $mol_view_tree_test_attributes extends $mol_view_tree_test_attributes_super { + some() { + return { + ...super.some(), + a: 1 + }; + } + } + $.$mol_view_tree_test_attributes = $mol_view_tree_test_attributes; +})($ || ($ = {})); +//mol/view/tree/test/-view.tree/attributes.test.view.tree.ts +; +"use strict"; +var $; +(function ($) { + class $mol_view_tree_test_binding extends $mol_view { + value(val) { + return this.task_title_new(val); + } + enabled() { + return this.head_complete_enabled(); + } + task_title_new(val) { + if (val !== undefined) + return val; + return "123"; + } + head_complete_enabled() { + return false; + } + } + __decorate([ + $mol_mem + ], $mol_view_tree_test_binding.prototype, "task_title_new", null); + $.$mol_view_tree_test_binding = $mol_view_tree_test_binding; +})($ || ($ = {})); +//mol/view/tree/test/-view.tree/binding.test.view.tree.ts +; +"use strict"; +var $; +(function ($) { + class $mol_view_tree_test_binding_right extends $mol_view { + outer_width(v) { + return this.Test().width(v); + } + Test() { + const obj = new this.$.$mol_view_tree_test_binding_right_test(); + return obj; + } + } + __decorate([ + $mol_mem + ], $mol_view_tree_test_binding_right.prototype, "Test", null); + $.$mol_view_tree_test_binding_right = $mol_view_tree_test_binding_right; + class $mol_view_tree_test_binding_right_test extends $mol_view { + width(val) { + if (val !== undefined) + return val; + return 0; + } + } + __decorate([ + $mol_mem + ], $mol_view_tree_test_binding_right_test.prototype, "width", null); + $.$mol_view_tree_test_binding_right_test = $mol_view_tree_test_binding_right_test; +})($ || ($ = {})); +//mol/view/tree/test/-view.tree/binding_right.test.view.tree.ts +; +"use strict"; +var $; +(function ($) { + class $mol_view_tree_test_simple extends $mol_view { + some() { + return 1; + } + bool() { + return true; + } + str() { + return "test"; + } + arr() { + return []; + } + arr_string() { + return []; + } + } + $.$mol_view_tree_test_simple = $mol_view_tree_test_simple; +})($ || ($ = {})); +//mol/view/tree/test/-view.tree/simple.test.view.tree.ts +; +"use strict"; +var $; +(function ($) { + class $mol_view_tree_test_attributes_subcomponent extends $mol_view { + Page(id) { + const obj = new this.$.$mol_view_tree_test_attributes_subcomponent_page(); + obj.Sub = () => this.page(id); + return obj; + } + page(id) { + return null; + } + } + __decorate([ + $mol_mem_key + ], $mol_view_tree_test_attributes_subcomponent.prototype, "Page", null); + $.$mol_view_tree_test_attributes_subcomponent = $mol_view_tree_test_attributes_subcomponent; + class $mol_view_tree_test_attributes_subcomponent_page extends $mol_view { + Sub() { + return null; + } + } + $.$mol_view_tree_test_attributes_subcomponent_page = $mol_view_tree_test_attributes_subcomponent_page; +})($ || ($ = {})); +//mol/view/tree/test/-view.tree/subcomponent.test.view.tree.ts +; +"use strict"; +var $; +(function ($_1) { + var $$; + (function ($$) { + $mol_test({ + 'simple props'($) { + const app = $mol_view_tree_test_simple.make({ $ }); + $mol_assert_equal(app.some(), 1); + $mol_assert_equal(app.bool(), true); + $mol_assert_equal(app.str(), 'test'); + $mol_assert_ok(Array.isArray(app.arr())); + $mol_assert_ok(Array.isArray(app.arr_string())); + }, + 'default value'($) { + const app = $mol_view_tree_test_binding.make({ $ }); + $mol_assert_equal(app.value(), '123'); + }, + 'both binding'($) { + const app = $mol_view_tree_test_binding.make({ $ }); + $mol_assert_ok(app.value() !== '1'); + app.value('1'); + $mol_assert_equal(app.value(), '1'); + }, + 'left binding'($) { + const app = $mol_view_tree_test_binding.make({ $ }); + $mol_assert_not(app.head_complete_enabled()); + $mol_assert_not(app.enabled()); + }, + 'sub component'($) { + const app = $mol_view_tree_test_binding_right.make({ $ }); + $mol_assert_ok(app.Test() instanceof $mol_view_tree_test_binding_right_test); + }, + 'right binding - change owner property'($) { + const app = $mol_view_tree_test_binding_right.make({ $ }); + const val = 123; + $mol_assert_ok(app.outer_width() !== val); + $mol_assert_ok(app.Test().width() !== val); + app.outer_width(val); + $mol_assert_equal(app.outer_width(), val); + $mol_assert_equal(app.Test().width(), val); + }, + 'right binding - change part property'($) { + const app = $mol_view_tree_test_binding_right.make({ $ }); + const val = 123; + $mol_assert_ok(app.outer_width() !== val); + $mol_assert_ok(app.Test().width() !== val); + app.Test().width(val); + $mol_assert_equal(app.Test().width(), val); + $mol_assert_equal(app.outer_width(), val); + }, + 'attributes merging'($) { + const app = $mol_view_tree_test_attributes.make({ $ }); + $mol_assert_like(app.some(), { a: 1, b: 2 }); + }, + 'subcomponent indexed'($) { + const app = $mol_view_tree_test_attributes_subcomponent.make({ $ }); + const val = 123; + app.page = (index) => index; + $mol_assert_equal(app.Page(val).Sub(), val); + }, + }); + })($$ = $_1.$$ || ($_1.$$ = {})); +})($ || ($ = {})); +//mol/view/tree/test/tree.test.ts +; +"use strict"; +var $; +(function ($_1) { + $mol_test({ + 'tree parsing'() { + $mol_assert_equal($mol_tree.fromString("foo\nbar\n").sub.length, 2); + $mol_assert_equal($mol_tree.fromString("foo\nbar\n").sub[1].type, "bar"); + $mol_assert_equal($mol_tree.fromString("foo\n\n\n").sub.length, 1); + $mol_assert_equal($mol_tree.fromString("=foo\n\\bar\n").sub.length, 2); + $mol_assert_equal($mol_tree.fromString("=foo\n\\bar\n").sub[1].data, "bar"); + $mol_assert_equal($mol_tree.fromString("foo bar \\pol").sub[0].sub[0].sub[0].data, "pol"); + $mol_assert_equal($mol_tree.fromString("foo bar\n\t\\pol\n\t\\men").sub[0].sub[0].sub[1].data, "men"); + $mol_assert_equal($mol_tree.fromString('foo bar \\text\n').toString(), 'foo bar \\text\n'); + }, + 'inserting'() { + $mol_assert_equal($mol_tree.fromString('a b c d').insert(new $mol_tree, 'a', 'b', 'c').toString(), 'a b \\\n'); + $mol_assert_equal($mol_tree.fromString('a b').insert(new $mol_tree, 'a', 'b', 'c', 'd').toString(), 'a b c \\\n'); + $mol_assert_equal($mol_tree.fromString('a b c d').insert(new $mol_tree, 0, 0, 0).toString(), 'a b \\\n'); + $mol_assert_equal($mol_tree.fromString('a b').insert(new $mol_tree, 0, 0, 0, 0).toString(), 'a b \\\n\t\\\n'); + $mol_assert_equal($mol_tree.fromString('a b c d').insert(new $mol_tree, null, null, null).toString(), 'a b \\\n'); + $mol_assert_equal($mol_tree.fromString('a b').insert(new $mol_tree, null, null, null, null).toString(), 'a b \\\n\t\\\n'); + }, + 'fromJSON'() { + $mol_assert_equal($mol_tree.fromJSON([]).toString(), '/\n'); + $mol_assert_equal($mol_tree.fromJSON([false, true]).toString(), '/\n\tfalse\n\ttrue\n'); + $mol_assert_equal($mol_tree.fromJSON([0, 1, 2.3]).toString(), '/\n\t0\n\t1\n\t2.3\n'); + $mol_assert_equal($mol_tree.fromJSON(['', 'foo', 'bar\nbaz']).toString(), '/\n\t\\\n\t\\foo\n\t\\\n\t\t\\bar\n\t\t\\baz\n'); + $mol_assert_equal($mol_tree.fromJSON({ 'foo': false, 'bar\nbaz': 'lol' }).toString(), '*\n\tfoo false\n\t\\\n\t\t\\bar\n\t\t\\baz\n\t\t\\lol\n'); + }, + 'toJSON'() { + $mol_assert_equal(JSON.stringify($mol_tree.fromString('/\n').sub[0]), '[]'); + $mol_assert_equal(JSON.stringify($mol_tree.fromString('/\n\tfalse\n\ttrue\n').sub[0]), '[false,true]'); + $mol_assert_equal(JSON.stringify($mol_tree.fromString('/\n\t0\n\t1\n\t2.3\n').sub[0]), '[0,1,2.3]'); + $mol_assert_equal(JSON.stringify($mol_tree.fromString('/\n\t\\\n\t\\foo\n\t\\\n\t\t\\bar\n\t\t\\baz\n').sub[0]), '["","foo","bar\\nbaz"]'); + $mol_assert_equal(JSON.stringify($mol_tree.fromString('*\n\tfoo false\n\t\\\n\t\t\\bar\n\t\t\\baz\n\t\t\\lol\n').sub[0]), '{"foo":false,"bar\\nbaz":"lol"}'); + }, + 'hack'() { + const res = $mol_tree.fromString(`foo bar xxx`).hack({ + '': (tree, context) => [tree.hack(context)], + 'bar': (tree, context) => [tree.hack(context).clone({ type: '777' })], + }); + $mol_assert_equal(res.toString(), new $mol_tree({ type: 'foo 777 xxx' }).toString()); + }, + 'errors handling'($) { + const errors = []; + class Tree extends $mol_tree { + static $ = $.$mol_ambient({ + $mol_fail: error => errors.push(error.message) + }); + } + Tree.fromString(` + \t \tfoo + bar \\data + `, 'test'); + $mol_assert_like(errors, ['Syntax error at test:2\n \tfoo']); + }, + }); +})($ || ($ = {})); +//mol/tree/tree.test.ts +; +"use strict"; +var $; +(function ($) { + $.$mol_tree_convert = Symbol('$mol_tree_convert'); + class $mol_tree extends $mol_object2 { + type; + data; + sub; + baseUri; + row; + col; + length; + constructor(config = {}) { + super(); + this.type = config.type || ''; + if (config.value !== undefined) { + var sub = $mol_tree.values(config.value); + if (config.type || sub.length > 1) { + this.sub = [...sub, ...(config.sub || [])]; + this.data = config.data || ''; + } + else { + this.data = sub[0].data; + this.sub = config.sub || []; + } + } + else { + this.data = config.data || ''; + this.sub = config.sub || []; + } + this.baseUri = config.baseUri || ''; + this.row = config.row || 0; + this.col = config.col || 0; + this.length = config.length || 0; + } + static values(str, baseUri) { + return str.split('\n').map((data, index) => new $mol_tree({ + data: data, + baseUri: baseUri, + row: index + 1, + length: data.length, + })); + } + clone(config = {}) { + return new $mol_tree({ + type: ('type' in config) ? config.type : this.type, + data: ('data' in config) ? config.data : this.data, + sub: ('sub' in config) ? config.sub : this.sub, + baseUri: ('baseUri' in config) ? config.baseUri : this.baseUri, + row: ('row' in config) ? config.row : this.row, + col: ('col' in config) ? config.col : this.col, + length: ('length' in config) ? config.length : this.length, + value: config.value + }); + } + make(config) { + return new $mol_tree({ + baseUri: this.baseUri, + row: this.row, + col: this.col, + length: this.length, + ...config, + }); + } + make_data(value, sub) { + return this.make({ value, sub }); + } + make_struct(type, sub) { + return this.make({ type, sub }); + } + static fromString(str, baseUri) { + var root = new $mol_tree({ baseUri: baseUri }); + var stack = [root]; + var row = 0; + var prefix = str.replace(/^\n?(\t*)[\s\S]*/, '$1'); + var lines = str.replace(new RegExp('^\\t{0,' + prefix.length + '}', 'mg'), '').split('\n'); + lines.forEach(line => { + ++row; + var chunks = /^(\t*)((?:[^\n\t\\ ]+ *)*)(\\[^\n]*)?(.*?)(?:$|\n)/m.exec(line); + if (!chunks || chunks[4]) + return this.$.$mol_fail(new Error(`Syntax error at ${baseUri}:${row}\n${line}`)); + var indent = chunks[1]; + var path = chunks[2]; + var data = chunks[3]; + var deep = indent.length; + var types = path ? path.replace(/ $/, '').split(/ +/) : []; + if (stack.length <= deep) + return this.$.$mol_fail(new Error(`Too many tabs at ${baseUri}:${row}\n${line}`)); + stack.length = deep + 1; + var parent = stack[deep]; + let col = deep; + types.forEach(type => { + if (!type) + return this.$.$mol_fail(new Error(`Unexpected space symbol ${baseUri}:${row}\n${line}`)); + var next = new $mol_tree({ type, baseUri, row, col, length: type.length }); + const parent_sub = parent.sub; + parent_sub.push(next); + parent = next; + col += type.length + 1; + }); + if (data) { + var next = new $mol_tree({ data: data.substring(1), baseUri, row, col, length: data.length }); + const parent_sub = parent.sub; + parent_sub.push(next); + parent = next; + } + stack.push(parent); + }); + return root; + } + static fromJSON(json, baseUri = '') { + switch (true) { + case typeof json === 'boolean': + case typeof json === 'number': + case json === null: + return new $mol_tree({ + type: String(json), + baseUri: baseUri + }); + case typeof json === 'string': + return new $mol_tree({ + value: json, + baseUri: baseUri + }); + case Array.isArray(json): + return new $mol_tree({ + type: "/", + sub: json.map(json => $mol_tree.fromJSON(json, baseUri)) + }); + case json instanceof Date: + return new $mol_tree({ + value: json.toISOString(), + baseUri: baseUri + }); + default: + if (typeof json[$.$mol_tree_convert] === 'function') { + return json[$.$mol_tree_convert](); + } + if (typeof json.toJSON === 'function') { + return $mol_tree.fromJSON(json.toJSON()); + } + if (json instanceof Error) { + const { name, message, stack } = json; + json = { ...json, name, message, stack }; + } + var sub = []; + for (var key in json) { + if (json[key] === undefined) + continue; + const subsub = $mol_tree.fromJSON(json[key], baseUri); + if (/^[^\n\t\\ ]+$/.test(key)) { + var child = new $mol_tree({ + type: key, + baseUri: baseUri, + sub: [subsub], + }); + } + else { + var child = new $mol_tree({ + value: key, + baseUri: baseUri, + sub: [subsub], + }); + } + sub.push(child); + } + return new $mol_tree({ + type: "*", + sub: sub, + baseUri: baseUri + }); + } + } + get uri() { + return this.baseUri + '#' + this.row + ':' + this.col; + } + toString(prefix = '') { + var output = ''; + if (this.type.length) { + if (!prefix.length) { + prefix = "\t"; + } + output += this.type; + if (this.sub.length == 1) { + return output + ' ' + this.sub[0].toString(prefix); + } + output += "\n"; + } + else if (this.data.length || prefix.length) { + output += "\\" + this.data + "\n"; + } + for (var child of this.sub) { + output += prefix; + output += child.toString(prefix + "\t"); + } + return output; + } + toJSON() { + if (!this.type) + return this.value; + if (this.type === 'true') + return true; + if (this.type === 'false') + return false; + if (this.type === 'null') + return null; + if (this.type === '*') { + var obj = {}; + for (var child of this.sub) { + if (child.type === '-') + continue; + var key = child.type || child.clone({ sub: child.sub.slice(0, child.sub.length - 1) }).value; + var val = child.sub[child.sub.length - 1].toJSON(); + if (val !== undefined) + obj[key] = val; + } + return obj; + } + if (this.type === '/') { + var res = []; + this.sub.forEach(child => { + if (child.type === '-') + return; + var val = child.toJSON(); + if (val !== undefined) + res.push(val); + }); + return res; + } + if (this.type === 'time') { + return new Date(this.value); + } + const numb = Number(this.type); + if (!Number.isNaN(numb) || this.type === 'NaN') + return numb; + throw new Error(`Unknown type (${this.type}) at ${this.uri}`); + } + get value() { + var values = []; + for (var child of this.sub) { + if (child.type) + continue; + values.push(child.value); + } + return this.data + values.join("\n"); + } + insert(value, ...path) { + if (path.length === 0) + return value; + const type = path[0]; + if (typeof type === 'string') { + let replaced = false; + const sub = this.sub.map((item, index) => { + if (item.type !== type) + return item; + replaced = true; + return item.insert(value, ...path.slice(1)); + }); + if (!replaced) + sub.push(new $mol_tree({ type }).insert(value, ...path.slice(1))); + return this.clone({ sub }); + } + else if (typeof type === 'number') { + const sub = this.sub.slice(); + sub[type] = (sub[type] || new $mol_tree).insert(value, ...path.slice(1)); + return this.clone({ sub }); + } + else { + return this.clone({ sub: ((this.sub.length === 0) ? [new $mol_tree()] : this.sub).map(item => item.insert(value, ...path.slice(1))) }); + } + } + select(...path) { + var next = [this]; + for (var type of path) { + if (!next.length) + break; + var prev = next; + next = []; + for (var item of prev) { + switch (typeof (type)) { + case 'string': + for (var child of item.sub) { + if (!type || (child.type == type)) { + next.push(child); + } + } + break; + case 'number': + if (type < item.sub.length) + next.push(item.sub[type]); + break; + default: next.push(...item.sub); + } + } + } + return new $mol_tree({ sub: next }); + } + filter(path, value) { + var sub = this.sub.filter(function (item) { + var found = item.select(...path); + if (value == null) { + return Boolean(found.sub.length); + } + else { + return found.sub.some(child => child.value == value); + } + }); + return new $mol_tree({ sub: sub }); + } + transform(visit, stack = []) { + const sub_stack = [this, ...stack]; + return visit(sub_stack, () => this.sub.map(node => node.transform(visit, sub_stack)).filter(n => n)); + } + hack(context) { + const sub = [].concat(...this.sub.map(child => { + const handle = context[child.type] || context['']; + if (!handle) + $mol_fail(child.error('Handler not defined')); + return handle(child, context); + })); + return this.clone({ sub }); + } + error(message) { + return new Error(`${message}:\n${this} ${this.baseUri}:${this.row}:${this.col}`); + } + } + $.$mol_tree = $mol_tree; +})($ || ($ = {})); +//mol/tree/tree.ts +; +"use strict"; +var $; +(function ($) { + $mol_test_mocks.push(context => { + class $mol_state_local_mock extends $mol_state_local { + static state = {}; + static value(key, next = this.state[key]) { + return this.state[key] = (next || null); + } + } + __decorate([ + $mol_mem_key + ], $mol_state_local_mock, "value", null); + context.$mol_state_local = $mol_state_local_mock; + }); +})($ || ($ = {})); +//mol/state/local/local.mock.test.ts +; +"use strict"; +var $; +(function ($) { + $mol_test({ + 'local get set delete'() { + var key = '$mol_state_local_test:' + Math.random(); + $mol_assert_equal($mol_state_local.value(key), null); + $mol_state_local.value(key, 123); + $mol_assert_equal($mol_state_local.value(key), 123); + $mol_state_local.value(key, null); + $mol_assert_equal($mol_state_local.value(key), null); + }, + }); +})($ || ($ = {})); +//mol/state/local/local.test.ts +; +"use strict"; +var $; +(function ($) { + $mol_test({ + 'decode utf8 string'() { + const str = 'Hello, ΧΨΩЫ'; + const encoded = new Uint8Array([72, 101, 108, 108, 111, 44, 32, 206, 167, 206, 168, 206, 169, 208, 171]); + $mol_assert_equal($mol_charset_decode(encoded), str); + $mol_assert_equal($mol_charset_decode(encoded, 'utf8'), str); + }, + 'decode empty string'() { + const encoded = new Uint8Array([]); + $mol_assert_equal($mol_charset_decode(encoded), ''); + }, + }); +})($ || ($ = {})); +//mol/charset/decode/decode.test.ts +; +"use strict"; +var $; +(function ($) { + function $mol_charset_decode(value, code = 'utf8') { + return new TextDecoder(code).decode(value); + } + $.$mol_charset_decode = $mol_charset_decode; +})($ || ($ = {})); +//mol/charset/decode/decode.ts +; +"use strict"; +//node/node.ts +; +"use strict"; +var $node = $node || {}; +//node/node.web.ts +; +"use strict"; +var $; +(function ($) { + $mol_test({ + 'encode utf8 string'() { + const str = 'Hello, ΧΨΩЫ'; + const encoded = new Uint8Array([72, 101, 108, 108, 111, 44, 32, 206, 167, 206, 168, 206, 169, 208, 171]); + $mol_assert_like($mol_charset_encode(str), encoded); + }, + }); +})($ || ($ = {})); +//mol/charset/encode/encode.test.ts +; +"use strict"; +var $; +(function ($) { + const TextEncoder = globalThis.TextEncoder ?? $node.util.TextEncoder; + const encoder = new TextEncoder(); + function $mol_charset_encode(value) { + return encoder.encode(value); + } + $.$mol_charset_encode = $mol_charset_encode; +})($ || ($ = {})); +//mol/charset/encode/encode.ts +; +"use strict"; +var $; +(function ($) { + class $mol_file_not_found extends Error { + } + $.$mol_file_not_found = $mol_file_not_found; + class $mol_file extends $mol_object { + static absolute(path) { + throw new Error('Not implemented yet'); + } + static relative(path) { + throw new Error('Not implemented yet'); + } + static base = ''; + path() { + return '.'; + } + parent() { + return this.resolve('..'); + } + reset() { + try { + this.stat(null); + } + catch (error) { + if (error instanceof $mol_file_not_found) + return; + return $mol_fail_hidden(error); + } + } + version() { + return this.stat()?.mtime.getTime().toString(36).toUpperCase() ?? ''; + } + watcher() { + console.warn('$mol_file_web.watcher() not implemented'); + return { + destructor() { } + }; + } + exists(next) { + let exists = Boolean(this.stat()); + if (next === undefined) + return exists; + if (next === exists) + return exists; + if (next) + this.parent().exists(true); + this.ensure(); + this.reset(); + return next; + } + type() { + return this.stat()?.type ?? ''; + } + name() { + return this.path().replace(/^.*\//, ''); + } + ext() { + const match = /((?:\.\w+)+)$/.exec(this.path()); + return match ? match[1].substring(1) : ''; + } + text(next, virt) { + if (virt) { + const now = new Date; + this.stat({ + type: 'file', + size: 0, + atime: now, + mtime: now, + ctime: now, + }, 'virt'); + return next; + } + if (next === undefined) { + return $mol_charset_decode(this.buffer(undefined)); + } + else { + const buffer = next === undefined ? undefined : $mol_charset_encode(next); + this.buffer(buffer); + return next; + } + } + find(include, exclude) { + const found = []; + const sub = this.sub(); + for (const child of sub) { + const child_path = child.path(); + if (exclude && child_path.match(exclude)) + continue; + if (!include || child_path.match(include)) + found.push(child); + if (child.type() === 'dir') { + const sub_child = child.find(include, exclude); + for (const child of sub_child) + found.push(child); + } + } + return found; + } + size() { + switch (this.type()) { + case 'file': return this.stat()?.size ?? 0; + default: return 0; + } + } + } + __decorate([ + $mol_mem + ], $mol_file.prototype, "exists", null); + __decorate([ + $mol_mem + ], $mol_file.prototype, "text", null); + __decorate([ + $mol_mem_key + ], $mol_file, "absolute", null); + $.$mol_file = $mol_file; +})($ || ($ = {})); +//mol/file/file.ts +; +"use strict"; +var $; +(function ($) { + $.$mol_action = $mol_wire_method; +})($ || ($ = {})); +//mol/action/action.ts +; +"use strict"; +var $; +(function ($) { + function $mol_dom_parse(text, type = 'application/xhtml+xml') { + const parser = new $mol_dom_context.DOMParser(); + const doc = parser.parseFromString(text, type); + const error = doc.getElementsByTagName('parsererror'); + if (error.length) + throw new Error(error[0].textContent); + return doc; + } + $.$mol_dom_parse = $mol_dom_parse; +})($ || ($ = {})); +//mol/dom/parse/parse.ts +; +"use strict"; +var $; +(function ($) { + class $mol_fetch_response extends $mol_object2 { + native; + constructor(native) { + super(); + this.native = native; + } + headers() { + return this.native.headers; + } + mime() { + return this.headers().get('content-type'); + } + stream() { + return this.native.body; + } + text() { + const buffer = this.buffer(); + const native = this.native; + const mime = native.headers.get('content-type') || ''; + const [, charset] = /charset=(.*)/.exec(mime) || [, 'utf-8']; + const decoder = new TextDecoder(charset); + return decoder.decode(buffer); + } + json() { + return $mol_wire_sync(this.native).json(); + } + buffer() { + return $mol_wire_sync(this.native).arrayBuffer(); + } + xml() { + return $mol_dom_parse(this.text(), 'application/xml'); + } + xhtml() { + return $mol_dom_parse(this.text(), 'application/xhtml+xml'); + } + html() { + return $mol_dom_parse(this.text(), 'text/html'); + } + } + __decorate([ + $mol_action + ], $mol_fetch_response.prototype, "stream", null); + __decorate([ + $mol_action + ], $mol_fetch_response.prototype, "text", null); + __decorate([ + $mol_action + ], $mol_fetch_response.prototype, "buffer", null); + __decorate([ + $mol_action + ], $mol_fetch_response.prototype, "xml", null); + __decorate([ + $mol_action + ], $mol_fetch_response.prototype, "xhtml", null); + __decorate([ + $mol_action + ], $mol_fetch_response.prototype, "html", null); + $.$mol_fetch_response = $mol_fetch_response; + class $mol_fetch extends $mol_object2 { + static request(input, init = {}) { + let native = $mol_dom_context.fetch; + if (!native) + native = $node['node-fetch']; + const controller = new AbortController(); + let done = false; + const promise = native(input, { + ...init, + signal: controller.signal, + }).finally(() => { + done = true; + }); + return Object.assign(promise, { + destructor: () => { + if (!done) + controller.abort(); + }, + }); + } + static response(input, init) { + const response = $mol_wire_sync(this).request(input, init); + if (Math.floor(response.status / 100) === 2) + return new $mol_fetch_response(response); + throw new Error(response.statusText || `HTTP Error ${response.status}`); + } + static stream(input, init) { + return this.response(input, init).stream(); + } + static text(input, init) { + return this.response(input, init).text(); + } + static json(input, init) { + return this.response(input, init).json(); + } + static buffer(input, init) { + this.response(input, init).buffer(); + } + static xml(input, init) { + return this.response(input, init).xml(); + } + static xhtml(input, init) { + return this.response(input, init).xhtml(); + } + static html(input, init) { + return this.response(input, init).html(); + } + } + __decorate([ + $mol_action + ], $mol_fetch, "response", null); + __decorate([ + $mol_action + ], $mol_fetch, "stream", null); + __decorate([ + $mol_action + ], $mol_fetch, "text", null); + __decorate([ + $mol_action + ], $mol_fetch, "json", null); + __decorate([ + $mol_action + ], $mol_fetch, "buffer", null); + __decorate([ + $mol_action + ], $mol_fetch, "xml", null); + __decorate([ + $mol_action + ], $mol_fetch, "xhtml", null); + __decorate([ + $mol_action + ], $mol_fetch, "html", null); + $.$mol_fetch = $mol_fetch; +})($ || ($ = {})); +//mol/fetch/fetch.ts +; +"use strict"; +var $; +(function ($) { + class $mol_file_web extends $mol_file { + static absolute(path) { + return this.make({ + path: $mol_const(path) + }); + } + static relative(path) { + return this.absolute(new URL(path, this.base).toString()); + } + static base = $mol_dom_context.document + ? new URL('.', $mol_dom_context.document.currentScript['src']).toString() + : ''; + buffer(next) { + if (next !== undefined) + throw new Error(`Saving content not supported: ${this.path}`); + const response = $mol_fetch.response(this.path()); + if (response.native.status === 404) + throw new $mol_file_not_found(`File not found: ${this.path()}`); + return new Uint8Array(response.buffer()); + } + stat(next, virt) { + let stat = next; + if (next === undefined) { + const content = this.text(); + const ctime = new Date(); + stat = { + type: 'file', + size: content.length, + ctime, + atime: ctime, + mtime: ctime + }; + } + this.parent().watcher(); + return stat; + } + resolve(path) { + let res = this.path() + '/' + path; + while (true) { + let prev = res; + res = res.replace(/\/[^\/.]+\/\.\.\//, '/'); + if (prev === res) + break; + } + return this.constructor.absolute(res); + } + ensure() { + throw new Error('$mol_file_web.ensure() not implemented'); + } + sub() { + throw new Error('$mol_file_web.sub() not implemented'); + } + relate(base = this.constructor.relative('.')) { + throw new Error('$mol_file_web.relate() not implemented'); + } + append(next) { + throw new Error('$mol_file_web.append() not implemented'); + } + } + __decorate([ + $mol_mem + ], $mol_file_web.prototype, "buffer", null); + __decorate([ + $mol_mem + ], $mol_file_web.prototype, "stat", null); + __decorate([ + $mol_mem + ], $mol_file_web.prototype, "sub", null); + __decorate([ + $mol_mem_key + ], $mol_file_web, "absolute", null); + $.$mol_file_web = $mol_file_web; + $.$mol_file = $mol_file_web; +})($ || ($ = {})); +//mol/file/file.web.ts +; +"use strict"; +var $; +(function ($) { + class $mol_locale extends $mol_object { + static lang_default() { + return 'en'; + } + static lang(next) { + return this.$.$mol_state_local.value('locale', next) || $mol_dom_context.navigator.language.replace(/-.*/, '') || this.lang_default(); + } + static source(lang) { + return JSON.parse(this.$.$mol_file.relative(`web.locale=${lang}.json`).text().toString()); + } + static texts(lang, next) { + if (next) + return next; + try { + return this.source(lang).valueOf(); + } + catch (error) { + if (error instanceof Promise) + $mol_fail_hidden(error); + const def = this.lang_default(); + if (lang === def) + throw error; + return this.source(def); + } + } + static text(key) { + for (let lang of [this.lang(), 'en']) { + const text = this.texts(lang)[key]; + if (text) + return text; + this.warn(key); + } + return `<${key}>`; + } + static warn(key) { + console.warn(`Not translated to "${this.lang()}": ${key}`); + return null; + } + } + __decorate([ + $mol_mem + ], $mol_locale, "lang_default", null); + __decorate([ + $mol_mem + ], $mol_locale, "lang", null); + __decorate([ + $mol_mem_key + ], $mol_locale, "source", null); + __decorate([ + $mol_mem_key + ], $mol_locale, "texts", null); + __decorate([ + $mol_mem_key + ], $mol_locale, "text", null); + __decorate([ + $mol_mem_key + ], $mol_locale, "warn", null); + $.$mol_locale = $mol_locale; +})($ || ($ = {})); +//mol/locale/locale.ts +; +"use strict"; +var $; +(function ($) { + function $mol_view_tree_trim_remarks(def) { + return def.transform(([node], sub) => (node.type === '-') ? null : node.clone({ sub: sub() })); + } + $.$mol_view_tree_trim_remarks = $mol_view_tree_trim_remarks; + function $mol_view_tree_classes(defs) { + return $mol_view_tree_trim_remarks(defs); + } + $.$mol_view_tree_classes = $mol_view_tree_classes; + function $mol_view_tree_class_name(val) { + return val.type; + } + $.$mol_view_tree_class_name = $mol_view_tree_class_name; + function $mol_view_tree_super_name(val) { + if (val.sub.length != 1) + throw val.error('Wrong sub count'); + return val.sub[0].type; + } + $.$mol_view_tree_super_name = $mol_view_tree_super_name; + function $mol_view_tree_class_props(def) { + const props = {}; + const catch_prop = (prop, type = '') => { + let def = prop; + if (type === '=>') { + if (prop.sub[0]) + throw prop.error('Right binding can not have default value'); + } + else { + if (prop.sub.length === 0) + return; + if (prop.sub[0].type === '-') + return; + props[prop.type] = props[prop.type]; + def = prop.clone({ + sub: [prop.sub[0].transform(([node, ...stack], sub) => { + if (['<=', '<=>', '=>'].indexOf(node.type) === -1) + return node.clone({ sub: sub() }); + catch_prop(node.sub[0], node.type); + return node.clone({ + sub: [node.sub[0].clone({ + sub: [] + })] + }); + })] + }); + } + if (props[prop.type]) { + if (props[prop.type].toString() !== def.toString()) { + throw def.error('Property already defined with another default value' + props[prop.type].error('').message + '\n---'); + } + } + else { + props[prop.type] = def; + } + }; + def.sub[0].sub.map(sub => catch_prop(sub)); + return def.clone({ + type: '', + sub: Object.keys(props).map(name => props[name]), + }); + } + $.$mol_view_tree_class_props = $mol_view_tree_class_props; + function $mol_view_tree_prop_name(prop) { + return (prop.type.match(/^\w+/) || [])[0] || ''; + } + $.$mol_view_tree_prop_name = $mol_view_tree_prop_name; + function $mol_view_tree_prop_key(prop) { + return (prop.type.match(/!(\w+)$/) || [])[1] || ''; + } + $.$mol_view_tree_prop_key = $mol_view_tree_prop_key; + function $mol_view_tree_prop_next(prop) { + return (prop.type.match(/\?(\w+)$/) || [])[1] || ''; + } + $.$mol_view_tree_prop_next = $mol_view_tree_prop_next; + function $mol_view_tree_prop_value(prop) { + if (prop.sub.length != 1) + throw prop.error(`Wrong sub count (${prop.sub.length})`); + return prop.sub[0]; + } + $.$mol_view_tree_prop_value = $mol_view_tree_prop_value; + function $mol_view_tree_value_type(val) { + switch (val.type) { + case 'true': return 'bool'; + case 'false': return 'bool'; + case 'null': return 'null'; + case '*': return 'dict'; + case '@': return 'locale'; + case '': return 'string'; + case '<=': return 'get'; + case '<=>': return 'bind'; + case '=>': return 'put'; + } + switch (val.type[0]) { + case '/': return 'list'; + case '$': return 'object'; + } + if (Number(val.type).toString() == val.type) + return 'number'; + throw val.error('Wrong value'); + } + $.$mol_view_tree_value_type = $mol_view_tree_value_type; + function $mol_view_tree_compile(tree) { + const splittedUri = tree.uri.split(/[#\\\/]/); + splittedUri.pop(); + const fileName = splittedUri.pop(); + const SourceNode = (row, col, fileName, text) => text; + var content = []; + var locales = {}; + for (let def of $mol_view_tree_classes(tree).sub) { + if (!/^\$\w+$/.test(def.type)) + throw def.error('Wrong component name'); + var parent = def.sub[0]; + var members = {}; + for (let param of $mol_view_tree_class_props(def).sub) { + try { + var needSet = false; + var needCache = false; + if (param.type === '<=>') { + param = param.sub[0]; + } + if (param.type === '<=') { + param = param.sub[0]; + } + var propName = /(.*?)(?:\!(\w+))?(?:\?(\w+))?$/.exec(param.type); + if (propName[3]) { + needSet = true; + needCache = true; + } + const getValue = (value, definition) => { + try { + switch (true) { + case (value.type === ''): + return [JSON.stringify(value.value)]; + case (value.type === '@'): + const key = `${def.type}_${param.type.replace(/[?!].*/, '')}`; + locales[key] = value.value; + return [`this.$.$mol_locale.text( ${JSON.stringify(key)} )`]; + case (value.type === '-'): + return null; + case (value.type[0] === '/'): + const item_type = value.type.substring(1); + var items = []; + value.sub.forEach(item => { + if (item.type === '-') + return; + if (item.type === '^') { + items.push(`...super.${param.type}()`); + return; + } + var val = getValue(item); + if (val) + items.push(val.join("")); + }); + return [`[`, items.join(' , '), `]`, (item_type ? ` as readonly ( ${item_type} )[]` : ` as readonly any[]`)]; + case (value.type[0] === '$'): + if (!definition) + throw value.error('Objects should be bound'); + needCache = true; + var overs = []; + value.sub.forEach(over => { + if (/^[-\/]?$/.test(over.type)) + return ''; + var overName = /(.*?)(?:\!(\w+))?(?:\?(\w+))?$/.exec(over.type); + var ns = needSet; + if (over.sub[0].type === '=>') { + if (over.sub[0].sub.length === 1) { + const [, own_name, own_key, own_next] = /(.*?)(?:\!(\w+))?(?:\?(\w+))?$/.exec(over.sub[0].sub[0].type); + let own_args = []; + if (own_key) + own_args.push(` ${own_key} : any `); + if (own_next) + own_args.push(` ${own_next}? : any `); + let [, their_name, ...their_args] = /(.*?)(?:\!(\w+))?(?:\?(\w+))?$/.exec(over.type); + their_args = their_args.filter(Boolean); + members[own_name] = [`\t${own_name}(${own_args.join(',')}) {\n\t\treturn this.${propName[1]}(${propName[2] || ''}).${their_name}( ${their_args.join(' , ')} )\n\t}\n\n`]; + return; + } + } + var v = getValue(over.sub[0]); + let args = []; + if (overName[2]) + args.push(` ${overName[2]} : any `); + if (overName[3]) + args.push(` ${overName[3]}? : any `); + overs.push(...['\t\t\tobj.', SourceNode(over.row, over.col, fileName, overName[1]), ' = (', args.join(','), ') => ', ...(v || []), '\n']); + needSet = ns; + }); + const object_args = value.select('/', '').sub.map(arg => getValue(arg)).join(' , '); + return ['(( obj )=>{\n', ...overs, '\t\t\treturn obj\n\t\t})( new this.$.', SourceNode(value.row, value.col, fileName, value.type), '( ', object_args, ' ) )']; + case (value.type === '*'): + var opts = []; + value.sub.forEach(opt => { + if (opt.type === '-') + return ''; + if (opt.type === '^') { + opts.push(`\t\t\t...super.${param.type}() ,\n`); + return; + } + var key = /(.*?)(?:\?(\w+))?$/.exec(opt.type); + var ns = needSet; + var v = getValue(opt.sub[0]); + var arg = key[2] ? ` ( ${key[2]}? : any )=> ` : ''; + opts.push(...['\t\t\t"', SourceNode(opt.row, opt.col, fileName, key[1] + '" : '), arg, ' ', ...(v || []), ' ,\n']); + needSet = ns; + }); + return ['({\n', opts.join(''), '\t\t})']; + case (value.type === '<=>'): + if (value.sub.length === 1) { + var type = /(.*?)(?:\!(\w+))?(?:\?(\w+))$/.exec(value.sub[0].type); + return ['this.' + type[1] + '(' + (type[2] ? type[2] + ' ,' : '') + ' ' + type[3] + ' )']; + } + break; + case (value.type === '<='): + if (value.sub.length === 1) { + var type = /(.*?)(?:\!(\w+))?(?:\?(\w+))?$/.exec(value.sub[0].type); + return ['this.' + type[1] + '(' + (type[2] ? type[2] : '') + ')']; + } + break; + } + switch (value.type) { + case 'true': + case 'false': + return [value.type]; + case 'null': + return ['null as any']; + } + if (Number(value.type).toString() == value.type) + return [value.type]; + throw value.error('Wrong value'); + } + catch (err) { + throw err; + } + }; + if (param.sub.length > 1) + throw new Error('Too more sub'); + param.sub.forEach(child => { + var val = getValue(child, true); + if (!val) + return; + var args = []; + if (propName[2]) + args.push(` ${propName[2]} : any `); + if (propName[3]) + args.push(` ${propName[3]}? : any , force? : $${''}mol_mem_force `); + if (needSet) + val = [ + `( ${propName[3]} !== void 0 ) ? ${propName[3]} : `, + ...val + ]; + val = ['return ', ...val]; + var decl = ['\t', SourceNode(param.row, param.col, fileName, propName[1]), '(', args.join(','), ') {\n\t\t', ...val, '\n\t}\n\n']; + if (needCache) { + if (propName[2]) + decl = ['\t@ $', 'mol_mem_key\n', ...decl]; + else + decl = ['\t@ $', 'mol_mem\n', ...decl]; + } + decl = ['\t/**\n\t * ```\n', param.toString().trim().replace(/^/mg, '\t * '), '\n\t * ```\n\t **/\n', ...decl]; + members[propName[1]] = decl; + }); + } + catch (err) { + throw err; + } + } + var body = Object.keys(members).reduce(function (acc, name) { + const items = members[name] ? members[name] : ['\t', name, '() { return null as any }\n\t}\n']; + return [...acc, ...items]; + }, []); + var classes = ['namespace $ { export class ', SourceNode(def.row, def.col, fileName, def.type), ' extends ', SourceNode(parent.row, parent.col, fileName, parent.type), ' {\n\n', ...body, '} }\n']; + content = [...content, ...classes]; + } + return { script: content.join(''), locales }; + } + $.$mol_view_tree_compile = $mol_view_tree_compile; +})($ || ($ = {})); +//mol/view/tree/tree.ts +; +"use strict"; +var $; +(function ($_1) { + var $$; + (function ($$) { + $mol_test({ + 'handle clicks by default'($) { + let clicked = false; + const clicker = $mol_button.make({ + $, + click: (event) => { clicked = true; }, + }); + const element = clicker.dom_tree(); + const event = $mol_dom_context.document.createEvent('mouseevent'); + event.initEvent('click', true, true); + element.dispatchEvent(event); + $mol_assert_ok(clicked); + }, + 'no handle clicks if disabled'($) { + let clicked = false; + const clicker = $mol_button.make({ + $, + click: (event) => { clicked = true; }, + enabled: () => false, + }); + const element = clicker.dom_tree(); + const event = $mol_dom_context.document.createEvent('mouseevent'); + event.initEvent('click', true, true); + element.dispatchEvent(event); + $mol_assert_not(clicked); + }, + 'Store error'($) { + const clicker = $mol_button.make({ + $, + click: (event) => $.$mol_fail(new Error('Test error')), + }); + const event = $mol_dom_context.document.createEvent('mouseevent'); + $mol_assert_fail(() => clicker.event_activate(event), 'Test error'); + $mol_assert_equal(clicker.status()[0].message, 'Test error'); + }, + }); + })($$ = $_1.$$ || ($_1.$$ = {})); +})($ || ($ = {})); +//mol/button/button.test.ts +; +"use strict"; +//mol/type/result/result.test.ts +; +"use strict"; +var $; +(function ($) { + class $mol_style_sheet_test1 extends $mol_view { + Item() { return new $mol_view; } + } + $.$mol_style_sheet_test1 = $mol_style_sheet_test1; + class $mol_style_sheet_test2 extends $mol_view { + List() { return new $mol_style_sheet_test1; } + } + $.$mol_style_sheet_test2 = $mol_style_sheet_test2; + $mol_test({ + 'component block styles'() { + class $mol_style_sheet_test extends $mol_view { + } + const sheet = $mol_style_sheet($mol_style_sheet_test, { + display: 'block', + zIndex: 1, + }); + $mol_assert_equal(sheet, '[mol_style_sheet_test] {\n\tdisplay: block;\n\tz-index: 1;\n}\n'); + }, + 'various units'() { + class $mol_style_sheet_test extends $mol_view { + } + const { px, per } = $mol_style_unit; + const sheet = $mol_style_sheet($mol_style_sheet_test, { + width: per(50), + height: px(50), + }); + $mol_assert_equal(sheet, '[mol_style_sheet_test] {\n\twidth: 50%;\n\theight: 50px;\n}\n'); + }, + 'various functions'() { + class $mol_style_sheet_test extends $mol_view { + } + const { calc } = $mol_style_func; + const { px, per } = $mol_style_unit; + const sheet = $mol_style_sheet($mol_style_sheet_test, { + width: calc(`${per(100)} - ${px(1)}`), + }); + $mol_assert_equal(sheet, '[mol_style_sheet_test] {\n\twidth: calc(100% - 1px);\n}\n'); + }, + 'property groups'() { + class $mol_style_sheet_test extends $mol_view { + } + const { px } = $mol_style_unit; + const sheet = $mol_style_sheet($mol_style_sheet_test, { + flex: { + grow: 5 + } + }); + $mol_assert_equal(sheet, '[mol_style_sheet_test] {\n\tflex-grow: 5;\n}\n'); + }, + 'property shorthand'() { + class $mol_style_sheet_test extends $mol_view { + } + const { px } = $mol_style_unit; + const sheet = $mol_style_sheet($mol_style_sheet_test, { + padding: [px(5), 'auto'] + }); + $mol_assert_equal(sheet, '[mol_style_sheet_test] {\n\tpadding: 5px auto;\n}\n'); + }, + 'sequenced values'() { + class $mol_style_sheet_test extends $mol_view { + } + const { url } = $mol_style_func; + const sheet = $mol_style_sheet($mol_style_sheet_test, { + background: { + image: [[url('foo')], [url('bar')]], + }, + }); + $mol_assert_equal(sheet, '[mol_style_sheet_test] {\n\tbackground-image: url("foo"),url("bar");\n}\n'); + }, + 'sequenced structs'() { + class $mol_style_sheet_test extends $mol_view { + } + const { rem } = $mol_style_unit; + const { hsla } = $mol_style_func; + const sheet = $mol_style_sheet($mol_style_sheet_test, { + box: { + shadow: [ + { + inset: true, + x: 0, + y: 0, + blur: rem(.5), + spread: 0, + color: 'red', + }, + { + inset: false, + x: 0, + y: 0, + blur: rem(.5), + spread: 0, + color: 'blue', + }, + ], + }, + }); + $mol_assert_equal(sheet, '[mol_style_sheet_test] {\n\tbox-shadow: inset 0 0 0.5rem 0 red,0 0 0.5rem 0 blue;\n}\n'); + }, + 'component block styles with pseudo class'() { + class $mol_style_sheet_test extends $mol_view { + } + const sheet = $mol_style_sheet($mol_style_sheet_test, { + ':focus': { + color: 'red', + display: 'block', + }, + }); + $mol_assert_equal(sheet, '[mol_style_sheet_test]:focus {\n\tcolor: red;\n\tdisplay: block;\n}\n'); + }, + 'component block styles with pseudo element'() { + class $mol_style_sheet_test extends $mol_view { + } + const sheet = $mol_style_sheet($mol_style_sheet_test, { + '::first-line': { + color: 'red', + display: 'block', + }, + }); + $mol_assert_equal(sheet, '[mol_style_sheet_test]::first-line {\n\tcolor: red;\n\tdisplay: block;\n}\n'); + }, + 'component block styles with media query'() { + class $mol_style_sheet_test extends $mol_view { + } + const sheet = $mol_style_sheet($mol_style_sheet_test, { + '@media': { + 'print': { + color: 'red', + display: 'block', + }, + }, + }); + $mol_assert_equal(sheet, '@media print {\n[mol_style_sheet_test] {\n\tcolor: red;\n\tdisplay: block;\n}\n}\n'); + }, + 'component block styles with attribute value'() { + class $mol_style_sheet_test extends $mol_view { + attr() { + return { + mol_theme: '$mol_theme_dark' + }; + } + } + const sheet = $mol_style_sheet($mol_style_sheet_test, { + '@': { + mol_theme: { + '$mol_theme_dark': { + color: 'red', + display: 'block', + }, + }, + }, + }); + $mol_assert_equal(sheet, '[mol_style_sheet_test]:where([mol_theme="$mol_theme_dark"]) {\n\tcolor: red;\n\tdisplay: block;\n}\n'); + }, + 'component element styles'() { + class $mol_style_sheet_test extends $mol_view { + Item() { return new $mol_view; } + } + const sheet = $mol_style_sheet($mol_style_sheet_test, { + Item: { + color: 'red', + display: 'block', + }, + }); + $mol_assert_equal(sheet, '[mol_style_sheet_test_item] {\n\tcolor: red;\n\tdisplay: block;\n}\n'); + }, + 'component element of element styles'() { + const sheet = $mol_style_sheet($mol_style_sheet_test2, { + List: { + Item: { + color: 'red', + display: 'block', + }, + }, + }); + $mol_assert_equal(sheet, '[mol_style_sheet_test2_list_item] {\n\tcolor: red;\n\tdisplay: block;\n}\n'); + }, + 'component element styles with block attribute value'() { + class $mol_style_sheet_test extends $mol_view { + Item() { return new $mol_view; } + attr() { + return { + mol_theme: '$mol_theme_dark' + }; + } + } + const sheet = $mol_style_sheet($mol_style_sheet_test, { + '@': { + mol_theme: { + '$mol_theme_dark': { + Item: { + color: 'red', + }, + }, + }, + }, + }); + $mol_assert_equal(sheet, '[mol_style_sheet_test]:where([mol_theme="$mol_theme_dark"]) :where([mol_style_sheet_test_item]) {\n\tcolor: red;\n}\n'); + }, + 'inner component styles by class'() { + const sheet = $mol_style_sheet($mol_style_sheet_test2, { + $mol_style_sheet_test1: { + color: 'red', + display: 'block', + }, + }); + $mol_assert_equal(sheet, '[mol_style_sheet_test2] :where([mol_style_sheet_test1]) {\n\tcolor: red;\n\tdisplay: block;\n}\n'); + }, + 'child component styles by class'() { + const sheet = $mol_style_sheet($mol_style_sheet_test2, { + '>': { + $mol_style_sheet_test1: { + color: 'red', + display: 'block', + }, + }, + }); + $mol_assert_equal(sheet, '[mol_style_sheet_test2] > :where([mol_style_sheet_test1]) {\n\tcolor: red;\n\tdisplay: block;\n}\n'); + }, + }); +})($ || ($ = {})); +//mol/style/sheet/sheet.test.ts +; +"use strict"; +var $; +(function ($_1) { + $mol_test_mocks.push(context => { + class $mol_state_arg_mock extends $mol_state_arg { + static $ = context; + static href(next) { return next || ''; } + } + __decorate([ + $mol_mem + ], $mol_state_arg_mock, "href", null); + context.$mol_state_arg = $mol_state_arg_mock; + }); + $mol_test({ + 'args as dictionary'($) { + $.$mol_state_arg.href('#!foo=bar/xxx'); + $mol_assert_like($.$mol_state_arg.dict(), { foo: 'bar', xxx: '' }); + $.$mol_state_arg.dict({ foo: null, yyy: '', lol: '123' }); + $mol_assert_equal($.$mol_state_arg.href().replace(/.*#/, '#'), '#!yyy/lol=123'); + }, + 'one value from args'($) { + $.$mol_state_arg.href('#!foo=bar/xxx'); + $mol_assert_equal($.$mol_state_arg.value('foo'), 'bar'); + $mol_assert_equal($.$mol_state_arg.value('xxx'), ''); + $.$mol_state_arg.value('foo', 'lol'); + $mol_assert_equal($.$mol_state_arg.href().replace(/.*#/, '#'), '#!foo=lol/xxx'); + $.$mol_state_arg.value('foo', ''); + $mol_assert_equal($.$mol_state_arg.href().replace(/.*#/, '#'), '#!foo/xxx'); + $.$mol_state_arg.value('foo', null); + $mol_assert_equal($.$mol_state_arg.href().replace(/.*#/, '#'), '#!xxx'); + }, + 'nested args'($) { + const base = new $.$mol_state_arg('nested.'); + class Nested extends $mol_state_arg { + constructor(prefix) { + super(base.prefix + prefix); + } + static value = (key, next) => base.value(key, next); + } + $.$mol_state_arg.href('#!foo=bar/nested.xxx=123'); + $mol_assert_equal(Nested.value('foo'), null); + $mol_assert_equal(Nested.value('xxx'), '123'); + Nested.value('foo', 'lol'); + $mol_assert_equal($.$mol_state_arg.href().replace(/.*#/, '#'), '#!foo=bar/nested.xxx=123/nested.foo=lol'); + }, + }); +})($ || ($ = {})); +//mol/state/arg/arg.web.test.ts +; +"use strict"; +var $; +(function ($_1) { + var $$; + (function ($$) { + $mol_test({ + 'task add'($) { + const app = $hyoo_todomvc.make({ $ }); + const rows = app.task_rows(); + const title = $mol_guid(); + app.Add().value(title); + app.Add().done(); + $mol_assert_equal(app.task_rows()[0].title(), title); + $mol_assert_equal(app.task_rows()[0].completed(), false); + $mol_assert_like(app.task_rows().slice(1), rows); + $mol_assert_equal(app.Add().value(), ''); + }, + 'task rename'($) { + const title = $mol_guid(); + save: { + const app = $hyoo_todomvc.make({ $ }); + app.Add().value('test title'); + app.Add().done(); + app.task_rows()[0].Title().value(title); + } + load: { + const app = $hyoo_todomvc.make({ $ }); + $mol_assert_equal(app.task_rows()[0].Title().value(), title); + } + }, + 'task toggle'($) { + save: { + const app = $hyoo_todomvc.make({ $ }); + app.Add().value('test title'); + app.Add().done(); + $mol_assert_equal(app.task_rows()[0].Complete().checked(), false); + app.task_rows()[0].Complete().click(); + } + toggle: { + const app = $hyoo_todomvc.make({ $ }); + $mol_assert_equal(app.task_rows()[0].Complete().checked(), true); + app.task_rows()[0].Complete().click(); + } + load: { + const app = $hyoo_todomvc.make({ $ }); + $mol_assert_equal(app.task_rows()[0].Complete().checked(), false); + } + }, + 'task delete'($) { + const app = $hyoo_todomvc.make({ $ }); + app.Add().value('test title'); + app.Add().done(); + const top = app.task_rows()[0]; + top.Drop().click(); + $mol_assert_not(app.task_rows().includes(top)); + }, + 'navigation'($) { + const app = $hyoo_todomvc.make({ $ }); + app.Add().value('test title'); + app.Add().done(); + const task1 = app.task_rows()[0]; + app.Add().value('test title 2'); + app.Add().done(); + const task2 = app.task_rows()[1]; + task2.Complete().click(); + $mol_assert_ok(app.task_rows().includes(task1)); + $mol_assert_ok(app.task_rows().includes(task2)); + $.$mol_state_arg.href(app.Filter_completed().uri()); + $mol_assert_not(app.task_rows().includes(task1)); + $mol_assert_ok(app.task_rows().includes(task2)); + $.$mol_state_arg.href(app.Filter_active().uri()); + $mol_assert_ok(app.task_rows().includes(task1)); + $mol_assert_not(app.task_rows().includes(task2)); + $.$mol_state_arg.href(app.Filter_all().uri()); + $mol_assert_ok(app.task_rows().includes(task1)); + $mol_assert_ok(app.task_rows().includes(task2)); + }, + 'clear completed'($) { + const app = $hyoo_todomvc.make({ $ }); + app.Add().value('test title'); + app.Add().done(); + const task1 = app.task_rows()[0]; + app.Add().value('test title 2'); + app.Add().done(); + const task2 = app.task_rows()[1]; + task2.Complete().click(); + $mol_assert_ok(app.task_rows().includes(task1)); + $mol_assert_ok(app.task_rows().includes(task2)); + app.Sweep().click(); + $mol_assert_ok(app.task_rows().includes(task1)); + $mol_assert_not(app.task_rows().includes(task2)); + }, + }); + })($$ = $_1.$$ || ($_1.$$ = {})); +})($ || ($ = {})); +//hyoo/todomvc/todomvc.test.ts + +//# sourceMappingURL=web.test.js.map diff --git a/examples/mol/web.test.js.map b/examples/mol/web.test.js.map new file mode 100644 index 0000000000..ff233f8d48 --- /dev/null +++ b/examples/mol/web.test.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../../mol/test/mol/test/test.test.ts","../../../mol/test/mol/test/test.web.test.ts","../../../mol/type/assert/assert.test.ts","../../../mol/type/assert/assert.ts","../../../mol/type/equals/equals.test.ts","../../../mol/type/equals/equals.ts","../../../mol/type/partial/deep/deep.test.ts","../../../mol/type/partial/deep/deep.ts","../../../mol/jsx/mol/jsx/jsx.test.tsx","../../../mol/jsx/mol/jsx/jsx.ts","../../../mol/compare/deep/mol/compare/deep/deep.test.tsx","../../../mol/dom/serialize/mol/dom/serialize/serialize.ts","../../../mol/assert/mol/assert/assert.test.ts","../../../mol/assert/mol/assert/assert.ts","../../../mol/delegate/mol/delegate/delegate.test.ts","../../../mol/type/writable/writable.test.ts","../../../mol/after/mock/mol/after/mock/mock.test.ts","../../../mol/log3/mol/log3/log3.ts","../../../mol/type/keys/extract/extract.test.ts","../../../mol/log3/mol/log3/log3.test.ts","../../../mol/log3/mol/log3/log3.web.ts","../../../mol/after/tick/mol/after/tick/tick.test.ts","../../../mol/promise/mol/promise/promise.ts","../../../mol/after/timeout/mol/after/timeout/timeout.test.ts","../../../mol/wire/sync/mol/wire/sync/sync.ts","../../../mol/wait/timeout/mol/wait/timeout/timeout.ts","../../../mol/wire/async/mol/wire/async/async.test.ts","../../../mol/wire/pub/sub/mol/wire/pub/sub/sub.test.ts","../../../mol/after/frame/mol/after/frame/frame.test.ts","../../../mol/wire/fiber/mol/wire/fiber/fiber.test.ts","../../../mol/wire/mem/mol/wire/mem/mem.test.ts","../../../mol/wire/probe/mol/wire/probe/probe.test.ts","../../../mol/object/mol/object/object.test.ts","../../../mol/maybe/mol/maybe/maybe.test.ts","../../../mol/wrapper/mol/wrapper/wrapper.test.ts","../../../mol/memo/mol/memo/memo.test.ts","../../../mol/wire/log/mol/wire/log/log.ts","../../../mol/key/mol/key/key.test.tsx","../../../mol/wire/atom/mol/wire/atom/atom.test.ts","../../../mol/const/mol/const/const.test.ts","../../../mol/func/name/mol/func/name/name.test.ts","../../../mol/view/view/mol/view/view/view.test.ts","../../../mol/view/tree/test/-view.tree/mol/view/tree/test/-view.tree/attributes.test.view.tree.ts","../../../mol/view/tree/test/-view.tree/mol/view/tree/test/-view.tree/binding.test.view.tree.ts","../../../mol/view/tree/test/-view.tree/mol/view/tree/test/-view.tree/binding_right.test.view.tree.ts","../../../mol/view/tree/test/-view.tree/mol/view/tree/test/-view.tree/simple.test.view.tree.ts","../../../mol/view/tree/test/-view.tree/mol/view/tree/test/-view.tree/subcomponent.test.view.tree.ts","../../../mol/view/tree/test/mol/view/tree/test/tree.test.ts","../../../mol/tree/mol/tree/tree.test.ts","../../../mol/tree/mol/tree/tree.ts","../../../mol/state/local/mol/state/local/local.mock.test.ts","../../../mol/state/local/mol/state/local/local.test.ts","../../../mol/charset/decode/mol/charset/decode/decode.test.ts","../../../mol/charset/decode/mol/charset/decode/decode.ts","../../../node/node.ts","../../../node/node/node.web.ts","../../../mol/charset/encode/mol/charset/encode/encode.test.ts","../../../mol/charset/encode/mol/charset/encode/encode.ts","../../../mol/file/mol/file/file.ts","../../../mol/action/mol/action/action.ts","../../../mol/dom/parse/mol/dom/parse/parse.ts","../../../mol/fetch/mol/fetch/fetch.ts","../../../mol/file/mol/file/file.web.ts","../../../mol/locale/mol/locale/locale.ts","../../../mol/view/tree/mol/view/tree/tree.ts","../../../mol/button/mol/button/button.test.ts","../../../mol/type/result/result.test.ts","../../../mol/style/sheet/mol/style/sheet/sheet.test.ts","../../../mol/state/arg/mol/state/arg/arg.web.test.ts","../hyoo/todomvc/todomvc.test.ts"],"names":[],"mappings":";;;AAAA,IAAU,CAAC,CA8GV;AA9GD,WAAU,GAAC;IAEV,SAAgB,SAAS,CAAE,GAAiE;QAE3F,KAAK,IAAI,IAAI,IAAI,GAAG,EAAG;YAEtB,MAAM,IAAI,GAAG,GAAG,CAAE,IAAI,CAAE,CAAA;YACxB,MAAM,IAAI,GAAG,CAAE,OAAO,IAAI,KAAK,QAAQ,CAAE,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAE,EAAE,EAAG,IAAI,CAAe,CAAC,CAAC,CAAC,IAAI,CAAA;YAEzF,IAAA,aAAa,CAAC,IAAI,CAAE,IAAI,CAAE,CAAA;SAC1B;QAED,kBAAkB,EAAE,CAAA;IACrB,CAAC;IAXe,aAAS,YAWxB,CAAA;IAEU,mBAAe,GAAG,EAAqC,CAAA;IAErD,iBAAa,GAAG,EAAoC,CAAA;IAE1D,KAAK,UAAU,aAAa;QAElC,KAAK,IAAI,IAAI,IAAI,IAAA,aAAa,EAAG;YAEhC,IAAI,OAAO,GAAG,MAAM,CAAC,MAAM,CAAE,EAAE,CAAE,CAAA;YACjC,KAAK,IAAI,IAAI,IAAI,IAAA,eAAe;gBAAG,MAAM,IAAI,CAAE,OAAO,CAAE,CAAA;YAExD,MAAM,GAAG,GAAG,IAAI,CAAE,OAAO,CAAE,CAAA;YAC3B,IAAI,GAAG,YAAY,OAAO,EAAG;gBAC5B,MAAM,IAAI,OAAO,CAAE,CAAE,IAAI,EAAE,IAAI,EAAE,EAAE;oBAClC,GAAG,CAAC,IAAI,CAAE,IAAI,EAAE,IAAI,CAAE,CAAA;oBACtB,UAAU,CAAE,GAAE,EAAE,CAAC,IAAI,CAAE,IAAI,KAAK,CAAE,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAE,CAAE,EAAE,IAAI,CAAE,CAAA;gBAC3E,CAAC,CAAE,CAAA;aACH;SAED;QAED,EAAE,CAAC,cAAc,CAAC;YACjB,KAAK,EAAE,WAAW;YAClB,OAAO,EAAE,kBAAkB;YAC3B,KAAK,EAAE,IAAA,aAAa,CAAC,MAAM;SAC3B,CAAC,CAAA;IAEH,CAAC;IAvBqB,iBAAa,gBAuBlC,CAAA;IAED,IAAI,SAAS,GAAG,KAAK,CAAA;IACrB,SAAgB,kBAAkB;QAEjC,IAAI,SAAS;YAAG,OAAM;QACtB,SAAS,GAAG,IAAI,CAAA;QAEhB,UAAU,CAAE,KAAK,IAAG,EAAE;YAErB,SAAS,GAAG,KAAK,CAAA;YAEjB,IAAI;gBACH,MAAM,aAAa,EAAE,CAAA;aACrB;oBAAS;gBACT,EAAE,CAAC,kBAAkB,EAAE,CAAA;aACvB;QAEF,CAAC,EAAG,CAAC,CAAE,CAAA;IAER,CAAC;IAjBe,sBAAkB,qBAiBjC,CAAA;IAED,IAAA,eAAe,CAAC,IAAI,CAAE,OAAO,CAAC,EAAE;QAC/B,IAAI,IAAI,GAAG,CAAC,CAAA;QAEZ,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,CAAE,IAAI,CAAE,CAAA;QACpC,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,GAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAE,IAAI,EAAE,CAAE,CAAA;QAE7C,MAAM,SAAS,GAAG,CAAE,gBAAgB,EAAG,OAAO,CAAE,CAAA;QAEhD,KAAK,IAAI,GAAG,IAAI,SAAS,EAAG;YAC3B,OAAO,CAAE,GAAG,CAAE,GAAG,IAAI,KAAK,CAAE,cAAW,CAAC,EAAG;gBAC1C,GAAG;oBACF,gBAAgB,CAAE,IAAI,KAAK,CAAE,GAAI,GAAI,wBAAwB,CAAE,CAAE,CAAA;gBAClE,CAAC;gBACD,KAAK;oBACJ,gBAAgB,CAAE,IAAI,KAAK,CAAE,GAAI,GAAI,wBAAwB,CAAE,CAAE,CAAA;gBAClE,CAAC;aACD,CAAE,CAAA;SACH;IAEF,CAAC,CAAE,CAAA;IAEH,SAAS,CAAC;QAET,oBAAoB,CAAE,CAAC;YACtB,OAAO,CAAC,MAAM,CAAE,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAE,CAAA;YACvC,OAAO,CAAC,MAAM,CAAE,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE,CAAA;QAClD,CAAC;QAED,0BAA0B,CAAE,CAAC;YAC5B,IAAI;gBACH,OAAO,CAAC,MAAM,CAAE,KAAK,IAAI,CAAC,CAAC,cAAc,CAAE,CAAA;aAC3C;YAAC,OAAO,KAAU,EAAG;gBACrB,OAAO,CAAC,MAAM,CAAE,KAAK,CAAC,OAAO,KAAK,sCAAsC,CAAE,CAAA;aAC1E;QACF,CAAC;QAED,iBAAiB,CAAE,CAAC;YACnB,IAAI;gBACH,OAAO,CAAC,MAAM,CAAE,KAAK,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAE,CAAA;aAClC;YAAC,OAAO,KAAU,EAAG;gBACrB,OAAO,CAAC,MAAM,CAAE,KAAK,CAAC,OAAO,KAAK,6BAA6B,CAAE,CAAA;aACjE;QACF,CAAC;KAED,CAAC,CAAA;AAEH,CAAC,EA9GS,CAAC,KAAD,CAAC,QA8GV;;;;AC9GD,IAAU,CAAC,CAKV;AALD,WAAU,CAAC;IAEV,SAAgB,kBAAkB;IAClC,CAAC;IADe,oBAAkB,qBACjC,CAAA;AAEF,CAAC,EALS,CAAC,KAAD,CAAC,QAKV;;;ACLD;AACA;AACA;ACFA;AACA;AACA;ACFA;AACA;AACA;ACFA;AACA;AACA;ACFA;AACA;AACA;ACFA;AACA;AACA;;ACDA,IAAU,CAAC,CAgHV;AAhHD,WAAU,CAAC;IAEV,SAAS,CAAC;QAET,gBAAgB;YACf,iBAAiB,CAAE,CAAC,qBAAM,CAAC,CAAC,SAAS,EAAG,aAAa,CAAE,CAAA;QACxD,CAAC;QAED,qBAAqB;YAEpB,MAAM,GAAG,GAAG,oBAAO,KAAK,EAAC,KAAK,GAAuB,CAAA;YAErD,iBAAiB,CAAE,GAAG,CAAC,SAAS,EAAE,qBAAqB,CAAE,CAAA;YACzD,iBAAiB,CAAE,GAAG,CAAC,KAAK,EAAE,KAAK,CAAE,CAAA;QAEtC,CAAC;QAED,gBAAgB;YAEf,MAAM,GAAG,GAAG,kBAAK,KAAK,EAAG,SAAS,GAAK,CAAA;YAEvC,iBAAiB,CAAE,GAAG,CAAC,SAAS,EAAE,6BAA6B,CAAE,CAAA;QAElE,CAAC;QAED,eAAe;YAEd,MAAM,GAAG,GAAG,kBAAK,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAI,CAAA;YAE5C,iBAAiB,CAAE,GAAG,CAAC,SAAS,EAAE,iCAAiC,CAAE,CAAA;QAEtE,CAAC;QAED,gBAAgB;YAEf,MAAM,GAAG,GAAG,kBAAK,OAAO,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,GAAI,CAAA;YAE5C,iBAAiB,CAAE,GAAG,CAAC,SAAS,EAAE,4BAA4B,CAAE,CAAA;QAEjE,CAAC;QAED,mBAAmB;YAElB,MAAM,GAAG,GAAG,kBAAK,IAAI,EAAC,IAAI,EAAC,MAAM,SAAG,CAAA;YAEpC,iBAAiB,CAAE,GAAG,CAAC,SAAS,EAAE,iCAAiC,CAAE,CAAA;QAEtE,CAAC;QAED,oBAAoB;YAEnB,MAAM,GAAG,GACR;;gBAEC,iCAAsB;oBAEjB,CAAA;YAEP,iBAAiB,CAAE,GAAG,CAAC,SAAS,EAAE,yCAAyC,CAAE,CAAA;QAE9E,CAAC;QAED,uBAAuB;YAEtB,MAAM,MAAM,GAAG,CACd,KAAuB,EACvB,MAAmB,EAClB,EAAE;gBACH,OAAO,qBAAQ,KAAK,EAAG,KAAK,CAAC,IAAI,IAAM,MAAM,EAAE,CAAW,CAAA;YAC3D,CAAC,CAAA;YAED,MAAM,GAAG,GAAG,SAAC,MAAM,IAAC,EAAE,EAAC,MAAM,EAAC,IAAI,EAAC,UAAU,IAAG,GAAE,EAAE,CAAC,MAAM,CAAW,CAAA;YAEtE,iBAAiB,CAAE,GAAG,CAAC,SAAS,EAAE,kDAAkD,CAAE,CAAA;QAEvF,CAAC;QAED,wBAAwB;YAEvB,MAAM,GAAG,GAAG,GAAE,EAAE;gBACf,OAAO;oBACN,SAAC,GAAG,IAAC,EAAE,EAAC,MAAM;wBACb,kBAAK,EAAE,EAAC,OAAO,GAAG,CACb,CACD,CAAA;YACP,CAAC,CAAA;YAED,MAAM,GAAG,GAAG,CAAE,KAAS,EAAE,IAAa,EAAE,EAAE;gBACzC,OAAO,uBAAQ,IAAI,CAAS,CAAA;YAC7B,CAAC,CAAA;YAED,MAAM,GAAG,GAAG,SAAC,GAAG,IAAC,EAAE,EAAC,MAAM,GAAG,CAAA;YAE7B,iBAAiB,CAAE,GAAG,CAAC,SAAS,EAAE,sEAAsE,CAAE,CAAA;QAE3G,CAAC;QAED,wBAAwB;YAEvB,MAAM,GAAG,GAAG,GAAE,EAAE;gBACf,OAAO;oBACN,mBAAM,EAAE,EAAC,MAAM,GAAG;oBAClB,mBAAM,EAAE,EAAC,MAAM,GAAG,CACb,CAAA;YACP,CAAC,CAAA;YAED,gBAAgB,CAAE,GAAE,EAAE,CAAC,SAAC,GAAG,IAAC,EAAE,EAAC,MAAM,GAAG,EAAE,oCAAoC,CAAE,CAAA;QAEjF,CAAC;KAED,CAAC,CAAA;AAEH,CAAC,EAhHS,CAAC,KAAD,CAAC,QAgHV;;;;ACjHD,IAAU,CAAC,CAoKV;AApKD,WAAU,CAAC;IAEC,iBAAe,GAAG,EAAE,CAAA;IAEpB,iBAAe,GAAG,IAA4B,CAAA;IAE9C,mBAAiB,GAAgD;QAC3E,cAAc,EAAG,GAAE,EAAE,CAAC,IAAI;QAC1B,eAAe,EAAG,CAAE,KAAa,EAAE,IAAa,EAAE,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC,eAAe,CAAE,KAAK,EAAE,IAAI,CAAS;QACpH,sBAAsB,EAAG,GAAE,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC,sBAAsB,EAAE;KAChF,CAAA;IAEY,eAAa,GAAG,EAAE,CAAA;IAE/B,SAAgB,QAAQ,CAIvB,IAC6D,EAC7D,KAAa,EACb,GAAI,UAAqB;QAGzB,MAAM,EAAE,GAAG,KAAK,IAAI,KAAK,CAAC,EAAE,IAAI,EAAE,CAAA;QAElC,IAAI,IAAI,IAAI,EAAA,eAAe,EAAG;YAC7B,IAAI,EAAA,eAAe,CAAC,GAAG,CAAE,EAAE,CAAE,EAAG;gBAC/B,SAAS,CAAE,IAAI,KAAK,CAAE,+BAAgC,IAAI,CAAC,SAAS,CAAE,EAAE,CAAG,EAAE,CAAE,CAAE,CAAA;aACjF;iBAAM;gBACN,EAAA,eAAe,CAAC,GAAG,CAAE,EAAE,CAAE,CAAA;aACzB;SACD;QAED,MAAM,IAAI,GAAG,EAAA,eAAe,GAAG,EAAE,CAAA;QAEjC,IAAI,IAAI,GAAsC,IAAI,CAAC,CAAC,CAAC,EAAA,iBAAiB,CAAC,cAAc,CAAE,IAAI,CAAE,CAAC,CAAC,CAAC,IAAI,CAAA;QAEpG,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAG;YAE9B,IAAI,WAAW,IAAI,IAAI,EAAG;gBAEzB,MAAM,IAAI,GAAG,IAAI,IAAI,IAAI,CAAE,IAAW,CAAE,IAAI,IAAM,IAAa,CAAA;gBAE/D,MAAM,CAAC,MAAM,CAAE,IAAI,EAAG,KAAK,CAAE,CAAA;gBAC7B,IAAI,CAAE,MAAM,CAAC,WAAW,CAAE,GAAG,IAAI,CAAA;gBAEjC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;gBAE5B,IAAI,CAAC,IAAI,CAAC,aAAa;oBAAG,IAAI,CAAC,aAAa,GAAG,EAAA,iBAAiB,CAAA;gBAEhE,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAA;gBAErB,IAAK,CAAE,IAAW,CAAE,GAAG,IAAI,CAAA;gBAE3B,OAAO,IAAK,CAAA;aAEZ;iBAAM;gBAEN,MAAM,MAAM,GAAG,EAAA,eAAe,CAAA;gBAC9B,MAAM,MAAM,GAAG,EAAA,eAAe,CAAA;gBAE9B,IAAI;oBAEH,EAAA,eAAe,GAAG,IAAI,CAAA;oBACtB,EAAA,eAAe,GAAG,IAAI,GAAG,CAAA;oBAEzB,OAAS,IAAa,CAAE,KAAK,EAAG,GAAI,UAAU,CAAE,CAAA;iBAEhD;wBAAS;oBAET,EAAA,eAAe,GAAG,MAAM,CAAA;oBACxB,EAAA,eAAe,GAAG,MAAM,CAAA;iBAExB;aAED;SAED;QAED,IAAI,CAAC,IAAI,EAAG;YACX,IAAI,GAAG,IAAI;gBACV,CAAC,CAAC,EAAA,iBAAiB,CAAC,eAAe,CAAE,KAAK,EAAE,KAAK,IAAI,8BAA8B,EAAE,IAAI,CAAE;gBAC3F,CAAC,CAAC,EAAA,iBAAiB,CAAC,sBAAsB,EAAE,CAAA;SAC7C;QAED,wBAAwB,CAAE,IAAI,EAAK,EAA2B,CAAC,MAAM,CAAE,GAAI,UAAU,CAAE,CAAE,CAAA;QACzF,IAAI,CAAC,IAAI;YAAG,OAAO,IAAI,CAAA;QAEvB,KAAK,MAAM,GAAG,IAAI,KAAK,EAAG;YAEzB,IAAI,OAAO,KAAK,CAAE,GAAG,CAAE,KAAK,QAAQ,EAAG;gBAEtC,CAAC;gBAAE,IAAiB,CAAC,YAAY,CAAE,GAAG,EAAG,KAAK,CAAE,GAAU,CAAE,CAAE,CAAA;aAE9D;iBAAM,IACN,KAAK,CAAE,GAAG,CAAE;gBACZ,OAAO,KAAK,CAAE,GAAG,CAAE,KAAK,QAAQ;gBAChC,OAAO,CAAC,cAAc,CAAE,KAAK,CAAE,GAAG,CAAS,CAAE,KAAK,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC,EAC3E;gBAED,IAAI,OAAO,IAAI,CAAE,GAAU,CAAE,KAAK,QAAQ,EAAG;oBAC5C,MAAM,CAAC,MAAM,CAAI,IAAa,CAAE,GAAG,CAAE,EAAG,KAAK,CAAE,GAAG,CAAE,CAAE,CAAA;oBACtD,SAAQ;iBACR;aAED;iBAAM;gBAEN,IAAI,CAAE,GAAU,CAAE,GAAG,KAAK,CAAE,GAAG,CAAE,CAAA;aAEjC;SAED;QAED,IAAI,IAAI;YAAK,IAAiB,CAAC,EAAE,GAAG,IAAI,CAAA;QAExC,OAAO,IAAI,CAAA;IAEZ,CAAC;IAxGe,UAAQ,WAwGvB,CAAA;AA8CF,CAAC,EApKS,CAAC,KAAD,CAAC,QAoKV;;;;ACnKD,IAAU,CAAC,CAmIV;AAnID,WAAU,CAAC;IAEV,SAAS,CAAC;QAET,oBAAoB;YAEnB,cAAc,CAAE,iBAAiB,CAAE,IAAI,EAAG,IAAI,CAAE,CAAE,CAAA;YAClD,cAAc,CAAE,iBAAiB,CAAE,SAAS,EAAG,SAAS,CAAE,CAAE,CAAA;YAE5D,eAAe,CAAE,iBAAiB,CAAE,SAAS,EAAG,IAAI,CAAE,CAAE,CAAA;YACxD,eAAe,CAAE,iBAAiB,CAAE,EAAE,EAAG,IAAI,CAAE,CAAE,CAAA;QAElD,CAAC;QAED,QAAQ;YAEP,cAAc,CAAE,iBAAiB,CAAE,CAAC,EAAG,CAAC,CAAE,CAAE,CAAA;YAC5C,cAAc,CAAE,iBAAiB,CAAE,MAAM,CAAC,GAAG,EAAG,MAAM,CAAC,GAAG,CAAE,CAAE,CAAA;YAC9D,eAAe,CAAE,iBAAiB,CAAE,CAAC,EAAG,CAAC,CAAE,CAAE,CAAA;YAE7C,cAAc,CAAE,iBAAiB,CAAE,MAAM,CAAE,CAAC,CAAE,EAAG,MAAM,CAAE,CAAC,CAAE,CAAE,CAAE,CAAA;YAChE,eAAe,CAAE,iBAAiB,CAAE,MAAM,CAAE,CAAC,CAAE,EAAG,MAAM,CAAE,CAAC,CAAE,CAAE,CAAE,CAAA;QAElE,CAAC;QAED,MAAM;YACL,cAAc,CAAE,iBAAiB,CAAE,EAAE,EAAG,EAAE,CAAE,CAAE,CAAA;YAC9C,eAAe,CAAE,iBAAiB,CAAE,EAAE,CAAC,EAAG,CAAC,EAAE,EAAG,EAAE,CAAC,EAAG,CAAC,EAAE,CAAE,CAAE,CAAA;YAC7D,eAAe,CAAE,iBAAiB,CAAE,EAAE,CAAC,EAAG,CAAC,EAAE,EAAG,EAAE,CAAC,EAAG,CAAC,EAAE,CAAE,CAAE,CAAA;YAC7D,eAAe,CAAE,iBAAiB,CAAE,EAAE,EAAG,EAAE,CAAC,EAAG,SAAS,EAAE,CAAE,CAAE,CAAA;YAC9D,cAAc,CAAE,iBAAiB,CAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAE,CAAE,CAAA;YACtE,cAAc,CAAE,iBAAiB,CAAE,EAAE,CAAC,EAAG,EAAE,CAAC,EAAG,CAAC,EAAE,EAAE,EAAG,EAAE,CAAC,EAAG,EAAE,CAAC,EAAG,CAAC,EAAE,EAAE,CAAE,CAAE,CAAA;QAC7E,CAAC;QAED,OAAO;YACN,cAAc,CAAE,iBAAiB,CAAE,EAAE,EAAG,EAAE,CAAE,CAAE,CAAA;YAC9C,cAAc,CAAE,iBAAiB,CAAE,CAAE,CAAC,EAAG,CAAC,CAAC,CAAC,CAAE,EAAG,CAAE,CAAC,EAAG,CAAC,CAAC,CAAC,CAAE,CAAE,CAAE,CAAA;YAChE,eAAe,CAAE,iBAAiB,CAAE,CAAE,CAAC,EAAG,CAAC,CAAE,EAAG,CAAE,CAAC,EAAG,CAAC,CAAE,CAAE,CAAE,CAAA;YAC7D,eAAe,CAAE,iBAAiB,CAAE,CAAE,CAAC,EAAG,CAAC,EAAI,EAAG,CAAE,CAAC,EAAG,CAAC,EAAG,SAAS,CAAE,CAAE,CAAE,CAAA;QAC5E,CAAC;QAED,wBAAwB;YAEvB,MAAM,KAAM,SAAQ,MAAM;aAAG;YAC7B,eAAe,CAAE,iBAAiB,CAAE,IAAI,KAAK,EAAG,IAAI,KAAK,CAAE,CAAE,CAAA;YAE7D,eAAe,CAAE,iBAAiB,CAAE,GAAE,EAAE,CAAC,CAAC,EAAG,GAAE,EAAE,CAAA,CAAC,CAAE,CAAE,CAAA;YACtD,eAAe,CAAE,iBAAiB,CAAE,IAAI,UAAU,CAAE,YAAY,CAAE,EAAG,IAAI,UAAU,CAAE,YAAY,CAAE,CAAE,CAAE,CAAA;QAExG,CAAC;QAED,kCAAkC;YAEjC,MAAM,CAAC,GAAG,EAAE,GAAG,EAAG,EAAE,EAAE,CAAA;YACtB,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;YAEb,MAAM,CAAC,GAAG,EAAE,GAAG,EAAG,EAAE,EAAE,CAAA;YACtB,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;YAEb,cAAc,CAAE,iBAAiB,CAAE,CAAC,EAAG,CAAC,CAAE,CAAE,CAAA;QAE7C,CAAC;QAED,MAAM;YACL,cAAc,CAAE,iBAAiB,CAAE,IAAI,IAAI,CAAE,KAAK,CAAE,EAAG,IAAI,IAAI,CAAE,KAAK,CAAE,CAAE,CAAE,CAAA;YAC5E,eAAe,CAAE,iBAAiB,CAAE,IAAI,IAAI,CAAE,KAAK,CAAE,EAAG,IAAI,IAAI,CAAE,KAAK,CAAE,CAAE,CAAE,CAAA;QAC9E,CAAC;QAED,QAAQ;YACP,cAAc,CAAE,iBAAiB,CAAE,SAAS,EAAG,SAAS,CAAE,CAAE,CAAA;YAC5D,eAAe,CAAE,iBAAiB,CAAE,SAAS,EAAG,SAAS,CAAE,CAAE,CAAA;YAC7D,eAAe,CAAE,iBAAiB,CAAE,SAAS,EAAG,QAAQ,CAAE,CAAE,CAAA;QAC7D,CAAC;QAED,OAAO;YAEN,eAAe,CAAE,iBAAiB,CAAE,IAAI,KAAK,CAAE,KAAK,CAAE,EAAG,IAAI,KAAK,CAAE,KAAK,CAAE,CAAE,CAAE,CAAA;YAE/E,MAAM,IAAI,GAAG,CAAE,OAAe,EAAE,EAAE,CAAC,IAAI,KAAK,CAAE,OAAO,CAAE,CAAA;YAEvD,cAAc,CAAE,iBAAiB,CAChC,GAAI,CAAE,KAAK,EAAG,KAAK,CAAE,CAAC,GAAG,CAAE,GAAG,CAAC,EAAE,CAAC,IAAI,KAAK,CAAE,GAAG,CAAE,CAAsB,CACxE,CAAE,CAAA;YAEH,eAAe,CAAE,iBAAiB,CACjC,GAAI,CAAE,KAAK,EAAG,KAAK,CAAE,CAAC,GAAG,CAAE,GAAG,CAAC,EAAE,CAAC,IAAI,KAAK,CAAE,GAAG,CAAE,CAAsB,CACxE,CAAE,CAAA;QAEJ,CAAC;QAED,KAAK;YACJ,cAAc,CAAE,iBAAiB,CAAE,IAAI,GAAG,EAAG,IAAI,GAAG,CAAE,CAAE,CAAA;YACxD,cAAc,CAAE,iBAAiB,CAAE,IAAI,GAAG,CAAC,CAAE,CAAE,CAAC,EAAG,CAAC,CAAC,CAAC,CAAE,CAAE,CAAC,EAAG,IAAI,GAAG,CAAC,CAAE,CAAE,CAAC,EAAG,CAAC,CAAC,CAAC,CAAE,CAAE,CAAC,CAAE,CAAE,CAAA;YAC1F,eAAe,CAAE,iBAAiB,CAAE,IAAI,GAAG,CAAC,CAAE,CAAE,CAAC,EAAG,CAAC,CAAE,CAAE,CAAC,EAAG,IAAI,GAAG,CAAC,CAAE,CAAE,CAAC,EAAG,CAAC,CAAE,CAAE,CAAC,CAAE,CAAE,CAAA;YACvF,eAAe,CAAE,iBAAiB,CAAE,IAAI,GAAG,CAAC,CAAE,CAAE,CAAC,CAAC,CAAC,EAAG,CAAC,CAAE,CAAE,CAAC,EAAG,IAAI,GAAG,CAAC,CAAE,CAAE,CAAC,CAAC,CAAC,EAAG,CAAC,CAAE,CAAE,CAAC,CAAE,CAAE,CAAA;QAC5F,CAAC;QAED,KAAK;YACJ,cAAc,CAAE,iBAAiB,CAAE,IAAI,GAAG,EAAG,IAAI,GAAG,CAAE,CAAE,CAAA;YACxD,cAAc,CAAE,iBAAiB,CAAE,IAAI,GAAG,CAAC,CAAE,CAAC,EAAG,CAAC,CAAC,CAAC,CAAE,CAAC,EAAG,IAAI,GAAG,CAAC,CAAE,CAAC,EAAG,CAAC,CAAC,CAAC,CAAE,CAAC,CAAE,CAAE,CAAA;YAClF,eAAe,CAAE,iBAAiB,CAAE,IAAI,GAAG,CAAC,CAAE,CAAC,CAAE,CAAC,EAAG,IAAI,GAAG,CAAC,CAAE,CAAC,CAAE,CAAC,CAAE,CAAE,CAAA;QACxE,CAAC;QAED,YAAY;YACX,cAAc,CAAE,iBAAiB,CAAE,IAAI,UAAU,EAAG,IAAI,UAAU,CAAE,CAAE,CAAA;YACtE,cAAc,CAAE,iBAAiB,CAAE,IAAI,UAAU,CAAC,CAAE,CAAC,CAAE,CAAC,EAAG,IAAI,UAAU,CAAC,CAAE,CAAC,CAAE,CAAC,CAAE,CAAE,CAAA;YACpF,eAAe,CAAE,iBAAiB,CAAE,IAAI,UAAU,CAAC,CAAE,CAAC,CAAE,CAAC,EAAG,IAAI,UAAU,CAAC,CAAE,CAAC,CAAE,CAAC,CAAE,CAAE,CAAA;QACtF,CAAC;QAED,mBAAmB;YAElB,MAAM,IAAI;gBAGC;gBACA;gBAFV,YACU,IAAY,EACZ,OAAO,IAAI,CAAC,MAAM,EAAE;oBADpB,SAAI,GAAJ,IAAI,CAAQ;oBACZ,SAAI,GAAJ,IAAI,CAAgB;gBAC3B,CAAC;gBAEJ,CAAE,MAAM,CAAC,WAAW,CAAE,CAAE,IAAqC;oBAC5D,OAAO,IAAI,CAAC,IAAI,CAAA;gBACjB,CAAC;aAED;YAED,cAAc,CAAE,iBAAiB,CAAE,IAAI,IAAI,CAAE,KAAK,CAAE,EAAE,IAAI,IAAI,CAAE,KAAK,CAAE,CAAE,CAAE,CAAA;YAC3E,eAAe,CAAE,iBAAiB,CAAE,IAAI,IAAI,CAAE,KAAK,CAAE,EAAE,IAAI,IAAI,CAAE,MAAM,CAAE,CAAE,CAAE,CAAA;QAE9E,CAAC;KAED,CAAC,CAAA;AAEH,CAAC,EAnIS,CAAC,KAAD,CAAC,QAmIV;;;;ACpID,IAAU,CAAC,CASV;AATD,WAAU,CAAC;IAEV,SAAgB,kBAAkB,CACjC,IAAU;QAEV,MAAM,UAAU,GAAG,IAAI,gBAAgB,CAAC,aAAa,CAAA;QACrD,OAAO,UAAU,CAAC,iBAAiB,CAAE,IAAI,CAAE,CAAA;IAC5C,CAAC;IALe,oBAAkB,qBAKjC,CAAA;AAEF,CAAC,EATS,CAAC,KAAD,CAAC,QASV;;;;ACTD,IAAU,CAAC,CAoCV;AApCD,WAAU,CAAC;IACV,SAAS,CAAE;QAEV,eAAe;YACd,eAAe,CAAE,CAAC,CAAE,CAAA;QACrB,CAAC;QAED,cAAc;YACb,cAAc,CAAE,CAAC,CAAE,CAAA;QACpB,CAAC;QAED,mBAAmB;YAClB,iBAAiB,CAAE,CAAC,EAAG,CAAC,CAAE,CAAA;QAC3B,CAAC;QAED,qBAAqB;YACpB,iBAAiB,CAAE,CAAC,EAAG,CAAC,EAAG,CAAC,CAAE,CAAA;QAC/B,CAAC;QAED,oBAAoB;YACnB,kBAAkB,CAAE,CAAE,CAAC,CAAE,EAAG,CAAE,CAAC,CAAE,CAAE,CAAA;QACpC,CAAC;QAED,sBAAsB;YACrB,kBAAkB,CAAE,CAAE,CAAC,CAAE,EAAG,CAAE,CAAC,CAAE,EAAG,CAAE,CAAC,CAAE,CAAE,CAAA;QAC5C,CAAC;QAED,mBAAmB;YAClB,gBAAgB,CAAE,CAAE,CAAC,CAAE,EAAG,CAAE,CAAC,CAAE,CAAE,CAAA;QAClC,CAAC;QAED,qBAAqB;YACpB,gBAAgB,CAAE,CAAE,CAAC,CAAE,EAAG,CAAE,CAAC,CAAE,EAAG,CAAE,CAAC,CAAE,CAAE,CAAA;QAC1C,CAAC;KAED,CAAE,CAAA;AACJ,CAAC,EApCS,CAAC,KAAD,CAAC,QAoCV;;;;ACpCD,IAAU,CAAC,CA8FV;AA9FD,WAAU,CAAC;IAEV,SAAgB,cAAc,CAAE,KAAW;QAC1C,IAAI,KAAK;YAAG,OAAM;QAClB,SAAS,CAAE,IAAI,KAAK,CAAE,GAAG,KAAK,SAAS,CAAE,CAAE,CAAA;IAC5C,CAAC;IAHe,gBAAc,iBAG7B,CAAA;IAED,SAAgB,eAAe,CAAE,KAAW;QAC3C,IAAI,CAAC,KAAK;YAAG,OAAM;QACnB,SAAS,CAAE,IAAI,KAAK,CAAE,GAAG,KAAK,UAAU,CAAE,CAAE,CAAA;IAC7C,CAAC;IAHe,iBAAe,kBAG9B,CAAA;IAED,SAAgB,gBAAgB,CAAE,OAAkB,EAAG,UAAiB;QAEvE,MAAM,IAAI,GAAG,CAAC,CAAC,SAAS,CAAA;QAExB,IAAI;YACH,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,gBAAgB,CAAA;YAEhC,OAAO,EAAE,CAAA;SAET;QAAC,OAAO,KAAU,EAAG;YAErB,IAAI,CAAC,UAAU;gBAAG,OAAO,KAAK,CAAA;YAE9B,CAAC,CAAC,SAAS,GAAG,IAAI,CAAA;YAElB,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAG;gBACpC,iBAAiB,CAAE,KAAK,CAAC,OAAO,EAAE,UAAU,CAAE,CAAA;aAC9C;iBAAM;gBACN,cAAc,CAAE,KAAK,YAAY,UAAU,CAAE,CAAA;aAC7C;YAED,OAAO,KAAK,CAAA;SAEZ;gBAAS;YACT,CAAC,CAAC,SAAS,GAAG,IAAI,CAAA;SAClB;QAED,SAAS,CAAE,IAAI,KAAK,CAAE,YAAY,CAAE,CAAE,CAAA;IACvC,CAAC;IA5Be,kBAAgB,mBA4B/B,CAAA;IAED,SAAgB,iBAAiB,CAAW,GAAI,IAAmC;QAClF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAG,EAAE,CAAC,EAAG;YACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAG,EAAE,CAAC,EAAG;gBACxC,IAAI,CAAC,KAAK,CAAC;oBAAG,SAAQ;gBACtB,IAAI,MAAM,CAAC,KAAK,CAAE,IAAI,CAAC,CAAC,CAAkB,CAAE,IAAI,MAAM,CAAC,KAAK,CAAE,IAAI,CAAC,CAAC,CAAkB,CAAE;oBAAG,SAAQ;gBACnG,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;oBAAG,SAAS,CAAE,IAAI,KAAK,CAAE,cAAc,CAAC,GAAC,CAAC,IAAI,CAAC,GAAC,CAAC,MAAO,IAAI,CAAC,CAAC,CAAE,KAAM,IAAI,CAAC,CAAC,CAAE,EAAE,CAAE,CAAE,CAAA;aAC3G;SACD;IACF,CAAC;IARe,mBAAiB,oBAQhC,CAAA;IAED,SAAgB,kBAAkB,CAAE,GAAI,IAA6B;QACpE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAG,EAAE,CAAC,EAAG;YACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAG,EAAE,CAAC,EAAG;gBACxC,IAAI,CAAC,KAAK,CAAC;oBAAG,SAAQ;gBACtB,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAE,MAAM,CAAC,KAAK,CAAE,IAAI,CAAC,CAAC,CAAkB,CAAE,IAAI,MAAM,CAAC,KAAK,CAAE,IAAI,CAAC,CAAC,CAAkB,CAAE,CAAE,EAAG;oBACrH,SAAS,CAAE,IAAI,KAAK,CAAE,QAAS,CAAE,YAAa,CAAE,OAAQ,IAAI,CAAC,CAAC,CAAE,EAAE,CAAE,CAAE,CAAA;iBACtE;aACD;SACD;IACF,CAAC;IATe,oBAAkB,qBASjC,CAAA;IAED,SAAgB,gBAAgB,CAAW,IAAY,EAAE,GAAI,IAAc;QAC1E,KAAK,IAAI,CAAE,KAAK,EAAE,KAAK,CAAE,IAAI,MAAM,CAAC,OAAO,CAAE,IAAI,CAAE,EAAG;YAErD,IAAI,CAAC,iBAAiB,CAAE,KAAK,EAAG,IAAI,CAAE,EAAG;gBAExC,MAAM,KAAK,GAAG,CAAE,GAAS,EAAG,EAAE;oBAE7B,IAAI,CAAC,GAAG;wBAAG,OAAO,GAAG,CAAA;oBACrB,IAAI,OAAO,GAAG,KAAK,QAAQ;wBAAG,OAAO,GAAG,CAAA;oBACxC,IAAI,WAAW,IAAI,GAAG;wBAAG,OAAO,GAAG,CAAC,SAAS,CAAA;oBAE7C,IAAI;wBACH,OAAO,IAAI,CAAC,SAAS,CAAE,GAAG,CAAE,CAAA;qBAC5B;oBAAC,OAAO,KAAU,EAAG;wBACrB,OAAO,CAAC,KAAK,CAAE,KAAK,CAAE,CAAA;wBACtB,OAAO,GAAG,CAAA;qBACV;gBAEF,CAAC,CAAA;gBAED,OAAO,SAAS,CAAE,IAAI,KAAK,CAAE,eAAgB,CAAE,KAAK,GAAG,CAAE,MAAO,KAAK,CAAE,IAAI,CAAG,UAAW,KAAK,CAAE,KAAK,CAAG,EAAE,CAAE,CAAE,CAAA;aAE9G;SAED;IACF,CAAC;IAzBe,kBAAgB,mBAyB/B,CAAA;IAED,SAAgB,eAAe,CAAE,IAAa,EAAE,KAAc;QAC7D,iBAAiB,CAAE,kBAAkB,CAAE,IAAI,CAAE,EAAE,kBAAkB,CAAE,KAAK,CAAE,CAAE,CAAA;IAC7E,CAAC;IAFe,iBAAe,kBAE9B,CAAA;AAEF,CAAC,EA9FS,CAAC,KAAD,CAAC,QA8FV;;;;AC9FD,IAAU,CAAC,CAkHV;AAlHD,WAAU,CAAC;IACV,SAAS,CAAC;QAET,KAAK;YACJ,MAAM,KAAK,GAAG,aAAa,CAAE,EAAS,EAAG,GAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAG,GAAG,EAAE,CAAC,CAAE,CAAA;YAC/D,iBAAiB,CAAE,KAAK,CAAC,GAAG,EAAG,GAAG,CAAE,CAAA;QACrC,CAAC;QAED,KAAK;YACJ,MAAM,KAAK,GAAG,aAAa,CAAE,EAAS,EAAG,GAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAG,GAAG,EAAE,CAAC,CAAE,CAAA;YAC/D,iBAAiB,CAAE,KAAK,IAAI,KAAK,EAAG,IAAI,CAAE,CAAA;QAC3C,CAAC;QAED,KAAK;YACJ,MAAM,MAAM,GAAG,EAAE,GAAG,EAAG,GAAG,EAAE,CAAA;YAC5B,MAAM,KAAK,GAAG,aAAa,CAAE,EAAS,EAAG,GAAE,EAAE,CAAC,MAAM,CAAE,CAAA;YACtD,KAAK,CAAC,GAAG,GAAG,GAAG,CAAA;YACf,iBAAiB,CAAE,MAAM,CAAC,GAAG,EAAG,GAAG,CAAE,CAAA;QACtC,CAAC;QAED,0BAA0B;YAEzB,MAAM,KAAK,GAAG,aAAa,CAAE,EAAS,EAAG,GAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAG,GAAG,EAAE,CAAC,CAAE,CAAA;YAE/D,gBAAgB,CACf,MAAM,CAAC,wBAAwB,CAAE,KAAK,EAAG,KAAK,CAAE,EAChD;gBACC,KAAK,EAAE,GAAG;gBACV,QAAQ,EAAE,IAAI;gBACd,UAAU,EAAE,IAAI;gBAChB,YAAY,EAAE,IAAI;aAClB,CACD,CAAA;QAEF,CAAC;QAED,SAAS;YAER,MAAM,KAAK,GAAG,aAAa,CAC1B,EAAS,EACT,GAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAG,GAAG,EAAG,CAAE,MAAM,CAAC,WAAW,CAAE,EAAG,KAAK,EAAE,CAAC,CACrD,CAAA;YAED,gBAAgB,CACf,OAAO,CAAC,OAAO,CAAE,KAAK,CAAE,EACxB,CAAE,KAAK,EAAG,MAAM,CAAC,WAAW,CAAE,CAC9B,CAAA;QAEF,CAAC;QAED,gBAAgB;YAEf,MAAM,GAAG;aAAG;YAEZ,MAAM,KAAK,GAAG,aAAa,CAC1B,EAAS,EACT,GAAE,EAAE,CAAC,IAAI,GAAG,CACZ,CAAA;YAED,iBAAiB,CAChB,MAAM,CAAC,cAAc,CAAE,KAAK,CAAE,EAC9B,GAAG,CAAC,SAAS,CACb,CAAA;QAEF,CAAC;QAED,gBAAgB;YAEf,MAAM,GAAG;aAAG;YACZ,MAAM,MAAM,GAAG,EAAE,CAAA;YAEjB,MAAM,KAAK,GAAG,aAAa,CAC1B,EAAE,EACF,GAAE,EAAE,CAAC,MAAM,CACX,CAAA;YAED,MAAM,CAAC,cAAc,CAAE,KAAK,EAAG,GAAG,CAAC,SAAS,CAAE,CAAA;YAE9C,iBAAiB,CAChB,MAAM,CAAC,cAAc,CAAE,MAAM,CAAE,EAC/B,GAAG,CAAC,SAAS,CACb,CAAA;QAEF,CAAC;QAED,YAAY;YAEX,MAAM,GAAG;aAAG;YAEZ,MAAM,KAAK,GAAG,aAAa,CAC1B,EAAE,EACF,GAAE,EAAE,CAAC,IAAI,GAAG,CACZ,CAAA;YAED,cAAc,CAAE,KAAK,YAAY,GAAG,CAAE,CAAA;YACtC,cAAc,CAAE,KAAK,YAAY,aAAa,CAAE,CAAA;QAEjD,CAAC;QAED,UAAU;YAET,MAAM,GAAG;aAAG;YAEZ,MAAM,KAAK,GAAG,aAAa,CAC1B,EAAE,EACF,GAAE,EAAE,CAAC,IAAI,GAAG,CACZ,CAAA;YAED,cAAc,CAAE,KAAK,YAAY,GAAG,CAAE,CAAA;YACtC,cAAc,CAAE,KAAK,YAAY,aAAa,CAAE,CAAA;QAEjD,CAAC;KAED,CAAC,CAAA;AACH,CAAC,EAlHS,CAAC,KAAD,CAAC,QAkHV;;;AClHD;AACA;AACA;;ACFA,IAAU,CAAC,CAuCV;AAvCD,WAAU,CAAC;IAGC,uBAAqB,GAAG,EAAqB,CAAA;IAExD,SAAgB,oBAAoB;QACnC,MAAM,KAAK,GAAG,EAAA,qBAAqB,CAAC,MAAM,CAAE,CAAC,CAAE,CAAA;QAC/C,KAAK,MAAM,IAAI,IAAI,KAAK;YAAG,IAAI,EAAE,CAAA;IAClC,CAAC;IAHe,sBAAoB,uBAGnC,CAAA;IAED,MAAa,uBAAwB,SAAQ,YAAY;QAMpC;QAJpB,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,CAAA;QAC3B,SAAS,GAAG,KAAK,CAAA;QACjB,EAAE,CAAM;QAER,YAAoB,IAAgB;YACnC,KAAK,EAAE,CAAA;YADY,SAAI,GAAJ,IAAI,CAAY;YAEnC,EAAA,qBAAqB,CAAC,IAAI,CAAE,IAAI,CAAE,CAAA;QACnC,CAAC;QAED,UAAU;YACT,MAAM,KAAK,GAAG,EAAA,qBAAqB,CAAC,OAAO,CAAE,IAAI,CAAC,IAAI,CAAE,CAAA;YACxD,IAAI,KAAK,IAAI,CAAC;gBAAE,EAAA,qBAAqB,CAAC,MAAM,CAAE,KAAK,EAAG,CAAC,CAAE,CAAA;QAC1D,CAAC;KAED;IAhBY,yBAAuB,0BAgBnC,CAAA;IAED,MAAa,uBAAwB,SAAQ,uBAAuB;QAG3D;QADR,YACQ,KAAc,EACrB,IAAgB;YAEhB,KAAK,CAAE,IAAI,CAAE,CAAA;YAHN,UAAK,GAAL,KAAK,CAAS;QAItB,CAAC;KAED;IATY,yBAAuB,0BASnC,CAAA;AAEF,CAAC,EAvCS,CAAC,KAAD,CAAC,QAuCV;;;;ACvCD,IAAU,CAAC,CAoEV;AApED,WAAU,CAAC;IA2CV,SAAgB,mBAAmB,CAElC,KAA2B;QAG3B,MAAM,IAAI,GAAG,IAAI,CAAA;QACjB,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAA;QAElC,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAA;QACzB,IAAI,MAAM,GAAG,KAAK,CAAA;QAElB,KAAK,CAAC,IAAI,CAAE,GAAE,EAAE;YACf,MAAM,GAAG,IAAI,CAAA;YACb,IAAI,CAAC,cAAc,CAAC,IAAI,CAAE,IAAI,EAAG,KAAK,CAAE,CAAA;QACzC,CAAC,CAAE,CAAA;QAEH,OAAO,GAAE,EAAE;YACV,IAAI,MAAM;gBAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAA;YACpC,IAAI,KAAK,CAAC,MAAM,GAAG,IAAI;gBAAG,KAAK,CAAC,MAAM,GAAG,IAAI,CAAA;QAC9C,CAAC,CAAA;IAEF,CAAC;IArBe,qBAAmB,sBAqBlC,CAAA;IAEU,iBAAe,GAAG,EAAqB,CAAA;AAEnD,CAAC,EApES,CAAC,KAAD,CAAC,QAoEV;;;ACpED;AACA;AACA;;ACFA,IAAU,CAAC,CAWV;AAXD,WAAU,GAAC;IAEV,eAAe,CAAC,IAAI,CAAE,CAAC,CAAC,EAAE;QACzB,CAAC,CAAC,cAAc,GAAG,GAAE,EAAE,GAAE,CAAC,CAAA;QAC1B,CAAC,CAAC,cAAc,GAAG,GAAE,EAAE,GAAE,CAAC,CAAA;QAC1B,CAAC,CAAC,cAAc,GAAG,GAAE,EAAE,GAAE,CAAC,CAAA;QAC1B,CAAC,CAAC,cAAc,GAAG,GAAE,EAAE,GAAE,CAAC,CAAA;QAC1B,CAAC,CAAC,cAAc,GAAG,GAAE,EAAE,GAAE,CAAC,CAAA;QAC1B,CAAC,CAAC,cAAc,GAAG,GAAE,EAAE,CAAC,GAAE,EAAE,GAAE,CAAC,CAAA;IAChC,CAAC,CAAE,CAAA;AAEJ,CAAC,EAXS,CAAC,KAAD,CAAC,QAWV;;;;ACXD,IAAU,CAAC,CAwCV;AAxCD,WAAU,CAAC;IAEV,SAAgB,kBAAkB,CACjC,KAAmD,EACnD,KAAc;QAGd,OAAO,SAAS,gBAAgB,CAE/B,KAA2B;YAG3B,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,CAAA;YAC1C,IAAI,OAAO;gBAAG,OAAO,EAAE,CAAA;YAEvB,IAAI,GAAG,GAAG,IAAI,CAAA;YACd,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAE,KAAK,CAAE,CAAA;YAErC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAG,EAAE,CAAC,EAAG;gBAC1C,GAAG,IAAI,CAAE,OAAO,MAAM,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAA;aAC5D;YAED,MAAM,KAAK,GAAG,SAAS,KAAK,qBAAqB,CAEhD;YAAE,IAAI,CAAC,OAAO,CAAE,KAAK,CAAW,CAAE,GAAG,EAAG,KAAK,EAAG,GAAI,MAAM,CAAE,CAAA;YAE7D,MAAM,IAAI,GAAG,IAAI,CAAA;YACjB,OAAO,GAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAA;QAEpC,CAAC,CAAA;IAEF,CAAC;IA7Be,oBAAkB,qBA6BjC,CAAA;IAED,CAAC,CAAC,cAAc,GAAG,kBAAkB,CAAE,MAAM,EAAG,WAAW,CAAE,CAAA;IAC7D,CAAC,CAAC,cAAc,GAAG,kBAAkB,CAAE,MAAM,EAAG,aAAa,CAAE,CAAA;IAC/D,CAAC,CAAC,cAAc,GAAG,kBAAkB,CAAE,OAAO,EAAG,WAAW,CAAE,CAAA;IAC9D,CAAC,CAAC,cAAc,GAAG,kBAAkB,CAAE,MAAM,EAAG,WAAW,CAAE,CAAA;IAC7D,CAAC,CAAC,cAAc,GAAG,kBAAkB,CAAE,KAAK,EAAG,SAAS,CAAE,CAAA;IAC1D,CAAC,CAAC,cAAc,GAAG,kBAAkB,CAAE,OAAO,EAAG,MAAM,CAAE,CAAA;AAE1D,CAAC,EAxCS,CAAC,KAAD,CAAC,QAwCV;;;;ACxCD,IAAU,CAAC,CAMV;AAND,WAAU,GAAC;IAEV,eAAe,CAAC,IAAI,CAAE,CAAC,CAAC,EAAE;QACzB,CAAC,CAAC,eAAe,GAAG,uBAAwD,CAAA;IAC7E,CAAC,CAAC,CAAA;AAEH,CAAC,EANS,CAAC,KAAD,CAAC,QAMV;;;;ACND,IAAU,CAAC,CAmBV;AAnBD,WAAU,CAAC;IAEV,SAAgB,YAAY;QAE3B,IAAI,IAAqD,CAAA;QACzD,IAAI,IAA8B,CAAA;QAElC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAY,CAAE,CAAC,EAAE,CAAC,EAAG,EAAE;YACjD,IAAI,GAAG,CAAC,CAAA;YACR,IAAI,GAAG,CAAC,CAAA;QACT,CAAC,CAAE,CAAA;QAEH,OAAO,MAAM,CAAC,MAAM,CAAE,OAAO,EAAE;YAC9B,IAAI;YACJ,IAAI;SACJ,CAAE,CAAA;IAEJ,CAAC;IAfe,cAAY,eAe3B,CAAA;AAEF,CAAC,EAnBS,CAAC,KAAD,CAAC,QAmBV;;;;ACnBD,IAAU,CAAC,CAMV;AAND,WAAU,GAAC;IAEV,eAAe,CAAC,IAAI,CAAE,CAAC,CAAC,EAAE;QACzB,CAAC,CAAC,kBAAkB,GAAG,uBAA2D,CAAA;IACnF,CAAC,CAAC,CAAA;AAEH,CAAC,EANS,CAAC,KAAD,CAAC,QAMV;;;;ACND,IAAU,CAAC,CAqCV;AArCD,WAAU,CAAC;IAEV,SAAgB,cAAc,CAAyB,GAAS;QAC/D,OAAO,IAAI,KAAK,CAAE,GAAG,EAAE;YAEtB,GAAG,CAAE,GAAG,EAAE,KAAK;gBAEd,MAAM,GAAG,GAAG,GAAG,CAAE,KAAK,CAAE,CAAA;gBACxB,IAAI,OAAO,GAAG,KAAK,UAAU;oBAAG,OAAO,GAAG,CAAA;gBAE1C,MAAM,IAAI,GAAG,cAAc,CAAC,MAAM,CAAE,GAAG,CAAE,CAAA;gBACzC,OAAO,SAAS,cAAc,CAAc,GAAI,IAAW;oBAC1D,MAAM,KAAK,GAAG,IAAI,CAAE,GAAG,EAAE,IAAI,CAAE,CAAA;oBAC/B,OAAO,KAAK,CAAC,IAAI,EAAE,CAAA;gBACpB,CAAC,CAAA;YAEF,CAAC;YAED,KAAK,CAAE,GAAG,EAAE,IAAI,EAAE,IAAI;gBACrB,MAAM,IAAI,GAAG,cAAc,CAAC,MAAM,CAAE,GAAgC,CAAE,CAAA;gBACtE,MAAM,KAAK,GAAG,IAAI,CAAE,IAAI,EAAE,IAAI,CAAE,CAAA;gBAChC,OAAO,KAAK,CAAC,IAAI,EAAE,CAAA;YACpB,CAAC;SAED,CAUA,CAAA;IACF,CAAC;IAjCe,gBAAc,iBAiC7B,CAAA;AAEF,CAAC,EArCS,CAAC,KAAD,CAAC,QAqCV;;;;ACrCD,IAAU,CAAC,CAcV;AAdD,WAAU,CAAC;IAEV,SAAgB,uBAAuB,CAAW,OAAe;QAChE,MAAM,OAAO,GAAG,YAAY,EAAE,CAAA;QAC9B,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,kBAAkB,CAAE,OAAO,EAAG,GAAE,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,CAAE,CAAA;QACzE,OAAO,MAAM,CAAC,MAAM,CAAE,OAAO,EAAE;YAC9B,UAAU,EAAE,GAAE,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE;SAClC,CAAE,CAAA;IACJ,CAAC;IANe,yBAAuB,0BAMtC,CAAA;IAED,SAAgB,iBAAiB,CAAW,OAAe;QAC1D,OAAO,IAAI,CAAC,cAAc,CAAE,IAAI,CAAE,CAAC,uBAAuB,CAAE,OAAO,CAAE,CAAA;IACtE,CAAC;IAFe,mBAAiB,oBAEhC,CAAA;AAEF,CAAC,EAdS,CAAC,KAAD,CAAC,QAcV;;;;ACdD,IAAU,CAAC,CAmDV;AAnDD,WAAU,GAAC;IAEV,SAAS,CAAC;QAET,KAAK,CAAC,kCAAkC,CAAE,CAAC;YAE1C,MAAM,UAAW,SAAQ,YAAY;gBAEpC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAA;gBAEZ,MAAM,CAAC,KAAK,GAAG,EAAc,CAAA;gBAC7B,MAAM,CAAC,IAAI,GAAG,EAAc,CAAA;gBAE5B,MAAM,CAAC,IAAI,CAAE,IAAY;oBACxB,cAAc,CAAE,IAAI,CAAC,KAAK,CAAE,CAAC,IAAI,CAAE,IAAI,CAAE,CAAA;oBACzC,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAA;oBAC3B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAE,IAAI,CAAE,CAAA;gBACvB,CAAC;;YAIF,MAAM,IAAI,GAAG,eAAe,CAAE,UAAU,CAAE,CAAC,IAAI,CAAA;YAE/C,IAAI,CAAE,MAAM,CAAE,CAAA;YACd,MAAM,OAAO,GAAG,IAAI,CAAE,KAAK,CAAE,CAAA;YAE7B,CAAC,CAAC,oBAAoB,EAAE,CAAA;YACxB,MAAM,OAAO,CAAA;YAEb,gBAAgB,CAAE,UAAU,CAAC,KAAK,EAAE,CAAE,MAAM,EAAE,KAAK,CAAE,CAAE,CAAA;YACvD,gBAAgB,CAAE,UAAU,CAAC,IAAI,EAAE,CAAE,KAAK,CAAE,CAAE,CAAA;QAE/C,CAAC;QAED,KAAK,CAAC,eAAe,CAAE,CAAC;YAEvB,MAAM,IAAI,GAAG,eAAe,CAAE,UAAU,IAAY;gBACnD,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAA;gBACtB,OAAO,IAAI,CAAA;YACZ,CAAC,CAAE,CAAA;YAEH,MAAM,OAAO,GAAG,IAAI,CAAE,KAAK,CAAE,CAAA;YAE7B,CAAC,CAAC,oBAAoB,EAAE,CAAA;YAExB,gBAAgB,CAAE,MAAM,OAAO,EAAE,KAAK,CAAE,CAAA;QAEzC,CAAC;KAED,CAAC,CAAA;AAEH,CAAC,EAnDS,CAAC,KAAD,CAAC,QAmDV;;;;ACnDD,IAAU,CAAC,CA+EV;AA/ED,WAAU,GAAC;IACV,SAAS,CAAC;QAET,cAAc;YAEb,MAAM,IAAI,GAAG,IAAI,aAAa,CAAA;YAC9B,MAAM,IAAI,GAAG,IAAI,aAAa,CAAA;YAC9B,MAAM,GAAG,GAAG,IAAI,iBAAiB,CAAA;YAEjC,MAAM,GAAG,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAA;YAC1B,IAAI;gBAEH,IAAI,CAAC,OAAO,EAAE,CAAA;gBACd,IAAI,CAAC,OAAO,EAAE,CAAA;gBACd,IAAI,CAAC,OAAO,EAAE,CAAA;aAEd;oBAAS;gBAET,GAAG,CAAC,SAAS,EAAE,CAAA;gBACf,GAAG,CAAC,SAAS,CAAE,GAAG,CAAE,CAAA;aAEpB;YAED,IAAI,CAAC,IAAI,EAAE,CAAA;YACX,IAAI,CAAC,IAAI,EAAE,CAAA;YAEX,gBAAgB,CAAE,GAAG,CAAC,QAAQ,EAAE,CAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAE,CAAE,CAAA;YAEtD,MAAM,GAAG,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAA;YAC1B,IAAI;gBAEH,IAAI,CAAC,OAAO,EAAE,CAAA;gBACd,IAAI,CAAC,OAAO,EAAE,CAAA;gBACd,IAAI,CAAC,OAAO,EAAE,CAAA;aAEd;oBAAS;gBAET,GAAG,CAAC,SAAS,EAAE,CAAA;gBACf,GAAG,CAAC,SAAS,CAAE,GAAG,CAAE,CAAA;aAEpB;YAED,IAAI,CAAC,IAAI,EAAE,CAAA;YACX,IAAI,CAAC,IAAI,EAAE,CAAA;YAEX,gBAAgB,CAAE,GAAG,CAAC,QAAQ,EAAE,CAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAE,CAAE,CAAA;QAEvD,CAAC;QAED,kBAAkB,CAAE,CAAC;YAEpB,MAAM,IAAI,GAAG,IAAI,iBAAiB,CAAA;YAClC,MAAM,IAAI,GAAG,IAAI,iBAAiB,CAAA;YAElC,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAA;YAC3B,IAAI;gBAEH,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAA;gBAC3B,IAAI;oBAEH,gBAAgB,CAAE,GAAE,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,uBAAuB,CAAE,CAAA;iBAEhE;wBAAS;oBAET,IAAI,CAAC,SAAS,EAAE,CAAA;oBAChB,IAAI,CAAC,SAAS,CAAE,GAAG,CAAE,CAAA;iBAErB;aAED;oBAAS;gBAET,IAAI,CAAC,SAAS,EAAE,CAAA;gBAChB,IAAI,CAAC,SAAS,CAAE,GAAG,CAAE,CAAA;aAErB;QAEF,CAAC;KAED,CAAC,CAAA;AACH,CAAC,EA/ES,CAAC,KAAD,CAAC,QA+EV;;;;AC/ED,IAAU,CAAC,CAMV;AAND,WAAU,GAAC;IAEV,eAAe,CAAC,IAAI,CAAE,CAAC,CAAC,EAAE;QACzB,CAAC,CAAC,gBAAgB,GAAG,uBAAyD,CAAA;IAC/E,CAAC,CAAC,CAAA;AAEH,CAAC,EANS,CAAC,KAAD,CAAC,QAMV;;;;ACND,IAAU,CAAC,CA0GV;AA1GD,WAAU,CAAC;IAEV,SAAS,CAAC;QAET,gBAAgB;YAEf,MAAM,IAAK,SAAQ,YAAY;gBAG9B,MAAM,CAAC,IAAI,CAAE,CAAS,EAAE,CAAS;oBAChC,OAAO,CAAC,GAAG,CAAC,CAAA;gBACb,CAAC;aAED;YAJA;gBADE,gBAAgB;kCAGjB;YAIF,iBAAiB,CAAE,IAAI,CAAC,IAAI,CAAE,CAAC,EAAE,CAAC,CAAE,EAAE,CAAC,CAAE,CAAA;QAE1C,CAAC;QAED,KAAK,CAAC,gBAAgB;YAErB,MAAM,SAAU,SAAQ,YAAY;gBAEnC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAE,CAAS;oBAC1B,OAAO,CAAC,CAAA;gBACT,CAAC;gBAED,MAAM,CAAC,GAAG,CAAE,CAAS,EAAE,CAAS;oBAC/B,MAAM,GAAG,GAAG,cAAc,CAAE,IAAI,CAAE,CAAA;oBAClC,OAAO,GAAG,CAAC,GAAG,CAAE,CAAC,CAAE,GAAG,GAAG,CAAC,GAAG,CAAE,CAAC,CAAE,CAAA;gBACnC,CAAC;gBAED,MAAM,CAAC,KAAK,CAAC,IAAI,CAAE,CAAS,EAAE,CAAS;oBACtC,OAAO,CAAC,GAAG,MAAM,eAAe,CAAE,IAAI,CAAE,CAAC,GAAG,CAAE,CAAC,EAAE,CAAC,CAAE,CAAA;gBACrD,CAAC;aAED;YAED,iBAAiB,CAAE,MAAM,SAAS,CAAC,IAAI,CAAE,CAAC,EAAE,CAAC,CAAE,EAAE,CAAC,CAAE,CAAA;QAErD,CAAC;QAED,KAAK,CAAC,qBAAqB;YAE1B,MAAM,WAAY,SAAQ,YAAY;gBAErC,MAAM,CAAC,UAAU,GAAG,CAAC,CAAA;gBACrB,MAAM,CAAC,YAAY,GAAG,CAAC,CAAA;gBAGvB,MAAM,CAAC,SAAS;oBACf,IAAI,CAAC,UAAU,IAAI,CAAC,CAAA;gBACrB,CAAC;gBAED,MAAM,CAAC,WAAW;oBACjB,IAAI,CAAC,YAAY,IAAI,CAAC,CAAA;gBACvB,CAAC;gBAED,MAAM,CAAC,KAAK,CAAC,GAAG,CAAE,CAAS;oBAC1B,OAAO,CAAC,CAAA;gBACT,CAAC;gBAED,MAAM,CAAC,GAAG,CAAE,CAAS,EAAE,CAAS;oBAC/B,IAAI,CAAC,SAAS,EAAE,CAAA;oBAChB,IAAI,CAAC,WAAW,EAAE,CAAA;oBAClB,MAAM,GAAG,GAAG,cAAc,CAAE,IAAI,CAAE,CAAA;oBAClC,OAAO,GAAG,CAAC,GAAG,CAAE,CAAC,CAAE,GAAG,GAAG,CAAC,GAAG,CAAE,CAAC,CAAE,CAAA;gBACnC,CAAC;gBAED,MAAM,CAAC,KAAK,CAAC,IAAI,CAAE,CAAS,EAAE,CAAS;oBACtC,OAAO,CAAC,GAAG,MAAM,eAAe,CAAE,IAAI,CAAE,CAAC,GAAG,CAAE,CAAC,EAAE,CAAC,CAAE,CAAA;gBACrD,CAAC;;YArBD;gBADE,gBAAgB;8CAGjB;YAuBF,iBAAiB,CAAE,MAAM,WAAW,CAAC,IAAI,CAAE,CAAC,EAAE,CAAC,CAAE,EAAE,CAAC,CAAE,CAAA;YACtD,iBAAiB,CAAE,WAAW,CAAC,UAAU,EAAE,CAAC,CAAE,CAAA;YAC9C,iBAAiB,CAAE,WAAW,CAAC,YAAY,EAAE,CAAC,CAAE,CAAA;QAEjD,CAAC;QAED,KAAK,CAAC,gBAAgB;YAErB,MAAM,MAAO,SAAQ,YAAY;gBAEhC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAE,CAAS,EAAE,CAAS;oBACrC,SAAS,CAAE,IAAI,KAAK,CAAE,aAAa,GAAG,CAAE,CAAC,GAAG,CAAC,CAAE,CAAE,CAAE,CAAA;gBACpD,CAAC;gBAED,MAAM,CAAC,KAAK;oBACX,IAAI;wBACH,OAAO,cAAc,CAAE,MAAM,CAAE,CAAC,GAAG,CAAE,CAAC,EAAE,CAAC,CAAE,CAAA;qBAC3C;oBAAC,OAAO,KAAU,EAAG;wBACrB,IAAI,KAAK,YAAY,OAAO;4BAAG,gBAAgB,CAAE,KAAK,CAAE,CAAA;wBACxD,iBAAiB,CAAE,KAAK,CAAC,OAAO,EAAE,cAAc,CAAE,CAAA;qBAClD;gBACF,CAAC;aAED;YAED,MAAM,eAAe,CAAE,MAAM,CAAE,CAAC,KAAK,EAAE,CAAA;QAExC,CAAC;KAED,CAAC,CAAA;AAEH,CAAC,EA1GS,CAAC,KAAD,CAAC,QA0GV;;;;AC1GD,IAAU,CAAC,CAwvBV;AAxvBD,WAAU,GAAC;IACV,SAAS,CAAC;QAGT,gBAAgB,CAAE,CAAC;YAElB,MAAM,GAAI,SAAQ,YAAY;gBAE7B,MAAM,CAAC,CAAC,GAAG,CAAC,CAAA;gBAGZ,MAAM,CAAC,KAAK,CAAE,IAAI,GAAG,CAAC;oBACrB,OAAO,IAAI,GAAG,CAAC,CAAA;gBAChB,CAAC;;YAFD;gBADE,aAAa,CAAC,CAAC,CAAC;kCAGjB;YAIF,iBAAiB,CAAE,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAE,CAAA;YAEnC,GAAG,CAAC,KAAK,CAAE,CAAC,CAAE,CAAA;YACd,iBAAiB,CAAE,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAE,CAAA;QAEpC,CAAC;QAED,aAAa,CAAE,CAAC;YAEf,MAAM,GAAI,SAAQ,YAAY;gBAE7B,MAAM,CAAC,CAAC,GAAG,CAAC,CAAA;gBAGZ,MAAM,CAAC,KAAK,CAAE,IAAI,GAAG,CAAC;oBACrB,OAAO,IAAI,CAAA;gBACZ,CAAC;;YAFD;gBADE,aAAa,CAAC,CAAC,CAAC;kCAGjB;YAIF,iBAAiB,CAAE,GAAG,CAAC,KAAK,CAAE,CAAC,CAAE,EAAE,CAAC,CAAE,CAAA;YACtC,iBAAiB,CAAE,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAE,CAAA;QAEpC,CAAC;QAED,mBAAmB,CAAE,CAAC;YAErB,MAAM,IAAK,SAAQ,YAAY;gBAE9B,MAAM,CAAC,CAAC,GAAG,CAAC,CAAA;gBAGZ,MAAM,CAAC,KAAK,CAAE,IAAI,GAAG,CAAC;oBACrB,OAAO,IAAI,GAAG,CAAC,CAAA;gBAChB,CAAC;;YAFD;gBADE,aAAa,CAAC,CAAC,CAAC;mCAGjB;YAIF,MAAM,MAAO,SAAQ,IAAI;gBAGxB,MAAM,CAAC,KAAK,CAAE,IAAa;oBAC1B,OAAO,KAAK,CAAC,KAAK,CAAE,IAAI,CAAE,GAAG,CAAC,CAAA;gBAC/B,CAAC;aAED;YAJA;gBADE,aAAa,CAAC,CAAC,CAAC;qCAGjB;YAIF,MAAM,GAAI,SAAQ,MAAM;gBAGvB,MAAM,CAAC,KAAK,CAAE,IAAa;oBAC1B,OAAO,KAAK,CAAC,KAAK,CAAE,IAAI,CAAE,GAAG,CAAC,CAAA;gBAC/B,CAAC;aAED;YAJA;gBADE,aAAa,CAAC,CAAC,CAAC;kCAGjB;YAIF,iBAAiB,CAAE,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAE,CAAA;YAEnC,iBAAiB,CAAE,GAAG,CAAC,KAAK,CAAE,CAAC,CAAE,EAAE,EAAE,CAAE,CAAA;YACvC,iBAAiB,CAAE,GAAG,CAAC,KAAK,EAAE,EAAE,EAAE,CAAE,CAAA;QAErC,CAAC;QAGD,qCAAqC,CAAE,CAAC;YAEvC,MAAM,GAAI,SAAQ,YAAY;gBAE7B,MAAM,CAAC,CAAC,GAAG,CAAC,CAAA;gBAGZ,MAAM,CAAC,GAAG,CAAE,IAAc;oBACzB,OAAO,IAAI,IAAI,CAAC,CAAA;gBACjB,CAAC;gBAGD,MAAM,CAAC,GAAG;oBACT,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;gBACtB,CAAC;gBAGD,MAAM,CAAC,GAAG;oBACT,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;gBACtB,CAAC;;YAZD;gBADE,aAAa,CAAC,CAAC,CAAC;gCAGjB;YAGD;gBADE,aAAa,CAAC,CAAC,CAAC;gCAGjB;YAGD;gBADE,aAAa,CAAC,CAAC,CAAC;gCAGjB;YAIF,iBAAiB,CAAE,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAE,CAAA;YACjC,iBAAiB,CAAE,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAE,CAAA;YAEjC,GAAG,CAAC,GAAG,CAAE,CAAC,CAAE,CAAA;YACZ,iBAAiB,CAAE,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAE,CAAA;QAElC,CAAC;QAGD,wDAAwD,CAAE,CAAC;YAE1D,MAAM,GAAG,GAAG,EAAc,CAAA;YAE1B,MAAM,GAAI,SAAQ,YAAY;gBAE7B,MAAM,CAAC,CAAC,GAAG,CAAC,CAAA;gBAGZ,MAAM,CAAC,GAAG,CAAE,IAAc;oBACzB,GAAG,CAAC,IAAI,CAAE,KAAK,CAAE,CAAA;oBACjB,OAAO,IAAI,IAAI,CAAC,CAAA;gBACjB,CAAC;gBAGD,MAAM,CAAC,GAAG;oBACT,GAAG,CAAC,IAAI,CAAE,KAAK,CAAE,CAAA;oBACjB,OAAO,CAAE,IAAI,CAAC,IAAI,CAAE,IAAI,CAAC,GAAG,EAAE,CAAE,CAAE,CAAA;gBACnC,CAAC;gBAGD,MAAM,CAAC,GAAG;oBACT,GAAG,CAAC,IAAI,CAAE,KAAK,CAAE,CAAA;oBACjB,OAAO,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;gBACzB,CAAC;;YAfD;gBADE,aAAa,CAAC,CAAC,CAAC;gCAIjB;YAGD;gBADE,aAAa,CAAC,CAAC,CAAC;gCAIjB;YAGD;gBADE,aAAa,CAAC,CAAC,CAAC;gCAIjB;YAIF,GAAG,CAAC,GAAG,EAAE,CAAA;YACT,gBAAgB,CAAE,GAAG,EAAE,CAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAE,CAAE,CAAA;YAEhD,GAAG,CAAC,GAAG,CAAE,CAAC,CAAE,CAAA;YACZ,gBAAgB,CAAE,GAAG,EAAE,CAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAE,CAAE,CAAA;YAEvD,GAAG,CAAC,GAAG,EAAE,CAAA;YACT,gBAAgB,CAAE,GAAG,EAAE,CAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAE,CAAE,CAAA;QAE/D,CAAC;QAGD,YAAY,CAAE,CAAC;YAEd,MAAM,GAAI,SAAQ,YAAY;gBAE7B,MAAM,KAAK,CAAC,KAAK,OAAO,CAAC,CAAA,CAAC,CAAC;gBAG3B,MAAM,CAAC,KAAK,CAAE,IAAI,GAAG,CAAC,IAAK,OAAO,IAAI,CAAA,CAAC,CAAC;gBAGxC,MAAM,CAAC,MAAM,CAAE,IAAI,GAAG,CAAC,IAAK,OAAO,IAAI,CAAA,CAAC,CAAC;gBAGzC,MAAM,CAAC,SAAS,CAAE,IAAI,GAAG,IAAI,IAAK,OAAO,IAAI,CAAA,CAAC,CAAC;gBAE/C,MAAM,CAAC,OAAO,GAAG,CAAC,CAAA;gBAGlB,MAAM,CAAC,MAAM;oBACZ,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAA;oBAC3D,OAAO,GAAG,GAAG,IAAI,CAAC,OAAO,EAAG,CAAA;gBAC7B,CAAC;;YAdD;gBADE,aAAa,CAAC,CAAC,CAAC;kCACsB;YAGxC;gBADE,aAAa,CAAC,CAAC,CAAC;mCACuB;YAGzC;gBADE,aAAa,CAAC,CAAC,CAAC;sCAC6B;YAK/C;gBADE,aAAa,CAAC,CAAC,CAAC;mCAIjB;YAIF,iBAAiB,CAAE,GAAG,CAAC,MAAM,EAAE,EAAG,CAAC,CAAE,CAAA;YACrC,iBAAiB,CAAE,GAAG,CAAC,OAAO,EAAG,CAAC,CAAE,CAAA;YAEpC,GAAG,CAAC,SAAS,CAAE,KAAK,CAAE,CAAA;YACtB,iBAAiB,CAAE,GAAG,CAAC,MAAM,EAAE,EAAG,CAAC,CAAE,CAAA;YACrC,iBAAiB,CAAE,GAAG,CAAC,OAAO,EAAG,CAAC,CAAE,CAAA;YAEpC,GAAG,CAAC,KAAK,CAAE,EAAE,CAAE,CAAA;YACf,iBAAiB,CAAE,GAAG,CAAC,MAAM,EAAE,EAAG,CAAC,CAAE,CAAA;YACrC,iBAAiB,CAAE,GAAG,CAAC,OAAO,EAAG,CAAC,CAAE,CAAA;QAErC,CAAC;QAGD,iBAAiB,CAAE,CAAC;YAEnB,IAAI,OAAO,GAAG,CAAC,CAAA;YAEf,MAAM,GAAI,SAAQ,YAAY;gBAE7B,MAAM,CAAC,CAAC,GAAG,CAAC,CAAA;gBAGZ,MAAM,CAAC,GAAG,CAAE,IAA2B;oBACtC,OAAO,IAAI,IAAI,EAAE,KAAK,EAAE,CAAE,CAAC,CAAE,EAAE,CAAA;gBAChC,CAAC;gBAGD,MAAM,CAAC,GAAG;oBACT,OAAO,EAAE,GAAI,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,EAAG,OAAO,EAAE,CAAA;gBAC7C,CAAC;;YAPD;gBADE,aAAa,CAAC,CAAC,CAAC;gCAGjB;YAGD;gBADE,aAAa,CAAC,CAAC,CAAC;gCAGjB;YAIF,gBAAgB,CAAE,GAAG,CAAC,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,CAAE,CAAC,CAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAE,CAAA;YAEzD,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAE,CAAC,CAAE,EAAE,CAAC,CAAA;YACzB,gBAAgB,CAAE,GAAG,CAAC,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,CAAE,CAAC,CAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAE,CAAA;YAEzD,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAE,CAAC,CAAE,EAAE,CAAC,CAAA;YACzB,gBAAgB,CAAE,GAAG,CAAC,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,CAAE,CAAC,CAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAE,CAAA;QAE1D,CAAC;QAGD,aAAa,CAAE,CAAC;YAEf,MAAM,GAAI,SAAQ,YAAY;gBAE7B,MAAM,CAAC,CAAC,GAAG,CAAC,CAAA;gBAGZ,MAAM,CAAC,GAAG;oBACT,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;gBACtB,CAAC;gBAGD,MAAM,CAAC,GAAG;oBACT,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;gBACtB,CAAC;gBAGD,MAAM,CAAC,IAAI;oBACV,gBAAgB,CAAE,GAAE,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,uBAAuB,CAAE,CAAA;gBAC5D,CAAC;;YAZD;gBADE,aAAa,CAAC,CAAC,CAAC;gCAGjB;YAGD;gBADE,aAAa,CAAC,CAAC,CAAC;gCAGjB;YAGD;gBADE,gBAAgB;iCAGjB;YAIF,GAAG,CAAC,IAAI,EAAE,CAAA;QACX,CAAC;QAmCD,kCAAkC,CAAE,CAAC;YAEpC,MAAM,GAAI,SAAQ,YAAY;gBAE7B,MAAM,CAAC,CAAC,GAAG,CAAC,CAAA;gBAGZ,MAAM,CAAC,KAAK,CAAE,IAAI,GAAG,CAAC;oBACrB,OAAO,IAAI,CAAA;gBACZ,CAAC;gBAGD,MAAM,CAAC,IAAI,CAAE,IAAa;oBACzB,OAAO,IAAI,CAAC,KAAK,CAAE,IAAI,CAAE,CAAA;gBAC1B,CAAC;gBAGD,MAAM,CAAC,IAAI,CAAE,IAAa;oBACzB,IAAI,IAAI,KAAK,SAAS;wBAAG,IAAI,CAAC,IAAI,EAAE,CAAA;oBACpC,OAAO,IAAI,CAAC,KAAK,CAAE,IAAI,CAAE,CAAA;gBAC1B,CAAC;;YAbD;gBADE,aAAa,CAAC,CAAC,CAAC;kCAGjB;YAGD;gBADE,aAAa,CAAC,CAAC,CAAC;iCAGjB;YAGD;gBADE,aAAa,CAAC,CAAC,CAAC;iCAIjB;YAIF,GAAG,CAAC,IAAI,EAAE,CAAA;YACV,iBAAiB,CAAE,GAAG,CAAC,IAAI,CAAE,GAAG,CAAE,EAAE,GAAG,CAAE,CAAA;YACzC,iBAAiB,CAAE,GAAG,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,GAAG,CAAE,CAAA;YAEhD,GAAG,CAAC,KAAK,CAAE,GAAG,CAAE,CAAA;YAChB,iBAAiB,CAAE,GAAG,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,GAAG,CAAE,CAAA;QAEjD,CAAC;QAGD,0BAA0B,CAAE,CAAC;YAE5B,MAAM,GAAI,SAAQ,YAAY;gBAE7B,MAAM,CAAC,CAAC,GAAG,CAAC,CAAA;gBAGZ,MAAM,CAAC,KAAK,CAAE,IAAI,GAAG,CAAC;oBACrB,OAAO,IAAI,CAAA;gBACZ,CAAC;gBAGD,MAAM,CAAC,MAAM;oBACZ,OAAO,IAAI,CAAC,KAAK,EAAE,CAAA;gBACpB,CAAC;gBAGD,MAAM,CAAC,GAAG;oBACT,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,CAAA;oBAC3B,IAAI,CAAC,KAAK;wBAAG,IAAI,CAAC,KAAK,CAAE,KAAK,GAAG,CAAC,CAAE,CAAA;oBACpC,OAAO,KAAK,GAAG,CAAC,CAAA;gBACjB,CAAC;;YAdD;gBADE,aAAa,CAAC,CAAC,CAAC;kCAGjB;YAGD;gBADE,aAAa,CAAC,CAAC,CAAC;mCAGjB;YAGD;gBADE,aAAa,CAAC,CAAC,CAAC;gCAKjB;YAIF,gBAAgB,CAAE,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAE,CAAA;YAEhC,GAAG,CAAC,KAAK,CAAE,CAAC,CAAE,CAAA;YACd,gBAAgB,CAAE,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAE,CAAA;QAEjC,CAAC;QAED,KAAK,CAAC,mBAAmB,CAAE,CAAC;YAE3B,MAAM,GAAI,SAAQ,YAAY;gBAE7B,MAAM,CAAC,CAAC,GAAG,CAAC,CAAA;gBAGZ,MAAM,CAAC,OAAO,CAAE,IAAI,GAAG,KAAK;oBAC3B,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAA;oBACvB,OAAO,IAAI,CAAA;gBACZ,CAAC;gBAGD,MAAM,CAAC,MAAM;oBACZ,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAA;oBAC3B,kBAAkB,CAAE,IAAI,CAAC,OAAO,CAAE,CAAC,IAAI,CAAE,EAAE,IAAI,CAAE,CAAA;gBAElD,CAAC;gBAGD,MAAM,CAAC,GAAG;oBACT,OAAO,IAAI,CAAC,OAAO,EAAE,CAAA;gBACtB,CAAC;gBAGD,MAAM,CAAC,IAAI;oBAEV,iBAAiB,CAAE,GAAG,CAAC,GAAG,EAAE,EAAE,KAAK,CAAE,CAAA;oBAErC,GAAG,CAAC,MAAM,EAAE,CAAA;oBACZ,iBAAiB,CAAE,GAAG,CAAC,GAAG,EAAE,EAAE,IAAI,CAAE,CAAA;gBAErC,CAAC;;YAzBD;gBADE,aAAa,CAAC,CAAC,CAAC;oCAIjB;YAGD;gBADE,gBAAgB;mCAKjB;YAGD;gBADE,aAAa,CAAC,CAAC,CAAC;gCAGjB;YAGD;gBADE,gBAAgB;iCAQjB;YAIF,MAAM,eAAe,CAAE,GAAG,CAAE,CAAC,IAAI,EAAE,CAAA;QAEpC,CAAC;QAiDD,qBAAqB,CAAE,CAAC;YAEvB,MAAM,GAAI,SAAQ,YAAY;gBAE7B,MAAM,KAAK,CAAC,KAAK,OAAO,CAAC,CAAA,CAAC,CAAC;gBAG3B,MAAM,CAAC,SAAS,CAAE,IAAI,GAAG,KAAK,IAAK,OAAO,IAAI,CAAA,CAAC,CAAC;gBAGhD,MAAM,CAAC,MAAM;oBAEZ,IAAI,IAAI,CAAC,SAAS,EAAE,EAAG;wBACtB,SAAS,CAAE,IAAI,KAAK,CAAE,YAAY,CAAE,CAAE,CAAA;qBACtC;oBAED,OAAO,CAAC,CAAA;gBACT,CAAC;gBAGD,MAAM,CAAC,MAAM;oBACZ,OAAO,IAAI,CAAC,MAAM,EAAE,CAAA;gBACrB,CAAC;aAED;YAjBA;gBADE,aAAa,CAAC,CAAC,CAAC;sCAC8B;YAGhD;gBADE,aAAa,CAAC,CAAC,CAAC;mCAQjB;YAGD;gBADE,aAAa,CAAC,CAAC,CAAC;mCAGjB;YAIF,iBAAiB,CAAE,GAAG,CAAC,MAAM,EAAE,EAAG,CAAC,CAAE,CAAA;YAErC,GAAG,CAAC,SAAS,CAAE,IAAI,CAAE,CAAA;YACrB,gBAAgB,CAAE,GAAE,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,CAAE,CAAA;YAErC,GAAG,CAAC,SAAS,CAAE,KAAK,CAAE,CAAA;YACtB,iBAAiB,CAAE,GAAG,CAAC,MAAM,EAAE,EAAG,CAAC,CAAE,CAAA;QAEtC,CAAC;QAED,KAAK,CAAC,eAAe,CAAC,CAAC;YAEtB,MAAM,GAAI,SAAQ,YAAY;gBAE7B,MAAM,CAAC,CAAC,GAAG,CAAC,CAAA;gBAEZ,MAAM,CAAC,KAAK,CAAC,MAAM;oBAClB,OAAO,KAAK,CAAA;gBACb,CAAC;gBAGD,MAAM,CAAC,MAAM;oBACZ,OAAO,cAAc,CAAE,IAAI,CAAE,CAAC,MAAM,EAAE,CAAA;gBACvC,CAAC;gBAGD,MAAM,CAAC,MAAM;oBACZ,OAAO,IAAI,CAAC,MAAM,EAAE,CAAA;gBACrB,CAAC;gBAGD,MAAM,CAAC,IAAI;oBACV,iBAAiB,CAAE,GAAG,CAAC,MAAM,EAAE,EAAG,KAAK,CAAE,CAAA;gBAC1C,CAAC;;YAZD;gBADE,aAAa,CAAC,CAAC,CAAC;mCAGjB;YAGD;gBADE,aAAa,CAAC,CAAC,CAAC;mCAGjB;YAGD;gBADE,gBAAgB;iCAGjB;YAIF,MAAM,eAAe,CAAE,GAAG,CAAE,CAAC,IAAI,EAAE,CAAA;QACpC,CAAC;QAED,4BAA4B,CAAE,CAAC;YAE9B,IAAI,SAAS,GAAG,KAAK,CAAA;YAErB,MAAM,GAAI,SAAQ,YAAY;gBAE7B,MAAM,CAAC,CAAC,GAAG,CAAC,CAAA;gBAGZ,MAAM,CAAC,OAAO,CAAE,IAAI,GAAG,IAAI;oBAC1B,OAAO,IAAI,CAAA;gBACZ,CAAC;gBAGD,MAAM,CAAC,OAAO;oBACb,OAAO;wBACN,UAAU;4BACT,SAAS,GAAG,IAAI,CAAA;wBACjB,CAAC;qBACD,CAAA;gBACF,CAAC;gBAGD,MAAM,CAAC,MAAM;oBACZ,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA;gBAC9C,CAAC;;YAhBD;gBADE,aAAa,CAAC,CAAC,CAAC;oCAGjB;YAGD;gBADE,aAAa,CAAC,CAAC,CAAC;oCAOjB;YAGD;gBADE,aAAa,CAAC,CAAC,CAAC;mCAGjB;YAIF,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,EAAE,CAAA;YAC5B,cAAc,CAAE,OAAO,CAAE,CAAA;YAEzB,GAAG,CAAC,OAAO,CAAE,KAAK,CAAE,CAAA;YACpB,eAAe,CAAE,GAAG,CAAC,MAAM,EAAE,CAAE,CAAA;YAE/B,GAAG,CAAC,OAAO,CAAE,IAAI,CAAE,CAAA;YACnB,iBAAiB,CAAE,GAAG,CAAC,MAAM,EAAE,EAAG,OAAO,CAAE,CAAA;YAE3C,eAAe,CAAC,IAAI,EAAE,CAAA;YACtB,eAAe,CAAE,SAAS,CAAE,CAAA;YAE5B,GAAG,CAAC,OAAO,CAAE,KAAK,CAAE,CAAA;YACpB,eAAe,CAAC,IAAI,EAAE,CAAA;YACtB,cAAc,CAAE,SAAS,CAAE,CAAA;YAE3B,GAAG,CAAC,OAAO,CAAE,IAAI,CAAE,CAAA;YACnB,kBAAkB,CAAE,GAAG,CAAC,MAAM,EAAE,EAAG,OAAO,CAAE,CAAA;QAE7C,CAAC;QAGD,KAAK,CAAC,iCAAiC,CAAC,CAAC;YAExC,MAAM,GAAI,SAAQ,YAAY;gBAE7B,MAAM,CAAC,CAAC,GAAG,CAAC,CAAA;gBAEZ,MAAM,CAAC,OAAO,GAAG,CAAC,CAAA;gBAGlB,MAAM,CAAC,MAAM,CAAE,IAAW;oBACzB,OAAO,CAAE,eAAe,CAAE,GAAE,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAE,IAAI,CAAC,CAAC,CAAE,GAAG,CAAC,CAAA;gBAC3D,CAAC;gBAED,MAAM,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC;gBAGvB,MAAM,CAAC,KAAK;oBACX,OAAO,EAAG,IAAI,CAAC,OAAO,CAAA;gBACvB,CAAC;gBAGD,MAAM,CAAC,MAAM;oBACZ,IAAI,IAAI,CAAC,MAAM,EAAE;wBAAG,cAAc,CAAE,IAAI,CAAE,CAAC,IAAI,EAAE,CAAA;oBACjD,OAAO,IAAI,CAAC,KAAK,EAAE,CAAA;gBACpB,CAAC;gBAGD,MAAM,CAAC,IAAI;gBACX,CAAC;;YAnBD;gBADE,aAAa,CAAC,CAAC,CAAC;mCAGjB;YAKD;gBADE,aAAa,CAAC,CAAC,CAAC;kCAGjB;YAGD;gBADE,aAAa,CAAC,CAAC,CAAC;mCAIjB;YAGD;gBADE,gBAAgB;iCAEjB;YAIF,iBAAiB,CAAE,GAAG,CAAC,MAAM,EAAE,EAAG,CAAC,CAAE,CAAA;YAErC,GAAG,CAAC,MAAM,CAAE,IAAI,CAAE,CAAA;YAClB,eAAe,CAAC,IAAI,EAAE,CAAA;YACtB,iBAAiB,CAAE,MAAM,eAAe,CAAE,GAAG,CAAE,CAAC,MAAM,EAAE,EAAG,CAAC,CAAE,CAAA;QAE/D,CAAC;QAED,8BAA8B,CAAE,CAAC;YAEhC,MAAM,IAAK,SAAQ,YAAY;gBAE9B,MAAM,CAAC,CAAC,GAAG,CAAC,CAAA;gBAGZ,MAAM,CAAC,SAAS,CAAE,IAAY,EAAG,IAAa;oBAC7C,OAAO,IAAI,IAAI,IAAI,CAAA;gBACpB,CAAC;gBAGD,MAAM,CAAC,UAAU;oBAChB,OAAO;wBACN,IAAI,CAAC,SAAS,CAAE,KAAK,CAAE;wBACvB,IAAI,CAAC,SAAS,CAAE,MAAM,CAAE;qBACxB,CAAA;gBACF,CAAC;gBAGD,MAAM,CAAC,IAAI;gBAGX,CAAC;;YAhBD;gBADE,aAAa,CAAC,CAAC,CAAC;uCAGjB;YAGD;gBADE,aAAa,CAAC,CAAC,CAAC;wCAMjB;YAGD;gBADE,gBAAgB;kCAIjB;YAIF,gBAAgB,CAAE,IAAI,CAAC,UAAU,EAAE,EAAE,CAAE,KAAK,EAAE,MAAM,CAAE,CAAE,CAAA;YAExD,IAAI,CAAC,SAAS,CAAE,KAAK,EAAE,KAAK,CAAE,CAAA;YAC9B,gBAAgB,CAAE,IAAI,CAAC,UAAU,EAAE,EAAE,CAAE,KAAK,EAAE,MAAM,CAAE,CAAE,CAAA;QAEzD,CAAC;QAED,+BAA+B,CAAE,CAAC;YAEjC,MAAM,GAAI,SAAQ,YAAY;gBAE7B,MAAM,CAAC,CAAC,GAAG,CAAC,CAAA;gBAGZ,MAAM,CAAC,IAAI,CAAE,GAAuB;oBACnC,OAAO,IAAI,MAAM,CAAE,SAAS,GAAG,EAAE,CAAE,CAAA;gBACpC,CAAC;gBAGD,MAAM,CAAC,IAAI;oBAEV,gBAAgB,CAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAE,IAAI,MAAM,CAAE,WAAW,CAAE,CAAE,CAAA;oBAC/D,iBAAiB,CAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAE,CAAA;gBAExD,CAAC;;YAVD;gBADE,aAAa,CAAC,CAAC,CAAC;iCAGjB;YAGD;gBADE,gBAAgB;iCAMjB;YAIF,GAAG,CAAC,IAAI,EAAE,CAAA;QACX,CAAC;QAED,0BAA0B,CAAE,CAAC;YAE5B,MAAM,GAAI,SAAQ,YAAY;gBAE7B,MAAM,CAAC,CAAC,GAAG,CAAC,CAAA;gBAGZ,MAAM,CAAC,IAAI,CAAE,CAAS,EAAE,CAAS;oBAChC,OAAO,IAAI,MAAM,CAAE,SAAS,CAAC,IAAI,CAAC,EAAE,CAAE,CAAA;gBACvC,CAAC;gBAGD,MAAM,CAAC,IAAI;oBAEV,gBAAgB,CAAE,IAAI,CAAC,IAAI,CAAC,CAAC,EAAC,CAAC,CAAC,EAAE,IAAI,MAAM,CAAE,WAAW,CAAE,CAAE,CAAA;oBAC7D,iBAAiB,CAAE,IAAI,CAAC,IAAI,CAAC,CAAC,EAAC,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,EAAC,CAAC,CAAC,CAAE,CAAA;gBAEpD,CAAC;;YAVD;gBADE,aAAa,CAAC,CAAC,CAAC;iCAGjB;YAGD;gBADE,gBAAgB;iCAMjB;YAIF,GAAG,CAAC,IAAI,EAAE,CAAA;QACX,CAAC;QAED,8BAA8B;YAE7B,MAAM,GAAI,SAAQ,YAAY;gBAG7B,MAAM,CAAC,KAAK;oBACX,OAAO,IAAI,YAAY,CAAA;gBACxB,CAAC;gBAGD,MAAM,CAAC,IAAI,CAAE,MAAc;oBAC1B,OAAO,IAAI,YAAY,CAAA;gBACxB,CAAC;gBAGD,MAAM,CAAC,QAAQ,CAAE,MAAc,EAAE,KAAiB;oBACjD,OAAO,IAAI,YAAY,CAAA;gBACxB,CAAC;aAED;YAdA;gBADE,aAAa,CAAC,CAAC,CAAC;kCAGjB;YAGD;gBADE,aAAa,CAAC,CAAC,CAAC;iCAGjB;YAGD;gBADE,aAAa,CAAC,CAAC,CAAC;qCAGjB;YAIF,iBAAiB,CAAE,GAAI,GAAG,CAAC,KAAK,EAAG,EAAE,EAAG,aAAa,CAAE,CAAA;YACvD,iBAAiB,CAAE,GAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAE,EAAE,EAAG,eAAe,CAAE,CAAA;YAC3D,iBAAiB,CAAE,GAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAC,CAAC,GAAG,CAAC,CAAE,EAAE,EAAG,yBAAyB,CAAE,CAAA;QAEhF,CAAC;QAED,WAAW,CAAE,CAAC;YAEb,MAAM,GAAI,SAAQ,YAAY;gBAE7B,MAAM,CAAC,CAAC,GAAG,CAAC,CAAA;gBAEZ,MAAM,CAAC,IAAI,GAAG,CAAC,CAAA;gBAGf,MAAM,CAAC,KAAK,CAAE,KAAa,EAAG,IAAa;oBAC1C,IAAI,IAAI;wBAAG,OAAO,IAAI,CAAA;oBACtB,IAAI,KAAK,GAAG,CAAC;wBAAG,OAAO,CAAC,CAAA;oBACxB,EAAG,IAAI,CAAC,IAAI,CAAA;oBACZ,OAAO,IAAI,CAAC,KAAK,CAAE,KAAK,GAAG,CAAC,CAAE,GAAG,IAAI,CAAC,KAAK,CAAE,KAAK,GAAG,CAAC,CAAE,CAAA;gBACzD,CAAC;;YALD;gBADE,aAAa,CAAC,CAAC,CAAC;kCAMjB;YAIF,iBAAiB,CAAE,GAAG,CAAC,KAAK,CAAE,CAAC,CAAE,EAAE,CAAC,CAAE,CAAA;YACtC,iBAAiB,CAAE,GAAG,CAAC,IAAI,EAAE,CAAC,CAAE,CAAA;YAEhC,GAAG,CAAC,KAAK,CAAE,CAAC,EAAE,CAAC,CAAE,CAAA;YACjB,iBAAiB,CAAE,GAAG,CAAC,KAAK,CAAE,CAAC,CAAE,EAAE,CAAC,CAAE,CAAA;YACtC,iBAAiB,CAAE,GAAG,CAAC,IAAI,EAAE,CAAC,CAAE,CAAA;QAEjC,CAAC;KAiCD,CAAC,CAAA;AACH,CAAC,EAxvBS,CAAC,KAAD,CAAC,QAwvBV;;;;ACxvBD,IAAU,CAAC,CA0BV;AA1BD,WAAU,CAAC;IACV,SAAS,CAAC;QAET,gBAAgB;YAEf,MAAM,KAAM,SAAQ,YAAY;gBAG/B,MAAM,CAAC,KAAK,CAAE,IAA+B;oBAC5C,IAAI,CAAC,IAAI;wBAAG,OAAO,EAAE,CAAA;oBACrB,OAAO;wBACN,GAAI,eAAe,CAAE,GAAE,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,CAAE,IAAI,EAAE;wBAC9C,GAAI,IAAI;qBACR,CAAA;gBACF,CAAC;aAED;YARA;gBADE,aAAa,CAAC,CAAC,CAAC;oCAOjB;YAIF,gBAAgB,CAAE,KAAK,CAAC,KAAK,EAAE,EAAE,EAAE,CAAE,CAAA;YAErC,gBAAgB,CAAE,KAAK,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAE,CAAA;YAC3D,gBAAgB,CAAE,KAAK,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAE,CAAA;QAEtE,CAAC;KAED,CAAC,CAAA;AACH,CAAC,EA1BS,CAAC,KAAD,CAAC,QA0BV;;;;AC1BD,IAAU,CAAC,CAkBV;AAlBD,WAAU,CAAC;IACV,SAAS,CAAE;QAEV,oBAAoB;YACnB,MAAM,CAAE,SAAQ,WAAW;gBAC1B,GAAG;oBACF,OAAO,CAAC,CAAA;gBACT,CAAC;aACD;YAED,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBACd,GAAG,EAAG,GAAE,EAAE,CAAC,CAAC;aACZ,CAAC,CAAA;YAEF,iBAAiB,CAAE,CAAC,CAAC,GAAG,EAAE,EAAG,CAAC,CAAE,CAAA;QACjC,CAAC;KAED,CAAE,CAAA;AACJ,CAAC,EAlBS,CAAC,KAAD,CAAC,QAkBV;;;;AClBD,IAAU,CAAC,CAcV;AAdD,WAAU,CAAC;IACV,SAAS,CAAE;QAEV,0BAA0B;YACzB,iBAAiB,CAAE,UAAU,CAAE,CAAC,CAAE,CAAE,CAAC,CAAE,EAAG,CAAC,CAAE,CAAA;YAC7C,iBAAiB,CAAE,UAAU,CAAE,KAAK,CAAE,CAAE,CAAC,CAAE,EAAG,KAAK,CAAE,CAAA;YACrD,iBAAiB,CAAE,UAAU,CAAE,IAAI,CAAE,CAAE,CAAC,CAAE,EAAG,KAAK,CAAC,CAAE,CAAA;YACrD,iBAAiB,CAAE,UAAU,CAAE,KAAK,CAAC,CAAE,CAAE,CAAC,CAAE,EAAG,KAAK,CAAC,CAAE,CAAA;YAEvD,iBAAiB,CAAE,UAAU,CAAY,KAAK,CAAC,CAAE,CAAC,GAAG,CAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAE,CAAE,CAAC,CAAE,EAAG,KAAK,CAAC,CAAE,CAAA;YAC1F,iBAAiB,CAAE,UAAU,CAAE,CAAC,CAAE,CAAC,GAAG,CAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAE,CAAE,CAAC,CAAE,EAAG,GAAG,CAAE,CAAA;QACzE,CAAC;KAED,CAAE,CAAA;AACJ,CAAC,EAdS,CAAC,KAAD,CAAC,QAcV;;;;ACdD,IAAU,CAAC,CA0KV;AA1KD,WAAU,CAAC;IAEV,SAAS,CAAC;QAET,cAAc;YAEb,MAAM,KAAM,SAAQ,YAAY;gBAE/B,MAAM,CAAC,IAAI,CAA+B,IAAiD;oBAE1F,OAAO,UAAwB,GAAI,IAAW;wBAC7C,OAAO,IAAI,CAAC,IAAI,CAAE,IAAI,EAAG,GAAI,IAAI,CAAE,GAAG,CAAW,CAAA;oBAClD,CAAC,CAAA;gBAEF,CAAC;aAED;YAED,iBAAiB,CAAE,KAAK,CAAC,GAAG,CAAE,GAAE,EAAE,CAAC,CAAC,CAAE,EAAG,CAAC,CAAE,CAAA;QAE7C,CAAC;QAED,eAAe;YAEd,MAAM,KAAM,SAAQ,YAAY;gBAE/B,MAAM,CAAC,IAAI,CAA+B,IAAiD;oBAE1F,OAAO,UAAwB,GAAI,IAAW;wBAC7C,OAAO,IAAI,CAAC,IAAI,CAAE,IAAI,EAAG,GAAI,IAAI,CAAE,GAAG,CAAW,CAAA;oBAClD,CAAC,CAAA;gBAEF,CAAC;aAED;YAED,MAAM,GAAG,GAAG;gBACX,KAAK,EAAG,CAAC;gBACT,GAAG,EAAG,KAAK,CAAC,IAAI,CAAE,UAAsC,CAAC;oBACxD,OAAO,CAAC,IAAI,IAAI,CAAC,KAAK,CAAA;gBACvB,CAAC,CAAE;aACH,CAAA;YAED,iBAAiB,CAAE,GAAG,CAAC,GAAG,CAAE,CAAC,CAAE,EAAG,CAAC,CAAE,CAAA;QAEtC,CAAC;QAED,uBAAuB;YAEtB,MAAM,KAAM,SAAQ,YAAY;gBAE/B,MAAM,CAAC,IAAI,GAAG,CAAC,CAAA;gBAEf,MAAM,CAAC,IAAI,CAA+B,IAAiD;oBAE1F,OAAO,UAAwB,GAAI,IAAW;wBAC7C,OAAO,KAAK,CAAC,IAAI,GAAG,CAAE,IAAI,CAAC,IAAI,CAAE,IAAI,EAAG,GAAI,IAAI,CAAE,IAAI,CAAC,CAAE,GAAG,CAAW,CAAA;oBACxE,CAAC,CAAA;gBAEF,CAAC;;YAIF,MAAM,GAAG;gBAGR,MAAM,KAAK,GAAG;oBACb,OAAO,CAAC,CAAA;gBACT,CAAC;gBACD,MAAM,KAAK,GAAG,CAAE,IAAa,IAAI,CAAC;aAElC;YALA;gBADE,KAAK,CAAC,KAAK;gCAGZ;YAKF,iBAAiB,CAAE,GAAG,CAAC,GAAG,EAAG,CAAC,CAAE,CAAA;YAEhC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAA;YACX,iBAAiB,CAAE,KAAK,CAAC,IAAI,EAAG,CAAC,CAAE,CAAA;YACnC,iBAAiB,CAAE,GAAG,CAAC,GAAG,EAAG,CAAC,CAAE,CAAA;QAEjC,CAAC;QAED,0BAA0B;YAEzB,MAAM,KAAM,SAAQ,YAAY;gBAE/B,MAAM,CAAC,IAAI,CAA+B,IAAiD;oBAE1F,OAAO,UAAwB,GAAI,IAAW;wBAC7C,OAAO,IAAI,CAAC,IAAI,CAAE,IAAI,EAAG,GAAI,IAAI,CAAE,GAAG,CAAW,CAAA;oBAClD,CAAC,CAAA;gBAEF,CAAC;aAED;YAED,MAAM,IAAI;gBAET,KAAK,GAAG,CAAC,CAAA;gBAGT,GAAG,CAAE,CAAU;oBACd,OAAO,CAAC,IAAI,IAAI,CAAC,KAAK,CAAA;gBACvB,CAAC;aAED;YAJA;gBADE,KAAK,CAAC,MAAM;2CAGb;YAIF,MAAM,IAAI,GAAG,IAAI,CAAA;YACjB,MAAM,GAAG,GAAG,IAAI,IAAI,CAAA;YAEpB,iBAAiB,CAAE,GAAG,CAAC,GAAG,CAAE,CAAC,CAAE,EAAG,CAAC,CAAE,CAAA;QAEtC,CAAC;QAED,wBAAwB;YAEvB,MAAM,KAAM,SAAQ,YAAY;gBAE/B,MAAM,CAAC,IAAI,CAA+B,IAAiD;oBAE1F,OAAO,UAAwB,GAAI,IAAW;wBAC7C,OAAO,IAAI,CAAC,IAAI,CAAE,IAAI,EAAG,GAAI,IAAI,CAAE,GAAG,CAAW,CAAA;oBAClD,CAAC,CAAA;gBAEF,CAAC;aAED;YAED,MAAM,GAAG;gBAER,MAAM,CAAC,KAAK,GAAG,CAAC,CAAA;gBAGhB,MAAM,CAAC,GAAG,CAAE,CAAU;oBACrB,OAAO,CAAC,IAAI,IAAI,CAAC,KAAK,CAAA;gBACvB,CAAC;;YAFD;gBADE,KAAK,CAAC,MAAM;gCAGb;YAIF,iBAAiB,CAAE,GAAG,CAAC,GAAG,CAAE,CAAC,CAAE,EAAG,CAAC,CAAE,CAAA;QAEtC,CAAC;QAED,gBAAgB;YAEf,MAAM,MAAO,SAAQ,YAAY;gBAEhC,MAAM,CAAC,IAAI,CAA+B,IAA8C;oBAEvF,OAAO,UAAwB,GAAI,IAAW;wBAE7C,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAE,IAAI,EAAG,GAAG,IAAI,CAAE,CAAA;wBACvC,GAAG,CAAC,GAAG,EAAG,CAAA;wBACV,OAAO,GAAG,CAAA;oBAEX,CAAC,CAAA;gBAEF,CAAC;aAED;YAGD,IAAM,GAAG,GAAT,MAAM,GAAG;gBACY;gBAApB,YAAoB,GAAY;oBAAZ,QAAG,GAAH,GAAG,CAAS;gBAAI,CAAC;aACrC,CAAA;YAFK,GAAG;gBADP,MAAM,CAAC,KAAK;eACR,GAAG,CAER;YAED,iBAAiB,CAAE,IAAI,GAAG,CAAE,CAAC,CAAE,CAAC,GAAG,EAAG,CAAC,CAAE,CAAA;QAE1C,CAAC;KAED,CAAC,CAAA;AACH,CAAC,EA1KS,CAAC,KAAD,CAAC,QA0KV;;;;AC1KD,IAAU,CAAC,CA8BV;AA9BD,WAAU,CAAC;IAEV,SAAS,CAAC;QAET,eAAe;YAEd,MAAM,GAAG;gBAER,MAAM,CAAC,GAAG,GAAG,CAAC,CAAA;gBAGd,MAAM,KAAK,GAAG;oBACb,OAAO,EAAG,IAAI,CAAC,GAAG,CAAA;gBACnB,CAAC;gBACD,MAAM,KAAK,GAAG,CAAE,IAAa,IAAI,CAAC;;YAHlC;gBADE,SAAS,CAAC,KAAK;gCAGhB;YAKF,iBAAiB,CAAE,GAAG,CAAC,GAAG,EAAG,CAAC,CAAE,CAAA;YAChC,iBAAiB,CAAE,GAAG,CAAC,GAAG,EAAG,CAAC,CAAE,CAAA;YAEhC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAA;YAEX,iBAAiB,CAAE,GAAG,CAAC,GAAG,EAAG,CAAC,CAAE,CAAA;YAChC,iBAAiB,CAAE,GAAG,CAAC,GAAG,EAAG,CAAC,CAAE,CAAA;QAEjC,CAAC;KAED,CAAC,CAAA;AAEH,CAAC,EA9BS,CAAC,KAAD,CAAC,QA8BV;;;;AC9BD,IAAU,CAAC,CAsDV;AAtDD,WAAU,CAAC;IAEV,MAAa,aAAc,SAAQ,YAAY;QAG9C,MAAM,CAAC,KAAK,CAAE,IAAe;YAC5B,OAAO,IAAI,CAAA;QACZ,CAAC;QAGD,MAAM,CAAC,KAAK,CAAE,KAAuC;YAEpD,MAAM,IAAI,GAAG,eAAe,CAAE,GAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAE,KAAK,CAAE,CAAE,CAAA;YACxD,IAAI,IAAS,CAAA;YAEb,IAAI;gBACH,IAAI,GAAG,KAAK,CAAC,IAAI,EAAE,CAAA;aACnB;oBAAS;gBAET,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,QAAQ,EAAG;oBAClC,IAAI,GAAG,YAAY,eAAe,EAAG;wBACpC,IAAI,CAAC,KAAK,CAAE,GAAG,CAAE,CAAA;qBACjB;iBACD;aAED;YAED,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,iBAAiB,CAAE,IAAI,EAAE,IAAI,CAAE,EAAG;gBAC5D,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC;oBACrB,OAAO,EAAE,SAAS;oBAClB,KAAK,EAAE,KAAK;iBACZ,CAAC,CAAA;aACF;YAED,OAAO,IAAI,CAAA;QACZ,CAAC;QAGD,MAAM,CAAC,MAAM;YAEZ,IAAI;gBACH,IAAI,CAAC,KAAK,EAAE,EAAE,EAAE,CAAA;aAChB;oBAAS;gBACT,KAAK,MAAM,GAAG,IAAM,cAAc,EAAwC,CAAC,QAAQ,EAAG;oBACrF,IAAI,GAAG,YAAY,eAAe,EAAG;wBACpC,IAAI,CAAC,KAAK,CAAE,GAAG,CAAE,CAAA;qBACjB;iBACD;aACD;QAEF,CAAC;KAED;IA/CA;QADE,QAAQ;oCAGT;IAGD;QADE,YAAY;oCA0Bb;IAGD;QADE,QAAQ;qCAaT;IAhDW,eAAa,gBAkDzB,CAAA;AAEF,CAAC,EAtDS,CAAC,KAAD,CAAC,QAsDV;;;;ACrDD,IAAU,CAAC,CAsEV;AAtED,WAAU,CAAC;IACV,SAAS,CAAC;QAET,YAAY;YAEX,iBAAiB,CAAE,QAAQ,CAAE,IAAI,CAAE,EAAE,MAAM,CAAE,CAAA;YAC7C,iBAAiB,CAAE,QAAQ,CAAE,KAAK,CAAE,EAAE,OAAO,CAAE,CAAA;YAC/C,iBAAiB,CAAE,QAAQ,CAAE,IAAI,CAAE,EAAE,MAAM,CAAE,CAAA;YAC7C,iBAAiB,CAAE,QAAQ,CAAE,CAAC,CAAE,EAAE,GAAG,CAAE,CAAA;YACvC,iBAAiB,CAAE,QAAQ,CAAE,EAAE,CAAE,EAAE,IAAI,CAAE,CAAA;QAE1C,CAAC;QAED,cAAc;YAEb,iBAAiB,CAAE,QAAQ,CAAC,CAAE,IAAI,CAAE,CAAC,EAAE,QAAQ,CAAE,CAAA;YACjD,iBAAiB,CAAE,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,WAAW,CAAE,CAAA;YACtD,iBAAiB,CAAE,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,iBAAiB,CAAE,CAAA;QAEnE,CAAC;QAED,UAAU;YAET,MAAM,IAAI,GAAG,GAAE,EAAE,GAAE,CAAC,CAAA;YACpB,iBAAiB,CAAE,QAAQ,CAAE,IAAI,CAAE,EAAE,QAAQ,CAAE,IAAI,CAAE,CAAE,CAAA;YACvD,kBAAkB,CAAE,QAAQ,CAAE,IAAI,CAAE,EAAE,QAAQ,CAAE,GAAE,EAAE,GAAE,CAAC,CAAE,CAAE,CAAA;QAE5D,CAAC;QAED,SAAS;YAER,MAAM,IAAI;aAAG;YACb,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAA;YAEtB,iBAAiB,CAAE,QAAQ,CAAE,GAAG,CAAE,EAAE,QAAQ,CAAE,GAAG,CAAE,CAAE,CAAA;YACrD,kBAAkB,CAAE,QAAQ,CAAE,GAAG,CAAE,EAAE,QAAQ,CAAE,IAAI,IAAI,EAAE,CAAE,CAAE,CAAA;QAE9D,CAAC;QAED,UAAU;YAET,MAAM,GAAG,GAAG,4BAAc,CAAA;YAE1B,iBAAiB,CAAE,QAAQ,CAAE,GAAG,CAAE,EAAE,QAAQ,CAAE,GAAG,CAAE,CAAE,CAAA;YACrD,kBAAkB,CAAE,QAAQ,CAAE,GAAG,CAAE,EAAE,QAAQ,CAAE,4BAAc,CAAE,CAAE,CAAA;QAElE,CAAC;QAED,4BAA4B;YAE3B,MAAM,IAAI;gBACW;gBAAqB;gBAAzC,YAAoB,IAAY,EAAS,GAAW;oBAAhC,SAAI,GAAJ,IAAI,CAAQ;oBAAS,QAAG,GAAH,GAAG,CAAQ;gBAAI,CAAC;gBACzD,MAAM,KAAK,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAA,CAAC,CAAC;aACvC;YAED,iBAAiB,CAAE,QAAQ,CAAE,IAAI,IAAI,CAAE,KAAK,EAAE,EAAE,CAAE,CAAE,EAAE,gBAAgB,CAAE,CAAA;QAEzE,CAAC;QAED,wBAAwB;YAEvB,iBAAiB,CAAE,QAAQ,CAAE,IAAI,IAAI,CAAE,KAAK,CAAE,CAAE,EAAE,MAAM,CAAE,CAAA;YAC1D,iBAAiB,CAAE,QAAQ,CAAE,IAAI,IAAI,CAAE,0BAA0B,CAAE,CAAE,EAAE,4BAA4B,CAAE,CAAA;YAErG,iBAAiB,CAAE,QAAQ,CAAE,GAAG,CAAE,EAAE,OAAO,CAAE,CAAA;YAC7C,iBAAiB,CAAE,QAAQ,CAAE,SAAS,CAAE,EAAE,gBAAgB,CAAE,CAAA;QAE7D,CAAC;KAED,CAAC,CAAA;AACH,CAAC,EAtES,CAAC,KAAD,CAAC,QAsEV;;;;ACvED,IAAU,CAAC,CAIV;AAJD,WAAU,CAAC;IAEV,aAAa,CAAC,MAAM,EAAE,CAAA;AAEvB,CAAC,EAJS,CAAC,KAAD,CAAC,QAIV;;;;ACJD,IAAU,CAAC,CAaV;AAbD,WAAU,CAAC;IACV,SAAS,CAAE;QAEV,4BAA4B;YAE3B,MAAM,GAAG,GAAG,EAAE,GAAG,EAAG,UAAU,CAAE,IAAI,CAAC,MAAM,EAAE,CAAE,EAAE,CAAA;YAEjD,iBAAiB,CAAE,GAAG,CAAC,GAAG,EAAE,EAAG,GAAG,CAAC,GAAG,EAAE,CAAE,CAAA;YAC1C,iBAAiB,CAAE,GAAG,CAAC,GAAG,EAAE,EAAG,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAE,CAAA;QAE/C,CAAC;KAED,CAAE,CAAA;AACJ,CAAC,EAbS,CAAC,KAAD,CAAC,QAaV;;;;ACbD,IAAU,CAAC,CAaV;AAbD,WAAU,GAAC;IAEV,SAAS,CAAC;QAET,sBAAsB,CAAC,CAAC;YACvB,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAE,CAAC,EAAG,EAAE,mBAAmB,EAAG,CAAE,GAAE,EAAE,CAAC,GAAE,EAAE,GAAE,CAAC,CAAE,EAAE,EAAE,CAAE,CAAA;YAC5E,iBAAiB,CAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,EAAG,EAAE,CAAE,CAAA;YACrD,iBAAiB,CAAE,EAAE,CAAC,cAAc,CAAE,EAAE,CAAC,mBAAmB,CAAE,EAAG,qBAAqB,CAAE,CAAA;YACxF,iBAAiB,CAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,EAAG,qBAAqB,CAAE,CAAA;QACzE,CAAC;KAED,CAAC,CAAA;AAEH,CAAC,EAbS,CAAC,KAAD,CAAC,QAaV;;;;ACbD,IAAU,CAAC,CAkJV;AAlJD,WAAU,GAAC;IACV,SAAS,CAAE;QAEV,oBAAoB,CAAC,CAAC;YAErB,MAAM,mBAAoB,SAAQ,SAAS;aAAI;YAE/C,MAAM,oBAAqB,SAAQ,SAAS;gBAE3C,MAAM,CAAC,CAAC,GAAG,CAAC,CAAA;gBAGZ,OAAO,CAAE,EAAW;oBACnB,OAAO,IAAI,mBAAmB,EAAE,CAAA;gBACjC,CAAC;;YAFD;gBADE,YAAY;+DAGb;YAIF,IAAI,CAAC,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YAEpC,iBAAiB,CAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAG,8BAA8B,CAAE,CAAA;YACrE,iBAAiB,CAAE,CAAC,CAAC,OAAO,CAAE,CAAC,CAAE,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAG,yCAAyC,CAAE,CAAA;QAE9F,CAAC;QAED,yBAAyB,CAAC,CAAC;YAE1B,IAAI,CAAC,GAAG,IAAI,KAAM,SAAQ,SAAS;aAAI,CAAA;YACvC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;YAEP,iBAAiB,CAAE,CAAC,CAAC,QAAQ,EAAE,EAAG,CAAC,CAAC,QAAQ,EAAE,CAAE,CAAA;QAEjD,CAAC;QAED,gBAAgB,CAAC,CAAC;YAEjB,MAAM,cAAe,SAAQ,SAAS;gBACrC,GAAG;oBACF,OAAO,CAAE,KAAK,EAAG,CAAC,CAAE,CAAA;gBACrB,CAAC;aACD;YAED,IAAI,CAAC,GAAG,IAAI,cAAc,EAAE,CAAA;YAC5B,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;YAEP,IAAI,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAA;YAEvB,iBAAiB,CAAE,IAAI,CAAC,SAAS,EAAG,MAAM,CAAE,CAAA;QAE7C,CAAC;QAED,2BAA2B,CAAC,CAAC;YAE5B,MAAM,mBAAoB,SAAQ,SAAS;aAAI;YAE/C,MAAM,oBAAqB,SAAQ,SAAS;gBAG3C,OAAO,CAAE,EAAW;oBACnB,OAAO,IAAI,mBAAmB,EAAE,CAAA;gBACjC,CAAC;aAED;YAJA;gBADE,YAAY;+DAGb;YAIF,IAAI,CAAC,GAAG,IAAI,oBAAoB,EAAE,CAAA;YAClC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;YAEP,iBAAiB,CAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,YAAY,CAAE,qBAAqB,CAAE,EAAG,EAAE,CAAE,CAAA;YAC5E,iBAAiB,CAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,YAAY,CAAE,UAAU,CAAE,EAAG,EAAE,CAAE,CAAA;YAEjE,iBAAiB,CAAE,CAAC,CAAC,OAAO,CAAE,CAAC,CAAE,CAAC,QAAQ,EAAE,CAAC,YAAY,CAAE,6BAA6B,CAAE,EAAG,EAAE,CAAE,CAAA;YAEjG,iBAAiB,CAAE,CAAC,CAAC,OAAO,CAAE,CAAC,CAAE,CAAC,QAAQ,EAAE,CAAC,YAAY,CAAE,oBAAoB,CAAE,EAAG,EAAE,CAAE,CAAA;YACxF,iBAAiB,CAAE,CAAC,CAAC,OAAO,CAAE,CAAC,CAAE,CAAC,QAAQ,EAAE,CAAC,YAAY,CAAE,UAAU,CAAE,EAAG,EAAE,CAAE,CAAA;QAE/E,CAAC;QAED,0BAA0B,CAAC,CAAC;YAE3B,MAAM,cAAe,SAAQ,SAAS;gBACrC,IAAI;oBACH,OAAO;wBACN,MAAM,EAAG,OAAO;wBAChB,UAAU,EAAG,IAAI;wBACjB,QAAQ,EAAG,KAAK;qBAChB,CAAA;gBACF,CAAC;aACD;YAED,IAAI,CAAC,GAAG,IAAI,cAAc,EAAE,CAAA;YAC5B,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;YAEP,IAAI,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAA;YAEvB,iBAAiB,CAAE,IAAI,CAAC,YAAY,CAAE,MAAM,CAAE,EAAG,OAAO,CAAE,CAAA;YAC1D,iBAAiB,CAAE,IAAI,CAAC,YAAY,CAAE,UAAU,CAAE,EAAG,MAAM,CAAE,CAAA;YAC7D,iBAAiB,CAAE,IAAI,CAAC,YAAY,CAAE,QAAQ,CAAE,EAAG,IAAI,CAAE,CAAA;QAE1D,CAAC;QAED,sBAAsB,CAAC,CAAC;YAEvB,MAAM,cAAe,SAAQ,SAAS;gBACrC,KAAK;oBACJ,OAAO;wBACN,QAAQ,EAAG,IAAI;qBACf,CAAA;gBACF,CAAC;aACD;YAED,IAAI,CAAC,GAAG,IAAI,cAAc,EAAE,CAAA;YAC5B,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;YAEP,IAAI,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAiB,CAAA;YAEtC,iBAAiB,CAAE,IAAI,CAAC,MAAM,EAAG,IAAI,CAAE,CAAA;QAExC,CAAC;QAED,uBAAuB,CAAC,CAAC;YAExB,IAAI,OAAO,GAAG,KAAK,CAAA;YAEnB,MAAM,cAAe,SAAQ,SAAS;gBACrC,KAAK;oBACJ,OAAO;wBACN,OAAO,EAAG,CAAE,IAAa,EAAG,EAAE,CAAC,IAAI,CAAC,WAAW,CAAE,IAAI,CAAE;qBACvD,CAAA;gBACF,CAAC;gBAED,WAAW,CAAE,IAAa;oBACzB,OAAO,GAAG,IAAI,CAAA;gBACf,CAAC;aACD;YAED,IAAI,CAAC,GAAG,IAAI,cAAc,EAAE,CAAA;YAC5B,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;YAEP,IAAI,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAiB,CAAA;YACtC,IAAI,CAAC,KAAK,EAAE,CAAA;YAEZ,cAAc,CAAE,OAAO,CAAE,CAAA;QAE1B,CAAC;KAED,CAAE,CAAA;AACJ,CAAC,EAlJS,CAAC,KAAD,CAAC,QAkJV;;;;AClJD,IAAU,CAAC,CAmCV;AAnCD,WAAU,CAAC;IACV,MAAa,oCAAqC,SAAQ,SAAS;QASlE,IAAI;YACH,OAAO;gBACN,CAAC,EAAE,CAAC;gBACJ,CAAC,EAAE,CAAC;aACJ,CAAA;QACF,CAAC;KACD;IAfY,sCAAoC,uCAehD,CAAA;IAED,MAAa,8BAA+B,SAAQ,oCAAoC;QASvF,IAAI;YACH,OAAO;gBACN,GAAG,KAAK,CAAC,IAAI,EAAE;gBACf,CAAC,EAAE,CAAC;aACJ,CAAA;QACF,CAAC;KACD;IAfY,gCAA8B,iCAe1C,CAAA;AAEF,CAAC,EAnCS,CAAC,KAAD,CAAC,QAmCV;;;;ACnCD,IAAU,CAAC,CA0CV;AA1CD,WAAU,CAAC;IACV,MAAa,2BAA4B,SAAQ,SAAS;QAOzD,KAAK,CAAC,GAAS;YACd,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAA;QAChC,CAAC;QAOD,OAAO;YACN,OAAO,IAAI,CAAC,qBAAqB,EAAE,CAAA;QACpC,CAAC;QAQD,cAAc,CAAC,GAAS;YACvB,IAAK,GAAG,KAAK,SAAS;gBAAG,OAAO,GAAY,CAAA;YAC5C,OAAO,KAAK,CAAA;QACb,CAAC;QAOD,qBAAqB;YACpB,OAAO,KAAK,CAAA;QACb,CAAC;KACD;IAbA;QADE,QAAQ;qEAIT;IA7BW,6BAA2B,8BAuCvC,CAAA;AAEF,CAAC,EA1CS,CAAC,KAAD,CAAC,QA0CV;;;;AC1CD,IAAU,CAAC,CAuCV;AAvCD,WAAU,CAAC;IACV,MAAa,iCAAkC,SAAQ,SAAS;QAO/D,WAAW,CAAC,CAAO;YAClB,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QAC5B,CAAC;QAQD,IAAI;YACH,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,sCAAsC,EAAE,CAAA;YAE/D,OAAO,GAAG,CAAA;QACX,CAAC;KACD;IALA;QADE,QAAQ;iEAKT;IArBW,mCAAiC,oCAsB7C,CAAA;IAED,MAAa,sCAAuC,SAAQ,SAAS;QAQpE,KAAK,CAAC,GAAS;YACd,IAAK,GAAG,KAAK,SAAS;gBAAG,OAAO,GAAY,CAAA;YAC5C,OAAO,CAAC,CAAA;QACT,CAAC;KACD;IAJA;QADE,QAAQ;uEAIT;IAXW,wCAAsC,yCAYlD,CAAA;AAEF,CAAC,EAvCS,CAAC,KAAD,CAAC,QAuCV;;;;ACvCD,IAAU,CAAC,CAmDV;AAnDD,WAAU,CAAC;IACV,MAAa,0BAA2B,SAAQ,SAAS;QAOxD,IAAI;YACH,OAAO,CAAC,CAAA;QACT,CAAC;QAOD,IAAI;YACH,OAAO,IAAI,CAAA;QACZ,CAAC;QAOD,GAAG;YACF,OAAO,MAAM,CAAA;QACd,CAAC;QAOD,GAAG;YACF,OAAO,EACY,CAAA;QACpB,CAAC;QAOD,UAAU;YACT,OAAO,EACe,CAAA;QACvB,CAAC;KACD;IAhDY,4BAA0B,6BAgDtC,CAAA;AAEF,CAAC,EAnDS,CAAC,KAAD,CAAC,QAmDV;;;;ACnDD,IAAU,CAAC,CAuCV;AAvCD,WAAU,CAAC;IACV,MAAa,2CAA4C,SAAQ,SAAS;QAQzE,IAAI,CAAC,EAAO;YACX,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,gDAAgD,EAAE,CAAA;YAEzE,GAAG,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;YAE7B,OAAO,GAAG,CAAA;QACX,CAAC;QAOD,IAAI,CAAC,EAAO;YACX,OAAO,IAAW,CAAA;QACnB,CAAC;KACD;IAhBA;QADE,YAAY;2EAOb;IAdW,6CAA2C,8CAwBvD,CAAA;IAED,MAAa,gDAAiD,SAAQ,SAAS;QAO9E,GAAG;YACF,OAAO,IAAW,CAAA;QACnB,CAAC;KACD;IAVY,kDAAgD,mDAU5D,CAAA;AAEF,CAAC,EAvCS,CAAC,KAAD,CAAC,QAuCV;;;;ACvCD,IAAU,CAAC,CAkFV;AAlFD,WAAU,GAAC;IAAC,IAAA,EAAE,CAkFb;IAlFW,WAAA,EAAE;QAEb,SAAS,CAAE;YACV,cAAc,CAAE,CAAC;gBAChB,MAAM,GAAG,GAAG,0BAA0B,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;gBAElD,iBAAiB,CAAE,GAAG,CAAC,IAAI,EAAE,EAAG,CAAC,CAAE,CAAA;gBACnC,iBAAiB,CAAE,GAAG,CAAC,IAAI,EAAE,EAAG,IAAI,CAAE,CAAA;gBACtC,iBAAiB,CAAE,GAAG,CAAC,GAAG,EAAE,EAAG,MAAM,CAAE,CAAA;gBACvC,cAAc,CAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAE,CAAA;gBAC1C,cAAc,CAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAE,CAAA;YAClD,CAAC;YAED,eAAe,CAAE,CAAC;gBACjB,MAAM,GAAG,GAAG,2BAA2B,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;gBACnD,iBAAiB,CAAE,GAAG,CAAC,KAAK,EAAE,EAAG,KAAK,CAAE,CAAA;YACzC,CAAC;YAED,cAAc,CAAE,CAAC;gBAChB,MAAM,GAAG,GAAG,2BAA2B,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;gBAEnD,cAAc,CAAE,GAAG,CAAC,KAAK,EAAE,KAAK,GAAG,CAAE,CAAA;gBAErC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;gBACd,iBAAiB,CAAE,GAAG,CAAC,KAAK,EAAE,EAAG,GAAG,CAAE,CAAA;YACvC,CAAC;YAED,cAAc,CAAE,CAAC;gBAChB,MAAM,GAAG,GAAG,2BAA2B,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;gBAEnD,eAAe,CAAE,GAAG,CAAC,qBAAqB,EAAE,CAAE,CAAA;gBAC9C,eAAe,CAAE,GAAG,CAAC,OAAO,EAAE,CAAE,CAAA;YACjC,CAAC;YAED,eAAe,CAAE,CAAC;gBACjB,MAAM,GAAG,GAAG,iCAAiC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;gBACzD,cAAc,CAAE,GAAG,CAAC,IAAI,EAAE,YAAY,sCAAsC,CAAC,CAAA;YAC9E,CAAC;YAED,uCAAuC,CAAE,CAAC;gBACzC,MAAM,GAAG,GAAG,iCAAiC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;gBAEzD,MAAM,GAAG,GAAG,GAAG,CAAA;gBAEf,cAAc,CAAE,GAAG,CAAC,WAAW,EAAE,KAAK,GAAG,CAAE,CAAA;gBAC3C,cAAc,CAAE,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,KAAK,GAAG,CAAE,CAAA;gBAE5C,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;gBAEpB,iBAAiB,CAAE,GAAG,CAAC,WAAW,EAAE,EAAE,GAAG,CAAE,CAAA;gBAC3C,iBAAiB,CAAE,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE,GAAG,CAAE,CAAA;YAC7C,CAAC;YAED,sCAAsC,CAAE,CAAC;gBACxC,MAAM,GAAG,GAAG,iCAAiC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;gBAEzD,MAAM,GAAG,GAAG,GAAG,CAAA;gBAEf,cAAc,CAAE,GAAG,CAAC,WAAW,EAAE,KAAK,GAAG,CAAE,CAAA;gBAC3C,cAAc,CAAE,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,KAAK,GAAG,CAAE,CAAA;gBAE5C,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;gBAErB,iBAAiB,CAAE,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE,GAAG,CAAE,CAAA;gBAC5C,iBAAiB,CAAE,GAAG,CAAC,WAAW,EAAE,EAAE,GAAG,CAAE,CAAA;YAC5C,CAAC;YAED,oBAAoB,CAAE,CAAC;gBACtB,MAAM,GAAG,GAAG,8BAA8B,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;gBAEtD,gBAAgB,CAAE,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAE,CAAA;YAC/C,CAAC;YAED,sBAAsB,CAAE,CAAC;gBACxB,MAAM,GAAG,GAAG,2CAA2C,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;gBACnE,MAAM,GAAG,GAAG,GAAG,CAAA;gBACf,GAAG,CAAC,IAAI,GAAG,CAAC,KAAU,EAAE,EAAE,CAAC,KAAK,CAAA;gBAEhC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,GAAG,CAAC,CAAA;YAC5C,CAAC;SAED,CAAE,CAAA;IACJ,CAAC,EAlFW,EAAE,GAAF,MAAE,KAAF,MAAE,QAkFb;AAAD,CAAC,EAlFS,CAAC,KAAD,CAAC,QAkFV;;;;AClFD,IAAU,CAAC,CA4EV;AA5ED,WAAU,GAAC;IACV,SAAS,CAAE;QAEV,cAAc;YAEb,iBAAiB,CAAE,SAAS,CAAC,UAAU,CAAE,YAAY,CAAE,CAAC,GAAG,CAAC,MAAM,EAAG,CAAC,CAAE,CAAA;YACxE,iBAAiB,CAAE,SAAS,CAAC,UAAU,CAAE,YAAY,CAAE,CAAC,GAAG,CAAE,CAAC,CAAE,CAAC,IAAI,EAAG,KAAK,CAAE,CAAA;YAC/E,iBAAiB,CAAE,SAAS,CAAC,UAAU,CAAE,WAAW,CAAE,CAAC,GAAG,CAAC,MAAM,EAAG,CAAC,CAAE,CAAA;YAEvE,iBAAiB,CAAE,SAAS,CAAC,UAAU,CAAE,eAAe,CAAE,CAAC,GAAG,CAAC,MAAM,EAAG,CAAC,CAAE,CAAA;YAC3E,iBAAiB,CAAE,SAAS,CAAC,UAAU,CAAE,eAAe,CAAE,CAAC,GAAG,CAAE,CAAC,CAAE,CAAC,IAAI,EAAG,KAAK,CAAE,CAAA;YAElF,iBAAiB,CAAE,SAAS,CAAC,UAAU,CAAE,eAAe,CAAE,CAAC,GAAG,CAAE,CAAC,CAAE,CAAC,GAAG,CAAE,CAAC,CAAE,CAAC,GAAG,CAAE,CAAC,CAAE,CAAC,IAAI,EAAG,KAAK,CAAE,CAAA;YACpG,iBAAiB,CAAE,SAAS,CAAC,UAAU,CAAE,2BAA2B,CAAE,CAAC,GAAG,CAAE,CAAC,CAAE,CAAC,GAAG,CAAE,CAAC,CAAE,CAAC,GAAG,CAAE,CAAC,CAAE,CAAC,IAAI,EAAG,KAAK,CAAE,CAAA;YAEhH,iBAAiB,CAAE,SAAS,CAAC,UAAU,CAAE,kBAAkB,CAAE,CAAC,QAAQ,EAAE,EAAG,kBAAkB,CAAE,CAAA;QAChG,CAAC;QAED,WAAW;YACV,iBAAiB,CAAE,SAAS,CAAC,UAAU,CAAE,SAAS,CAAE,CAAC,MAAM,CAAE,IAAI,SAAS,EAAG,GAAG,EAAG,GAAG,EAAG,GAAG,CAAE,CAAC,QAAQ,EAAE,EAAG,UAAU,CAAE,CAAA;YACxH,iBAAiB,CAAE,SAAS,CAAC,UAAU,CAAE,KAAK,CAAE,CAAC,MAAM,CAAE,IAAI,SAAS,EAAG,GAAG,EAAG,GAAG,EAAG,GAAG,EAAG,GAAG,CAAE,CAAC,QAAQ,EAAE,EAAG,YAAY,CAAE,CAAA;YAE5H,iBAAiB,CAAE,SAAS,CAAC,UAAU,CAAE,SAAS,CAAE,CAAC,MAAM,CAAE,IAAI,SAAS,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,CAAE,CAAC,QAAQ,EAAE,EAAG,UAAU,CAAE,CAAA;YAClH,iBAAiB,CAAE,SAAS,CAAC,UAAU,CAAE,KAAK,CAAE,CAAC,MAAM,CAAE,IAAI,SAAS,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,CAAE,CAAC,QAAQ,EAAE,EAAG,gBAAgB,CAAE,CAAA;YAExH,iBAAiB,CAAE,SAAS,CAAC,UAAU,CAAE,SAAS,CAAE,CAAC,MAAM,CAAE,IAAI,SAAS,EAAG,IAAI,EAAG,IAAI,EAAG,IAAI,CAAE,CAAC,QAAQ,EAAE,EAAG,UAAU,CAAE,CAAA;YAC3H,iBAAiB,CAAE,SAAS,CAAC,UAAU,CAAE,KAAK,CAAE,CAAC,MAAM,CAAE,IAAI,SAAS,EAAG,IAAI,EAAG,IAAI,EAAG,IAAI,EAAG,IAAI,CAAE,CAAC,QAAQ,EAAE,EAAG,gBAAgB,CAAE,CAAA;QACrI,CAAC;QAED,UAAU;YACT,iBAAiB,CAAE,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAG,KAAK,CAAE,CAAA;YAC9D,iBAAiB,CAAE,SAAS,CAAC,QAAQ,CAAC,CAAE,KAAK,EAAG,IAAI,CAAE,CAAC,CAAC,QAAQ,EAAE,EAAG,sBAAsB,CAAE,CAAA;YAC7F,iBAAiB,CAAE,SAAS,CAAC,QAAQ,CAAC,CAAE,CAAC,EAAG,CAAC,EAAG,GAAG,CAAE,CAAC,CAAC,QAAQ,EAAE,EAAG,sBAAsB,CAAE,CAAA;YAC5F,iBAAiB,CAAE,SAAS,CAAC,QAAQ,CAAC,CAAE,EAAE,EAAG,KAAK,EAAG,UAAU,CAAE,CAAC,CAAC,QAAQ,EAAE,EAAG,gDAAgD,CAAE,CAAA;YAClI,iBAAiB,CAAE,SAAS,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAG,KAAK,EAAG,UAAU,EAAG,KAAK,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAG,yDAAyD,CAAE,CAAA;QACvJ,CAAC;QAED,QAAQ;YACP,iBAAiB,CAAE,IAAI,CAAC,SAAS,CAAE,SAAS,CAAC,UAAU,CAAE,KAAK,CAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE,EAAG,IAAI,CAAE,CAAA;YAClF,iBAAiB,CAAE,IAAI,CAAC,SAAS,CAAE,SAAS,CAAC,UAAU,CAAE,sBAAsB,CAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE,EAAG,cAAc,CAAE,CAAA;YAC7G,iBAAiB,CAAE,IAAI,CAAC,SAAS,CAAE,SAAS,CAAC,UAAU,CAAE,sBAAsB,CAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE,EAAG,WAAW,CAAE,CAAA;YAC1G,iBAAiB,CAAE,IAAI,CAAC,SAAS,CAAE,SAAS,CAAC,UAAU,CAAE,gDAAgD,CAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE,EAAG,wBAAwB,CAAE,CAAA;YACjJ,iBAAiB,CAAE,IAAI,CAAC,SAAS,CAAE,SAAS,CAAC,UAAU,CAAE,yDAAyD,CAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE,EAAG,iCAAiC,CAAE,CAAA;QACpK,CAAC;QAED,MAAM;YAEL,MAAM,GAAG,GAAG,SAAS,CAAC,UAAU,CAAE,aAAa,CAAE,CAAC,IAAI,CAAC;gBACtD,EAAE,EAAG,CAAE,IAAI,EAAG,OAAO,EAAE,EAAE,CAAC,CAAE,IAAI,CAAC,IAAI,CAAE,OAAO,CAAE,CAAE;gBAClD,KAAK,EAAG,CAAE,IAAI,EAAG,OAAO,EAAE,EAAE,CAAC,CAAE,IAAI,CAAC,IAAI,CAAE,OAAO,CAAE,CAAC,KAAK,CAAC,EAAE,IAAI,EAAG,KAAK,EAAE,CAAC,CAAE;aAC7E,CAAC,CAAA;YAEF,iBAAiB,CAAE,GAAG,CAAC,QAAQ,EAAE,EAAG,IAAI,SAAS,CAAC,EAAE,IAAI,EAAG,aAAa,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAE,CAAA;QAEzF,CAAC;QAED,iBAAiB,CAAE,CAAC;YAEnB,MAAM,MAAM,GAAG,EAAc,CAAA;YAE7B,MAAM,IAAK,SAAQ,SAAS;gBAC3B,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC;oBACzB,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAE,KAAK,CAAC,OAAO,CAAW;iBACzD,CAAC,CAAA;;YAGH,IAAI,CAAC,UAAU,CAAE;;;IAGhB,EAAG,MAAM,CAAE,CAAA;YAEZ,gBAAgB,CAAE,MAAM,EAAG,CAAE,gCAAgC,CAAE,CAAE,CAAA;QAElE,CAAC;KAED,CAAE,CAAA;AACJ,CAAC,EA5ES,CAAC,KAAD,CAAC,QA4EV;;;;AC5ED,IAAU,CAAC,CA8bV;AA9bD,WAAU,CAAC;IAEG,mBAAiB,GAAmB,MAAM,CAAE,mBAAmB,CAAE,CAAA;IAW9E,MAAa,SAAU,SAAQ,YAAY;QAEjC,IAAI,CAAS;QACb,IAAI,CAAS;QACb,GAAG,CAAuB;QAC1B,OAAO,CAAS;QAChB,GAAG,CAAS;QACZ,GAAG,CAAS;QACZ,MAAM,CAAS;QAExB,YAAa,SAA8B,EAAE;YAE5C,KAAK,EAAE,CAAA;YAEP,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAA;YAE7B,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAG;gBAEhC,IAAI,GAAG,GAAG,SAAS,CAAC,MAAM,CAAE,MAAM,CAAC,KAAK,CAAE,CAAA;gBAE1C,IAAI,MAAM,CAAC,IAAI,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAG;oBAEnC,IAAI,CAAC,GAAG,GAAG,CAAE,GAAI,GAAG,EAAG,GAAG,CAAE,MAAM,CAAC,GAAG,IAAI,EAAE,CAAE,CAAE,CAAA;oBAChD,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAA;iBAE7B;qBAAM;oBAEN,IAAI,CAAC,IAAI,GAAG,GAAG,CAAE,CAAC,CAAE,CAAC,IAAI,CAAA;oBACzB,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,IAAI,EAAE,CAAA;iBAE3B;aAED;iBAAM;gBAEN,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAA;gBAC7B,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,IAAI,EAAE,CAAA;aAE3B;YAED,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE,CAAA;YACnC,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC,CAAA;YAC1B,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC,CAAA;YAC1B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,CAAC,CAAA;QAEjC,CAAC;QAED,MAAM,CAAC,MAAM,CAAE,GAAY,EAAG,OAAiB;YAE9C,OAAO,GAAG,CAAC,KAAK,CAAE,IAAI,CAAE,CAAC,GAAG,CAAE,CAAE,IAAI,EAAG,KAAK,EAAG,EAAE,CAAC,IAAI,SAAS,CAAE;gBAChE,IAAI,EAAG,IAAI;gBACX,OAAO,EAAG,OAAO;gBACjB,GAAG,EAAG,KAAK,GAAG,CAAC;gBACf,MAAM,EAAG,IAAI,CAAC,MAAM;aACpB,CAAE,CAAE,CAAA;QAEN,CAAC;QAGD,KAAK,CAAE,SAA8B,EAAE;YAEtC,OAAO,IAAI,SAAS,CAAC;gBACpB,IAAI,EAAG,CAAE,MAAM,IAAI,MAAM,CAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI;gBACrD,IAAI,EAAG,CAAE,MAAM,IAAI,MAAM,CAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI;gBACrD,GAAG,EAAG,CAAE,KAAK,IAAI,MAAM,CAAE,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG;gBACjD,OAAO,EAAG,CAAE,SAAS,IAAI,MAAM,CAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO;gBACjE,GAAG,EAAG,CAAE,KAAK,IAAI,MAAM,CAAE,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG;gBACjD,GAAG,EAAG,CAAE,KAAK,IAAI,MAAM,CAAE,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG;gBACjD,MAAM,EAAG,CAAE,QAAQ,IAAI,MAAM,CAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM;gBAC7D,KAAK,EAAG,MAAM,CAAC,KAAK;aACpB,CAAC,CAAA;QAEH,CAAC;QAGD,IAAI,CAAE,MAA2B;YAEhC,OAAO,IAAI,SAAS,CAAC;gBACpB,OAAO,EAAG,IAAI,CAAC,OAAO;gBACtB,GAAG,EAAG,IAAI,CAAC,GAAG;gBACd,GAAG,EAAG,IAAI,CAAC,GAAG;gBACd,MAAM,EAAG,IAAI,CAAC,MAAM;gBACpB,GAAI,MAAM;aACV,CAAC,CAAA;QAEH,CAAC;QAGD,SAAS,CAAE,KAAc,EAAG,GAA2B;YACtD,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAG,GAAG,EAAE,CAAC,CAAA;QAClC,CAAC;QAGD,WAAW,CAAE,IAAa,EAAG,GAA2B;YACvD,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAG,GAAG,EAAE,CAAC,CAAA;QACjC,CAAC;QAGD,MAAM,CAAC,UAAU,CAAE,GAAY,EAAG,OAAiB;YAElD,IAAI,IAAI,GAAG,IAAI,SAAS,CAAE,EAAE,OAAO,EAAG,OAAO,EAAE,CAAE,CAAA;YACjD,IAAI,KAAK,GAAG,CAAE,IAAI,CAAE,CAAA;YAEpB,IAAI,GAAG,GAAG,CAAC,CAAA;YACX,IAAI,MAAM,GAAG,GAAG,CAAC,OAAO,CAAE,kBAAkB,EAAG,IAAI,CAAE,CAAA;YACrD,IAAI,KAAK,GAAG,GAAG,CAAC,OAAO,CAAE,IAAI,MAAM,CAAE,SAAS,GAAG,MAAM,CAAC,MAAM,GAAG,GAAG,EAAG,IAAI,CAAE,EAAG,EAAE,CAAE,CAAC,KAAK,CAAE,IAAI,CAAE,CAAA;YAElG,KAAK,CAAC,OAAO,CAAE,IAAI,CAAC,EAAE;gBAErB,EAAE,GAAG,CAAA;gBAEL,IAAI,MAAM,GAAG,qDAAqD,CAAC,IAAI,CAAE,IAAI,CAAE,CAAA;gBAC/E,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC;oBAAG,OAAO,IAAI,CAAC,CAAC,CAAC,SAAS,CAAE,IAAI,KAAK,CAAE,mBAAmB,OAAO,IAAI,GAAG,KAAK,IAAI,EAAE,CAAE,CAAE,CAAA;gBAE/G,IAAI,MAAM,GAAG,MAAM,CAAE,CAAC,CAAE,CAAA;gBACxB,IAAI,IAAI,GAAG,MAAM,CAAE,CAAC,CAAE,CAAA;gBACtB,IAAI,IAAI,GAAG,MAAM,CAAE,CAAC,CAAE,CAAA;gBAEtB,IAAI,IAAI,GAAG,MAAM,CAAC,MAAM,CAAA;gBACxB,IAAI,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAE,IAAI,EAAG,EAAE,CAAE,CAAC,KAAK,CAAE,IAAI,CAAE,CAAC,CAAC,CAAC,EAAE,CAAA;gBAE/D,IAAI,KAAK,CAAC,MAAM,IAAI,IAAI;oBAAG,OAAO,IAAI,CAAC,CAAC,CAAC,SAAS,CAAE,IAAI,KAAK,CAAE,oBAAoB,OAAO,IAAI,GAAG,KAAK,IAAI,EAAE,CAAE,CAAE,CAAA;gBAEhH,KAAK,CAAC,MAAM,GAAG,IAAI,GAAG,CAAC,CAAA;gBACvB,IAAI,MAAM,GAAG,KAAK,CAAE,IAAI,CAAE,CAAC;gBAE3B,IAAI,GAAG,GAAG,IAAI,CAAA;gBACd,KAAK,CAAC,OAAO,CAAE,IAAI,CAAC,EAAE;oBACrB,IAAI,CAAC,IAAI;wBAAG,OAAO,IAAI,CAAC,CAAC,CAAC,SAAS,CAAE,IAAI,KAAK,CAAE,2BAA2B,OAAO,IAAI,GAAG,KAAK,IAAI,EAAE,CAAE,CAAE,CAAA;oBACxG,IAAI,IAAI,GAAG,IAAI,SAAS,CAAC,EAAE,IAAI,EAAG,OAAO,EAAG,GAAG,EAAG,GAAG,EAAG,MAAM,EAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAA;oBAC/E,MAAM,UAAU,GAAG,MAAM,CAAC,GAAkB,CAAA;oBAC5C,UAAU,CAAC,IAAI,CAAE,IAAI,CAAE,CAAA;oBACvB,MAAM,GAAG,IAAI,CAAA;oBACb,GAAG,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAA;gBACvB,CAAC,CAAE,CAAA;gBAEH,IAAI,IAAI,EAAG;oBACV,IAAI,IAAI,GAAG,IAAI,SAAS,CAAC,EAAE,IAAI,EAAG,IAAI,CAAC,SAAS,CAAE,CAAC,CAAE,EAAG,OAAO,EAAG,GAAG,EAAG,GAAG,EAAG,MAAM,EAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAA;oBACrG,MAAM,UAAU,GAAG,MAAM,CAAC,GAAkB,CAAA;oBAC5C,UAAU,CAAC,IAAI,CAAE,IAAI,CAAE,CAAA;oBACvB,MAAM,GAAG,IAAI,CAAA;iBACb;gBAED,KAAK,CAAC,IAAI,CAAE,MAAM,CAAE,CAAA;YAErB,CAAC,CAAE,CAAA;YAEH,OAAO,IAAI,CAAA;QACZ,CAAC;QAMD,MAAM,CAAC,QAAQ,CAAE,IAAU,EAAG,OAAO,GAAG,EAAE;YAEzC,QAAQ,IAAI,EAAG;gBAEd,KAAK,OAAO,IAAI,KAAK,SAAS,CAAE;gBAChC,KAAK,OAAO,IAAI,KAAK,QAAQ,CAAE;gBAC/B,KAAK,IAAI,KAAK,IAAI;oBAEjB,OAAO,IAAI,SAAS,CAAC;wBACpB,IAAI,EAAG,MAAM,CAAE,IAAI,CAAE;wBACrB,OAAO,EAAG,OAAO;qBACjB,CAAC,CAAA;gBAEH,KAAK,OAAO,IAAI,KAAK,QAAQ;oBAE5B,OAAO,IAAI,SAAS,CAAC;wBACpB,KAAK,EAAG,IAAI;wBACZ,OAAO,EAAG,OAAO;qBACjB,CAAC,CAAA;gBAEH,KAAK,KAAK,CAAC,OAAO,CAAE,IAAI,CAAE;oBAEzB,OAAO,IAAI,SAAS,CAAC;wBACpB,IAAI,EAAG,GAAG;wBACV,GAAG,EAAK,IAAe,CAAC,GAAG,CAAE,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAE,IAAI,EAAG,OAAO,CAAE,CAAE;qBAC3E,CAAC,CAAA;gBAEH,KAAK,IAAI,YAAY,IAAI;oBAExB,OAAO,IAAI,SAAS,CAAC;wBACpB,KAAK,EAAG,IAAI,CAAC,WAAW,EAAE;wBAC1B,OAAO,EAAG,OAAO;qBACjB,CAAC,CAAA;gBAEH;oBAEC,IAAI,OAAO,IAAI,CAAE,EAAA,iBAAiB,CAAE,KAAK,UAAU,EAAG;wBACrD,OAAO,IAAI,CAAE,EAAA,iBAAiB,CAAE,EAAE,CAAA;qBAClC;oBAED,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,UAAU,EAAG;wBACvC,OAAO,SAAS,CAAC,QAAQ,CAAE,IAAI,CAAC,MAAM,EAAE,CAAE,CAAA;qBAC1C;oBAED,IAAI,IAAI,YAAY,KAAK,EAAG;wBAC3B,MAAM,EAAE,IAAI,EAAG,OAAO,EAAG,KAAK,EAAE,GAAG,IAAI,CAAA;wBACvC,IAAI,GAAG,EAAE,GAAI,IAAI,EAAG,IAAI,EAAG,OAAO,EAAI,KAAK,EAAE,CAAA;qBAC7C;oBAED,IAAI,GAAG,GAAiB,EAAE,CAAA;oBAE1B,KAAK,IAAI,GAAG,IAAI,IAAI,EAAG;wBAEtB,IAAI,IAAI,CAAE,GAAG,CAAE,KAAK,SAAS;4BAAG,SAAQ;wBAExC,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAE,IAAI,CAAE,GAAG,CAAE,EAAG,OAAO,CAAE,CAAA;wBAE1D,IAAI,eAAe,CAAC,IAAI,CAAE,GAAG,CAAE,EAAG;4BAEjC,IAAI,KAAK,GAAG,IAAI,SAAS,CAAC;gCACzB,IAAI,EAAG,GAAG;gCACV,OAAO,EAAG,OAAO;gCACjB,GAAG,EAAG,CAAE,MAAM,CAAE;6BAChB,CAAE,CAAA;yBAEH;6BAAM;4BAEN,IAAI,KAAK,GAAG,IAAI,SAAS,CAAC;gCACzB,KAAK,EAAG,GAAG;gCACX,OAAO,EAAG,OAAO;gCACjB,GAAG,EAAG,CAAE,MAAM,CAAE;6BAChB,CAAE,CAAA;yBAEH;wBAED,GAAG,CAAC,IAAI,CAAE,KAAK,CAAE,CAAA;qBAEjB;oBAED,OAAO,IAAI,SAAS,CAAC;wBACpB,IAAI,EAAG,GAAG;wBACV,GAAG,EAAG,GAAG;wBACT,OAAO,EAAG,OAAO;qBACjB,CAAC,CAAA;aAEH;QAEF,CAAC;QAED,IAAI,GAAG;YACN,OAAO,IAAI,CAAC,OAAO,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,CAAA;QACtD,CAAC;QAGD,QAAQ,CAAE,MAAM,GAAG,EAAE;YACpB,IAAI,MAAM,GAAG,EAAE,CAAA;YAEf,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAG;gBACtB,IAAI,CAAC,MAAM,CAAC,MAAM,EAAG;oBACpB,MAAM,GAAG,IAAI,CAAC;iBACd;gBACD,MAAM,IAAI,IAAI,CAAC,IAAI,CAAA;gBACnB,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,EAAG;oBAC1B,OAAO,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,CAAE,CAAC,CAAE,CAAC,QAAQ,CAAE,MAAM,CAAE,CAAA;iBACtD;gBACD,MAAM,IAAI,IAAI,CAAA;aACd;iBAAM,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,EAAG;gBAC9C,MAAM,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;aACjC;YAED,KAAK,IAAI,KAAK,IAAI,IAAI,CAAC,GAAG,EAAG;gBAC5B,MAAM,IAAI,MAAM,CAAA;gBAChB,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAE,MAAM,GAAG,IAAI,CAAE,CAAA;aACzC;YAED,OAAO,MAAM,CAAA;QACd,CAAC;QAMD,MAAM;YACL,IAAI,CAAC,IAAI,CAAC,IAAI;gBAAG,OAAO,IAAI,CAAC,KAAK,CAAA;YAElC,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;gBAAG,OAAO,IAAI,CAAA;YACtC,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO;gBAAG,OAAO,KAAK,CAAA;YACxC,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;gBAAG,OAAO,IAAI,CAAA;YAEtC,IAAI,IAAI,CAAC,IAAI,KAAK,GAAG,EAAG;gBACvB,IAAI,GAAG,GAAG,EAAE,CAAA;gBACZ,KAAK,IAAI,KAAK,IAAI,IAAI,CAAC,GAAG,EAAG;oBAC5B,IAAI,KAAK,CAAC,IAAI,KAAK,GAAG;wBAAG,SAAQ;oBACjC,IAAI,GAAG,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE,GAAG,EAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC,EAAG,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAE,EAAE,CAAC,CAAC,KAAK,CAAA;oBAChG,IAAI,GAAG,GAAG,KAAK,CAAC,GAAG,CAAE,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC,MAAM,EAAE,CAAA;oBACpD,IAAI,GAAG,KAAK,SAAS;wBAAK,GAAY,CAAE,GAAG,CAAE,GAAG,GAAG,CAAA;iBACnD;gBACD,OAAO,GAAG,CAAA;aACV;YAED,IAAI,IAAI,CAAC,IAAI,KAAK,GAAG,EAAG;gBACvB,IAAI,GAAG,GAAW,EAAE,CAAA;gBACpB,IAAI,CAAC,GAAG,CAAC,OAAO,CACf,KAAK,CAAC,EAAE;oBACP,IAAI,KAAK,CAAC,IAAI,KAAK,GAAG;wBAAG,OAAM;oBAC/B,IAAI,GAAG,GAAG,KAAK,CAAC,MAAM,EAAE,CAAA;oBACxB,IAAI,GAAG,KAAK,SAAS;wBAAG,GAAG,CAAC,IAAI,CAAE,GAAG,CAAE,CAAA;gBACxC,CAAC,CACD,CAAA;gBACD,OAAO,GAAG,CAAA;aACV;YAED,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAG;gBAC1B,OAAO,IAAI,IAAI,CAAE,IAAI,CAAC,KAAK,CAAE,CAAA;aAC7B;YAED,MAAM,IAAI,GAAG,MAAM,CAAE,IAAI,CAAC,IAAI,CAAE,CAAA;YAChC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAE,IAAI,CAAE,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK;gBAAG,OAAO,IAAI,CAAA;YAE9D,MAAM,IAAI,KAAK,CAAE,iBAAiB,IAAI,CAAC,IAAI,QAAQ,IAAI,CAAC,GAAG,EAAE,CAAE,CAAA;QAChE,CAAC;QAED,IAAI,KAAK;YACR,IAAI,MAAM,GAAc,EAAE,CAAA;YAC1B,KAAK,IAAI,KAAK,IAAI,IAAI,CAAC,GAAG,EAAG;gBAC5B,IAAI,KAAK,CAAC,IAAI;oBAAG,SAAQ;gBACzB,MAAM,CAAC,IAAI,CAAE,KAAK,CAAC,KAAK,CAAE,CAAA;aAC1B;YACD,OAAO,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAE,IAAI,CAAE,CAAA;QACvC,CAAC;QAGD,MAAM,CAAE,KAAiB,EAAG,GAAG,IAAqB;YACnD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;gBAAG,OAAO,KAAK,CAAA;YAEpC,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;YACpB,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAG;gBAE9B,IAAI,QAAQ,GAAG,KAAK,CAAA;gBACpB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAE,CAAE,IAAI,EAAG,KAAK,EAAE,EAAE;oBAC3C,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI;wBAAG,OAAO,IAAI,CAAA;oBACpC,QAAQ,GAAG,IAAI,CAAA;oBACf,OAAO,IAAI,CAAC,MAAM,CAAE,KAAK,EAAG,GAAI,IAAI,CAAC,KAAK,CAAE,CAAC,CAAE,CAAE,CAAA;gBAClD,CAAC,CAAE,CAAA;gBAEH,IAAI,CAAC,QAAQ;oBAAG,GAAG,CAAC,IAAI,CAAE,IAAI,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAE,KAAK,EAAG,GAAI,IAAI,CAAC,KAAK,CAAE,CAAC,CAAE,CAAE,CAAE,CAAA;gBAEzF,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,CAAA;aAE1B;iBAAM,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAG;gBAErC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAA;gBAC5B,GAAG,CAAE,IAAI,CAAE,GAAG,CAAE,GAAG,CAAE,IAAI,CAAE,IAAI,IAAI,SAAS,CAAE,CAAC,MAAM,CAAE,KAAK,EAAG,GAAI,IAAI,CAAC,KAAK,CAAE,CAAC,CAAE,CAAE,CAAA;gBAEpF,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,CAAA;aAE1B;iBAAM;gBAEN,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,EAAG,CAAE,CAAE,IAAI,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,CAAE,CAAC,CAAC,CAAC,CAAE,IAAI,SAAS,EAAE,CAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAE,CAAC,GAAG,CAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAE,KAAK,EAAG,GAAI,IAAI,CAAC,KAAK,CAAE,CAAC,CAAE,CAAE,CAAE,EAAE,CAAC,CAAA;aAErJ;QACF,CAAC;QAGD,MAAM,CAAE,GAAG,IAAqB;YAC/B,IAAI,IAAI,GAAG,CAAE,IAAiB,CAAE,CAAA;YAChC,KAAK,IAAI,IAAI,IAAI,IAAI,EAAG;gBACvB,IAAI,CAAC,IAAI,CAAC,MAAM;oBAAG,MAAK;gBACxB,IAAI,IAAI,GAAG,IAAI,CAAA;gBACf,IAAI,GAAG,EAAE,CAAA;gBAET,KAAK,IAAI,IAAI,IAAI,IAAI,EAAG;oBAEvB,QAAQ,OAAM,CAAE,IAAI,CAAE,EAAG;wBAExB,KAAK,QAAQ;4BACZ,KAAK,IAAI,KAAK,IAAI,IAAI,CAAC,GAAG,EAAG;gCAC5B,IAAI,CAAC,IAAI,IAAI,CAAE,KAAK,CAAC,IAAI,IAAI,IAAI,CAAE,EAAG;oCACrC,IAAI,CAAC,IAAI,CAAE,KAAK,CAAE,CAAA;iCAClB;6BACD;4BACD,MAAM;wBAEP,KAAK,QAAQ;4BACZ,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM;gCAAG,IAAI,CAAC,IAAI,CAAE,IAAI,CAAC,GAAG,CAAE,IAAI,CAAE,CAAE,CAAA;4BAC1D,MAAM;wBAEP,OAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAE,GAAI,IAAI,CAAC,GAAG,CAAE,CAAA;qBACnC;iBACD;aACD;YACD,OAAO,IAAI,SAAS,CAAE,EAAE,GAAG,EAAG,IAAI,EAAE,CAAE,CAAA;QACvC,CAAC;QAGD,MAAM,CAAE,IAAe,EAAG,KAAe;YACxC,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CACxB,UAAU,IAAI;gBAEb,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,CAAE,GAAG,IAAI,CAAE,CAAA;gBAElC,IAAI,KAAK,IAAI,IAAI,EAAG;oBACnB,OAAO,OAAO,CAAE,KAAK,CAAC,GAAG,CAAC,MAAM,CAAE,CAAA;iBAClC;qBAAM;oBACN,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAE,CAAA;iBACtD;YACF,CAAC,CACD,CAAA;YAED,OAAO,IAAI,SAAS,CAAE,EAAE,GAAG,EAAG,GAAG,EAAE,CAAE,CAAA;QACtC,CAAC;QAGD,SAAS,CAAE,KAA2E,EAAG,QAAsB,EAAE;YAChH,MAAM,SAAS,GAAG,CAAE,IAAI,EAAG,GAAG,KAAK,CAAE,CAAA;YACrC,OAAO,KAAK,CAAE,SAAS,EAAG,GAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAE,KAAK,EAAG,SAAS,CAAE,CAAE,CAAC,MAAM,CAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAiB,CAAE,CAAA;QAC7H,CAAC;QAGD,IAAI,CAAE,OAA2B;YAEhC,MAAM,GAAG,GAAK,EAAmB,CAAC,MAAM,CAAE,GAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAE,KAAK,CAAC,EAAE;gBAEnE,MAAM,MAAM,GAAG,OAAO,CAAE,KAAK,CAAC,IAAI,CAAE,IAAI,OAAO,CAAE,EAAE,CAAE,CAAA;gBACrD,IAAI,CAAC,MAAM;oBAAG,SAAS,CAAE,KAAK,CAAC,KAAK,CAAE,qBAAqB,CAAE,CAAE,CAAA;gBAE/D,OAAO,MAAM,CAAE,KAAK,EAAG,OAAO,CAAE,CAAA;YAEjC,CAAC,CAAE,CAAE,CAAA;YAEL,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,CAAA;QAC3B,CAAC;QAGD,KAAK,CAAE,OAAgB;YACtB,OAAO,IAAI,KAAK,CAAE,GAAG,OAAO,MAAO,IAAK,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,CAAE,CAAA;QACrF,CAAC;KAED;IA/aY,WAAS,YA+arB,CAAA;AAEF,CAAC,EA9bS,CAAC,KAAD,CAAC,QA8bV;;;;AC9bD,IAAU,CAAC,CAmBV;AAnBD,WAAU,CAAC;IAEV,eAAe,CAAC,IAAI,CAAE,OAAO,CAAC,EAAE;QAC/B,MAAM,qBAA+B,SAAQ,gBAAyB;YAErE,MAAM,CAAC,KAAK,GAAG,EAA4B,CAAA;YAG3C,MAAM,CAAC,KAAK,CACX,GAAY,EACZ,OAAO,IAAI,CAAC,KAAK,CAAE,GAAG,CAAW;gBAEjC,OAAO,IAAI,CAAC,KAAK,CAAE,GAAG,CAAE,GAAG,CAAE,IAAI,IAAI,IAAI,CAAE,CAAA;YAC5C,CAAC;;QALD;YADE,YAAY;gDAMb;QAGF,OAAO,CAAC,gBAAgB,GAAG,qBAAqB,CAAA;IACjD,CAAC,CAAE,CAAA;AAEJ,CAAC,EAnBS,CAAC,KAAD,CAAC,QAmBV;;;;ACnBD,IAAU,CAAC,CAgBV;AAhBD,WAAU,CAAC;IACV,SAAS,CAAE;QAEV,sBAAsB;YAErB,IAAI,GAAG,GAAG,wBAAwB,GAAG,IAAI,CAAC,MAAM,EAAE,CAAA;YAClD,iBAAiB,CAAE,gBAAgB,CAAC,KAAK,CAAE,GAAG,CAAE,EAAG,IAAI,CAAE,CAAA;YAEzD,gBAAgB,CAAC,KAAK,CAAE,GAAG,EAAG,GAAG,CAAE,CAAA;YACnC,iBAAiB,CAAE,gBAAgB,CAAC,KAAK,CAAE,GAAG,CAAE,EAAG,GAAG,CAAE,CAAA;YAExD,gBAAgB,CAAC,KAAK,CAAE,GAAG,EAAG,IAAI,CAAE,CAAA;YACpC,iBAAiB,CAAE,gBAAgB,CAAC,KAAK,CAAE,GAAG,CAAE,EAAG,IAAI,CAAE,CAAA;QAC1D,CAAC;KAED,CAAE,CAAA;AACJ,CAAC,EAhBS,CAAC,KAAD,CAAC,QAgBV;;;;AChBD,IAAU,CAAC,CAgBV;AAhBD,WAAU,CAAC;IACV,SAAS,CAAC;QACT,oBAAoB;YACnB,MAAM,GAAG,GAAG,aAAa,CAAA;YACzB,MAAM,OAAO,GAAG,IAAI,UAAU,CAAE,CAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAE,CAAE,CAAA;YAE5G,iBAAiB,CAAE,mBAAmB,CAAC,OAAO,CAAC,EAAE,GAAG,CAAE,CAAA;YACtD,iBAAiB,CAAE,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,GAAG,CAAE,CAAA;QAC/D,CAAC;QAED,qBAAqB;YACpB,MAAM,OAAO,GAAG,IAAI,UAAU,CAAE,EAAE,CAAE,CAAA;YAEpC,iBAAiB,CAAE,mBAAmB,CAAC,OAAO,CAAC,EAAE,EAAE,CAAE,CAAA;QACtD,CAAC;KACD,CAAC,CAAA;AACH,CAAC,EAhBS,CAAC,KAAD,CAAC,QAgBV;;;;AChBD,IAAU,CAAC,CAaV;AAbD,WAAU,CAAC;IASV,SAAgB,mBAAmB,CAAC,KAAiB,EAAE,OAA8B,MAAM;QAC1F,OAAO,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IAC3C,CAAC;IAFe,qBAAmB,sBAElC,CAAA;AAEF,CAAC,EAbS,CAAC,KAAD,CAAC,QAaV;;;ACbD;AACA;AACA;;ACDA,IAAI,KAAK,GAAG,KAAK,IAAI,EAAE,CAAA;;;;ACDvB,IAAU,CAAC,CASV;AATD,WAAU,CAAC;IACV,SAAS,CAAC;QACT,oBAAoB;YACnB,MAAM,GAAG,GAAG,aAAa,CAAA;YACzB,MAAM,OAAO,GAAG,IAAI,UAAU,CAAE,CAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAE,CAAE,CAAA;YAE5G,gBAAgB,CAAE,mBAAmB,CAAC,GAAG,CAAC,EAAE,OAAO,CAAE,CAAA;QACtD,CAAC;KACD,CAAC,CAAA;AACH,CAAC,EATS,CAAC,KAAD,CAAC,QASV;;;;ACTD,IAAU,CAAC,CASV;AATD,WAAU,CAAC;IACV,MAAM,WAAW,GAAG,UAAU,CAAC,WAAW,IAAI,KAAK,CAAC,IAAI,CAAC,WAAW,CAAA;IAEpE,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAA;IAEjC,SAAgB,mBAAmB,CAAC,KAAa;QAChD,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IAC7B,CAAC;IAFe,qBAAmB,sBAElC,CAAA;AAEF,CAAC,EATS,CAAC,KAAD,CAAC,QASV;;;;ACTD,IAAU,CAAC,CAuJV;AAvJD,WAAU,CAAC;IAYV,MAAa,mBAAoB,SAAQ,KAAK;KAAG;IAApC,qBAAmB,sBAAiB,CAAA;IAEjD,MAAsB,SAAU,SAAQ,WAAW;QAGlD,MAAM,CAAC,QAAQ,CAAE,IAAa;YAC7B,MAAM,IAAI,KAAK,CAAE,qBAAqB,CAAE,CAAA;QACzC,CAAC;QAED,MAAM,CAAC,QAAQ,CAAE,IAAa;YAC7B,MAAM,IAAI,KAAK,CAAE,qBAAqB,CAAE,CAAA;QACzC,CAAC;QAED,MAAM,CAAC,IAAI,GAAG,EAAE,CAAA;QAEhB,IAAI;YACH,OAAO,GAAG,CAAA;QACX,CAAC;QAED,MAAM;YACL,OAAO,IAAI,CAAC,OAAO,CAAE,IAAI,CAAE,CAAA;QAC5B,CAAC;QAID,KAAK;YACJ,IAAI;gBACH,IAAI,CAAC,IAAI,CAAE,IAAI,CAAE,CAAA;aACjB;YAAC,OAAO,KAAU,EAAG;gBACrB,IAAI,KAAK,YAAY,mBAAmB;oBAAE,OAAM;gBAChD,OAAO,gBAAgB,CAAC,KAAK,CAAC,CAAA;aAC9B;QACF,CAAC;QAED,OAAO;YACN,OAAO,IAAI,CAAC,IAAI,EAAE,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAE,EAAE,CAAE,CAAC,WAAW,EAAE,IAAI,EAAE,CAAA;QACvE,CAAC;QAID,OAAO;YACN,OAAO,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAA;YAEvD,OAAO;gBACN,UAAU,KAAI,CAAC;aACf,CAAA;QACF,CAAC;QAGD,MAAM,CAAE,IAAe;YAEtB,IAAI,MAAM,GAAG,OAAO,CAAE,IAAI,CAAC,IAAI,EAAE,CAAE,CAAA;YAEnC,IAAI,IAAI,KAAK,SAAS;gBAAG,OAAO,MAAM,CAAA;YACtC,IAAI,IAAI,KAAK,MAAM;gBAAG,OAAO,MAAM,CAAA;YAEnC,IAAI,IAAI;gBAAG,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,CAAE,IAAI,CAAE,CAAA;YACvC,IAAI,CAAC,MAAM,EAAE,CAAA;YACb,IAAI,CAAC,KAAK,EAAE,CAAA;YAEZ,OAAO,IAAI,CAAA;QACZ,CAAC;QAED,IAAI;YACH,OAAO,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,IAAI,EAAE,CAAA;QAC/B,CAAC;QAED,IAAI;YACH,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,OAAO,CAAE,OAAO,EAAE,EAAE,CAAE,CAAA;QAC1C,CAAC;QAED,GAAG;YACF,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAE,IAAI,CAAC,IAAI,EAAE,CAAE,CAAA;YACjD,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAE,CAAC,CAAE,CAAC,SAAS,CAAE,CAAC,CAAE,CAAC,CAAC,CAAC,EAAE,CAAA;QAC9C,CAAC;QAKD,IAAI,CAAC,IAAa,EAAE,IAAa;YAChC,IAAI,IAAI,EAAG;gBACV,MAAM,GAAG,GAAG,IAAI,IAAI,CAAA;gBACpB,IAAI,CAAC,IAAI,CAAE;oBACV,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,CAAC;oBACP,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;iBACV,EAAE,MAAM,CAAE,CAAA;gBACX,OAAO,IAAK,CAAA;aACZ;YACD,IAAI,IAAI,KAAK,SAAS,EAAG;gBACxB,OAAO,mBAAmB,CAAE,IAAI,CAAC,MAAM,CAAE,SAAS,CAAE,CAAE,CAAA;aACtD;iBAAM;gBACN,MAAM,MAAM,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,mBAAmB,CAAE,IAAI,CAAE,CAAA;gBAC3E,IAAI,CAAC,MAAM,CAAE,MAAM,CAAE,CAAA;gBACrB,OAAO,IAAI,CAAA;aACX;QACF,CAAC;QAUD,IAAI,CACH,OAAiB,EACjB,OAAiB;YAEjB,MAAM,KAAK,GAAG,EAAiB,CAAA;YAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;YAEtB,KAAK,MAAM,KAAK,IAAI,GAAG,EAAE;gBACxB,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAA;gBAE/B,IAAI,OAAO,IAAI,UAAU,CAAC,KAAK,CAAE,OAAO,CAAE;oBAAG,SAAQ;gBAErD,IAAI,CAAC,OAAO,IAAI,UAAU,CAAC,KAAK,CAAE,OAAO,CAAE;oBAAG,KAAK,CAAC,IAAI,CAAE,KAAK,CAAE,CAAA;gBAEjE,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,KAAK,EAAG;oBAC5B,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAE,OAAO,EAAG,OAAO,CAAE,CAAA;oBACjD,KAAK,MAAM,KAAK,IAAI,SAAS;wBAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;iBAChD;aACD;YAED,OAAO,KAAK,CAAA;QACb,CAAC;QAED,IAAI;YACH,QAAQ,IAAI,CAAC,IAAI,EAAE,EAAG;gBACrB,KAAK,MAAM,CAAC,CAAC,OAAO,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,IAAI,CAAC,CAAA;gBAC1C,OAAO,CAAC,CAAC,OAAO,CAAC,CAAA;aACjB;QACF,CAAC;;IAvFD;QADE,QAAQ;2CAaT;IAkBD;QADE,QAAQ;yCAoBT;IA7FD;QADE,YAAY;mCAGb;IALoB,WAAS,YAwI9B,CAAA;AACF,CAAC,EAvJS,CAAC,KAAD,CAAC,QAuJV;;;;ACvJD,IAAU,CAAC,CAEV;AAFD,WAAU,CAAC;IACC,aAAW,GAAG,gBAAgB,CAAA;AAC1C,CAAC,EAFS,CAAC,KAAD,CAAC,QAEV;;;;ACFD,IAAU,CAAC,CAgBV;AAhBD,WAAU,CAAC;IAEV,SAAgB,cAAc,CAC7B,IAAa,EACb,OAAgC,uBAAuB;QAGvD,MAAM,MAAM,GAAG,IAAI,gBAAgB,CAAC,SAAS,EAAE,CAAA;QAC/C,MAAM,GAAG,GAAG,MAAM,CAAC,eAAe,CAAE,IAAI,EAAG,IAAI,CAAE,CAAA;QAEjD,MAAM,KAAK,GAAG,GAAG,CAAC,oBAAoB,CAAE,aAAa,CAAE,CAAA;QACvD,IAAI,KAAK,CAAC,MAAM;YAAG,MAAM,IAAI,KAAK,CAAE,KAAK,CAAC,CAAC,CAAC,CAAC,WAAY,CAAE,CAAA;QAE3D,OAAO,GAAG,CAAA;IACX,CAAC;IAZe,gBAAc,iBAY7B,CAAA;AAEF,CAAC,EAhBS,CAAC,KAAD,CAAC,QAgBV;;;;AChBD,IAAU,CAAC,CAqIV;AArID,WAAU,CAAC;IAEV,MAAa,mBAAoB,SAAQ,YAAY;QAE9B;QAAtB,YAAsB,MAAiB;YACtC,KAAK,EAAE,CAAA;YADc,WAAM,GAAN,MAAM,CAAW;QAEvC,CAAC;QAED,OAAO;YACN,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAA;QAC3B,CAAC;QAED,IAAI;YACH,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,CAAE,cAAc,CAAE,CAAA;QAC5C,CAAC;QAGD,MAAM;YACL,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAA;QACxB,CAAC;QAGD,IAAI;YAEH,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAA;YAE5B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;YAC1B,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAE,cAAc,CAAE,IAAI,EAAE,CAAA;YACvD,MAAM,CAAC,EAAC,OAAO,CAAC,GAAG,cAAc,CAAC,IAAI,CAAE,IAAI,CAAE,IAAI,CAAC,EAAE,OAAO,CAAC,CAAA;YAE7D,MAAM,OAAO,GAAG,IAAI,WAAW,CAAE,OAAO,CAAE,CAAA;YAC1C,OAAO,OAAO,CAAC,MAAM,CAAE,MAAM,CAAE,CAAA;QAEhC,CAAC;QAED,IAAI;YACH,OAAO,cAAc,CAAE,IAAI,CAAC,MAAM,CAAE,CAAC,IAAI,EAAa,CAAA;QACvD,CAAC;QAGD,MAAM;YACL,OAAO,cAAc,CAAE,IAAI,CAAC,MAAM,CAAE,CAAC,WAAW,EAAE,CAAA;QACnD,CAAC;QAGD,GAAG;YACF,OAAO,cAAc,CAAE,IAAI,CAAC,IAAI,EAAE,EAAG,iBAAiB,CAAE,CAAA;QACzD,CAAC;QAGD,KAAK;YACJ,OAAO,cAAc,CAAE,IAAI,CAAC,IAAI,EAAE,EAAG,uBAAuB,CAAE,CAAA;QAC/D,CAAC;QAGD,IAAI;YACH,OAAO,cAAc,CAAE,IAAI,CAAC,IAAI,EAAE,EAAG,WAAW,CAAE,CAAA;QACnD,CAAC;KAED;IA1CA;QADE,WAAW;qDAGZ;IAGD;QADE,WAAW;mDAYZ;IAOD;QADE,WAAW;qDAGZ;IAGD;QADE,WAAW;kDAGZ;IAGD;QADE,WAAW;oDAGZ;IAGD;QADE,WAAW;mDAGZ;IAvDW,qBAAmB,sBAyD/B,CAAA;IAED,MAAa,UAAW,SAAQ,YAAY;QAE3C,MAAM,CAAC,OAAO,CAAE,KAAmB,EAAG,OAAqB,EAAE;YAE5D,IAAI,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAA;YACnC,IAAI,CAAC,MAAM;gBAAG,MAAM,GAAG,KAAK,CAAC,YAAY,CAAQ,CAAA;YAEjD,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAA;YACxC,IAAI,IAAI,GAAG,KAAK,CAAA;YAEhB,MAAM,OAAO,GAAG,MAAM,CAAE,KAAK,EAAG;gBAC/B,GAAI,IAAI;gBACR,MAAM,EAAE,UAAW,CAAC,MAAM;aAC1B,CAAE,CAAC,OAAO,CAAE,GAAE,EAAE;gBAChB,IAAI,GAAG,IAAI,CAAA;YACZ,CAAC,CAAE,CAAA;YAEH,OAAO,MAAM,CAAC,MAAM,CAAE,OAAO,EAAE;gBAC9B,UAAU,EAAE,GAAE,EAAE;oBAEf,IAAI,CAAC,IAAI;wBAAG,UAAU,CAAC,KAAK,EAAE,CAAA;gBAC/B,CAAC;aACD,CAAE,CAAA;QAEJ,CAAC;QAGD,MAAM,CAAC,QAAQ,CAAE,KAAkB,EAAE,IAAkB;YAEtD,MAAM,QAAQ,GAAG,cAAc,CAAE,IAAI,CAAE,CAAC,OAAO,CAAE,KAAK,EAAG,IAAI,CAAE,CAAA;YAC/D,IAAI,IAAI,CAAC,KAAK,CAAE,QAAQ,CAAC,MAAM,GAAG,GAAG,CAAE,KAAK,CAAC;gBAAG,OAAO,IAAI,mBAAmB,CAAE,QAAQ,CAAE,CAAA;YAE1F,MAAM,IAAI,KAAK,CAAE,QAAQ,CAAC,UAAU,IAAI,cAAe,QAAQ,CAAC,MAAO,EAAE,CAAE,CAAA;QAC5E,CAAC;QAGD,MAAM,CAAC,MAAM,CAAE,KAAkB,EAAE,IAAkB;YACpD,OAAO,IAAI,CAAC,QAAQ,CAAE,KAAK,EAAG,IAAI,CAAE,CAAC,MAAM,EAAE,CAAA;QAC9C,CAAC;QAGD,MAAM,CAAC,IAAI,CAAE,KAAkB,EAAE,IAAkB;YAClD,OAAO,IAAI,CAAC,QAAQ,CAAE,KAAK,EAAG,IAAI,CAAE,CAAC,IAAI,EAAE,CAAA;QAC5C,CAAC;QAGD,MAAM,CAAC,IAAI,CAAE,KAAkB,EAAE,IAAkB;YAClD,OAAO,IAAI,CAAC,QAAQ,CAAE,KAAK,EAAG,IAAI,CAAE,CAAC,IAAI,EAAE,CAAA;QAC5C,CAAC;QAGD,MAAM,CAAC,MAAM,CAAE,KAAkB,EAAE,IAAkB;YACpD,IAAI,CAAC,QAAQ,CAAE,KAAK,EAAG,IAAI,CAAE,CAAC,MAAM,EAAE,CAAA;QACvC,CAAC;QAGD,MAAM,CAAC,GAAG,CAAE,KAAkB,EAAE,IAAkB;YACjD,OAAO,IAAI,CAAC,QAAQ,CAAE,KAAK,EAAG,IAAI,CAAE,CAAC,GAAG,EAAE,CAAA;QAC3C,CAAC;QAGD,MAAM,CAAC,KAAK,CAAE,KAAkB,EAAE,IAAkB;YACnD,OAAO,IAAI,CAAC,QAAQ,CAAE,KAAK,EAAG,IAAI,CAAE,CAAC,KAAK,EAAE,CAAA;QAC7C,CAAC;QAGD,MAAM,CAAC,IAAI,CAAE,KAAkB,EAAE,IAAkB;YAClD,OAAO,IAAI,CAAC,QAAQ,CAAE,KAAK,EAAG,IAAI,CAAE,CAAC,IAAI,EAAE,CAAA;QAC5C,CAAC;KAED;IA3CA;QADE,WAAW;oCAOZ;IAGD;QADE,WAAW;kCAGZ;IAGD;QADE,WAAW;gCAGZ;IAGD;QADE,WAAW;gCAGZ;IAGD;QADE,WAAW;kCAGZ;IAGD;QADE,WAAW;+BAGZ;IAGD;QADE,WAAW;iCAGZ;IAGD;QADE,WAAW;gCAGZ;IApEW,YAAU,aAsEtB,CAAA;AAEF,CAAC,EArIS,CAAC,KAAD,CAAC,QAqIV;;;;ACrID,IAAU,CAAC,CAiFV;AAjFD,WAAU,CAAC;IAEV,MAAa,aAAc,SAAQ,SAAS;QAG3C,MAAM,CAAC,QAAQ,CAAE,IAAa;YAC7B,OAAO,IAAI,CAAC,IAAI,CAAC;gBAChB,IAAI,EAAG,UAAU,CAAE,IAAI,CAAE;aACzB,CAAC,CAAA;QACH,CAAC;QAED,MAAM,CAAC,QAAQ,CAAE,IAAa;YAC7B,OAAO,IAAI,CAAC,QAAQ,CAAE,IAAI,GAAG,CAAE,IAAI,EAAG,IAAI,CAAC,IAAI,CAAE,CAAC,QAAQ,EAAE,CAAE,CAAA;QAC/D,CAAC;QAED,MAAM,CAAC,IAAI,GAAG,gBAAgB,CAAC,QAAQ;YACtC,CAAC,CAAC,IAAI,GAAG,CAAE,GAAG,EAAG,gBAAgB,CAAC,QAAQ,CAAC,aAAc,CAAC,KAAK,CAAC,CAAE,CAAC,QAAQ,EAAE;YAC7E,CAAC,CAAC,EAAE,CAAA;QAGL,MAAM,CAAE,IAAkB;YACzB,IAAI,IAAI,KAAK,SAAS;gBAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;YAErF,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;YACjD,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,KAAK,GAAG;gBAAE,MAAM,IAAI,mBAAmB,CAAC,mBAAmB,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;YAEnG,OAAO,IAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAA;QACzC,CAAC;QAGD,IAAI,CAAE,IAAsB,EAAE,IAAa;YAC1C,IAAI,IAAI,GAAG,IAAI,CAAA;YACf,IAAI,IAAI,KAAK,SAAS,EAAE;gBACvB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAA;gBAE3B,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAA;gBACxB,IAAI,GAAG;oBACN,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,OAAO,CAAC,MAAM;oBACpB,KAAK;oBACL,KAAK,EAAE,KAAK;oBACZ,KAAK,EAAE,KAAK;iBACZ,CAAA;aACD;YAED,IAAI,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,CAAA;YAEvB,OAAO,IAAK,CAAA;QACb,CAAC;QAED,OAAO,CAAE,IAAa;YACrB,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,GAAG,GAAG,IAAI,CAAA;YAElC,OAAO,IAAI,EAAG;gBACb,IAAI,IAAI,GAAG,GAAG,CAAA;gBACd,GAAG,GAAG,GAAG,CAAC,OAAO,CAAE,mBAAmB,EAAG,GAAG,CAAE,CAAA;gBAC9C,IAAI,IAAI,KAAK,GAAG;oBAAG,MAAK;aACxB;YAED,OAAS,IAAI,CAAC,WAAqC,CAAC,QAAQ,CAAE,GAAG,CAAE,CAAA;QACpE,CAAC;QAED,MAAM;YACL,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAA;QAC1D,CAAC;QAGD,GAAG;YACF,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAA;QACvD,CAAC;QAED,MAAM,CAAE,OAAS,IAAI,CAAC,WAAiC,CAAC,QAAQ,CAAE,GAAG,CAAE;YACtE,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAA;QAC1D,CAAC;QAED,MAAM,CAAE,IAA0B;YACjC,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAA;QAC1D,CAAC;;IAzDD;QADE,QAAQ;+CAQT;IAGD;QADE,QAAQ;6CAmBT;IAmBD;QADE,QAAQ;4CAGT;IAhED;QADE,YAAY;uCAKb;IAPW,eAAa,gBA4EzB,CAAA;IAED,CAAC,CAAC,SAAS,GAAG,aAAa,CAAA;AAC5B,CAAC,EAjFS,CAAC,KAAD,CAAC,QAiFV;;;;ACjFD,IAAU,CAAC,CA2DV;AA3DD,WAAU,CAAC;IAMV,MAAa,WAAY,SAAQ,WAAW;QAG3C,MAAM,CAAC,YAAY;YAClB,OAAO,IAAI,CAAA;QACZ,CAAC;QAGD,MAAM,CAAC,IAAI,CAAE,IAAc;YAC1B,OAAO,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAE,QAAQ,EAAG,IAAI,CAAE,IAAI,gBAAgB,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAE,KAAK,EAAG,EAAE,CAAE,IAAI,IAAI,CAAC,YAAY,EAAE,CAAA;QAC5I,CAAC;QAGD,MAAM,CAAC,MAAM,CAAE,IAAa;YAC3B,OAAO,IAAI,CAAC,KAAK,CAAE,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAE,cAAe,IAAK,OAAO,CAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAE,CAAA;QAChG,CAAC;QAGD,MAAM,CAAC,KAAK,CAAE,IAAa,EAAG,IAAwB;YACrD,IAAI,IAAI;gBAAG,OAAO,IAAI,CAAA;YAEtB,IAAI;gBACH,OAAO,IAAI,CAAC,MAAM,CAAE,IAAI,CAAE,CAAC,OAAO,EAAE,CAAA;aACpC;YAAC,OAAO,KAAU,EAAG;gBACrB,IAAI,KAAK,YAAY,OAAO;oBAAG,gBAAgB,CAAE,KAAK,CAAE,CAAA;gBACxD,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,EAAE,CAAA;gBAC/B,IAAI,IAAI,KAAK,GAAG;oBAAG,MAAM,KAAK,CAAA;gBAC9B,OAAO,IAAI,CAAC,MAAM,CAAE,GAAG,CAAE,CAAA;aACzB;QACF,CAAC;QAGD,MAAM,CAAC,IAAI,CAAE,GAAY;YAExB,KAAK,IAAI,IAAI,IAAI,CAAE,IAAI,CAAC,IAAI,EAAE,EAAG,IAAI,CAAE,EAAG;gBAEzC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAE,IAAI,CAAE,CAAE,GAAG,CAAE,CAAA;gBACtC,IAAI,IAAI;oBAAG,OAAO,IAAI,CAAA;gBAEtB,IAAI,CAAC,IAAI,CAAE,GAAG,CAAE,CAAA;aAChB;YAED,OAAO,IAAK,GAAI,GAAG,CAAA;QACpB,CAAC;QAGD,MAAM,CAAC,IAAI,CAAE,GAAY;YACxB,OAAO,CAAC,IAAI,CAAE,sBAAuB,IAAI,CAAC,IAAI,EAAG,MAAO,GAAI,EAAE,CAAE,CAAA;YAChE,OAAO,IAAI,CAAA;QACZ,CAAC;KAED;IAhDA;QADE,QAAQ;yCAGT;IAGD;QADE,QAAQ;iCAGT;IAGD;QADE,YAAY;mCAGb;IAGD;QADE,YAAY;kCAYb;IAGD;QADE,YAAY;iCAYb;IAGD;QADE,YAAY;iCAIb;IAjDW,aAAW,cAmDvB,CAAA;AAEF,CAAC,EA3DS,CAAC,KAAD,CAAC,QA2DV;;;;AC3DD,IAAU,CAAC,CAmTV;AAnTD,WAAU,CAAC;IAEV,SAAgB,2BAA2B,CAAE,GAAe;QAC3D,OAAO,GAAG,CAAC,SAAS,CAAE,CAAE,CAAE,IAAI,CAAE,EAAG,GAAG,EAAE,EAAE,CAAC,CAAE,IAAI,CAAC,IAAI,KAAK,GAAG,CAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,EAAG,GAAG,EAAE,EAAE,CAAC,CAAG,CAAA;IACzG,CAAC;IAFe,6BAA2B,8BAE1C,CAAA;IAED,SAAgB,sBAAsB,CAAE,IAAgB;QACvD,OAAO,2BAA2B,CAAE,IAAI,CAAE,CAAA;IAC3C,CAAC;IAFe,wBAAsB,yBAErC,CAAA;IAED,SAAgB,yBAAyB,CAAE,GAAe;QACzD,OAAO,GAAG,CAAC,IAAI,CAAA;IAChB,CAAC;IAFe,2BAAyB,4BAExC,CAAA;IAED,SAAgB,yBAAyB,CAAE,GAAe;QACzD,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC;YAAG,MAAM,GAAG,CAAC,KAAK,CAAE,iBAAiB,CAAE,CAAA;QAC9D,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IACvB,CAAC;IAHe,2BAAyB,4BAGxC,CAAA;IAED,SAAgB,0BAA0B,CAAE,GAAe;QAC1D,MAAM,KAAK,GAAsC,EAAE,CAAA;QAEnD,MAAM,UAAU,GAAG,CAAE,IAAgB,EAAG,IAAI,GAAG,EAAE,EAAE,EAAE;YAEpD,IAAI,GAAG,GAAG,IAAI,CAAA;YAEd,IAAI,IAAI,KAAK,IAAI,EAAG;gBACnB,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;oBAAG,MAAM,IAAI,CAAC,KAAK,CAAE,0CAA0C,CAAE,CAAA;aAChF;iBAAM;gBAEN,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC;oBAAG,OAAM;gBAClC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG;oBAAG,OAAM;gBAErC,KAAK,CAAE,IAAI,CAAC,IAAI,CAAE,GAAG,KAAK,CAAE,IAAI,CAAC,IAAI,CAAE,CAAA;gBAEvC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC;oBAChB,GAAG,EAAG,CAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAE,CAAE,CAAE,IAAI,EAAG,GAAI,KAAK,CAAE,EAAG,GAAG,EAAE,EAAE;4BAE9D,IAAI,CAAE,IAAI,EAAG,KAAK,EAAG,IAAI,CAAE,CAAC,OAAO,CAAE,IAAI,CAAC,IAAI,CAAE,KAAK,CAAC,CAAC;gCAAG,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,EAAG,GAAG,EAAE,EAAE,CAAC,CAAA;4BAE5F,UAAU,CAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAG,IAAI,CAAC,IAAI,CAAE,CAAA;4BAErC,OAAO,IAAI,CAAC,KAAK,CAAC;gCACjB,GAAG,EAAG,CAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;wCACzB,GAAG,EAAG,EAAE;qCACR,CAAC,CAAE;6BACJ,CAAC,CAAA;wBAEH,CAAC,CAAG,CAAC;iBACL,CAAC,CAAA;aAEF;YAED,IAAI,KAAK,CAAE,IAAI,CAAC,IAAI,CAAE,EAAG;gBACxB,IAAI,KAAK,CAAE,IAAI,CAAC,IAAI,CAAE,CAAC,QAAQ,EAAE,KAAK,GAAG,CAAC,QAAQ,EAAE,EAAG;oBACtD,MAAM,GAAG,CAAC,KAAK,CAAE,qDAAqD,GAAG,KAAK,CAAE,IAAI,CAAC,IAAI,CAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,OAAO,GAAG,OAAO,CAAE,CAAA;iBACzH;aACD;iBAAM;gBACN,KAAK,CAAE,IAAI,CAAC,IAAI,CAAE,GAAG,GAAG,CAAA;aACxB;QACF,CAAC,CAAA;QAED,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAE,GAAG,CAAC,EAAE,CAAC,UAAU,CAAE,GAAG,CAAE,CAAE,CAAA;QAE9C,OAAO,GAAG,CAAC,KAAK,CAAC;YAChB,IAAI,EAAG,EAAE;YACT,GAAG,EAAG,MAAM,CAAC,IAAI,CAAE,KAAK,CAAE,CAAC,GAAG,CAAE,IAAI,CAAC,EAAE,CAAC,KAAK,CAAE,IAAI,CAAE,CAAE;SACvD,CAAC,CAAA;IAEH,CAAC;IAlDe,4BAA0B,6BAkDzC,CAAA;IAED,SAAgB,wBAAwB,CAAE,IAAgB;QACzD,OAAO,CAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAE,MAAM,CAAE,IAAI,EAAE,CAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;IACpD,CAAC;IAFe,0BAAwB,2BAEvC,CAAA;IAED,SAAgB,uBAAuB,CAAE,IAAgB;QACxD,OAAO,CAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAE,SAAS,CAAE,IAAI,EAAE,CAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;IACvD,CAAC;IAFe,yBAAuB,0BAEtC,CAAA;IAED,SAAgB,wBAAwB,CAAE,IAAgB;QACzD,OAAO,CAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAE,UAAU,CAAE,IAAI,EAAE,CAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;IACxD,CAAC;IAFe,0BAAwB,2BAEvC,CAAA;IAED,SAAgB,yBAAyB,CAAE,IAAgB;QAC1D,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC;YAAG,MAAM,IAAI,CAAC,KAAK,CAAE,oBAAqB,IAAI,CAAC,GAAG,CAAC,MAAO,GAAG,CAAE,CAAA;QACvF,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;IACnB,CAAC;IAHe,2BAAyB,4BAGxC,CAAA;IAED,SAAgB,yBAAyB,CAAE,GAAe;QAEzD,QAAQ,GAAG,CAAC,IAAI,EAAG;YAClB,KAAK,MAAO,CAAC,CAAC,OAAO,MAAM,CAAA;YAC3B,KAAK,OAAQ,CAAC,CAAC,OAAO,MAAM,CAAA;YAC5B,KAAK,MAAO,CAAC,CAAC,OAAO,MAAM,CAAA;YAC3B,KAAK,GAAI,CAAC,CAAC,OAAO,MAAM,CAAA;YACxB,KAAK,GAAI,CAAC,CAAC,OAAO,QAAQ,CAAA;YAC1B,KAAK,EAAG,CAAC,CAAC,OAAO,QAAQ,CAAA;YACzB,KAAK,IAAK,CAAC,CAAC,OAAO,KAAK,CAAA;YACxB,KAAK,KAAM,CAAC,CAAC,OAAO,MAAM,CAAA;YAC1B,KAAK,IAAK,CAAC,CAAC,OAAO,KAAK,CAAA;SACxB;QAED,QAAQ,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAG;YACrB,KAAK,GAAI,CAAC,CAAC,OAAO,MAAM,CAAA;YACxB,KAAK,GAAI,CAAC,CAAC,OAAO,QAAQ,CAAA;SAC1B;QAED,IAAI,MAAM,CAAE,GAAG,CAAC,IAAI,CAAE,CAAC,QAAQ,EAAE,IAAI,GAAG,CAAC,IAAI;YAAG,OAAO,QAAQ,CAAA;QAE/D,MAAM,GAAG,CAAC,KAAK,CAAE,aAAa,CAAE,CAAA;IACjC,CAAC;IAtBe,2BAAyB,4BAsBxC,CAAA;IAED,SAAgB,sBAAsB,CAAE,IAAgB;QACvD,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAC9C,WAAW,CAAC,GAAG,EAAE,CAAC;QAClB,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAG,CAAC;QAIpC,MAAM,UAAU,GAAG,CAAE,GAAY,EAAG,GAAY,EAAG,QAAiB,EAAG,IAAa,EAAG,EAAE,CAAC,IAAI,CAAA;QAG9F,IAAI,OAAO,GAAoB,EAAE,CAAA;QACjC,IAAI,OAAO,GAAmC,EAAE,CAAA;QAEhD,KAAK,IAAI,GAAG,IAAI,sBAAsB,CAAE,IAAI,CAAE,CAAC,GAAG,EAAG;YACpD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAE,GAAG,CAAC,IAAI,CAAE;gBAAG,MAAM,GAAG,CAAC,KAAK,CAAE,sBAAsB,CAAE,CAAA;YAE3E,IAAI,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;YAGvB,IAAI,OAAO,GAA4C,EAAE,CAAA;YAEzD,KAAK,IAAI,KAAK,IAAI,0BAA0B,CAAE,GAAG,CAAE,CAAC,GAAG,EAAG;gBAAE,IAAI;oBAC/D,IAAI,OAAO,GAAG,KAAK,CAAA;oBACnB,IAAI,SAAS,GAAG,KAAK,CAAA;oBAErB,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,EAAG;wBAC1B,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;qBACpB;oBAED,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,EAAG;wBACzB,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;qBACpB;oBAED,IAAI,QAAQ,GAAG,gCAAgC,CAAC,IAAI,CAAE,KAAK,CAAC,IAAI,CAAG,CAAA;oBAEnE,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAG;wBACjB,OAAO,GAAG,IAAI,CAAA;wBACd,SAAS,GAAG,IAAI,CAAA;qBAChB;oBAED,MAAM,QAAQ,GAAG,CAAE,KAAiB,EAAG,UAAqB,EAA2B,EAAE;wBAAG,IAAI;4BAC/F,QAAQ,IAAI,EAAG;gCACd,KAAI,CAAE,KAAK,CAAC,IAAI,KAAK,EAAE,CAAE;oCACxB,OAAO,CAAC,IAAI,CAAC,SAAS,CAAE,KAAK,CAAC,KAAK,CAAE,CAAC,CAAA;gCACvC,KAAI,CAAE,KAAK,CAAC,IAAI,KAAK,GAAG,CAAE;oCACzB,MAAM,GAAG,GAAG,GAAI,GAAG,CAAC,IAAK,IAAK,KAAK,CAAC,IAAI,CAAC,OAAO,CAAE,QAAQ,EAAG,EAAE,CAAG,EAAE,CAAA;oCACpE,OAAO,CAAE,GAAG,CAAE,GAAG,KAAK,CAAC,KAAK,CAAA;oCAC5B,OAAO,CAAC,4BAA6B,IAAI,CAAC,SAAS,CAAE,GAAG,CAAG,IAAI,CAAC,CAAA;gCACjE,KAAI,CAAE,KAAK,CAAC,IAAI,KAAK,GAAG,CAAE;oCACzB,OAAO,IAAI,CAAA;gCACZ,KAAI,CAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,CAAE;oCAC5B,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAE,CAAC,CAAE,CAAA;oCAC3C,IAAI,KAAK,GAAqB,EAAE,CAAA;oCAChC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAE,IAAI,CAAC,EAAE;wCACzB,IAAI,IAAI,CAAC,IAAI,KAAK,GAAG;4CAAG,OAAM;wCAC9B,IAAI,IAAI,CAAC,IAAI,KAAK,GAAG,EAAG;4CACvB,KAAK,CAAC,IAAI,CAAE,YAAa,KAAK,CAAC,IAAK,IAAI,CAAE,CAAA;4CAC1C,OAAM;yCACN;wCACD,IAAI,GAAG,GAAG,QAAQ,CAAE,IAAI,CAAE,CAAA;wCAC1B,IAAI,GAAG;4CAAG,KAAK,CAAC,IAAI,CAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAE,CAAA;oCACrC,CAAC,CAAE,CAAA;oCACH,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAG,GAAG,EAAG,CAAE,SAAS,CAAC,CAAC,CAAC,kBAAmB,SAAU,MAAM,CAAC,CAAC,CAAC,oBAAoB,CAAE,CAAC,CAAA;gCACnH,KAAI,CAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,CAAE;oCAC5B,IAAI,CAAC,UAAU;wCAAG,MAAM,KAAK,CAAC,KAAK,CAAE,yBAAyB,CAAE,CAAA;oCAChE,SAAS,GAAG,IAAI,CAAA;oCAChB,IAAI,KAAK,GAAqB,EAAE,CAAA;oCAChC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAE,IAAI,CAAC,EAAE;wCACzB,IAAI,UAAU,CAAC,IAAI,CAAE,IAAI,CAAC,IAAI,CAAE;4CAAG,OAAO,EAAE,CAAA;wCAC5C,IAAI,QAAQ,GAAG,gCAAgC,CAAC,IAAI,CAAE,IAAI,CAAC,IAAI,CAAG,CAAA;wCAClE,IAAI,EAAE,GAAG,OAAO,CAAA;wCAEhB,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,EAAG;4CAC/B,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,EAAG;gDAElC,MAAM,CAAE,AAAD,EAAG,QAAQ,EAAG,OAAO,EAAG,QAAQ,CAAE,GAAG,gCAAgC,CAAC,IAAI,CAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAG,CAAA;gDAE7G,IAAI,QAAQ,GAAc,EAAE,CAAA;gDAC5B,IAAI,OAAO;oDAAG,QAAQ,CAAC,IAAI,CAAE,IAAI,OAAO,SAAS,CAAE,CAAA;gDACnD,IAAI,QAAQ;oDAAG,QAAQ,CAAC,IAAI,CAAE,IAAI,QAAQ,UAAU,CAAE,CAAA;gDAEtD,IAAI,CAAE,AAAD,EAAG,UAAU,EAAG,GAAI,UAAU,CAAE,GAAG,gCAAgC,CAAC,IAAI,CAAE,IAAI,CAAC,IAAI,CAAG,CAAA;gDAC3F,UAAU,GAAG,UAAU,CAAC,MAAM,CAAE,OAAO,CAAE,CAAA;gDAEzC,OAAO,CAAE,QAAQ,CAAE,GAAG,CAAC,KAAM,QAAS,IAAK,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAE,wBAAyB,QAAQ,CAAC,CAAC,CAAE,IAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAG,KAAM,UAAW,KAAM,UAAU,CAAC,IAAI,CAAC,KAAK,CAAE,aAAa,CAAC,CAAA;gDACtL,OAAM;6CACN;yCACD;wCAED,IAAI,CAAC,GAAG,QAAQ,CAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE,CAAA;wCAC/B,IAAI,IAAI,GAAc,EAAE,CAAA;wCACxB,IAAI,QAAQ,CAAC,CAAC,CAAC;4CAAG,IAAI,CAAC,IAAI,CAAE,IAAK,QAAQ,CAAC,CAAC,CAAE,SAAS,CAAE,CAAA;wCACzD,IAAI,QAAQ,CAAC,CAAC,CAAC;4CAAG,IAAI,CAAC,IAAI,CAAE,IAAK,QAAQ,CAAC,CAAC,CAAE,UAAU,CAAE,CAAA;wCAC1D,KAAK,CAAC,IAAI,CAAE,GAAG,CAAC,YAAY,EAAG,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAE,GAAG,CAAE,EAAE,OAAO,EAAG,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAG,IAAI,CAAC,CAAE,CAAA;wCAChJ,OAAO,GAAG,EAAE,CAAA;oCACb,CAAC,CAAE,CAAA;oCACH,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAE,GAAG,EAAG,EAAE,CAAE,CAAC,GAAG,CAAC,GAAG,CAAE,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAE,GAAG,CAAE,CAAE,CAAC,IAAI,CAAE,KAAK,CAAY,CAAA;oCACtG,OAAO,CAAC,eAAe,EAAE,GAAG,KAAK,EAAE,uCAAuC,EAAE,UAAU,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,EAAG,IAAI,EAAG,WAAW,EAAG,MAAM,CAAC,CAAA;gCAClK,KAAI,CAAE,KAAK,CAAC,IAAI,KAAK,GAAG,CAAE;oCACzB,IAAI,IAAI,GAAqB,EAAE,CAAA;oCAC/B,KAAK,CAAC,GAAG,CAAC,OAAO,CAAE,GAAG,CAAC,EAAE;wCACxB,IAAI,GAAG,CAAC,IAAI,KAAK,GAAG;4CAAG,OAAO,EAAE,CAAA;wCAChC,IAAI,GAAG,CAAC,IAAI,KAAK,GAAG,EAAG;4CACtB,IAAI,CAAC,IAAI,CAAE,kBAAmB,KAAK,CAAC,IAAK,QAAQ,CAAE,CAAA;4CACnD,OAAM;yCACN;wCAED,IAAI,GAAG,GAAG,oBAAoB,CAAC,IAAI,CAAE,GAAG,CAAC,IAAI,CAAG,CAAA;wCAChD,IAAI,EAAE,GAAG,OAAO,CAAA;wCAChB,IAAI,CAAC,GAAG,QAAQ,CAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE,CAAA;wCAC9B,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAO,GAAG,CAAC,CAAC,CAAE,cAAc,CAAC,CAAC,CAAC,EAAE,CAAA;wCACpD,IAAI,CAAC,IAAI,CAAE,GAAG,CAAC,SAAS,EAAE,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,GAAE,MAAM,CAAC,EAAE,GAAG,EAAC,GAAG,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAG,MAAM,CAAC,CAAE,CAAA;wCACnH,OAAO,GAAG,EAAE,CAAA;oCACb,CAAC,CAAE,CAAA;oCACH,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAE,EAAE,CAAE,EAAE,QAAQ,CAAC,CAAA;gCAC3C,KAAI,CAAE,KAAK,CAAC,IAAI,KAAK,KAAK,CAAE;oCAC3B,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,EAAG;wCAC5B,IAAI,IAAI,GAAG,+BAA+B,CAAC,IAAI,CAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAG,CAAA;wCACrE,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAE,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAA;qCAC3F;oCACD,MAAK;gCACN,KAAI,CAAE,KAAK,CAAC,IAAI,KAAK,IAAI,CAAE;oCAC1B,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,EAAG;wCAC5B,IAAI,IAAI,GAAG,gCAAgC,CAAC,IAAI,CAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAG,CAAA;wCACtE,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAE,GAAG,GAAG,CAAC,CAAA;qCACpE;oCACD,MAAK;6BACN;4BAED,QAAQ,KAAK,CAAC,IAAI,EAAG;gCACpB,KAAK,MAAM,CAAE;gCACb,KAAK,OAAO;oCACX,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;gCACpB,KAAK,MAAM;oCACV,OAAO,CAAC,aAAa,CAAC,CAAA;6BACvB;4BAED,IAAI,MAAM,CAAE,KAAK,CAAC,IAAI,CAAE,CAAC,QAAQ,EAAE,IAAI,KAAK,CAAC,IAAI;gCAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;4BAEvE,MAAM,KAAK,CAAC,KAAK,CAAE,aAAa,CAAE,CAAA;yBAClC;wBAAC,OAAQ,GAAG,EAAG;4BAEf,MAAM,GAAG,CAAA;yBACT;oBAAC,CAAC,CAAA;oBAEH,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC;wBAAG,MAAM,IAAI,KAAK,CAAE,cAAc,CAAE,CAAA;oBAC5D,KAAK,CAAC,GAAG,CAAC,OAAO,CAAE,KAAK,CAAC,EAAE;wBAC1B,IAAI,GAAG,GAAG,QAAQ,CAAE,KAAK,EAAG,IAAI,CAAE,CAAA;wBAClC,IAAI,CAAC,GAAG;4BAAG,OAAM;wBAIjB,IAAI,IAAI,GAAc,EAAE,CAAA;wBACxB,IAAI,QAAQ,CAAC,CAAC,CAAC;4BAAG,IAAI,CAAC,IAAI,CAAE,IAAK,QAAQ,CAAC,CAAC,CAAE,SAAS,CAAE,CAAA;wBACzD,IAAI,QAAQ,CAAC,CAAC,CAAC;4BAAG,IAAI,CAAC,IAAI,CAAE,IAAK,QAAQ,CAAC,CAAC,CAAE,uBAAuB,EAAE,gBAAgB,CAAE,CAAA;wBAEzF,IAAI,OAAO;4BAAI,GAAG,GAAG;gCACpB,KAAM,QAAQ,CAAC,CAAC,CAAE,mBAAoB,QAAQ,CAAC,CAAC,CAAE,KAAK;gCACvD,GAAG,GAAG;6BACN,CAAA;wBACD,GAAG,GAAG,CAAC,SAAS,EAAE,GAAG,GAAG,CAAC,CAAA;wBAEzB,IAAI,IAAI,GAAoB,CAAC,IAAI,EAAE,UAAU,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAG,WAAW,EAAG,GAAG,GAAG,EAAG,WAAW,CAAC,CAAA;wBACpJ,IAAI,SAAS,EAAG;4BACf,IAAI,QAAQ,CAAC,CAAC,CAAC;gCAAG,IAAI,GAAG,CAAC,OAAO,EAAG,eAAe,EAAE,GAAG,IAAI,CAAC,CAAA;;gCACxD,IAAI,GAAG,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,CAAA;yBAC3C;wBACD,IAAI,GAAG,CAAC,oBAAoB,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,OAAO,CAAE,KAAK,EAAG,QAAQ,CAAE,EAAG,uBAAuB,EAAG,GAAG,IAAI,CAAC,CAAA;wBACtH,OAAO,CAAE,QAAQ,CAAC,CAAC,CAAC,CAAE,GAAG,IAAI,CAAA;oBAC9B,CAAC,CAAE,CAAA;iBAEH;gBAAC,OAAQ,GAAG,EAAG;oBAEf,MAAM,GAAG,CAAA;iBACT;aAAE;YAEH,IAAI,IAAI,GAAG,MAAM,CAAC,IAAI,CAAE,OAAO,CAAE,CAAC,MAAM,CAAE,UAAU,GAAG,EAAE,IAAI;gBAC5D,MAAM,KAAK,GAAG,OAAO,CAAE,IAAI,CAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAG,IAAI,EAAE,kCAAkC,CAAC,CAAA;gBACjG,OAAO,CAAC,GAAG,GAAG,EAAE,GAAG,KAAK,CAAC,CAAA;YAC1B,CAAC,EAAE,EAAqB,CAAC,CAAA;YACzB,IAAI,OAAO,GAAoB,CAAE,6BAA6B,EAAE,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAE,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,OAAO,CAAC,CAAA;YAEtN,OAAO,GAAG,CAAC,GAAG,OAAO,EAAE,GAAG,OAAO,CAAC,CAAA;SAClC;QAED,OAAO,EAAE,MAAM,EAAG,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,EAAG,OAAO,EAAE,CAAA;IAQ/C,CAAC;IAjMe,wBAAsB,yBAiMrC,CAAA;AAEF,CAAC,EAnTS,CAAC,KAAD,CAAC,QAmTV;;;;ACnTD,IAAU,CAAC,CAsDV;AAtDD,WAAU,GAAC;IAAC,IAAA,EAAE,CAsDb;IAtDW,WAAA,EAAE;QAEb,SAAS,CAAC;YAET,0BAA0B,CAAC,CAAC;gBAC3B,IAAI,OAAO,GAAG,KAAK,CAAA;gBAEnB,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC;oBAChC,CAAC;oBACD,KAAK,EAAG,CAAE,KAAkB,EAAE,EAAE,GAAG,OAAO,GAAG,IAAI,CAAA,CAAC,CAAC;iBACnD,CAAC,CAAA;gBAEF,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,EAAuB,CAAA;gBAEvD,MAAM,KAAK,GAAG,gBAAgB,CAAC,QAAQ,CAAC,WAAW,CAAE,YAAY,CAAE,CAAA;gBACnE,KAAK,CAAC,SAAS,CAAE,OAAO,EAAG,IAAI,EAAG,IAAI,CAAE,CAAA;gBACxC,OAAO,CAAC,aAAa,CAAE,KAAK,CAAE,CAAA;gBAE9B,cAAc,CAAE,OAAO,CAAE,CAAA;YAC1B,CAAC;YAED,8BAA8B,CAAC,CAAC;gBAC/B,IAAI,OAAO,GAAG,KAAK,CAAA;gBAEnB,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC;oBAChC,CAAC;oBACD,KAAK,EAAG,CAAE,KAAkB,EAAE,EAAE,GAAG,OAAO,GAAG,IAAI,CAAA,CAAC,CAAC;oBACnD,OAAO,EAAG,GAAE,EAAE,CAAC,KAAK;iBACpB,CAAC,CAAA;gBAEF,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,EAAuB,CAAA;gBAEvD,MAAM,KAAK,GAAG,gBAAgB,CAAC,QAAQ,CAAC,WAAW,CAAE,YAAY,CAAE,CAAA;gBACnE,KAAK,CAAC,SAAS,CAAE,OAAO,EAAG,IAAI,EAAG,IAAI,CAAE,CAAA;gBACxC,OAAO,CAAC,aAAa,CAAE,KAAK,CAAE,CAAA;gBAE9B,eAAe,CAAE,OAAO,CAAE,CAAA;YAC3B,CAAC;YAED,aAAa,CAAC,CAAC;gBAEd,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC;oBAChC,CAAC;oBACD,KAAK,EAAG,CAAE,KAAkB,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAE,IAAI,KAAK,CAAE,YAAY,CAAE,CAAE;iBACzE,CAAC,CAAA;gBAEF,MAAM,KAAK,GAAG,gBAAgB,CAAC,QAAQ,CAAC,WAAW,CAAE,YAAY,CAAE,CAAA;gBACnE,gBAAgB,CAAE,GAAE,EAAE,CAAC,OAAO,CAAC,cAAc,CAAE,KAAK,CAAE,EAAE,YAAY,CAAE,CAAA;gBACtE,iBAAiB,CAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,YAAY,CAAE,CAAA;YAE/D,CAAC;SAED,CAAC,CAAA;IAEH,CAAC,EAtDW,EAAE,GAAF,MAAE,KAAF,MAAE,QAsDb;AAAD,CAAC,EAtDS,CAAC,KAAD,CAAC,QAsDV;;;ACtDD;AACA;AACA;;ACFA,IAAU,CAAC,CAoSV;AApSD,WAAU,CAAC;IAEV,MAAa,sBAAuB,SAAQ,SAAS;QACpD,IAAI,KAAK,OAAO,IAAI,SAAS,CAAA,CAAC,CAAC;KAC/B;IAFY,wBAAsB,yBAElC,CAAA;IAED,MAAa,sBAAuB,SAAQ,SAAS;QACpD,IAAI,KAAK,OAAO,IAAI,sBAAsB,CAAA,CAAC,CAAC;KAC5C;IAFY,wBAAsB,yBAElC,CAAA;IAED,SAAS,CAAC;QAET,wBAAwB;YAEvB,MAAM,qBAAsB,SAAQ,SAAS;aAAG;YAEhD,MAAM,KAAK,GAAG,gBAAgB,CAAE,qBAAqB,EAAG;gBACvD,OAAO,EAAE,OAAO;gBAChB,MAAM,EAAE,CAAC;aACT,CAAE,CAAA;YAEH,iBAAiB,CAAE,KAAK,EAAG,iEAAiE,CAAE,CAAA;QAE/F,CAAC;QAED,eAAe;YAEd,MAAM,qBAAsB,SAAQ,SAAS;aAAG;YAEhD,MAAM,EAAE,EAAE,EAAG,GAAG,EAAE,GAAG,eAAe,CAAA;YAEpC,MAAM,KAAK,GAAG,gBAAgB,CAAE,qBAAqB,EAAG;gBACvD,KAAK,EAAG,GAAG,CAAC,EAAE,CAAC;gBACf,MAAM,EAAG,EAAE,CAAC,EAAE,CAAC;aACf,CAAE,CAAA;YAEH,iBAAiB,CAAE,KAAK,EAAG,+DAA+D,CAAE,CAAA;QAE7F,CAAC;QAED,mBAAmB;YAElB,MAAM,qBAAsB,SAAQ,SAAS;aAAG;YAEhD,MAAM,EAAE,IAAI,EAAE,GAAG,eAAe,CAAA;YAChC,MAAM,EAAE,EAAE,EAAG,GAAG,EAAE,GAAG,eAAe,CAAA;YAEpC,MAAM,KAAK,GAAG,gBAAgB,CAAE,qBAAqB,EAAG;gBACvD,KAAK,EAAG,IAAI,CAAE,GAAI,GAAG,CAAC,GAAG,CAAE,MAAO,EAAE,CAAC,CAAC,CAAE,EAAE,CAAE;aAC5C,CAAE,CAAA;YAEH,iBAAiB,CAAE,KAAK,EAAG,2DAA2D,CAAE,CAAA;QAEzF,CAAC;QAED,iBAAiB;YAEhB,MAAM,qBAAsB,SAAQ,SAAS;aAAG;YAEhD,MAAM,EAAE,EAAE,EAAE,GAAG,eAAe,CAAA;YAE9B,MAAM,KAAK,GAAG,gBAAgB,CAAE,qBAAqB,EAAG;gBACvD,IAAI,EAAG;oBACN,IAAI,EAAG,CAAC;iBACR;aACD,CAAE,CAAA;YAEH,iBAAiB,CAAE,KAAK,EAAG,gDAAgD,CAAE,CAAA;QAE9E,CAAC;QAED,oBAAoB;YAEnB,MAAM,qBAAsB,SAAQ,SAAS;aAAG;YAEhD,MAAM,EAAE,EAAE,EAAE,GAAG,eAAe,CAAA;YAE9B,MAAM,KAAK,GAAG,gBAAgB,CAAE,qBAAqB,EAAG;gBACvD,OAAO,EAAG,CAAE,EAAE,CAAC,CAAC,CAAC,EAAG,MAAM,CAAE;aAC5B,CAAE,CAAA;YAEH,iBAAiB,CAAE,KAAK,EAAG,qDAAqD,CAAE,CAAA;QAEnF,CAAC;QAED,kBAAkB;YAEjB,MAAM,qBAAsB,SAAQ,SAAS;aAAG;YAEhD,MAAM,EAAE,GAAG,EAAE,GAAG,eAAe,CAAA;YAE/B,MAAM,KAAK,GAAG,gBAAgB,CAAE,qBAAqB,EAAG;gBACvD,UAAU,EAAE;oBACX,KAAK,EAAE,CAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAE;iBACrC;aACD,CAAE,CAAA;YAEH,iBAAiB,CAAE,KAAK,EAAG,2EAA2E,CAAE,CAAA;QAEzG,CAAC;QAED,mBAAmB;YAElB,MAAM,qBAAsB,SAAQ,SAAS;aAAG;YAEhD,MAAM,EAAE,GAAG,EAAE,GAAG,eAAe,CAAA;YAC/B,MAAM,EAAE,IAAI,EAAE,GAAG,eAAe,CAAA;YAEhC,MAAM,KAAK,GAAG,gBAAgB,CAAE,qBAAqB,EAAG;gBACvD,GAAG,EAAE;oBACJ,MAAM,EAAE;wBACP;4BACC,KAAK,EAAE,IAAI;4BACX,CAAC,EAAE,CAAC;4BACJ,CAAC,EAAE,CAAC;4BACJ,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;4BACb,MAAM,EAAE,CAAC;4BACT,KAAK,EAAE,KAAK;yBACZ;wBACD;4BACC,KAAK,EAAE,KAAK;4BACZ,CAAC,EAAE,CAAC;4BACJ,CAAC,EAAE,CAAC;4BACJ,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;4BACb,MAAM,EAAE,CAAC;4BACT,KAAK,EAAE,MAAM;yBACb;qBACD;iBACD;aACD,CAAE,CAAA;YAEH,iBAAiB,CAAE,KAAK,EAAG,wFAAwF,CAAE,CAAA;QAEtH,CAAC;QAED,0CAA0C;YAEzC,MAAM,qBAAsB,SAAQ,SAAS;aAAG;YAEhD,MAAM,KAAK,GAAG,gBAAgB,CAAE,qBAAqB,EAAG;gBACvD,QAAQ,EAAE;oBACT,KAAK,EAAE,KAAK;oBACZ,OAAO,EAAE,OAAO;iBAChB;aACD,CAAE,CAAA;YAEH,iBAAiB,CAAE,KAAK,EAAG,uEAAuE,CAAE,CAAA;QAErG,CAAC;QAED,4CAA4C;YAE3C,MAAM,qBAAsB,SAAQ,SAAS;aAAG;YAEhD,MAAM,KAAK,GAAG,gBAAgB,CAAE,qBAAqB,EAAG;gBACvD,cAAc,EAAE;oBACf,KAAK,EAAE,KAAK;oBACZ,OAAO,EAAE,OAAO;iBAChB;aACD,CAAE,CAAA;YAEH,iBAAiB,CAAE,KAAK,EAAG,6EAA6E,CAAE,CAAA;QAE3G,CAAC;QAED,yCAAyC;YAExC,MAAM,qBAAsB,SAAQ,SAAS;aAAG;YAEhD,MAAM,KAAK,GAAG,gBAAgB,CAAE,qBAAqB,EAAG;gBACvD,QAAQ,EAAE;oBACT,OAAO,EAAE;wBACR,KAAK,EAAE,KAAK;wBACZ,OAAO,EAAE,OAAO;qBAChB;iBACD;aACD,CAAE,CAAA;YAEH,iBAAiB,CAAE,KAAK,EAAG,oFAAoF,CAAE,CAAA;QAElH,CAAC;QAED,6CAA6C;YAE5C,MAAM,qBAAsB,SAAQ,SAAS;gBAC5C,IAAI;oBAAK,OAAO;wBACf,SAAS,EAAE,iBAAiB;qBAC5B,CAAA;gBAAC,CAAC;aACH;YAED,MAAM,KAAK,GAAG,gBAAgB,CAAE,qBAAqB,EAAG;gBACvD,GAAG,EAAG;oBACL,SAAS,EAAE;wBACV,iBAAiB,EAAE;4BAClB,KAAK,EAAE,KAAK;4BACZ,OAAO,EAAE,OAAO;yBAChB;qBACD;iBACD;aACD,CAAE,CAAA;YAEH,iBAAiB,CAAE,KAAK,EAAG,sGAAsG,CAAE,CAAA;QAEpI,CAAC;QAED,0BAA0B;YAEzB,MAAM,qBAAsB,SAAQ,SAAS;gBAC5C,IAAI,KAAK,OAAO,IAAI,SAAS,CAAA,CAAC,CAAC;aAC/B;YAED,MAAM,KAAK,GAAG,gBAAgB,CAAE,qBAAqB,EAAG;gBACvD,IAAI,EAAG;oBACN,KAAK,EAAE,KAAK;oBACZ,OAAO,EAAE,OAAO;iBAChB;aACD,CAAE,CAAA;YAEH,iBAAiB,CAAE,KAAK,EAAG,sEAAsE,CAAE,CAAA;QAEpG,CAAC;QAED,qCAAqC;YAEpC,MAAM,KAAK,GAAG,gBAAgB,CAAE,sBAAsB,EAAG;gBACxD,IAAI,EAAG;oBACN,IAAI,EAAG;wBACN,KAAK,EAAE,KAAK;wBACZ,OAAO,EAAE,OAAO;qBAChB;iBACD;aACD,CAAE,CAAA;YAEH,iBAAiB,CAAE,KAAK,EAAG,4EAA4E,CAAE,CAAA;QAE1G,CAAC;QAED,qDAAqD;YAEpD,MAAM,qBAAsB,SAAQ,SAAS;gBAC5C,IAAI,KAAK,OAAO,IAAI,SAAS,CAAA,CAAC,CAAC;gBAC/B,IAAI;oBAAK,OAAO;wBACf,SAAS,EAAE,iBAAiB;qBAC5B,CAAA;gBAAC,CAAC;aACH;YAED,MAAM,KAAK,GAAG,gBAAgB,CAAE,qBAAqB,EAAG;gBACvD,GAAG,EAAG;oBACL,SAAS,EAAE;wBACV,iBAAiB,EAAE;4BAClB,IAAI,EAAE;gCACL,KAAK,EAAE,KAAK;6BACZ;yBACD;qBACD;iBACD;aACD,CAAE,CAAA;YAEH,iBAAiB,CAAE,KAAK,EAAG,uHAAuH,CAAE,CAAA;QAErJ,CAAC;QAED,iCAAiC;YAEhC,MAAM,KAAK,GAAG,gBAAgB,CAAE,sBAAsB,EAAG;gBACxD,sBAAsB,EAAG;oBACxB,KAAK,EAAE,KAAK;oBACZ,OAAO,EAAE,OAAO;iBAChB;aACD,CAAE,CAAA;YAEH,iBAAiB,CAAE,KAAK,EAAG,kGAAkG,CAAE,CAAA;QAEhI,CAAC;QAED,iCAAiC;YAEhC,MAAM,KAAK,GAAG,gBAAgB,CAAE,sBAAsB,EAAG;gBACxD,GAAG,EAAG;oBACL,sBAAsB,EAAG;wBACxB,KAAK,EAAE,KAAK;wBACZ,OAAO,EAAE,OAAO;qBAChB;iBACD;aACD,CAAE,CAAA;YAEH,iBAAiB,CAAE,KAAK,EAAG,oGAAoG,CAAE,CAAA;QAElI,CAAC;KAED,CAAC,CAAA;AAEH,CAAC,EApSS,CAAC,KAAD,CAAC,QAoSV;;;;ACpSD,IAAU,CAAC,CAiEV;AAjED,WAAU,GAAC;IAEV,eAAe,CAAC,IAAI,CAAE,OAAO,CAAC,EAAE;QAC/B,MAAM,mBAAoB,SAAQ,cAAc;YAE/C,MAAM,CAAC,CAAC,GAAG,OAAO,CAAA;YAGlB,MAAM,CAAC,IAAI,CAAE,IAAc,IAAK,OAAO,IAAI,IAAI,EAAE,CAAA,CAAC,CAAC;;QAAnD;YADE,QAAQ;6CACyC;QAGpD,OAAO,CAAC,cAAc,GAAG,mBAAmB,CAAA;IAC7C,CAAC,CAAE,CAAA;IAEH,SAAS,CAAC;QAET,oBAAoB,CAAE,CAAC;YAEtB,CAAC,CAAC,cAAc,CAAC,IAAI,CAAE,eAAe,CAAE,CAAA;YACxC,gBAAgB,CAAE,CAAC,CAAC,cAAc,CAAC,IAAI,EAAE,EAAG,EAAE,GAAG,EAAG,KAAK,EAAG,GAAG,EAAG,EAAE,EAAE,CAAE,CAAA;YAExE,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,GAAG,EAAG,IAAI,EAAG,GAAG,EAAG,EAAE,EAAG,GAAG,EAAG,KAAK,EAAE,CAAC,CAAA;YAC9D,iBAAiB,CAAE,CAAC,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,OAAO,CAAE,KAAK,EAAG,GAAG,CAAE,EAAG,eAAe,CAAE,CAAA;QAEtF,CAAC;QAED,qBAAqB,CAAE,CAAC;YAEvB,CAAC,CAAC,cAAc,CAAC,IAAI,CAAE,eAAe,CAAE,CAAA;YACxC,iBAAiB,CAAE,CAAC,CAAC,cAAc,CAAC,KAAK,CAAE,KAAK,CAAE,EAAG,KAAK,CAAE,CAAA;YAC5D,iBAAiB,CAAE,CAAC,CAAC,cAAc,CAAC,KAAK,CAAE,KAAK,CAAE,EAAG,EAAE,CAAE,CAAA;YAEzD,CAAC,CAAC,cAAc,CAAC,KAAK,CAAE,KAAK,EAAG,KAAK,CAAE,CAAA;YACvC,iBAAiB,CAAE,CAAC,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,OAAO,CAAE,KAAK,EAAG,GAAG,CAAE,EAAG,eAAe,CAAE,CAAA;YAErF,CAAC,CAAC,cAAc,CAAC,KAAK,CAAE,KAAK,EAAG,EAAE,CAAE,CAAA;YACpC,iBAAiB,CAAE,CAAC,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,OAAO,CAAE,KAAK,EAAG,GAAG,CAAE,EAAG,WAAW,CAAE,CAAA;YAEjF,CAAC,CAAC,cAAc,CAAC,KAAK,CAAE,KAAK,EAAG,IAAI,CAAE,CAAA;YACtC,iBAAiB,CAAE,CAAC,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,OAAO,CAAE,KAAK,EAAG,GAAG,CAAE,EAAG,OAAO,CAAE,CAAA;QAE9E,CAAC;QAED,aAAa,CAAE,CAAC;YAEf,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,cAAc,CAAE,SAAS,CAAE,CAAA;YAE9C,MAAM,MAAO,SAAQ,cAAc;gBAClC,YAAa,MAAe;oBAC3B,KAAK,CAAE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAE,CAAA;gBAC9B,CAAC;gBACD,MAAM,CAAC,KAAK,GAAG,CAAE,GAAY,EAAG,IAAc,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAE,GAAG,EAAG,IAAI,CAAE,CAAA;;YAG5E,CAAC,CAAC,cAAc,CAAC,IAAI,CAAE,0BAA0B,CAAE,CAAA;YACnD,iBAAiB,CAAE,MAAM,CAAC,KAAK,CAAE,KAAK,CAAE,EAAG,IAAI,CAAE,CAAA;YACjD,iBAAiB,CAAE,MAAM,CAAC,KAAK,CAAE,KAAK,CAAE,EAAG,KAAK,CAAE,CAAA;YAElD,MAAM,CAAC,KAAK,CAAE,KAAK,EAAG,KAAK,CAAE,CAAA;YAC7B,iBAAiB,CAAE,CAAC,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,OAAO,CAAE,KAAK,EAAG,GAAG,CAAE,EAAG,yCAAyC,CAAE,CAAA;QAEhH,CAAC;KAED,CAAC,CAAA;AAEH,CAAC,EAjES,CAAC,KAAD,CAAC,QAiEV;;;;ACjED,IAAU,CAAC,CAwJV;AAxJD,WAAU,GAAC;IAAC,IAAA,EAAE,CAwJb;IAxJW,WAAA,EAAE;QAEb,SAAS,CAAC;YAET,UAAU,CAAE,CAAC;gBAEZ,MAAM,GAAG,GAAG,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;gBAErC,MAAM,IAAI,GAAG,GAAG,CAAC,SAAS,EAAE,CAAA;gBAC5B,MAAM,KAAK,GAAG,SAAS,EAAE,CAAA;gBAEzB,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,CAAE,KAAK,CAAE,CAAA;gBACxB,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAA;gBAEhB,iBAAiB,CAAE,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,EAAG,KAAK,CAAE,CAAA;gBACvD,iBAAiB,CAAE,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,EAAG,KAAK,CAAE,CAAA;gBAE3D,gBAAgB,CAAE,GAAG,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAG,IAAI,CAAE,CAAA;gBAEnD,iBAAiB,CAAE,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,EAAG,EAAE,CAAE,CAAA;YAE5C,CAAC;YAED,aAAa,CAAE,CAAC;gBAEf,MAAM,KAAK,GAAG,SAAS,EAAE,CAAA;gBAEzB,IAAI,EAAE;oBAEL,MAAM,GAAG,GAAG,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;oBAErC,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,CAAE,YAAY,CAAE,CAAA;oBAC/B,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAA;oBAEhB,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,CAAE,KAAK,CAAE,CAAA;iBAEzC;gBAED,IAAI,EAAE;oBAEL,MAAM,GAAG,GAAG,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;oBACrC,iBAAiB,CAAE,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAG,KAAK,CAAE,CAAA;iBAE/D;YAEF,CAAC;YAED,aAAa,CAAE,CAAC;gBAEf,IAAI,EAAE;oBAEL,MAAM,GAAG,GAAG,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;oBAErC,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,CAAE,YAAY,CAAE,CAAA;oBAC/B,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAA;oBAEhB,iBAAiB,CAAE,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,EAAG,KAAK,CAAE,CAAA;oBAEpE,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAA;iBAErC;gBAED,MAAM,EAAE;oBAEP,MAAM,GAAG,GAAG,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;oBACrC,iBAAiB,CAAE,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,EAAG,IAAI,CAAE,CAAA;oBAEnE,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAA;iBAErC;gBAED,IAAI,EAAE;oBAEL,MAAM,GAAG,GAAG,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;oBACrC,iBAAiB,CAAE,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,EAAG,KAAK,CAAE,CAAA;iBAEpE;YAEF,CAAC;YAED,aAAa,CAAE,CAAC;gBAEf,MAAM,GAAG,GAAG,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;gBAErC,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,CAAE,YAAY,CAAE,CAAA;gBAC/B,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAA;gBAEhB,MAAM,GAAG,GAAG,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAA;gBAE9B,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,CAAA;gBAClB,eAAe,CAAE,GAAG,CAAC,SAAS,EAAE,CAAC,QAAQ,CAAE,GAAG,CAAE,CAAE,CAAA;YAEnD,CAAC;YAED,YAAY,CAAE,CAAC;gBAEd,MAAM,GAAG,GAAG,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;gBAErC,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,CAAE,YAAY,CAAE,CAAA;gBAC/B,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAA;gBAEhB,MAAM,KAAK,GAAG,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAA;gBAEhC,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,CAAE,cAAc,CAAE,CAAA;gBACjC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAA;gBAEhB,MAAM,KAAK,GAAG,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAA;gBAChC,KAAK,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAA;gBAExB,cAAc,CAAE,GAAG,CAAC,SAAS,EAAE,CAAC,QAAQ,CAAE,KAAK,CAAE,CAAE,CAAA;gBACnD,cAAc,CAAE,GAAG,CAAC,SAAS,EAAE,CAAC,QAAQ,CAAE,KAAK,CAAE,CAAE,CAAA;gBAEnD,CAAC,CAAC,cAAc,CAAC,IAAI,CAAE,GAAG,CAAC,gBAAgB,EAAE,CAAC,GAAG,EAAE,CAAE,CAAA;gBACrD,eAAe,CAAE,GAAG,CAAC,SAAS,EAAE,CAAC,QAAQ,CAAE,KAAK,CAAE,CAAE,CAAA;gBACpD,cAAc,CAAE,GAAG,CAAC,SAAS,EAAE,CAAC,QAAQ,CAAE,KAAK,CAAE,CAAE,CAAA;gBAEnD,CAAC,CAAC,cAAc,CAAC,IAAI,CAAE,GAAG,CAAC,aAAa,EAAE,CAAC,GAAG,EAAE,CAAE,CAAA;gBAClD,cAAc,CAAE,GAAG,CAAC,SAAS,EAAE,CAAC,QAAQ,CAAE,KAAK,CAAE,CAAE,CAAA;gBACnD,eAAe,CAAE,GAAG,CAAC,SAAS,EAAE,CAAC,QAAQ,CAAE,KAAK,CAAE,CAAE,CAAA;gBAEpD,CAAC,CAAC,cAAc,CAAC,IAAI,CAAE,GAAG,CAAC,UAAU,EAAE,CAAC,GAAG,EAAE,CAAE,CAAA;gBAC/C,cAAc,CAAE,GAAG,CAAC,SAAS,EAAE,CAAC,QAAQ,CAAE,KAAK,CAAE,CAAE,CAAA;gBACnD,cAAc,CAAE,GAAG,CAAC,SAAS,EAAE,CAAC,QAAQ,CAAE,KAAK,CAAE,CAAE,CAAA;YAEpD,CAAC;YAED,iBAAiB,CAAE,CAAC;gBAEnB,MAAM,GAAG,GAAG,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;gBAErC,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,CAAE,YAAY,CAAE,CAAA;gBAC/B,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAA;gBAEhB,MAAM,KAAK,GAAG,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAA;gBAEhC,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,CAAE,cAAc,CAAE,CAAA;gBACjC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAA;gBAEhB,MAAM,KAAK,GAAG,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAA;gBAChC,KAAK,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAA;gBAExB,cAAc,CAAE,GAAG,CAAC,SAAS,EAAE,CAAC,QAAQ,CAAE,KAAK,CAAE,CAAE,CAAA;gBACnD,cAAc,CAAE,GAAG,CAAC,SAAS,EAAE,CAAC,QAAQ,CAAE,KAAK,CAAE,CAAE,CAAA;gBAEnD,GAAG,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAA;gBACnB,cAAc,CAAE,GAAG,CAAC,SAAS,EAAE,CAAC,QAAQ,CAAE,KAAK,CAAE,CAAE,CAAA;gBACnD,eAAe,CAAE,GAAG,CAAC,SAAS,EAAE,CAAC,QAAQ,CAAE,KAAK,CAAE,CAAE,CAAA;YAErD,CAAC;SAED,CAAC,CAAA;IAEH,CAAC,EAxJW,EAAE,GAAF,MAAE,KAAF,MAAE,QAwJb;AAAD,CAAC,EAxJS,CAAC,KAAD,CAAC,QAwJV;;","file":"web.test.js","sourcesContent":["namespace $ {\n\n\texport function $mol_test( set : { [ name : string ] : string | ( ( context : $ )=> void ) } ) {\n\t\t\n\t\tfor( let name in set ) {\n\n\t\t\tconst code = set[ name ]\n\t\t\tconst test = ( typeof code === 'string' ) ? new Function( '' , code ) as ()=> void : code\n\t\t\t\n\t\t\t$mol_test_all.push( test )\n\t\t}\n\n\t\t$mol_test_schedule()\n\t}\n\n\texport let $mol_test_mocks = [] as Array< ( context : $ )=> void >\n\n\texport const $mol_test_all = [] as Array< ( context : $ )=> any >\n\n\texport async function $mol_test_run() {\n\n\t\tfor( var test of $mol_test_all ) {\n\n\t\t\tlet context = Object.create( $$ )\n\t\t\tfor( let mock of $mol_test_mocks ) await mock( context )\n\t\t\t\n\t\t\tconst res = test( context )\n\t\t\tif( res instanceof Promise ) {\n\t\t\t\tawait new Promise( ( done, fail )=> {\n\t\t\t\t\tres.then( done, fail )\n\t\t\t\t\tsetTimeout( ()=> fail( new Error( 'Test timeout: ' + test.name ) ), 1000 )\n\t\t\t\t} )\n\t\t\t}\n\t\t\t\n\t\t}\n\t\t\n\t\t$$.$mol_log3_done({\n\t\t\tplace: '$mol_test',\n\t\t\tmessage: 'All tests passed',\n\t\t\tcount: $mol_test_all.length,\n\t\t})\n\t\t\n\t}\n\t\n\tlet scheduled = false\n\texport function $mol_test_schedule() {\n\n\t\tif( scheduled ) return\n\t\tscheduled = true\n\n\t\tsetTimeout( async ()=> {\n\t\t\t\n\t\t\tscheduled = false\n \t\t\t\n\t\t\ttry {\n\t\t\t\tawait $mol_test_run()\n\t\t\t} finally {\n\t\t\t\t$$.$mol_test_complete()\n\t\t\t}\n\t\t\t\n\t\t} , 0 )\n\t\t\n\t}\n\n\t$mol_test_mocks.push( context => {\n\t\tlet seed = 0\n\n\t\tcontext.Math = Object.create( Math )\n\t\tcontext.Math.random = ()=> Math.sin( seed++ )\n\n\t\tconst forbidden = [ 'XMLHttpRequest' , 'fetch' ]\n\n\t\tfor( let api of forbidden ) {\n\t\t\tcontext[ api ] = new Proxy( function(){} , {\n\t\t\t\tget() {\n\t\t\t\t\t$mol_fail_hidden( new Error( `${ api } is forbidden in tests` ) )\n\t\t\t\t} ,\n\t\t\t\tapply() {\n\t\t\t\t\t$mol_fail_hidden( new Error( `${ api } is forbidden in tests` ) )\n\t\t\t\t} ,\n\t\t\t} )\n\t\t}\n\t\t\n\t} )\n\n\t$mol_test({\n\n\t\t'mocked Math.random'( $ ) {\n\t\t\tconsole.assert( $.Math.random() === 0 )\n\t\t\tconsole.assert( $.Math.random() === Math.sin(1) )\n\t\t} ,\n\n\t\t'forbidden XMLHttpRequest'( $ ) {\n\t\t\ttry {\n\t\t\t\tconsole.assert( void new $.XMLHttpRequest )\n\t\t\t} catch( error: any ) {\n\t\t\t\tconsole.assert( error.message === 'XMLHttpRequest is forbidden in tests' )\n\t\t\t}\n\t\t} ,\n\n\t\t'forbidden fetch'( $ ) {\n\t\t\ttry {\n\t\t\t\tconsole.assert( void $.fetch('') )\n\t\t\t} catch( error: any ) {\n\t\t\t\tconsole.assert( error.message === 'fetch is forbidden in tests' )\n\t\t\t}\n\t\t} ,\n\n\t})\n\n}\n","namespace $ {\n\t\n\texport function $mol_test_complete() {\n\t}\n\t\n}\n",null,null,null,null,null,null,"/** @jsx $mol_jsx */\nnamespace $ {\n\t\n\t$mol_test({\n\t\t\n\t\t'Make empty div'() {\n\t\t\t$mol_assert_equal( (
).outerHTML , '
' )\n\t\t} ,\n\t\t\n\t\t'Define native field'() {\n\t\t\t\n\t\t\tconst dom = as HTMLInputElement\n\t\t\t\n\t\t\t$mol_assert_equal( dom.outerHTML, '' )\n\t\t\t$mol_assert_equal( dom.value, '123' )\n\n\t\t} ,\n\t\t\n\t\t'Define classes'() {\n\t\t\t\n\t\t\tconst dom =
\n\t\t\t\n\t\t\t$mol_assert_equal( dom.outerHTML, '
' )\n\n\t\t} ,\n\t\t\n\t\t'Define styles'() {\n\t\t\t\n\t\t\tconst dom =
\n\t\t\t\n\t\t\t$mol_assert_equal( dom.outerHTML, '
' )\n\n\t\t} ,\n\t\t\n\t\t'Define dataset'() {\n\t\t\t\n\t\t\tconst dom =
\n\t\t\t\n\t\t\t$mol_assert_equal( dom.outerHTML, '
' )\n\n\t\t} ,\n\t\t\n\t\t'Define attributes'() {\n\t\t\t\n\t\t\tconst dom =