<?php

use Twig\Environment;
use Twig\Error\LoaderError;
use Twig\Error\RuntimeError;
use Twig\Extension\CoreExtension;
use Twig\Extension\SandboxExtension;
use Twig\Markup;
use Twig\Sandbox\SecurityError;
use Twig\Sandbox\SecurityNotAllowedTagError;
use Twig\Sandbox\SecurityNotAllowedFilterError;
use Twig\Sandbox\SecurityNotAllowedFunctionError;
use Twig\Source;
use Twig\Template;

/* @public_path/build/vendors-node_modules_devextreme_esm_localization_message_js-node_modules_devextreme_esm_local-2a9609.js */
class __TwigTemplate_767e3ae58e2d81481fbc36c60145401cc2f510d1e1c25c37a5396119b9aa3a1c extends Template
{
    private $source;
    private $macros = [];

    public function __construct(Environment $env)
    {
        parent::__construct($env);

        $this->source = $this->getSourceContext();

        $this->parent = false;

        $this->blocks = [
        ];
    }

    protected function doDisplay(array $context, array $blocks = [])
    {
        $macros = $this->macros;
        $__internal_085b0142806202599c7fe3b329164a92397d8978207a37e79d70b8c52599e33e = $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
        $__internal_085b0142806202599c7fe3b329164a92397d8978207a37e79d70b8c52599e33e->enter($__internal_085b0142806202599c7fe3b329164a92397d8978207a37e79d70b8c52599e33e_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "template", "@public_path/build/vendors-node_modules_devextreme_esm_localization_message_js-node_modules_devextreme_esm_local-2a9609.js"));

        $__internal_319393461309892924ff6e74d6d6e64287df64b63545b994e100d4ab223aed02 = $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
        $__internal_319393461309892924ff6e74d6d6e64287df64b63545b994e100d4ab223aed02->enter($__internal_319393461309892924ff6e74d6d6e64287df64b63545b994e100d4ab223aed02_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "template", "@public_path/build/vendors-node_modules_devextreme_esm_localization_message_js-node_modules_devextreme_esm_local-2a9609.js"));

        yield "(self[\"webpackChunk\"] = self[\"webpackChunk\"] || []).push([[\"vendors-node_modules_devextreme_esm_localization_message_js-node_modules_devextreme_esm_local-2a9609\"],{

/***/ \"./node_modules/@babel/runtime/helpers/esm/extends.js\":
/*!************************************************************!*\\
  !*** ./node_modules/@babel/runtime/helpers/esm/extends.js ***!
  \\************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"default\": () => (/* binding */ _extends)
/* harmony export */ });
function _extends() {
  _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;
  };

  return _extends.apply(this, arguments);
}

/***/ }),

/***/ \"./node_modules/devextreme/esm/core/class.js\":
/*!***************************************************!*\\
  !*** ./node_modules/devextreme/esm/core/class.js ***!
  \\***************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _errors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./errors */ \"./node_modules/devextreme/esm/core/errors.js\");
/* harmony import */ var _utils_type__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils/type */ \"./node_modules/devextreme/esm/core/utils/type.js\");
/**
 * DevExtreme (esm/core/class.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */


var wrapOverridden = function(baseProto, methodName, method) {
    return function() {
        var prevCallBase = this.callBase;
        this.callBase = baseProto[methodName];
        try {
            return method.apply(this, arguments)
        } finally {
            this.callBase = prevCallBase
        }
    }
};
var clonePrototype = function(obj) {
    var func = function() {};
    func.prototype = obj.prototype;
    return new func
};
var redefine = function(members) {
    var overridden;
    var memberName;
    var member;
    if (!members) {
        return this
    }
    for (memberName in members) {
        member = members[memberName];
        overridden = \"function\" === typeof this.prototype[memberName] && \"function\" === typeof member;
        this.prototype[memberName] = overridden ? wrapOverridden(this.parent.prototype, memberName, member) : member
    }
    return this
};
var include = function() {
    var classObj = this;
    var argument;
    var name;
    var i;
    var hasClassObjOwnProperty = Object.prototype.hasOwnProperty.bind(classObj);
    var isES6Class = !hasClassObjOwnProperty(\"_includedCtors\") && !hasClassObjOwnProperty(\"_includedPostCtors\");
    if (isES6Class) {
        classObj._includedCtors = classObj._includedCtors.slice(0);
        classObj._includedPostCtors = classObj._includedPostCtors.slice(0)
    }
    for (i = 0; i < arguments.length; i++) {
        argument = arguments[i];
        if (argument.ctor) {
            classObj._includedCtors.push(argument.ctor)
        }
        if (argument.postCtor) {
            classObj._includedPostCtors.push(argument.postCtor)
        }
        for (name in argument) {
            if (\"ctor\" === name || \"postCtor\" === name || \"default\" === name) {
                continue
            }
            classObj.prototype[name] = argument[name]
        }
    }
    return classObj
};
var subclassOf = function(parentClass) {
    var hasParentProperty = Object.prototype.hasOwnProperty.bind(this)(\"parent\");
    var isES6Class = !hasParentProperty && this.parent;
    if (isES6Class) {
        var baseClass = Object.getPrototypeOf(this);
        return baseClass === parentClass || baseClass.subclassOf(parentClass)
    } else {
        if (this.parent === parentClass) {
            return true
        }
        if (!this.parent || !this.parent.subclassOf) {
            return false
        }
        return this.parent.subclassOf(parentClass)
    }
};
var abstract = function() {
    throw _errors__WEBPACK_IMPORTED_MODULE_0__.default.Error(\"E0001\")
};
var copyStatic = function() {
    var hasOwn = Object.prototype.hasOwnProperty;
    return function(source, destination) {
        for (var key in source) {
            if (!hasOwn.call(source, key)) {
                return
            }
            destination[key] = source[key]
        }
    }
}();
var classImpl = function() {};
classImpl.inherit = function(members) {
    var inheritor = function() {
        if (!this || (0,_utils_type__WEBPACK_IMPORTED_MODULE_1__.isWindow)(this) || \"function\" !== typeof this.constructor) {
            throw _errors__WEBPACK_IMPORTED_MODULE_0__.default.Error(\"E0003\")
        }
        var instance = this;
        var ctor = instance.ctor;
        var includedCtors = instance.constructor._includedCtors;
        var includedPostCtors = instance.constructor._includedPostCtors;
        var i;
        for (i = 0; i < includedCtors.length; i++) {
            includedCtors[i].call(instance)
        }
        if (ctor) {
            ctor.apply(instance, arguments)
        }
        for (i = 0; i < includedPostCtors.length; i++) {
            includedPostCtors[i].call(instance)
        }
    };
    inheritor.prototype = clonePrototype(this);
    copyStatic(this, inheritor);
    inheritor.inherit = this.inherit;
    inheritor.abstract = abstract;
    inheritor.redefine = redefine;
    inheritor.include = include;
    inheritor.subclassOf = subclassOf;
    inheritor.parent = this;
    inheritor._includedCtors = this._includedCtors ? this._includedCtors.slice(0) : [];
    inheritor._includedPostCtors = this._includedPostCtors ? this._includedPostCtors.slice(0) : [];
    inheritor.prototype.constructor = inheritor;
    inheritor.redefine(members);
    return inheritor
};
classImpl.abstract = abstract;
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (classImpl);


/***/ }),

/***/ \"./node_modules/devextreme/esm/core/config.js\":
/*!****************************************************!*\\
  !*** ./node_modules/devextreme/esm/core/config.js ***!
  \\****************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _utils_extend__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils/extend */ \"./node_modules/devextreme/esm/core/utils/extend.js\");
/* harmony import */ var _errors__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./errors */ \"./node_modules/devextreme/esm/core/errors.js\");
/**
 * DevExtreme (esm/core/config.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */


var config = {
    rtlEnabled: false,
    defaultCurrency: \"USD\",
    oDataFilterToLower: true,
    serverDecimalSeparator: \".\",
    decimalSeparator: \".\",
    thousandsSeparator: \",\",
    forceIsoDateParsing: true,
    wrapActionsBeforeExecute: true,
    useLegacyStoreResult: false,
    useJQuery: void 0,
    editorStylingMode: void 0,
    useLegacyVisibleIndex: false,
    floatingActionButtonConfig: {
        icon: \"add\",
        closeIcon: \"close\",
        label: \"\",
        position: {
            at: \"right bottom\",
            my: \"right bottom\",
            offset: {
                x: -16,
                y: -16
            }
        },
        maxSpeedDialActionCount: 5,
        shading: false,
        direction: \"auto\"
    },
    optionsParser: optionsString => {
        if (\"{\" !== optionsString.trim().charAt(0)) {
            optionsString = \"{\" + optionsString + \"}\"
        }
        try {
            return new Function(\"return \" + optionsString)()
        } catch (ex) {
            throw _errors__WEBPACK_IMPORTED_MODULE_1__.default.Error(\"E3018\", ex, optionsString)
        }
    }
};
var deprecatedFields = [\"decimalSeparator\", \"thousandsSeparator\"];
var configMethod = function() {
    if (!arguments.length) {
        return config
    }
    var newConfig = arguments.length <= 0 ? void 0 : arguments[0];
    deprecatedFields.forEach(deprecatedField => {
        if (newConfig[deprecatedField]) {
            var message = \"Now, the \".concat(deprecatedField, \" is selected based on the specified locale.\");
            _errors__WEBPACK_IMPORTED_MODULE_1__.default.log(\"W0003\", \"config\", deprecatedField, \"19.2\", message)
        }
    });
    (0,_utils_extend__WEBPACK_IMPORTED_MODULE_0__.extend)(config, newConfig)
};
if (\"undefined\" !== typeof DevExpress && DevExpress.config) {
    configMethod(DevExpress.config)
}
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (configMethod);


/***/ }),

/***/ \"./node_modules/devextreme/esm/core/dom_adapter.js\":
/*!*********************************************************!*\\
  !*** ./node_modules/devextreme/esm/core/dom_adapter.js ***!
  \\*********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _utils_dependency_injector__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils/dependency_injector */ \"./node_modules/devextreme/esm/core/utils/dependency_injector.js\");
/* harmony import */ var _utils_common__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils/common */ \"./node_modules/devextreme/esm/core/utils/common.js\");
/**
 * DevExtreme (esm/core/dom_adapter.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */


var ELEMENT_NODE = 1;
var TEXT_NODE = 3;
var DOCUMENT_NODE = 9;
var nativeDOMAdapterStrategy = {
    querySelectorAll: (element, selector) => element.querySelectorAll(selector),
    elementMatches(element, selector) {
        var matches = element.matches || element.matchesSelector || element.mozMatchesSelector || element.msMatchesSelector || element.oMatchesSelector || element.webkitMatchesSelector || (selector => {
            var doc = element.document || element.ownerDocument;
            if (!doc) {
                return false
            }
            var items = this.querySelectorAll(doc, selector);
            for (var i = 0; i < items.length; i++) {
                if (items[i] === element) {
                    return true
                }
            }
        });
        return matches.call(element, selector)
    },
    createElement(tagName, context) {
        context = context || this._document;
        return context.createElement(tagName)
    },
    createElementNS(ns, tagName, context) {
        context = context || this._document;
        return context.createElementNS(ns, tagName)
    },
    createTextNode(text, context) {
        context = context || this._document;
        return context.createTextNode(text)
    },
    isNode: element => element && \"object\" === typeof element && \"nodeType\" in element && \"nodeName\" in element,
    isElementNode: element => element && element.nodeType === ELEMENT_NODE,
    isTextNode: element => element && element.nodeType === TEXT_NODE,
    isDocument: element => element && element.nodeType === DOCUMENT_NODE,
    removeElement(element) {
        var parentNode = element && element.parentNode;
        if (parentNode) {
            parentNode.removeChild(element)
        }
    },
    insertElement(parentElement, newElement, nextSiblingElement) {
        if (parentElement && newElement && parentElement !== newElement) {
            if (nextSiblingElement) {
                parentElement.insertBefore(newElement, nextSiblingElement)
            } else {
                parentElement.appendChild(newElement)
            }
        }
    },
    getAttribute: (element, name) => element.getAttribute(name),
    setAttribute(element, name, value) {
        element.setAttribute(name, value)
    },
    removeAttribute(element, name) {
        element.removeAttribute(name)
    },
    setProperty(element, name, value) {
        element[name] = value
    },
    setText(element, text) {
        if (element) {
            element.textContent = text
        }
    },
    setClass(element, className, isAdd) {
        if (1 === element.nodeType && className) {
            if (element.classList) {
                if (isAdd) {
                    element.classList.add(className)
                } else {
                    element.classList.remove(className)
                }
            } else {
                var classNameSupported = \"string\" === typeof element.className;
                var elementClass = classNameSupported ? element.className : this.getAttribute(element, \"class\") || \"\";
                var classNames = elementClass.split(\" \");
                var classIndex = classNames.indexOf(className);
                var resultClassName;
                if (isAdd && classIndex < 0) {
                    resultClassName = elementClass ? elementClass + \" \" + className : className
                }
                if (!isAdd && classIndex >= 0) {
                    classNames.splice(classIndex, 1);
                    resultClassName = classNames.join(\" \")
                }
                if (void 0 !== resultClassName) {
                    if (classNameSupported) {
                        element.className = resultClassName
                    } else {
                        this.setAttribute(element, \"class\", resultClassName)
                    }
                }
            }
        }
    },
    setStyle(element, name, value) {
        element.style[name] = value || \"\"
    },
    _document: \"undefined\" === typeof document ? void 0 : document,
    getDocument() {
        return this._document
    },
    getActiveElement() {
        return this._document.activeElement
    },
    getBody() {
        return this._document.body
    },
    createDocumentFragment() {
        return this._document.createDocumentFragment()
    },
    getDocumentElement() {
        return this._document.documentElement
    },
    getLocation() {
        return this._document.location
    },
    getSelection() {
        return this._document.selection
    },
    getReadyState() {
        return this._document.readyState
    },
    getHead() {
        return this._document.head
    },
    hasDocumentProperty(property) {
        return property in this._document
    },
    listen(element, event, callback, options) {
        if (!element || !(\"addEventListener\" in element)) {
            return _utils_common__WEBPACK_IMPORTED_MODULE_1__.noop
        }
        element.addEventListener(event, callback, options);
        return () => {
            element.removeEventListener(event, callback)
        }
    }
};
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_utils_dependency_injector__WEBPACK_IMPORTED_MODULE_0__.default)(nativeDOMAdapterStrategy));


/***/ }),

/***/ \"./node_modules/devextreme/esm/core/element_data.js\":
/*!**********************************************************!*\\
  !*** ./node_modules/devextreme/esm/core/element_data.js ***!
  \\**********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"strategyChanging\": () => (/* binding */ strategyChanging),
/* harmony export */   \"setDataStrategy\": () => (/* binding */ setDataStrategy),
/* harmony export */   \"getDataStrategy\": () => (/* binding */ getDataStrategy),
/* harmony export */   \"data\": () => (/* binding */ data),
/* harmony export */   \"beforeCleanData\": () => (/* binding */ beforeCleanData),
/* harmony export */   \"afterCleanData\": () => (/* binding */ afterCleanData),
/* harmony export */   \"cleanData\": () => (/* binding */ cleanData),
/* harmony export */   \"removeData\": () => (/* binding */ removeData),
/* harmony export */   \"cleanDataRecursive\": () => (/* binding */ cleanDataRecursive)
/* harmony export */ });
/* harmony import */ var _polyfills_weak_map__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./polyfills/weak_map */ \"./node_modules/devextreme/esm/core/polyfills/weak_map.js\");
/* harmony import */ var _dom_adapter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./dom_adapter */ \"./node_modules/devextreme/esm/core/dom_adapter.js\");
/* harmony import */ var _events_core_events_engine__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../events/core/events_engine */ \"./node_modules/devextreme/esm/events/core/events_engine.js\");
/* harmony import */ var _memorized_callbacks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./memorized_callbacks */ \"./node_modules/devextreme/esm/core/memorized_callbacks.js\");
/**
 * DevExtreme (esm/core/element_data.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */




var dataMap = new _polyfills_weak_map__WEBPACK_IMPORTED_MODULE_0__.default;
var strategy;
var strategyChanging = new _memorized_callbacks__WEBPACK_IMPORTED_MODULE_3__.default;
var beforeCleanDataFunc = function() {};
var afterCleanDataFunc = function() {};
var setDataStrategy = function(value) {
    strategyChanging.fire(value);
    strategy = value;
    var cleanData = strategy.cleanData;
    strategy.cleanData = function(nodes) {
        beforeCleanDataFunc(nodes);
        var result = cleanData.call(this, nodes);
        afterCleanDataFunc(nodes);
        return result
    }
};
setDataStrategy({
    data: function() {
        var element = arguments[0];
        var key = arguments[1];
        var value = arguments[2];
        if (!element) {
            return
        }
        var elementData = dataMap.get(element);
        if (!elementData) {
            elementData = {};
            dataMap.set(element, elementData)
        }
        if (void 0 === key) {
            return elementData
        }
        if (2 === arguments.length) {
            return elementData[key]
        }
        elementData[key] = value;
        return value
    },
    removeData: function(element, key) {
        if (!element) {
            return
        }
        if (void 0 === key) {
            dataMap.delete(element)
        } else {
            var elementData = dataMap.get(element);
            if (elementData) {
                delete elementData[key]
            }
        }
    },
    cleanData: function(elements) {
        for (var i = 0; i < elements.length; i++) {
            _events_core_events_engine__WEBPACK_IMPORTED_MODULE_2__.default.off(elements[i]);
            dataMap.delete(elements[i])
        }
    }
});
function getDataStrategy() {
    return strategy
}
function data() {
    return strategy.data.apply(this, arguments)
}
function beforeCleanData(callback) {
    beforeCleanDataFunc = callback
}
function afterCleanData(callback) {
    afterCleanDataFunc = callback
}
function cleanData(nodes) {
    return strategy.cleanData.call(this, nodes)
}
function removeData(element, key) {
    return strategy.removeData.call(this, element, key)
}
function cleanDataRecursive(element, cleanSelf) {
    if (!_dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.isElementNode(element)) {
        return
    }
    var childElements = element.getElementsByTagName(\"*\");
    strategy.cleanData(childElements);
    if (cleanSelf) {
        strategy.cleanData([element])
    }
}


/***/ }),

/***/ \"./node_modules/devextreme/esm/core/errors.js\":
/*!****************************************************!*\\
  !*** ./node_modules/devextreme/esm/core/errors.js ***!
  \\****************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _utils_error__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils/error */ \"./node_modules/devextreme/esm/core/utils/error.js\");
/**
 * DevExtreme (esm/core/errors.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */

/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_utils_error__WEBPACK_IMPORTED_MODULE_0__.default)({
    E0001: \"Method is not implemented\",
    E0002: \"Member name collision: {0}\",
    E0003: \"A class must be instantiated using the 'new' keyword\",
    E0004: \"The NAME property of the component is not specified\",
    E0005: \"Unknown device\",
    E0006: \"Unknown endpoint key is requested\",
    E0007: \"'Invalidate' method is called outside the update transaction\",
    E0008: \"Type of the option name is not appropriate to create an action\",
    E0009: \"Component '{0}' has not been initialized for an element\",
    E0010: \"Animation configuration with the '{0}' type requires '{1}' configuration as {2}\",
    E0011: \"Unknown animation type '{0}'\",
    E0012: \"jQuery version is too old. Please upgrade jQuery to 1.10.0 or later\",
    E0013: \"KnockoutJS version is too old. Please upgrade KnockoutJS to 2.3.0 or later\",
    E0014: \"The 'release' method shouldn't be called for an unlocked Lock object\",
    E0015: \"Queued task returned an unexpected result\",
    E0017: \"Event namespace is not defined\",
    E0018: \"DevExpress.ui.DevExpressPopup widget is required\",
    E0020: \"Template engine '{0}' is not supported\",
    E0021: \"Unknown theme is set: {0}\",
    E0022: \"LINK[rel=DevExpress-theme] tags must go before DevExpress included scripts\",
    E0023: \"Template name is not specified\",
    E0024: \"DevExtreme bundle already included\",
    E0025: \"Unexpected argument type\",
    E0100: \"Unknown validation type is detected\",
    E0101: \"Misconfigured range validation rule is detected\",
    E0102: \"Misconfigured comparison validation rule is detected\",
    E0103: \"validationCallback of an asynchronous rule should return a jQuery or a native promise\",
    E0110: \"Unknown validation group is detected\",
    E0120: \"Adapter for a DevExpressValidator component cannot be configured\",
    E0121: \"The 'customItem' field of the 'onCustomItemCreating' function's parameter should contain a custom item or Promise that is resolved after the item is created.\",
    W0000: \"'{0}' is deprecated in {1}. {2}\",
    W0001: \"{0} - '{1}' option is deprecated in {2}. {3}\",
    W0002: \"{0} - '{1}' method is deprecated in {2}. {3}\",
    W0003: \"{0} - '{1}' property is deprecated in {2}. {3}\",
    W0004: \"Timeout for theme loading is over: {0}\",
    W0005: \"'{0}' event is deprecated in {1}. {2}\",
    W0006: \"Invalid recurrence rule: '{0}'\",
    W0007: \"'{0}' Globalize culture is not defined\",
    W0008: \"Invalid view name: '{0}'\",
    W0009: \"Invalid time zone name: '{0}'\",
    W0010: \"{0} is deprecated in {1}. {2}\",
    W0011: \"Number parsing is invoked while the parser is not defined\",
    W0012: \"Date parsing is invoked while the parser is not defined\",
    W0013: \"'{0}' file is deprecated in {1}. {2}\",
    W0014: \"{0} - '{1}' type is deprecated in {2}. {3}\",
    W0015: \"Instead of returning a value from the '{0}' function, write it into the '{1}' field of the function's parameter.\",
    W0016: 'The \"{0}\" option does not accept the \"{1}\" value since v.{2}. {3}.'
}));


/***/ }),

/***/ \"./node_modules/devextreme/esm/core/guid.js\":
/*!**************************************************!*\\
  !*** ./node_modules/devextreme/esm/core/guid.js ***!
  \\**************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _class__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./class */ \"./node_modules/devextreme/esm/core/class.js\");
/**
 * DevExtreme (esm/core/guid.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */

var Guid = _class__WEBPACK_IMPORTED_MODULE_0__.default.inherit({
    ctor: function(value) {
        if (value) {
            value = String(value)
        }
        this._value = this._normalize(value || this._generate())
    },
    _normalize: function(value) {
        value = value.replace(/[^a-f0-9]/gi, \"\").toLowerCase();
        while (value.length < 32) {
            value += \"0\"
        }
        return [value.substr(0, 8), value.substr(8, 4), value.substr(12, 4), value.substr(16, 4), value.substr(20, 12)].join(\"-\")
    },
    _generate: function() {
        var value = \"\";
        for (var i = 0; i < 32; i++) {
            value += Math.round(15 * Math.random()).toString(16)
        }
        return value
    },
    toString: function() {
        return this._value
    },
    valueOf: function() {
        return this._value
    },
    toJSON: function() {
        return this._value
    }
});
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Guid);


/***/ }),

/***/ \"./node_modules/devextreme/esm/core/memorized_callbacks.js\":
/*!*****************************************************************!*\\
  !*** ./node_modules/devextreme/esm/core/memorized_callbacks.js ***!
  \\*****************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"default\": () => (/* binding */ MemorizedCallbacks)
/* harmony export */ });
/* harmony import */ var _core_utils_iterator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core/utils/iterator */ \"./node_modules/devextreme/esm/core/utils/iterator.js\");
/* harmony import */ var _utils_callbacks__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils/callbacks */ \"./node_modules/devextreme/esm/core/utils/callbacks.js\");
/**
 * DevExtreme (esm/core/memorized_callbacks.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */


class MemorizedCallbacks {
    constructor() {
        this.memory = [];
        this.callbacks = (0,_utils_callbacks__WEBPACK_IMPORTED_MODULE_1__.default)()
    }
    add(fn) {
        (0,_core_utils_iterator__WEBPACK_IMPORTED_MODULE_0__.each)(this.memory, (_, item) => fn.apply(fn, item));
        this.callbacks.add(fn)
    }
    remove(fn) {
        this.callbacks.remove(fn)
    }
    fire() {
        for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
            args[_key] = arguments[_key]
        }
        this.memory.push(args);
        this.callbacks.fire.apply(this.callbacks, args)
    }
}


/***/ }),

/***/ \"./node_modules/devextreme/esm/core/polyfills/weak_map.js\":
/*!****************************************************************!*\\
  !*** ./node_modules/devextreme/esm/core/polyfills/weak_map.js ***!
  \\****************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _utils_array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/array */ \"./node_modules/devextreme/esm/core/utils/array.js\");
/* harmony import */ var _utils_window__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/window */ \"./node_modules/devextreme/esm/core/utils/window.js\");
/**
 * DevExtreme (esm/core/polyfills/weak_map.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */


var weakMap = (0,_utils_window__WEBPACK_IMPORTED_MODULE_1__.hasWindow)() ? (0,_utils_window__WEBPACK_IMPORTED_MODULE_1__.getWindow)().WeakMap : WeakMap;
if (!weakMap) {
    weakMap = function() {
        var keys = [];
        var values = [];
        this.set = function(key, value) {
            var index = (0,_utils_array__WEBPACK_IMPORTED_MODULE_0__.inArray)(key, keys);
            if (-1 === index) {
                keys.push(key);
                values.push(value)
            } else {
                values[index] = value
            }
        };
        this.get = function(key) {
            var index = (0,_utils_array__WEBPACK_IMPORTED_MODULE_0__.inArray)(key, keys);
            if (-1 === index) {
                return
            }
            return values[index]
        };
        this.has = function(key) {
            var index = (0,_utils_array__WEBPACK_IMPORTED_MODULE_0__.inArray)(key, keys);
            if (-1 === index) {
                return false
            }
            return true
        };
        this.delete = function(key) {
            var index = (0,_utils_array__WEBPACK_IMPORTED_MODULE_0__.inArray)(key, keys);
            if (-1 === index) {
                return
            }
            keys.splice(index, 1);
            values.splice(index, 1)
        }
    }
}
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (weakMap);


/***/ }),

/***/ \"./node_modules/devextreme/esm/core/renderer.js\":
/*!******************************************************!*\\
  !*** ./node_modules/devextreme/esm/core/renderer.js ***!
  \\******************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _renderer_base__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./renderer_base */ \"./node_modules/devextreme/esm/core/renderer_base.js\");
/**
 * DevExtreme (esm/core/renderer.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */

/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_renderer_base__WEBPACK_IMPORTED_MODULE_0__.default.get());


/***/ }),

/***/ \"./node_modules/devextreme/esm/core/renderer_base.js\":
/*!***********************************************************!*\\
  !*** ./node_modules/devextreme/esm/core/renderer_base.js ***!
  \\***********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _element_data__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element_data */ \"./node_modules/devextreme/esm/core/element_data.js\");
/* harmony import */ var _dom_adapter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./dom_adapter */ \"./node_modules/devextreme/esm/core/dom_adapter.js\");
/* harmony import */ var _utils_window__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utils/window */ \"./node_modules/devextreme/esm/core/utils/window.js\");
/* harmony import */ var _utils_type__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utils/type */ \"./node_modules/devextreme/esm/core/utils/type.js\");
/* harmony import */ var _utils_style__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./utils/style */ \"./node_modules/devextreme/esm/core/utils/style.js\");
/* harmony import */ var _utils_size__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./utils/size */ \"./node_modules/devextreme/esm/core/utils/size.js\");
/* harmony import */ var _utils_html_parser__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./utils/html_parser */ \"./node_modules/devextreme/esm/core/utils/html_parser.js\");
/**
 * DevExtreme (esm/core/renderer_base.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */







var window = (0,_utils_window__WEBPACK_IMPORTED_MODULE_2__.getWindow)();
var renderer;
var initRender = function(selector, context) {
    if (!selector) {
        this.length = 0;
        return this
    }
    if (\"string\" === typeof selector) {
        if (\"body\" === selector) {
            this[0] = context ? context.body : _dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.getBody();
            this.length = 1;
            return this
        }
        context = context || _dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.getDocument();
        if (\"<\" === selector[0]) {
            this[0] = _dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.createElement(selector.slice(1, -1), context);
            this.length = 1;
            return this
        } [].push.apply(this, _dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.querySelectorAll(context, selector));
        return this
    } else if (_dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.isNode(selector) || (0,_utils_type__WEBPACK_IMPORTED_MODULE_3__.isWindow)(selector)) {
        this[0] = selector;
        this.length = 1;
        return this
    } else if (Array.isArray(selector)) {
        [].push.apply(this, selector);
        return this
    }
    return renderer(selector.toArray ? selector.toArray() : [selector])
};
renderer = function(selector, context) {
    return new initRender(selector, context)
};
renderer.fn = {
    dxRenderer: true
};
initRender.prototype = renderer.fn;
var repeatMethod = function(methodName, args) {
    for (var i = 0; i < this.length; i++) {
        var item = renderer(this[i]);
        item[methodName].apply(item, args)
    }
    return this
};
var setAttributeValue = function(element, attrName, value) {
    if (void 0 !== value && null !== value) {
        _dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.setAttribute(element, attrName, value)
    } else {
        _dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.removeAttribute(element, attrName)
    }
};
initRender.prototype.show = function() {
    return this.toggle(true)
};
initRender.prototype.hide = function() {
    return this.toggle(false)
};
initRender.prototype.toggle = function(value) {
    if (this[0]) {
        this.toggleClass(\"dx-state-invisible\", !value)
    }
    return this
};
initRender.prototype.attr = function(attrName, value) {
    if (this.length > 1 && arguments.length > 1) {
        return repeatMethod.call(this, \"attr\", arguments)
    }
    if (!this[0]) {
        if ((0,_utils_type__WEBPACK_IMPORTED_MODULE_3__.isObject)(attrName) || void 0 !== value) {
            return this
        } else {
            return
        }
    }
    if (!this[0].getAttribute) {
        return this.prop(attrName, value)
    }
    if (\"string\" === typeof attrName && 1 === arguments.length) {
        var result = this[0].getAttribute(attrName);
        return null == result ? void 0 : result
    } else if ((0,_utils_type__WEBPACK_IMPORTED_MODULE_3__.isPlainObject)(attrName)) {
        for (var key in attrName) {
            this.attr(key, attrName[key])
        }
    } else {
        setAttributeValue(this[0], attrName, value)
    }
    return this
};
initRender.prototype.removeAttr = function(attrName) {
    this[0] && _dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.removeAttribute(this[0], attrName);
    return this
};
initRender.prototype.prop = function(propName, value) {
    if (!this[0]) {
        return this
    }
    if (\"string\" === typeof propName && 1 === arguments.length) {
        return this[0][propName]
    } else if ((0,_utils_type__WEBPACK_IMPORTED_MODULE_3__.isPlainObject)(propName)) {
        for (var key in propName) {
            this.prop(key, propName[key])
        }
    } else {
        _dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.setProperty(this[0], propName, value)
    }
    return this
};
initRender.prototype.addClass = function(className) {
    return this.toggleClass(className, true)
};
initRender.prototype.removeClass = function(className) {
    return this.toggleClass(className, false)
};
initRender.prototype.hasClass = function(className) {
    if (!this[0] || void 0 === this[0].className) {
        return false
    }
    var classNames = className.split(\" \");
    for (var i = 0; i < classNames.length; i++) {
        if (this[0].classList) {
            if (this[0].classList.contains(classNames[i])) {
                return true
            }
        } else {
            var _className = (0,_utils_type__WEBPACK_IMPORTED_MODULE_3__.isString)(this[0].className) ? this[0].className : _dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.getAttribute(this[0], \"class\");
            if ((_className || \"\").split(\" \").indexOf(classNames[i]) >= 0) {
                return true
            }
        }
    }
    return false
};
initRender.prototype.toggleClass = function(className, value) {
    if (this.length > 1) {
        return repeatMethod.call(this, \"toggleClass\", arguments)
    }
    if (!this[0] || !className) {
        return this
    }
    value = void 0 === value ? !this.hasClass(className) : value;
    var classNames = className.split(\" \");
    for (var i = 0; i < classNames.length; i++) {
        _dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.setClass(this[0], classNames[i], value)
    }
    return this
};
[\"width\", \"height\", \"outerWidth\", \"outerHeight\", \"innerWidth\", \"innerHeight\"].forEach((function(methodName) {
    var partialName = methodName.toLowerCase().indexOf(\"width\") >= 0 ? \"Width\" : \"Height\";
    var propName = partialName.toLowerCase();
    var isOuter = 0 === methodName.indexOf(\"outer\");
    var isInner = 0 === methodName.indexOf(\"inner\");
    initRender.prototype[methodName] = function(value) {
        if (this.length > 1 && arguments.length > 0) {
            return repeatMethod.call(this, methodName, arguments)
        }
        var element = this[0];
        if (!element) {
            return
        }
        if ((0,_utils_type__WEBPACK_IMPORTED_MODULE_3__.isWindow)(element)) {
            return isOuter ? element[\"inner\" + partialName] : _dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.getDocumentElement()[\"client\" + partialName]
        }
        if (_dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.isDocument(element)) {
            var documentElement = _dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.getDocumentElement();
            var body = _dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.getBody();
            return Math.max(body[\"scroll\" + partialName], body[\"offset\" + partialName], documentElement[\"scroll\" + partialName], documentElement[\"offset\" + partialName], documentElement[\"client\" + partialName])
        }
        if (0 === arguments.length || \"boolean\" === typeof value) {
            var include = {
                paddings: isInner || isOuter,
                borders: isOuter,
                margins: value
            };
            return (0,_utils_size__WEBPACK_IMPORTED_MODULE_5__.getSize)(element, propName, include)
        }
        if (void 0 === value || null === value) {
            return this
        }
        if ((0,_utils_type__WEBPACK_IMPORTED_MODULE_3__.isNumeric)(value)) {
            var elementStyles = window.getComputedStyle(element);
            var sizeAdjustment = (0,_utils_size__WEBPACK_IMPORTED_MODULE_5__.getElementBoxParams)(propName, elementStyles);
            var isBorderBox = \"border-box\" === elementStyles.boxSizing;
            value = Number(value);
            if (isOuter) {
                value -= isBorderBox ? 0 : sizeAdjustment.border + sizeAdjustment.padding
            } else if (isInner) {
                value += isBorderBox ? sizeAdjustment.border : -sizeAdjustment.padding
            } else if (isBorderBox) {
                value += sizeAdjustment.border + sizeAdjustment.padding
            }
        }
        value += (0,_utils_type__WEBPACK_IMPORTED_MODULE_3__.isNumeric)(value) ? \"px\" : \"\";
        _dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.setStyle(element, propName, value);
        return this
    }
}));
initRender.prototype.html = function(value) {
    if (!arguments.length) {
        return this[0].innerHTML
    }
    this.empty();
    if (\"string\" === typeof value && !(0,_utils_html_parser__WEBPACK_IMPORTED_MODULE_6__.isTablePart)(value) || \"number\" === typeof value) {
        this[0].innerHTML = value;
        return this
    }
    return this.append((0,_utils_html_parser__WEBPACK_IMPORTED_MODULE_6__.parseHTML)(value))
};
var appendElements = function(element, nextSibling) {
    if (!this[0] || !element) {
        return
    }
    if (\"string\" === typeof element) {
        element = (0,_utils_html_parser__WEBPACK_IMPORTED_MODULE_6__.parseHTML)(element)
    } else if (element.nodeType) {
        element = [element]
    } else if ((0,_utils_type__WEBPACK_IMPORTED_MODULE_3__.isNumeric)(element)) {
        element = [_dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.createTextNode(element)]
    }
    for (var i = 0; i < element.length; i++) {
        var item = element[i];
        var container = this[0];
        var wrapTR = \"TABLE\" === container.tagName && \"TR\" === item.tagName;
        if (wrapTR && container.tBodies && container.tBodies.length) {
            container = container.tBodies[0]
        }
        _dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.insertElement(container, item.nodeType ? item : item[0], nextSibling)
    }
};
var setCss = function(name, value) {
    if (!this[0] || !this[0].style) {
        return
    }
    if (null === value || \"number\" === typeof value && isNaN(value)) {
        return
    }
    name = (0,_utils_style__WEBPACK_IMPORTED_MODULE_4__.styleProp)(name);
    for (var i = 0; i < this.length; i++) {
        this[i].style[name] = (0,_utils_style__WEBPACK_IMPORTED_MODULE_4__.normalizeStyleProp)(name, value)
    }
};
initRender.prototype.css = function(name, value) {
    if ((0,_utils_type__WEBPACK_IMPORTED_MODULE_3__.isString)(name)) {
        if (2 === arguments.length) {
            setCss.call(this, name, value)
        } else {
            if (!this[0]) {
                return
            }
            name = (0,_utils_style__WEBPACK_IMPORTED_MODULE_4__.styleProp)(name);
            var result = window.getComputedStyle(this[0])[name] || this[0].style[name];
            return (0,_utils_type__WEBPACK_IMPORTED_MODULE_3__.isNumeric)(result) ? result.toString() : result
        }
    } else if ((0,_utils_type__WEBPACK_IMPORTED_MODULE_3__.isPlainObject)(name)) {
        for (var key in name) {
            setCss.call(this, key, name[key])
        }
    }
    return this
};
initRender.prototype.prepend = function(element) {
    if (arguments.length > 1) {
        for (var i = 0; i < arguments.length; i++) {
            this.prepend(arguments[i])
        }
        return this
    }
    appendElements.apply(this, [element, this[0].firstChild]);
    return this
};
initRender.prototype.append = function(element) {
    if (arguments.length > 1) {
        for (var i = 0; i < arguments.length; i++) {
            this.append(arguments[i])
        }
        return this
    }
    appendElements.apply(this, [element]);
    return this
};
initRender.prototype.prependTo = function(element) {
    if (this.length > 1) {
        for (var i = this.length - 1; i >= 0; i--) {
            renderer(this[i]).prependTo(element)
        }
        return this
    }
    element = renderer(element);
    if (element[0]) {
        _dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.insertElement(element[0], this[0], element[0].firstChild)
    }
    return this
};
initRender.prototype.appendTo = function(element) {
    if (this.length > 1) {
        return repeatMethod.call(this, \"appendTo\", arguments)
    }
    _dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.insertElement(renderer(element)[0], this[0]);
    return this
};
initRender.prototype.insertBefore = function(element) {
    if (element && element[0]) {
        _dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.insertElement(element[0].parentNode, this[0], element[0])
    }
    return this
};
initRender.prototype.insertAfter = function(element) {
    if (element && element[0]) {
        _dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.insertElement(element[0].parentNode, this[0], element[0].nextSibling)
    }
    return this
};
initRender.prototype.before = function(element) {
    if (this[0]) {
        _dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.insertElement(this[0].parentNode, element[0], this[0])
    }
    return this
};
initRender.prototype.after = function(element) {
    if (this[0]) {
        _dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.insertElement(this[0].parentNode, element[0], this[0].nextSibling)
    }
    return this
};
initRender.prototype.wrap = function(wrapper) {
    if (this[0]) {
        var wrap = renderer(wrapper);
        wrap.insertBefore(this);
        wrap.append(this)
    }
    return this
};
initRender.prototype.wrapInner = function(wrapper) {
    var contents = this.contents();
    if (contents.length) {
        contents.wrap(wrapper)
    } else {
        this.append(wrapper)
    }
    return this
};
initRender.prototype.replaceWith = function(element) {
    if (!(element && element[0])) {
        return
    }
    if (element.is(this)) {
        return this
    }
    element.insertBefore(this);
    this.remove();
    return element
};
initRender.prototype.remove = function() {
    if (this.length > 1) {
        return repeatMethod.call(this, \"remove\", arguments)
    }
    (0,_element_data__WEBPACK_IMPORTED_MODULE_0__.cleanDataRecursive)(this[0], true);
    _dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.removeElement(this[0]);
    return this
};
initRender.prototype.detach = function() {
    if (this.length > 1) {
        return repeatMethod.call(this, \"detach\", arguments)
    }
    _dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.removeElement(this[0]);
    return this
};
initRender.prototype.empty = function() {
    if (this.length > 1) {
        return repeatMethod.call(this, \"empty\", arguments)
    }
    (0,_element_data__WEBPACK_IMPORTED_MODULE_0__.cleanDataRecursive)(this[0]);
    _dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.setText(this[0], \"\");
    return this
};
initRender.prototype.clone = function() {
    var result = [];
    for (var i = 0; i < this.length; i++) {
        result.push(this[i].cloneNode(true))
    }
    return renderer(result)
};
initRender.prototype.text = function(value) {
    if (!arguments.length) {
        var result = \"\";
        for (var i = 0; i < this.length; i++) {
            result += this[i] && this[i].textContent || \"\"
        }
        return result
    }
    var text = (0,_utils_type__WEBPACK_IMPORTED_MODULE_3__.isFunction)(value) ? value() : value;
    (0,_element_data__WEBPACK_IMPORTED_MODULE_0__.cleanDataRecursive)(this[0], false);
    _dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.setText(this[0], (0,_utils_type__WEBPACK_IMPORTED_MODULE_3__.isDefined)(text) ? text : \"\");
    return this
};
initRender.prototype.val = function(value) {
    if (1 === arguments.length) {
        return this.prop(\"value\", (0,_utils_type__WEBPACK_IMPORTED_MODULE_3__.isDefined)(value) ? value : \"\")
    }
    return this.prop(\"value\")
};
initRender.prototype.contents = function() {
    if (!this[0]) {
        return renderer()
    }
    var result = [];
    result.push.apply(result, this[0].childNodes);
    return renderer(result)
};
initRender.prototype.find = function(selector) {
    var result = renderer();
    if (!selector) {
        return result
    }
    var nodes = [];
    var i;
    if (\"string\" === typeof selector) {
        selector = selector.trim();
        for (i = 0; i < this.length; i++) {
            var element = this[i];
            if (_dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.isElementNode(element)) {
                var elementId = element.getAttribute(\"id\");
                var queryId = elementId || \"dx-query-children\";
                if (!elementId) {
                    setAttributeValue(element, \"id\", queryId)
                }
                queryId = \"[id='\" + queryId + \"'] \";
                var querySelector = queryId + selector.replace(/([^\\\\])(,)/g, \"\$1, \" + queryId);
                nodes.push.apply(nodes, _dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.querySelectorAll(element, querySelector));
                setAttributeValue(element, \"id\", elementId)
            } else if (_dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.isDocument(element)) {
                nodes.push.apply(nodes, _dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.querySelectorAll(element, selector))
            }
        }
    } else {
        for (i = 0; i < this.length; i++) {
            selector = _dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.isNode(selector) ? selector : selector[0];
            if (this[i] !== selector && this[i].contains(selector)) {
                nodes.push(selector)
            }
        }
    }
    return result.add(nodes)
};
var isVisible = function(_, element) {
    if (!element.nodeType) {
        return true
    }
    return !!(element.offsetWidth || element.offsetHeight || element.getClientRects().length)
};
initRender.prototype.filter = function(selector) {
    if (!selector) {
        return renderer()
    }
    if (\":visible\" === selector) {
        return this.filter(isVisible)
    } else if (\":hidden\" === selector) {
        return this.filter((function(_, element) {
            return !isVisible(_, element)
        }))
    }
    var result = [];
    for (var i = 0; i < this.length; i++) {
        var item = this[i];
        if (_dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.isElementNode(item) && \"string\" === (0,_utils_type__WEBPACK_IMPORTED_MODULE_3__.type)(selector)) {
            _dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.elementMatches(item, selector) && result.push(item)
        } else if (_dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.isNode(selector) || (0,_utils_type__WEBPACK_IMPORTED_MODULE_3__.isWindow)(selector)) {
            selector === item && result.push(item)
        } else if ((0,_utils_type__WEBPACK_IMPORTED_MODULE_3__.isFunction)(selector)) {
            selector.call(item, i, item) && result.push(item)
        } else {
            for (var j = 0; j < selector.length; j++) {
                selector[j] === item && result.push(item)
            }
        }
    }
    return renderer(result)
};
initRender.prototype.not = function(selector) {
    var result = [];
    var nodes = this.filter(selector).toArray();
    for (var i = 0; i < this.length; i++) {
        if (-1 === nodes.indexOf(this[i])) {
            result.push(this[i])
        }
    }
    return renderer(result)
};
initRender.prototype.is = function(selector) {
    return !!this.filter(selector).length
};
initRender.prototype.children = function(selector) {
    var result = [];
    for (var i = 0; i < this.length; i++) {
        var nodes = this[i] ? this[i].childNodes : [];
        for (var j = 0; j < nodes.length; j++) {
            if (_dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.isElementNode(nodes[j])) {
                result.push(nodes[j])
            }
        }
    }
    result = renderer(result);
    return selector ? result.filter(selector) : result
};
initRender.prototype.siblings = function() {
    var element = this[0];
    if (!element || !element.parentNode) {
        return renderer()
    }
    var result = [];
    var parentChildNodes = element.parentNode.childNodes || [];
    for (var i = 0; i < parentChildNodes.length; i++) {
        var node = parentChildNodes[i];
        if (_dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.isElementNode(node) && node !== element) {
            result.push(node)
        }
    }
    return renderer(result)
};
initRender.prototype.each = function(callback) {
    for (var i = 0; i < this.length; i++) {
        if (false === callback.call(this[i], i, this[i])) {
            break
        }
    }
};
initRender.prototype.index = function(element) {
    if (!element) {
        return this.parent().children().index(this)
    }
    element = renderer(element);
    return this.toArray().indexOf(element[0])
};
initRender.prototype.get = function(index) {
    return this[index < 0 ? this.length + index : index]
};
initRender.prototype.eq = function(index) {
    index = index < 0 ? this.length + index : index;
    return renderer(this[index])
};
initRender.prototype.first = function() {
    return this.eq(0)
};
initRender.prototype.last = function() {
    return this.eq(-1)
};
initRender.prototype.parent = function(selector) {
    if (!this[0]) {
        return renderer()
    }
    var result = renderer(this[0].parentNode);
    return !selector || result.is(selector) ? result : renderer()
};
initRender.prototype.parents = function(selector) {
    var result = [];
    var parent = this.parent();
    while (parent && parent[0] && !_dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.isDocument(parent[0])) {
        if (_dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.isElementNode(parent[0])) {
            if (!selector || parent.is(selector)) {
                result.push(parent.get(0))
            }
        }
        parent = parent.parent()
    }
    return renderer(result)
};
initRender.prototype.closest = function(selector) {
    if (this.is(selector)) {
        return this
    }
    var parent = this.parent();
    while (parent && parent.length) {
        if (parent.is(selector)) {
            return parent
        }
        parent = parent.parent()
    }
    return renderer()
};
initRender.prototype.next = function(selector) {
    if (!this[0]) {
        return renderer()
    }
    var next = renderer(this[0].nextSibling);
    if (!arguments.length) {
        return next
    }
    while (next && next.length) {
        if (next.is(selector)) {
            return next
        }
        next = next.next()
    }
    return renderer()
};
initRender.prototype.prev = function() {
    if (!this[0]) {
        return renderer()
    }
    return renderer(this[0].previousSibling)
};
initRender.prototype.add = function(selector) {
    var targets = renderer(selector);
    var result = this.toArray();
    for (var i = 0; i < targets.length; i++) {
        var target = targets[i];
        if (-1 === result.indexOf(target)) {
            result.push(target)
        }
    }
    return renderer(result)
};
var emptyArray = [];
initRender.prototype.splice = function() {
    return renderer(emptyArray.splice.apply(this, arguments))
};
initRender.prototype.slice = function() {
    return renderer(emptyArray.slice.apply(this, arguments))
};
initRender.prototype.toArray = function() {
    return emptyArray.slice.call(this)
};
var getWindowByElement = function(element) {
    return (0,_utils_type__WEBPACK_IMPORTED_MODULE_3__.isWindow)(element) ? element : element.defaultView
};
initRender.prototype.offset = function() {
    if (!this[0]) {
        return
    }
    if (!this[0].getClientRects().length) {
        return {
            top: 0,
            left: 0
        }
    }
    var rect = this[0].getBoundingClientRect();
    var win = getWindowByElement(this[0].ownerDocument);
    var docElem = this[0].ownerDocument.documentElement;
    return {
        top: rect.top + win.pageYOffset - docElem.clientTop,
        left: rect.left + win.pageXOffset - docElem.clientLeft
    }
};
initRender.prototype.offsetParent = function() {
    if (!this[0]) {
        return renderer()
    }
    var offsetParent = renderer(this[0].offsetParent);
    while (offsetParent[0] && \"static\" === offsetParent.css(\"position\")) {
        offsetParent = renderer(offsetParent[0].offsetParent)
    }
    offsetParent = offsetParent[0] ? offsetParent : renderer(_dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.getDocumentElement());
    return offsetParent
};
initRender.prototype.position = function() {
    if (!this[0]) {
        return
    }
    var offset;
    var marginTop = parseFloat(this.css(\"marginTop\"));
    var marginLeft = parseFloat(this.css(\"marginLeft\"));
    if (\"fixed\" === this.css(\"position\")) {
        offset = this[0].getBoundingClientRect();
        return {
            top: offset.top - marginTop,
            left: offset.left - marginLeft
        }
    }
    offset = this.offset();
    var offsetParent = this.offsetParent();
    var parentOffset = {
        top: 0,
        left: 0
    };
    if (\"HTML\" !== offsetParent[0].nodeName) {
        parentOffset = offsetParent.offset()
    }
    parentOffset = {
        top: parentOffset.top + parseFloat(offsetParent.css(\"borderTopWidth\")),
        left: parentOffset.left + parseFloat(offsetParent.css(\"borderLeftWidth\"))
    };
    return {
        top: offset.top - parentOffset.top - marginTop,
        left: offset.left - parentOffset.left - marginLeft
    }
};
[{
    name: \"scrollLeft\",
    offsetProp: \"pageXOffset\",
    scrollWindow: function(win, value) {
        win.scrollTo(value, win.pageYOffset)
    }
}, {
    name: \"scrollTop\",
    offsetProp: \"pageYOffset\",
    scrollWindow: function(win, value) {
        win.scrollTo(win.pageXOffset, value)
    }
}].forEach((function(directionStrategy) {
    var propName = directionStrategy.name;
    initRender.prototype[propName] = function(value) {
        if (!this[0]) {
            return
        }
        var window = getWindowByElement(this[0]);
        if (void 0 === value) {
            return window ? window[directionStrategy.offsetProp] : this[0][propName]
        }
        if (window) {
            directionStrategy.scrollWindow(window, value)
        } else {
            this[0][propName] = value
        }
        return this
    }
}));
initRender.prototype.data = function(key, value) {
    if (!this[0]) {
        return
    }
    if (arguments.length < 2) {
        return _element_data__WEBPACK_IMPORTED_MODULE_0__.data.call(renderer, this[0], key)
    }
    _element_data__WEBPACK_IMPORTED_MODULE_0__.data.call(renderer, this[0], key, value);
    return this
};
initRender.prototype.removeData = function(key) {
    this[0] && (0,_element_data__WEBPACK_IMPORTED_MODULE_0__.removeData)(this[0], key);
    return this
};
var rendererWrapper = function() {
    return renderer.apply(this, arguments)
};
Object.defineProperty(rendererWrapper, \"fn\", {
    enumerable: true,
    configurable: true,
    get: function() {
        return renderer.fn
    },
    set: function(value) {
        renderer.fn = value
    }
});
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
    set: function(strategy) {
        renderer = strategy
    },
    get: function() {
        return rendererWrapper
    }
});


/***/ }),

/***/ \"./node_modules/devextreme/esm/core/utils/array.js\":
/*!*********************************************************!*\\
  !*** ./node_modules/devextreme/esm/core/utils/array.js ***!
  \\*********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"isEmpty\": () => (/* binding */ isEmpty),
/* harmony export */   \"wrapToArray\": () => (/* binding */ wrapToArray),
/* harmony export */   \"inArray\": () => (/* binding */ inArray),
/* harmony export */   \"intersection\": () => (/* binding */ intersection),
/* harmony export */   \"uniqueValues\": () => (/* binding */ uniqueValues),
/* harmony export */   \"removeDuplicates\": () => (/* binding */ removeDuplicates),
/* harmony export */   \"normalizeIndexes\": () => (/* binding */ normalizeIndexes),
/* harmony export */   \"merge\": () => (/* binding */ merge),
/* harmony export */   \"find\": () => (/* binding */ find),
/* harmony export */   \"groupBy\": () => (/* binding */ groupBy)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./node_modules/@babel/runtime/helpers/esm/extends.js\");
/* harmony import */ var _type__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./type */ \"./node_modules/devextreme/esm/core/utils/type.js\");
/* harmony import */ var _iterator__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./iterator */ \"./node_modules/devextreme/esm/core/utils/iterator.js\");
/* harmony import */ var _object__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./object */ \"./node_modules/devextreme/esm/core/utils/object.js\");
/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../config */ \"./node_modules/devextreme/esm/core/config.js\");
/**
 * DevExtreme (esm/core/utils/array.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */





var isEmpty = function(entity) {
    return Array.isArray(entity) && !entity.length
};
var wrapToArray = function(entity) {
    return Array.isArray(entity) ? entity : [entity]
};
var inArray = function(value, object) {
    if (!object) {
        return -1
    }
    var array = Array.isArray(object) ? object : object.toArray();
    return array.indexOf(value)
};
var intersection = function(a, b) {
    if (!Array.isArray(a) || 0 === a.length || !Array.isArray(b) || 0 === b.length) {
        return []
    }
    var result = [];
    (0,_iterator__WEBPACK_IMPORTED_MODULE_2__.each)(a, (function(_, value) {
        var index = inArray(value, b);
        if (-1 !== index) {
            result.push(value)
        }
    }));
    return result
};
var uniqueValues = function(data) {
    return data.filter((function(item, position) {
        return data.indexOf(item) === position
    }))
};
var removeDuplicates = function(from, what) {
    if (!Array.isArray(from) || 0 === from.length) {
        return []
    }
    if (!Array.isArray(what) || 0 === what.length) {
        return from.slice()
    }
    var result = [];
    (0,_iterator__WEBPACK_IMPORTED_MODULE_2__.each)(from, (function(_, value) {
        var index = inArray(value, what);
        if (-1 === index) {
            result.push(value)
        }
    }));
    return result
};
var normalizeIndexes = function(items, indexParameterName, currentItem, needIndexCallback) {
    var indexedItems = {};
    var parameterIndex = 0;
    var useLegacyVisibleIndex = (0,_config__WEBPACK_IMPORTED_MODULE_4__.default)().useLegacyVisibleIndex;
    (0,_iterator__WEBPACK_IMPORTED_MODULE_2__.each)(items, (function(index, item) {
        index = item[indexParameterName];
        if (index >= 0) {
            indexedItems[index] = indexedItems[index] || [];
            if (item === currentItem) {
                indexedItems[index].unshift(item)
            } else {
                indexedItems[index].push(item)
            }
        } else {
            item[indexParameterName] = void 0
        }
    }));
    if (!useLegacyVisibleIndex) {
        (0,_iterator__WEBPACK_IMPORTED_MODULE_2__.each)(items, (function() {
            if (!(0,_type__WEBPACK_IMPORTED_MODULE_1__.isDefined)(this[indexParameterName]) && (!needIndexCallback || needIndexCallback(this))) {
                while (indexedItems[parameterIndex]) {
                    parameterIndex++
                }
                indexedItems[parameterIndex] = [this];
                parameterIndex++
            }
        }))
    }
    parameterIndex = 0;
    (0,_object__WEBPACK_IMPORTED_MODULE_3__.orderEach)(indexedItems, (function(index, items) {
        (0,_iterator__WEBPACK_IMPORTED_MODULE_2__.each)(items, (function() {
            if (index >= 0) {
                this[indexParameterName] = parameterIndex++
            }
        }))
    }));
    if (useLegacyVisibleIndex) {
        (0,_iterator__WEBPACK_IMPORTED_MODULE_2__.each)(items, (function() {
            if (!(0,_type__WEBPACK_IMPORTED_MODULE_1__.isDefined)(this[indexParameterName]) && (!needIndexCallback || needIndexCallback(this))) {
                this[indexParameterName] = parameterIndex++
            }
        }))
    }
    return parameterIndex
};
var merge = function(array1, array2) {
    for (var i = 0; i < array2.length; i++) {
        array1[array1.length] = array2[i]
    }
    return array1
};
var find = function(array, condition) {
    for (var i = 0; i < array.length; i++) {
        if (condition(array[i])) {
            return array[i]
        }
    }
};
var groupBy = (array, cb) => array.reduce((result, item) => (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__.default)({}, result, {
    [cb(item)]: [...result[cb(item)] || [], item]
}), {});


/***/ }),

/***/ \"./node_modules/devextreme/esm/core/utils/call_once.js\":
/*!*************************************************************!*\\
  !*** ./node_modules/devextreme/esm/core/utils/call_once.js ***!
  \\*************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/**
 * DevExtreme (esm/core/utils/call_once.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */
var callOnce = function(handler) {
    var result;
    var _wrappedHandler = function() {
        result = handler.apply(this, arguments);
        _wrappedHandler = function() {
            return result
        };
        return result
    };
    return function() {
        return _wrappedHandler.apply(this, arguments)
    }
};
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (callOnce);


/***/ }),

/***/ \"./node_modules/devextreme/esm/core/utils/callbacks.js\":
/*!*************************************************************!*\\
  !*** ./node_modules/devextreme/esm/core/utils/callbacks.js ***!
  \\*************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/**
 * DevExtreme (esm/core/utils/callbacks.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */
var Callback = function(options) {
    this._options = options || {};
    this._list = [];
    this._queue = [];
    this._firing = false;
    this._fired = false;
    this._firingIndexes = []
};
Callback.prototype._fireCore = function(context, args) {
    var firingIndexes = this._firingIndexes;
    var list = this._list;
    var stopOnFalse = this._options.stopOnFalse;
    var step = firingIndexes.length;
    for (firingIndexes[step] = 0; firingIndexes[step] < list.length; firingIndexes[step]++) {
        var result = list[firingIndexes[step]].apply(context, args);
        if (false === result && stopOnFalse) {
            break
        }
    }
    firingIndexes.pop()
};
Callback.prototype.add = function(fn) {
    if (\"function\" === typeof fn && (!this._options.unique || !this.has(fn))) {
        this._list.push(fn)
    }
    return this
};
Callback.prototype.remove = function(fn) {
    var list = this._list;
    var firingIndexes = this._firingIndexes;
    var index = list.indexOf(fn);
    if (index > -1) {
        list.splice(index, 1);
        if (this._firing && firingIndexes.length) {
            for (var step = 0; step < firingIndexes.length; step++) {
                if (index <= firingIndexes[step]) {
                    firingIndexes[step]--
                }
            }
        }
    }
    return this
};
Callback.prototype.has = function(fn) {
    var list = this._list;
    return fn ? list.indexOf(fn) > -1 : !!list.length
};
Callback.prototype.empty = function(fn) {
    this._list = [];
    return this
};
Callback.prototype.fireWith = function(context, args) {
    var queue = this._queue;
    args = args || [];
    args = args.slice ? args.slice() : args;
    if (this._options.syncStrategy) {
        this._firing = true;
        this._fireCore(context, args)
    } else {
        queue.push([context, args]);
        if (this._firing) {
            return
        }
        this._firing = true;
        while (queue.length) {
            var memory = queue.shift();
            this._fireCore(memory[0], memory[1])
        }
    }
    this._firing = false;
    this._fired = true;
    return this
};
Callback.prototype.fire = function() {
    this.fireWith(this, arguments)
};
Callback.prototype.fired = function() {
    return this._fired
};
var Callbacks = function(options) {
    return new Callback(options)
};
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Callbacks);


/***/ }),

/***/ \"./node_modules/devextreme/esm/core/utils/common.js\":
/*!**********************************************************!*\\
  !*** ./node_modules/devextreme/esm/core/utils/common.js ***!
  \\**********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"ensureDefined\": () => (/* binding */ ensureDefined),
/* harmony export */   \"executeAsync\": () => (/* binding */ executeAsync),
/* harmony export */   \"deferRender\": () => (/* binding */ deferRender),
/* harmony export */   \"deferUpdate\": () => (/* binding */ deferUpdate),
/* harmony export */   \"deferRenderer\": () => (/* binding */ deferRenderer),
/* harmony export */   \"deferUpdater\": () => (/* binding */ deferUpdater),
/* harmony export */   \"findBestMatches\": () => (/* binding */ findBestMatches),
/* harmony export */   \"splitPair\": () => (/* binding */ splitPair),
/* harmony export */   \"normalizeKey\": () => (/* binding */ normalizeKey),
/* harmony export */   \"denormalizeKey\": () => (/* binding */ denormalizeKey),
/* harmony export */   \"pairToObject\": () => (/* binding */ pairToObject),
/* harmony export */   \"getKeyHash\": () => (/* binding */ getKeyHash),
/* harmony export */   \"escapeRegExp\": () => (/* binding */ escapeRegExp),
/* harmony export */   \"applyServerDecimalSeparator\": () => (/* binding */ applyServerDecimalSeparator),
/* harmony export */   \"noop\": () => (/* binding */ noop),
/* harmony export */   \"asyncNoop\": () => (/* binding */ asyncNoop),
/* harmony export */   \"grep\": () => (/* binding */ grep),
/* harmony export */   \"equalByValue\": () => (/* binding */ equalByValue)
/* harmony export */ });
/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../config */ \"./node_modules/devextreme/esm/core/config.js\");
/* harmony import */ var _guid__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../guid */ \"./node_modules/devextreme/esm/core/guid.js\");
/* harmony import */ var _utils_deferred__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/deferred */ \"./node_modules/devextreme/esm/core/utils/deferred.js\");
/* harmony import */ var _data__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./data */ \"./node_modules/devextreme/esm/core/utils/data.js\");
/* harmony import */ var _iterator__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./iterator */ \"./node_modules/devextreme/esm/core/utils/iterator.js\");
/* harmony import */ var _type__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./type */ \"./node_modules/devextreme/esm/core/utils/type.js\");
/**
 * DevExtreme (esm/core/utils/common.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */






var ensureDefined = function(value, defaultValue) {
    return (0,_type__WEBPACK_IMPORTED_MODULE_5__.isDefined)(value) ? value : defaultValue
};
var executeAsync = function(action, context) {
    var deferred = new _utils_deferred__WEBPACK_IMPORTED_MODULE_2__.Deferred;
    var normalizedContext = context || this;
    var task = {
        promise: deferred.promise(),
        abort: function() {
            clearTimeout(timerId);
            deferred.rejectWith(normalizedContext)
        }
    };
    var callback = function() {
        var result = action.call(normalizedContext);
        if (result && result.done && (0,_type__WEBPACK_IMPORTED_MODULE_5__.isFunction)(result.done)) {
            result.done((function() {
                deferred.resolveWith(normalizedContext)
            }))
        } else {
            deferred.resolveWith(normalizedContext)
        }
    };
    var timerId = (arguments[2] || setTimeout)(callback, \"number\" === typeof context ? context : 0);
    return task
};
var delayedFuncs = [];
var delayedNames = [];
var delayedDeferreds = [];
var executingName;
var deferExecute = function(name, func, deferred) {
    if (executingName && executingName !== name) {
        delayedFuncs.push(func);
        delayedNames.push(name);
        deferred = deferred || new _utils_deferred__WEBPACK_IMPORTED_MODULE_2__.Deferred;
        delayedDeferreds.push(deferred);
        return deferred
    } else {
        var oldExecutingName = executingName;
        var currentDelayedCount = delayedDeferreds.length;
        executingName = name;
        var result = func();
        if (!result) {
            if (delayedDeferreds.length > currentDelayedCount) {
                result = _utils_deferred__WEBPACK_IMPORTED_MODULE_2__.when.apply(this, delayedDeferreds.slice(currentDelayedCount))
            } else if (deferred) {
                deferred.resolve()
            }
        }
        executingName = oldExecutingName;
        if (deferred && result && result.done) {
            result.done(deferred.resolve).fail(deferred.reject)
        }
        if (!executingName && delayedFuncs.length) {
            (\"render\" === delayedNames.shift() ? deferRender : deferUpdate)(delayedFuncs.shift(), delayedDeferreds.shift())
        }
        return result || (0,_utils_deferred__WEBPACK_IMPORTED_MODULE_2__.when)()
    }
};
var deferRender = function(func, deferred) {
    return deferExecute(\"render\", func, deferred)
};
var deferUpdate = function(func, deferred) {
    return deferExecute(\"update\", func, deferred)
};
var deferRenderer = function(func) {
    return function() {
        var that = this;
        return deferExecute(\"render\", (function() {
            return func.call(that)
        }))
    }
};
var deferUpdater = function(func) {
    return function() {
        var that = this;
        return deferExecute(\"update\", (function() {
            return func.call(that)
        }))
    }
};
var findBestMatches = function(targetFilter, items, mapFn) {
    var bestMatches = [];
    var maxMatchCount = 0;
    (0,_iterator__WEBPACK_IMPORTED_MODULE_4__.each)(items, (index, itemSrc) => {
        var matchCount = 0;
        var item = mapFn ? mapFn(itemSrc) : itemSrc;
        (0,_iterator__WEBPACK_IMPORTED_MODULE_4__.each)(targetFilter, (paramName, targetValue) => {
            var value = item[paramName];
            if (void 0 === value) {
                return
            }
            if (match(value, targetValue)) {
                matchCount++;
                return
            }
            matchCount = -1;
            return false
        });
        if (matchCount < maxMatchCount) {
            return
        }
        if (matchCount > maxMatchCount) {
            bestMatches.length = 0;
            maxMatchCount = matchCount
        }
        bestMatches.push(itemSrc)
    });
    return bestMatches
};
var match = function(value, targetValue) {
    if (Array.isArray(value) && Array.isArray(targetValue)) {
        var mismatch = false;
        (0,_iterator__WEBPACK_IMPORTED_MODULE_4__.each)(value, (index, valueItem) => {
            if (valueItem !== targetValue[index]) {
                mismatch = true;
                return false
            }
        });
        if (mismatch) {
            return false
        }
        return true
    }
    if (value === targetValue) {
        return true
    }
    return false
};
var splitPair = function(raw) {
    var _raw\$x, _raw\$y;
    switch ((0,_type__WEBPACK_IMPORTED_MODULE_5__.type)(raw)) {
        case \"string\":
            return raw.split(/\\s+/, 2);
        case \"object\":
            return [null !== (_raw\$x = raw.x) && void 0 !== _raw\$x ? _raw\$x : raw.h, null !== (_raw\$y = raw.y) && void 0 !== _raw\$y ? _raw\$y : raw.v];
        case \"number\":
            return [raw];
        case \"array\":
            return raw;
        default:
            return null
    }
};
var normalizeKey = function(id) {
    var key = (0,_type__WEBPACK_IMPORTED_MODULE_5__.isString)(id) ? id : id.toString();
    var arr = key.match(/[^a-zA-Z0-9_]/g);
    arr && (0,_iterator__WEBPACK_IMPORTED_MODULE_4__.each)(arr, (_, sign) => {
        key = key.replace(sign, \"__\" + sign.charCodeAt() + \"__\")
    });
    return key
};
var denormalizeKey = function(key) {
    var arr = key.match(/__\\d+__/g);
    arr && arr.forEach(char => {
        var charCode = parseInt(char.replace(\"__\", \"\"));
        key = key.replace(char, String.fromCharCode(charCode))
    });
    return key
};
var pairToObject = function(raw, preventRound) {
    var pair = splitPair(raw);
    var h = preventRound ? parseFloat(pair && pair[0]) : parseInt(pair && pair[0], 10);
    var v = preventRound ? parseFloat(pair && pair[1]) : parseInt(pair && pair[1], 10);
    if (!isFinite(h)) {
        h = 0
    }
    if (!isFinite(v)) {
        v = h
    }
    return {
        h: h,
        v: v
    }
};
var getKeyHash = function(key) {
    if (key instanceof _guid__WEBPACK_IMPORTED_MODULE_1__.default) {
        return key.toString()
    } else if ((0,_type__WEBPACK_IMPORTED_MODULE_5__.isObject)(key) || Array.isArray(key)) {
        try {
            var keyHash = JSON.stringify(key);
            return \"{}\" === keyHash ? key : keyHash
        } catch (e) {
            return key
        }
    }
    return key
};
var escapeRegExp = function(string) {
    return string.replace(/[[\\]{}\\-()*+?.\\\\^\$|\\s]/g, \"\\\\\$&\")
};
var applyServerDecimalSeparator = function(value) {
    var separator = (0,_config__WEBPACK_IMPORTED_MODULE_0__.default)().serverDecimalSeparator;
    if ((0,_type__WEBPACK_IMPORTED_MODULE_5__.isDefined)(value)) {
        value = value.toString().replace(\".\", separator)
    }
    return value
};
var noop = function() {};
var asyncNoop = function() {
    return (new _utils_deferred__WEBPACK_IMPORTED_MODULE_2__.Deferred).resolve().promise()
};
var grep = function(elements, checkFunction, invert) {
    var result = [];
    var check;
    var expectedCheck = !invert;
    for (var i = 0; i < elements.length; i++) {
        check = !!checkFunction(elements[i], i);
        if (check === expectedCheck) {
            result.push(elements[i])
        }
    }
    return result
};
var arraysEqualByValue = function(array1, array2, depth) {
    if (array1.length !== array2.length) {
        return false
    }
    for (var i = 0; i < array1.length; i++) {
        if (!equalByValue(array1[i], array2[i], depth + 1)) {
            return false
        }
    }
    return true
};
var objectsEqualByValue = function(object1, object2, depth, strict) {
    for (var propertyName in object1) {
        if (Object.prototype.hasOwnProperty.call(object1, propertyName) && !equalByValue(object1[propertyName], object2[propertyName], depth + 1, strict)) {
            return false
        }
    }
    for (var _propertyName in object2) {
        if (!(_propertyName in object1)) {
            return false
        }
    }
    return true
};
var maxEqualityDepth = 3;
var equalByValue = function(object1, object2) {
    var depth = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : 0;
    var strict = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : true;
    object1 = (0,_data__WEBPACK_IMPORTED_MODULE_3__.toComparable)(object1, true);
    object2 = (0,_data__WEBPACK_IMPORTED_MODULE_3__.toComparable)(object2, true);
    var comparisonResult = strict ? object1 === object2 : object1 == object2;
    if (comparisonResult || depth >= maxEqualityDepth) {
        return true
    }
    if ((0,_type__WEBPACK_IMPORTED_MODULE_5__.isObject)(object1) && (0,_type__WEBPACK_IMPORTED_MODULE_5__.isObject)(object2)) {
        return objectsEqualByValue(object1, object2, depth, strict)
    } else if (Array.isArray(object1) && Array.isArray(object2)) {
        return arraysEqualByValue(object1, object2, depth)
    }
    return false
};


/***/ }),

/***/ \"./node_modules/devextreme/esm/core/utils/console.js\":
/*!***********************************************************!*\\
  !*** ./node_modules/devextreme/esm/core/utils/console.js ***!
  \\***********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"logger\": () => (/* binding */ logger),
/* harmony export */   \"debug\": () => (/* binding */ debug)
/* harmony export */ });
/* harmony import */ var _type__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./type */ \"./node_modules/devextreme/esm/core/utils/type.js\");
/**
 * DevExtreme (esm/core/utils/console.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */

var noop = function() {};
var getConsoleMethod = function(method) {
    if (\"undefined\" === typeof console || !(0,_type__WEBPACK_IMPORTED_MODULE_0__.isFunction)(console[method])) {
        return noop
    }
    return console[method].bind(console)
};
var logger = {
    info: getConsoleMethod(\"info\"),
    warn: getConsoleMethod(\"warn\"),
    error: getConsoleMethod(\"error\")
};
var debug = function() {
    function assert(condition, message) {
        if (!condition) {
            throw new Error(message)
        }
    }
    return {
        assert: assert,
        assertParam: function(parameter, message) {
            assert(null !== parameter && void 0 !== parameter, message)
        }
    }
}();


/***/ }),

/***/ \"./node_modules/devextreme/esm/core/utils/data.js\":
/*!********************************************************!*\\
  !*** ./node_modules/devextreme/esm/core/utils/data.js ***!
  \\********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"compileGetter\": () => (/* binding */ compileGetter),
/* harmony export */   \"compileSetter\": () => (/* binding */ compileSetter),
/* harmony export */   \"toComparable\": () => (/* binding */ toComparable)
/* harmony export */ });
/* harmony import */ var _errors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../errors */ \"./node_modules/devextreme/esm/core/errors.js\");
/* harmony import */ var _class__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../class */ \"./node_modules/devextreme/esm/core/class.js\");
/* harmony import */ var _object__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./object */ \"./node_modules/devextreme/esm/core/utils/object.js\");
/* harmony import */ var _type__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./type */ \"./node_modules/devextreme/esm/core/utils/type.js\");
/* harmony import */ var _iterator__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./iterator */ \"./node_modules/devextreme/esm/core/utils/iterator.js\");
/* harmony import */ var _variable_wrapper__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./variable_wrapper */ \"./node_modules/devextreme/esm/core/utils/variable_wrapper.js\");
/**
 * DevExtreme (esm/core/utils/data.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */






var unwrapVariable = _variable_wrapper__WEBPACK_IMPORTED_MODULE_5__.default.unwrap;
var isWrapped = _variable_wrapper__WEBPACK_IMPORTED_MODULE_5__.default.isWrapped;
var assign = _variable_wrapper__WEBPACK_IMPORTED_MODULE_5__.default.assign;
var bracketsToDots = function(expr) {
    return expr.replace(/\\[/g, \".\").replace(/\\]/g, \"\")
};
var readPropValue = function(obj, propName, options) {
    options = options || {};
    if (\"this\" === propName) {
        return unwrap(obj, options)
    }
    return unwrap(obj[propName], options)
};
var assignPropValue = function(obj, propName, value, options) {
    if (\"this\" === propName) {
        throw new _errors__WEBPACK_IMPORTED_MODULE_0__.default.Error(\"E4016\")
    }
    var propValue = obj[propName];
    if (options.unwrapObservables && isWrapped(propValue)) {
        assign(propValue, value)
    } else {
        obj[propName] = value
    }
};
var prepareOptions = function(options) {
    options = options || {};
    options.unwrapObservables = void 0 !== options.unwrapObservables ? options.unwrapObservables : true;
    return options
};

function unwrap(value, options) {
    return options.unwrapObservables ? unwrapVariable(value) : value
}
var compileGetter = function(expr) {
    if (arguments.length > 1) {
        expr = [].slice.call(arguments)
    }
    if (!expr || \"this\" === expr) {
        return function(obj) {
            return obj
        }
    }
    if (\"string\" === typeof expr) {
        expr = bracketsToDots(expr);
        var path = expr.split(\".\");
        return function(obj, options) {
            options = prepareOptions(options);
            var functionAsIs = options.functionsAsIs;
            var hasDefaultValue = \"defaultValue\" in options;
            var current = unwrap(obj, options);
            for (var i = 0; i < path.length; i++) {
                if (!current) {
                    if (null == current && hasDefaultValue) {
                        return options.defaultValue
                    }
                    break
                }
                var pathPart = path[i];
                if (hasDefaultValue && (0,_type__WEBPACK_IMPORTED_MODULE_3__.isObject)(current) && !(pathPart in current)) {
                    return options.defaultValue
                }
                var next = unwrap(current[pathPart], options);
                if (!functionAsIs && (0,_type__WEBPACK_IMPORTED_MODULE_3__.isFunction)(next)) {
                    next = next.call(current)
                }
                current = next
            }
            return current
        }
    }
    if (Array.isArray(expr)) {
        return combineGetters(expr)
    }
    if ((0,_type__WEBPACK_IMPORTED_MODULE_3__.isFunction)(expr)) {
        return expr
    }
};

function combineGetters(getters) {
    var compiledGetters = {};
    for (var i = 0, l = getters.length; i < l; i++) {
        var getter = getters[i];
        compiledGetters[getter] = compileGetter(getter)
    }
    return function(obj, options) {
        var result;
        (0,_iterator__WEBPACK_IMPORTED_MODULE_4__.each)(compiledGetters, (function(name) {
            var value = this(obj, options);
            if (void 0 === value) {
                return
            }
            var current = result || (result = {});
            var path = name.split(\".\");
            var last = path.length - 1;
            for (var _i = 0; _i < last; _i++) {
                var pathItem = path[_i];
                if (!(pathItem in current)) {
                    current[pathItem] = {}
                }
                current = current[pathItem]
            }
            current[path[last]] = value
        }));
        return result
    }
}
var ensurePropValueDefined = function(obj, propName, value, options) {
    if ((0,_type__WEBPACK_IMPORTED_MODULE_3__.isDefined)(value)) {
        return value
    }
    var newValue = {};
    assignPropValue(obj, propName, newValue, options);
    return newValue
};
var compileSetter = function(expr) {
    expr = bracketsToDots(expr || \"this\").split(\".\");
    var lastLevelIndex = expr.length - 1;
    return function(obj, value, options) {
        options = prepareOptions(options);
        var currentValue = unwrap(obj, options);
        expr.forEach((function(propertyName, levelIndex) {
            var propertyValue = readPropValue(currentValue, propertyName, options);
            var isPropertyFunc = !options.functionsAsIs && (0,_type__WEBPACK_IMPORTED_MODULE_3__.isFunction)(propertyValue) && !isWrapped(propertyValue);
            if (levelIndex === lastLevelIndex) {
                if (options.merge && (0,_type__WEBPACK_IMPORTED_MODULE_3__.isPlainObject)(value) && (!(0,_type__WEBPACK_IMPORTED_MODULE_3__.isDefined)(propertyValue) || (0,_type__WEBPACK_IMPORTED_MODULE_3__.isPlainObject)(propertyValue))) {
                    propertyValue = ensurePropValueDefined(currentValue, propertyName, propertyValue, options);
                    (0,_object__WEBPACK_IMPORTED_MODULE_2__.deepExtendArraySafe)(propertyValue, value, false, true)
                } else if (isPropertyFunc) {
                    currentValue[propertyName](value)
                } else {
                    assignPropValue(currentValue, propertyName, value, options)
                }
            } else {
                propertyValue = ensurePropValueDefined(currentValue, propertyName, propertyValue, options);
                if (isPropertyFunc) {
                    propertyValue = propertyValue.call(currentValue)
                }
                currentValue = propertyValue
            }
        }))
    }
};
var toComparable = function(value, caseSensitive) {
    if (value instanceof Date) {
        return value.getTime()
    }
    if (value && value instanceof _class__WEBPACK_IMPORTED_MODULE_1__.default && value.valueOf) {
        return value.valueOf()
    }
    if (!caseSensitive && \"string\" === typeof value) {
        return value.toLowerCase()
    }
    return value
};


/***/ }),

/***/ \"./node_modules/devextreme/esm/core/utils/deferred.js\":
/*!************************************************************!*\\
  !*** ./node_modules/devextreme/esm/core/utils/deferred.js ***!
  \\************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"fromPromise\": () => (/* binding */ fromPromise),
/* harmony export */   \"setStrategy\": () => (/* binding */ setStrategy),
/* harmony export */   \"Deferred\": () => (/* binding */ Deferred),
/* harmony export */   \"when\": () => (/* binding */ when)
/* harmony export */ });
/* harmony import */ var _utils_type__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/type */ \"./node_modules/devextreme/esm/core/utils/type.js\");
/* harmony import */ var _utils_extend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/extend */ \"./node_modules/devextreme/esm/core/utils/extend.js\");
/* harmony import */ var _utils_callbacks__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/callbacks */ \"./node_modules/devextreme/esm/core/utils/callbacks.js\");
/**
 * DevExtreme (esm/core/utils/deferred.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */



var deferredConfig = [{
    method: \"resolve\",
    handler: \"done\",
    state: \"resolved\"
}, {
    method: \"reject\",
    handler: \"fail\",
    state: \"rejected\"
}, {
    method: \"notify\",
    handler: \"progress\"
}];
var _DeferredObj = function() {
    var that = this;
    this._state = \"pending\";
    this._promise = {};
    deferredConfig.forEach(function(config) {
        var methodName = config.method;
        this[methodName + \"Callbacks\"] = new _utils_callbacks__WEBPACK_IMPORTED_MODULE_2__.default;
        this[methodName] = function() {
            return this[methodName + \"With\"](this._promise, arguments)
        }.bind(this);
        this._promise[config.handler] = function(handler) {
            if (!handler) {
                return this
            }
            var callbacks = that[methodName + \"Callbacks\"];
            if (callbacks.fired()) {
                handler.apply(that[methodName + \"Context\"], that[methodName + \"Args\"])
            } else {
                callbacks.add(function(context, args) {
                    handler.apply(context, args)
                }.bind(this))
            }
            return this
        }
    }.bind(this));
    this._promise.always = function(handler) {
        return this.done(handler).fail(handler)
    };
    this._promise.catch = function(handler) {
        return this.then(null, handler)
    };
    this._promise.then = function(resolve, reject) {
        var result = new _DeferredObj;
        [\"done\", \"fail\"].forEach(function(method) {
            var callback = \"done\" === method ? resolve : reject;
            this[method]((function() {
                if (!callback) {
                    result[\"done\" === method ? \"resolve\" : \"reject\"].apply(this, arguments);
                    return
                }
                var callbackResult = callback && callback.apply(this, arguments);
                if ((0,_utils_type__WEBPACK_IMPORTED_MODULE_0__.isDeferred)(callbackResult)) {
                    callbackResult.done(result.resolve).fail(result.reject)
                } else if ((0,_utils_type__WEBPACK_IMPORTED_MODULE_0__.isPromise)(callbackResult)) {
                    callbackResult.then(result.resolve, result.reject)
                } else {
                    result.resolve.apply(this, (0,_utils_type__WEBPACK_IMPORTED_MODULE_0__.isDefined)(callbackResult) ? [callbackResult] : arguments)
                }
            }))
        }.bind(this));
        return result.promise()
    };
    this._promise.state = function() {
        return that._state
    };
    this._promise.promise = function(args) {
        return args ? (0,_utils_extend__WEBPACK_IMPORTED_MODULE_1__.extend)(args, that._promise) : that._promise
    };
    this._promise.promise(this)
};
deferredConfig.forEach((function(config) {
    var methodName = config.method;
    var state = config.state;
    _DeferredObj.prototype[methodName + \"With\"] = function(context, args) {
        var callbacks = this[methodName + \"Callbacks\"];
        if (\"pending\" === this.state()) {
            this[methodName + \"Args\"] = args;
            this[methodName + \"Context\"] = context;
            if (state) {
                this._state = state
            }
            callbacks.fire(context, args)
        }
        return this
    }
}));
function fromPromise(promise, context) {
    if ((0,_utils_type__WEBPACK_IMPORTED_MODULE_0__.isDeferred)(promise)) {
        return promise
    } else if ((0,_utils_type__WEBPACK_IMPORTED_MODULE_0__.isPromise)(promise)) {
        var d = new _DeferredObj;
        promise.then((function() {
            d.resolveWith.apply(d, [context].concat([
                [].slice.call(arguments)
            ]))
        }), (function() {
            d.rejectWith.apply(d, [context].concat([
                [].slice.call(arguments)
            ]))
        }));
        return d
    }
    return (new _DeferredObj).resolveWith(context, [promise])
}
var whenFunc = function() {
    if (1 === arguments.length) {
        return fromPromise(arguments[0])
    }
    var values = [].slice.call(arguments);
    var contexts = [];
    var resolvedCount = 0;
    var deferred = new _DeferredObj;
    var updateState = function(i) {
        return function(value) {
            contexts[i] = this;
            values[i] = arguments.length > 1 ? [].slice.call(arguments) : value;
            resolvedCount++;
            if (resolvedCount === values.length) {
                deferred.resolveWith(contexts, values)
            }
        }
    };
    for (var i = 0; i < values.length; i++) {
        if ((0,_utils_type__WEBPACK_IMPORTED_MODULE_0__.isDeferred)(values[i])) {
            values[i].promise().done(updateState(i)).fail(deferred.reject)
        } else {
            resolvedCount++
        }
    }
    if (resolvedCount === values.length) {
        deferred.resolveWith(contexts, values)
    }
    return deferred.promise()
};
function setStrategy(value) {
    _DeferredObj = value.Deferred;
    whenFunc = value.when
}
function Deferred() {
    return new _DeferredObj
}
function when() {
    return whenFunc.apply(this, arguments)
}


/***/ }),

/***/ \"./node_modules/devextreme/esm/core/utils/dependency_injector.js\":
/*!***********************************************************************!*\\
  !*** ./node_modules/devextreme/esm/core/utils/dependency_injector.js ***!
  \\***********************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _extend__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./extend */ \"./node_modules/devextreme/esm/core/utils/extend.js\");
/* harmony import */ var _type__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./type */ \"./node_modules/devextreme/esm/core/utils/type.js\");
/* harmony import */ var _iterator__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./iterator */ \"./node_modules/devextreme/esm/core/utils/iterator.js\");
/* harmony import */ var _class__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../class */ \"./node_modules/devextreme/esm/core/class.js\");
/**
 * DevExtreme (esm/core/utils/dependency_injector.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */




/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(object) {
    var BaseClass = _class__WEBPACK_IMPORTED_MODULE_3__.default.inherit(object);
    var InjectedClass = BaseClass;
    var instance = new InjectedClass(object);
    var initialFields = {};
    var injectFields = function(injectionObject, initial) {
        (0,_iterator__WEBPACK_IMPORTED_MODULE_2__.each)(injectionObject, (function(key) {
            if ((0,_type__WEBPACK_IMPORTED_MODULE_1__.isFunction)(instance[key])) {
                if (initial || !object[key]) {
                    object[key] = function() {
                        return instance[key].apply(object, arguments)
                    }
                }
            } else {
                if (initial) {
                    initialFields[key] = object[key]
                }
                object[key] = instance[key]
            }
        }))
    };
    injectFields(object, true);
    object.inject = function(injectionObject) {
        InjectedClass = InjectedClass.inherit(injectionObject);
        instance = new InjectedClass;
        injectFields(injectionObject)
    };
    object.resetInjection = function() {
        (0,_extend__WEBPACK_IMPORTED_MODULE_0__.extend)(object, initialFields);
        InjectedClass = BaseClass;
        instance = new BaseClass
    };
    return object
}


/***/ }),

/***/ \"./node_modules/devextreme/esm/core/utils/error.js\":
/*!*********************************************************!*\\
  !*** ./node_modules/devextreme/esm/core/utils/error.js ***!
  \\*********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _extend__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./extend */ \"./node_modules/devextreme/esm/core/utils/extend.js\");
/* harmony import */ var _console__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./console */ \"./node_modules/devextreme/esm/core/utils/console.js\");
/* harmony import */ var _string__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./string */ \"./node_modules/devextreme/esm/core/utils/string.js\");
/* harmony import */ var _version__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../version */ \"./node_modules/devextreme/esm/core/version.js\");
/**
 * DevExtreme (esm/core/utils/error.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */




var ERROR_URL = \"http://js.devexpress.com/error/\" + _version__WEBPACK_IMPORTED_MODULE_3__.version.split(\".\").slice(0, 2).join(\"_\") + \"/\";
/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(baseErrors, errors) {
    var exports = {
        ERROR_MESSAGES: (0,_extend__WEBPACK_IMPORTED_MODULE_0__.extend)(errors, baseErrors),
        Error: function() {
            return makeError([].slice.call(arguments))
        },
        log: function(id) {
            var method = \"log\";
            if (/^E\\d+\$/.test(id)) {
                method = \"error\"
            } else if (/^W\\d+\$/.test(id)) {
                method = \"warn\"
            }
            _console__WEBPACK_IMPORTED_MODULE_1__.logger[method](\"log\" === method ? id : combineMessage([].slice.call(arguments)))
        }
    };

    function combineMessage(args) {
        var id = args[0];
        args = args.slice(1);
        return formatMessage(id, formatDetails(id, args))
    }

    function formatDetails(id, args) {
        args = [exports.ERROR_MESSAGES[id]].concat(args);
        return _string__WEBPACK_IMPORTED_MODULE_2__.format.apply(this, args).replace(/\\.*\\s*?\$/, \"\")
    }

    function formatMessage(id, details) {
        return _string__WEBPACK_IMPORTED_MODULE_2__.format.apply(this, [\"{0} - {1}. See:\\n{2}\", id, details, getErrorUrl(id)])
    }

    function makeError(args) {
        var id = args[0];
        args = args.slice(1);
        var details = formatDetails(id, args);
        var url = getErrorUrl(id);
        var message = formatMessage(id, details);
        return (0,_extend__WEBPACK_IMPORTED_MODULE_0__.extend)(new Error(message), {
            __id: id,
            __details: details,
            url: url
        })
    }

    function getErrorUrl(id) {
        return ERROR_URL + id
    }
    return exports
}


/***/ }),

/***/ \"./node_modules/devextreme/esm/core/utils/extend.js\":
/*!**********************************************************!*\\
  !*** ./node_modules/devextreme/esm/core/utils/extend.js ***!
  \\**********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"extendFromObject\": () => (/* binding */ extendFromObject),
/* harmony export */   \"extend\": () => (/* binding */ extend)
/* harmony export */ });
/* harmony import */ var _type__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./type */ \"./node_modules/devextreme/esm/core/utils/type.js\");
/**
 * DevExtreme (esm/core/utils/extend.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */

var extendFromObject = function(target, source, overrideExistingValues) {
    target = target || {};
    for (var prop in source) {
        if (Object.prototype.hasOwnProperty.call(source, prop)) {
            var value = source[prop];
            if (!(prop in target) || overrideExistingValues) {
                target[prop] = value
            }
        }
    }
    return target
};
var extend = function extend(target) {
    target = target || {};
    var i = 1;
    var deep = false;
    if (\"boolean\" === typeof target) {
        deep = target;
        target = arguments[1] || {};
        i++
    }
    for (; i < arguments.length; i++) {
        var source = arguments[i];
        if (null == source) {
            continue
        }
        for (var key in source) {
            var targetValue = target[key];
            var sourceValue = source[key];
            var sourceValueIsArray = false;
            var clone = void 0;
            if (\"__proto__\" === key || \"constructor\" === key || target === sourceValue) {
                continue
            }
            if (deep && sourceValue && ((0,_type__WEBPACK_IMPORTED_MODULE_0__.isPlainObject)(sourceValue) || (sourceValueIsArray = Array.isArray(sourceValue)))) {
                if (sourceValueIsArray) {
                    clone = targetValue && Array.isArray(targetValue) ? targetValue : []
                } else {
                    clone = targetValue && (0,_type__WEBPACK_IMPORTED_MODULE_0__.isPlainObject)(targetValue) ? targetValue : {}
                }
                target[key] = extend(deep, clone, sourceValue)
            } else if (void 0 !== sourceValue) {
                target[key] = sourceValue
            }
        }
    }
    return target
};


/***/ }),

/***/ \"./node_modules/devextreme/esm/core/utils/html_parser.js\":
/*!***************************************************************!*\\
  !*** ./node_modules/devextreme/esm/core/utils/html_parser.js ***!
  \\***************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"parseHTML\": () => (/* binding */ parseHTML),
/* harmony export */   \"isTablePart\": () => (/* binding */ isTablePart)
/* harmony export */ });
/* harmony import */ var _array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./array */ \"./node_modules/devextreme/esm/core/utils/array.js\");
/* harmony import */ var _dom_adapter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../dom_adapter */ \"./node_modules/devextreme/esm/core/dom_adapter.js\");
/**
 * DevExtreme (esm/core/utils/html_parser.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */


var isTagName = /<([a-z][^/\\0>\\x20\\t\\r\\n\\f]+)/i;
var tagWrappers = {
    default: {
        tagsCount: 0,
        startTags: \"\",
        endTags: \"\"
    },
    thead: {
        tagsCount: 1,
        startTags: \"<table>\",
        endTags: \"</table>\"
    },
    td: {
        tagsCount: 3,
        startTags: \"<table><tbody><tr>\",
        endTags: \"</tr></tbody></table>\"
    },
    col: {
        tagsCount: 2,
        startTags: \"<table><colgroup>\",
        endTags: \"</colgroup></table>\"
    },
    tr: {
        tagsCount: 2,
        startTags: \"<table><tbody>\",
        endTags: \"</tbody></table>\"
    }
};
tagWrappers.tbody = tagWrappers.colgroup = tagWrappers.caption = tagWrappers.tfoot = tagWrappers.thead;
tagWrappers.th = tagWrappers.td;
var parseHTML = function(html) {
    if (\"string\" !== typeof html) {
        return null
    }
    var fragment = _dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.createDocumentFragment();
    var container = fragment.appendChild(_dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.createElement(\"div\"));
    var tags = isTagName.exec(html);
    var firstRootTag = tags && tags[1].toLowerCase();
    var tagWrapper = tagWrappers[firstRootTag] || tagWrappers.default;
    container.innerHTML = tagWrapper.startTags + html + tagWrapper.endTags;
    for (var i = 0; i < tagWrapper.tagsCount; i++) {
        container = container.lastChild
    }
    return (0,_array__WEBPACK_IMPORTED_MODULE_0__.merge)([], container.childNodes)
};
var isTablePart = function(html) {
    var tags = isTagName.exec(html);
    return tags && tags[1] in tagWrappers
};


/***/ }),

/***/ \"./node_modules/devextreme/esm/core/utils/inflector.js\":
/*!*************************************************************!*\\
  !*** ./node_modules/devextreme/esm/core/utils/inflector.js ***!
  \\*************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"dasherize\": () => (/* binding */ dasherize),
/* harmony export */   \"underscore\": () => (/* binding */ underscore),
/* harmony export */   \"camelize\": () => (/* binding */ camelize),
/* harmony export */   \"humanize\": () => (/* binding */ humanize),
/* harmony export */   \"titleize\": () => (/* binding */ titleize),
/* harmony export */   \"captionize\": () => (/* binding */ captionize)
/* harmony export */ });
/* harmony import */ var _iterator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./iterator */ \"./node_modules/devextreme/esm/core/utils/iterator.js\");
/**
 * DevExtreme (esm/core/utils/inflector.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */

var _normalize = function(text) {
    if (void 0 === text || null === text) {
        return \"\"
    }
    return String(text)
};
var _upperCaseFirst = function(text) {
    return _normalize(text).charAt(0).toUpperCase() + text.substr(1)
};
var _chop = function(text) {
    return _normalize(text).replace(/([a-z\\d])([A-Z])/g, \"\$1 \$2\").split(/[\\s_-]+/)
};
var dasherize = function(text) {
    return (0,_iterator__WEBPACK_IMPORTED_MODULE_0__.map)(_chop(text), (function(p) {
        return p.toLowerCase()
    })).join(\"-\")
};
var underscore = function(text) {
    return dasherize(text).replace(/-/g, \"_\")
};
var camelize = function(text, upperFirst) {
    return (0,_iterator__WEBPACK_IMPORTED_MODULE_0__.map)(_chop(text), (function(p, i) {
        p = p.toLowerCase();
        if (upperFirst || i > 0) {
            p = _upperCaseFirst(p)
        }
        return p
    })).join(\"\")
};
var humanize = function(text) {
    return _upperCaseFirst(dasherize(text).replace(/-/g, \" \"))
};
var titleize = function(text) {
    return (0,_iterator__WEBPACK_IMPORTED_MODULE_0__.map)(_chop(text), (function(p) {
        return _upperCaseFirst(p.toLowerCase())
    })).join(\" \")
};
var DIGIT_CHARS = [\"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\"];
var captionize = function(name) {
    var captionList = [];
    var i;
    var char;
    var isPrevCharNewWord = false;
    var isNewWord = false;
    for (i = 0; i < name.length; i++) {
        char = name.charAt(i);
        isNewWord = char === char.toUpperCase() && \"-\" !== char && \")\" !== char && \"/\" !== char || char in DIGIT_CHARS;
        if (\"_\" === char || \".\" === char) {
            char = \" \";
            isNewWord = true
        } else if (0 === i) {
            char = char.toUpperCase();
            isNewWord = true
        } else if (!isPrevCharNewWord && isNewWord) {
            if (captionList.length > 0) {
                captionList.push(\" \")
            }
        }
        captionList.push(char);
        isPrevCharNewWord = isNewWord
    }
    return captionList.join(\"\")
};


/***/ }),

/***/ \"./node_modules/devextreme/esm/core/utils/iterator.js\":
/*!************************************************************!*\\
  !*** ./node_modules/devextreme/esm/core/utils/iterator.js ***!
  \\************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"map\": () => (/* binding */ map),
/* harmony export */   \"each\": () => (/* binding */ each),
/* harmony export */   \"reverseEach\": () => (/* binding */ reverseEach)
/* harmony export */ });
/**
 * DevExtreme (esm/core/utils/iterator.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */
var map = (values, callback) => {
    if (Array.isArray(values)) {
        return values.map(callback)
    }
    var result = [];
    for (var key in values) {
        result.push(callback(values[key], key))
    }
    return result
};
var each = (values, callback) => {
    if (!values) {
        return
    }
    if (\"length\" in values) {
        for (var i = 0; i < values.length; i++) {
            if (false === callback.call(values[i], i, values[i])) {
                break
            }
        }
    } else {
        for (var key in values) {
            if (false === callback.call(values[key], key, values[key])) {
                break
            }
        }
    }
    return values
};
var reverseEach = (array, callback) => {
    if (!array || !(\"length\" in array) || 0 === array.length) {
        return
    }
    for (var i = array.length - 1; i >= 0; i--) {
        if (false === callback.call(array[i], i, array[i])) {
            break
        }
    }
};



/***/ }),

/***/ \"./node_modules/devextreme/esm/core/utils/math.js\":
/*!********************************************************!*\\
  !*** ./node_modules/devextreme/esm/core/utils/math.js ***!
  \\********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"sign\": () => (/* binding */ sign),
/* harmony export */   \"fitIntoRange\": () => (/* binding */ fitIntoRange),
/* harmony export */   \"inRange\": () => (/* binding */ inRange),
/* harmony export */   \"adjust\": () => (/* binding */ adjust),
/* harmony export */   \"getPrecision\": () => (/* binding */ getPrecision),
/* harmony export */   \"getExponent\": () => (/* binding */ getExponent),
/* harmony export */   \"getRoot\": () => (/* binding */ getRoot),
/* harmony export */   \"solveCubicEquation\": () => (/* binding */ solveCubicEquation),
/* harmony export */   \"trunc\": () => (/* binding */ trunc),
/* harmony export */   \"roundFloatPart\": () => (/* binding */ roundFloatPart),
/* harmony export */   \"getExponentLength\": () => (/* binding */ getExponentLength),
/* harmony export */   \"getRemainderByDivision\": () => (/* binding */ getRemainderByDivision)
/* harmony export */ });
/* harmony import */ var _type__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./type */ \"./node_modules/devextreme/esm/core/utils/type.js\");
/**
 * DevExtreme (esm/core/utils/math.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */

var sign = function(value) {
    if (0 === value) {
        return 0
    }
    return value / Math.abs(value)
};
var fitIntoRange = function(value, minValue, maxValue) {
    var isMinValueUndefined = !minValue && 0 !== minValue;
    var isMaxValueUndefined = !maxValue && 0 !== maxValue;
    isMinValueUndefined && (minValue = !isMaxValueUndefined ? Math.min(value, maxValue) : value);
    isMaxValueUndefined && (maxValue = !isMinValueUndefined ? Math.max(value, minValue) : value);
    return Math.min(Math.max(value, minValue), maxValue)
};
var inRange = function(value, minValue, maxValue) {
    return value >= minValue && value <= maxValue
};

function getExponent(value) {
    return Math.abs(parseInt(value.toExponential().split(\"e\")[1]))
}

function _isEdgeBug() {
    return \"0.000300\" !== 3e-4.toPrecision(3)
}

function adjust(value, interval) {
    var precision = getPrecision(interval || 0) + 2;
    var separatedValue = value.toString().split(\".\");
    var sourceValue = value;
    var absValue = Math.abs(value);
    var separatedAdjustedValue;
    var isExponentValue = (0,_type__WEBPACK_IMPORTED_MODULE_0__.isExponential)(value);
    var integerPart = absValue > 1 ? 10 : 0;
    if (1 === separatedValue.length) {
        return value
    }
    if (!isExponentValue) {
        if ((0,_type__WEBPACK_IMPORTED_MODULE_0__.isExponential)(interval)) {
            precision = separatedValue[0].length + getExponent(interval)
        }
        value = absValue;
        value = value - Math.floor(value) + integerPart
    }
    precision = _isEdgeBug() && getExponent(value) > 6 || precision > 7 ? 15 : 7;
    if (!isExponentValue) {
        separatedAdjustedValue = parseFloat(value.toPrecision(precision)).toString().split(\".\");
        if (separatedAdjustedValue[0] === integerPart.toString()) {
            return parseFloat(separatedValue[0] + \".\" + separatedAdjustedValue[1])
        }
    }
    return parseFloat(sourceValue.toPrecision(precision))
}

function getPrecision(value) {
    var str = value.toString();
    if (str.indexOf(\".\") < 0) {
        return 0
    }
    var mantissa = str.split(\".\");
    var positionOfDelimiter = mantissa[1].indexOf(\"e\");
    return positionOfDelimiter >= 0 ? positionOfDelimiter : mantissa[1].length
}

function getRoot(x, n) {
    if (x < 0 && n % 2 !== 1) {
        return NaN
    }
    var y = Math.pow(Math.abs(x), 1 / n);
    return n % 2 === 1 && x < 0 ? -y : y
}

function solveCubicEquation(a, b, c, d) {
    if (Math.abs(a) < 1e-8) {
        a = b;
        b = c;
        c = d;
        if (Math.abs(a) < 1e-8) {
            a = b;
            b = c;
            if (Math.abs(a) < 1e-8) {
                return []
            }
            return [-b / a]
        }
        var D2 = b * b - 4 * a * c;
        if (Math.abs(D2) < 1e-8) {
            return [-b / (2 * a)]
        } else if (D2 > 0) {
            return [(-b + Math.sqrt(D2)) / (2 * a), (-b - Math.sqrt(D2)) / (2 * a)]
        }
        return []
    }
    var p = (3 * a * c - b * b) / (3 * a * a);
    var q = (2 * b * b * b - 9 * a * b * c + 27 * a * a * d) / (27 * a * a * a);
    var roots;
    var u;
    if (Math.abs(p) < 1e-8) {
        roots = [getRoot(-q, 3)]
    } else if (Math.abs(q) < 1e-8) {
        roots = [0].concat(p < 0 ? [Math.sqrt(-p), -Math.sqrt(-p)] : [])
    } else {
        var D3 = q * q / 4 + p * p * p / 27;
        if (Math.abs(D3) < 1e-8) {
            roots = [-1.5 * q / p, 3 * q / p]
        } else if (D3 > 0) {
            u = getRoot(-q / 2 - Math.sqrt(D3), 3);
            roots = [u - p / (3 * u)]
        } else {
            u = 2 * Math.sqrt(-p / 3);
            var t = Math.acos(3 * q / p / u) / 3;
            var k = 2 * Math.PI / 3;
            roots = [u * Math.cos(t), u * Math.cos(t - k), u * Math.cos(t - 2 * k)]
        }
    }
    for (var i = 0; i < roots.length; i++) {
        roots[i] -= b / (3 * a)
    }
    return roots
}

function trunc(value) {
    return Math.trunc ? Math.trunc(value) : value > 0 ? Math.floor(value) : Math.ceil(value)
}

function getRemainderByDivision(dividend, divider, digitsCount) {
    if (divider === parseInt(divider)) {
        return dividend % divider
    }
    var quotient = roundFloatPart(dividend / divider, digitsCount);
    return (quotient - parseInt(quotient)) * divider
}

function getExponentLength(value) {
    var _valueString\$split\$;
    var valueString = value.toString();
    return (null === (_valueString\$split\$ = valueString.split(\".\")[1]) || void 0 === _valueString\$split\$ ? void 0 : _valueString\$split\$.length) || parseInt(valueString.split(\"e-\")[1]) || 0
}

function roundFloatPart(value) {
    var digitsCount = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 0;
    return parseFloat(value.toFixed(digitsCount))
}



/***/ }),

/***/ \"./node_modules/devextreme/esm/core/utils/object.js\":
/*!**********************************************************!*\\
  !*** ./node_modules/devextreme/esm/core/utils/object.js ***!
  \\**********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"clone\": () => (/* binding */ clone),
/* harmony export */   \"orderEach\": () => (/* binding */ orderEach),
/* harmony export */   \"deepExtendArraySafe\": () => (/* binding */ deepExtendArraySafe)
/* harmony export */ });
/* harmony import */ var _type__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./type */ \"./node_modules/devextreme/esm/core/utils/type.js\");
/* harmony import */ var _variable_wrapper__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./variable_wrapper */ \"./node_modules/devextreme/esm/core/utils/variable_wrapper.js\");
/**
 * DevExtreme (esm/core/utils/object.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */


var clone = function() {
    function Clone() {}
    return function(obj) {
        Clone.prototype = obj;
        return new Clone
    }
}();
var orderEach = function(map, func) {
    var keys = [];
    var key;
    var i;
    for (key in map) {
        if (Object.prototype.hasOwnProperty.call(map, key)) {
            keys.push(key)
        }
    }
    keys.sort((function(x, y) {
        var isNumberX = (0,_type__WEBPACK_IMPORTED_MODULE_0__.isNumeric)(x);
        var isNumberY = (0,_type__WEBPACK_IMPORTED_MODULE_0__.isNumeric)(y);
        if (isNumberX && isNumberY) {
            return x - y
        }
        if (isNumberX && !isNumberY) {
            return -1
        }
        if (!isNumberX && isNumberY) {
            return 1
        }
        if (x < y) {
            return -1
        }
        if (x > y) {
            return 1
        }
        return 0
    }));
    for (i = 0; i < keys.length; i++) {
        key = keys[i];
        func(key, map[key])
    }
};
var assignValueToProperty = function(target, property, value, assignByReference) {
    if (!assignByReference && _variable_wrapper__WEBPACK_IMPORTED_MODULE_1__.default.isWrapped(target[property])) {
        _variable_wrapper__WEBPACK_IMPORTED_MODULE_1__.default.assign(target[property], value)
    } else {
        target[property] = value
    }
};
var deepExtendArraySafe = function deepExtendArraySafe(target, changes, extendComplexObject, assignByReference) {
    var prevValue;
    var newValue;
    for (var name in changes) {
        prevValue = target[name];
        newValue = changes[name];
        if (\"__proto__\" === name || \"constructor\" === name || target === newValue) {
            continue
        }
        if ((0,_type__WEBPACK_IMPORTED_MODULE_0__.isPlainObject)(newValue)) {
            var goDeeper = extendComplexObject ? (0,_type__WEBPACK_IMPORTED_MODULE_0__.isObject)(prevValue) : (0,_type__WEBPACK_IMPORTED_MODULE_0__.isPlainObject)(prevValue);
            newValue = deepExtendArraySafe(goDeeper ? prevValue : {}, newValue, extendComplexObject, assignByReference)
        }
        if (void 0 !== newValue && prevValue !== newValue) {
            assignValueToProperty(target, name, newValue, assignByReference)
        }
    }
    return target
};



/***/ }),

/***/ \"./node_modules/devextreme/esm/core/utils/size.js\":
/*!********************************************************!*\\
  !*** ./node_modules/devextreme/esm/core/utils/size.js ***!
  \\********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"getSize\": () => (/* binding */ getSize),
/* harmony export */   \"getElementBoxParams\": () => (/* binding */ getElementBoxParams),
/* harmony export */   \"addOffsetToMaxHeight\": () => (/* binding */ addOffsetToMaxHeight),
/* harmony export */   \"addOffsetToMinHeight\": () => (/* binding */ addOffsetToMinHeight),
/* harmony export */   \"getVerticalOffsets\": () => (/* binding */ getVerticalOffsets),
/* harmony export */   \"getVisibleHeight\": () => (/* binding */ getVisibleHeight),
/* harmony export */   \"parseHeight\": () => (/* binding */ parseHeight)
/* harmony export */ });
/* harmony import */ var _core_utils_window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../core/utils/window */ \"./node_modules/devextreme/esm/core/utils/window.js\");
/* harmony import */ var _utils_type__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/type */ \"./node_modules/devextreme/esm/core/utils/type.js\");
/**
 * DevExtreme (esm/core/utils/size.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */


var window = (0,_core_utils_window__WEBPACK_IMPORTED_MODULE_0__.getWindow)();
var SPECIAL_HEIGHT_VALUES = [\"auto\", \"none\", \"inherit\", \"initial\"];
var getSizeByStyles = function(elementStyles, styles) {
    var result = 0;
    styles.forEach((function(style) {
        result += parseFloat(elementStyles[style]) || 0
    }));
    return result
};
var getElementBoxParams = function(name, elementStyles) {
    var beforeName = \"width\" === name ? \"Left\" : \"Top\";
    var afterName = \"width\" === name ? \"Right\" : \"Bottom\";
    return {
        padding: getSizeByStyles(elementStyles, [\"padding\" + beforeName, \"padding\" + afterName]),
        border: getSizeByStyles(elementStyles, [\"border\" + beforeName + \"Width\", \"border\" + afterName + \"Width\"]),
        margin: getSizeByStyles(elementStyles, [\"margin\" + beforeName, \"margin\" + afterName])
    }
};
var getBoxSizingOffset = function(name, elementStyles, boxParams) {
    var size = elementStyles[name];
    if (\"border-box\" === elementStyles.boxSizing && size.length && \"%\" !== size[size.length - 1]) {
        return boxParams.border + boxParams.padding
    }
    return 0
};
var getSize = function(element, name, include) {
    var elementStyles = window.getComputedStyle(element);
    var boxParams = getElementBoxParams(name, elementStyles);
    var clientRect = element.getClientRects().length;
    var boundingClientRect = element.getBoundingClientRect()[name];
    var result = clientRect ? boundingClientRect : 0;
    if (result <= 0) {
        result = parseFloat(elementStyles[name] || element.style[name]) || 0;
        result -= getBoxSizingOffset(name, elementStyles, boxParams)
    } else {
        result -= boxParams.padding + boxParams.border
    }
    if (include.paddings) {
        result += boxParams.padding
    }
    if (include.borders) {
        result += boxParams.border
    }
    if (include.margins) {
        result += boxParams.margin
    }
    return result
};
var getContainerHeight = function(container) {
    return (0,_utils_type__WEBPACK_IMPORTED_MODULE_1__.isWindow)(container) ? container.innerHeight : container.offsetHeight
};
var parseHeight = function(value, container) {
    if (value.indexOf(\"px\") > 0) {
        value = parseInt(value.replace(\"px\", \"\"))
    } else if (value.indexOf(\"%\") > 0) {
        value = parseInt(value.replace(\"%\", \"\")) * getContainerHeight(container) / 100
    } else if (!isNaN(value)) {
        value = parseInt(value)
    }
    return value
};
var getHeightWithOffset = function(value, offset, container) {
    if (!value) {
        return null
    }
    if (SPECIAL_HEIGHT_VALUES.indexOf(value) > -1) {
        return offset ? null : value
    }
    if ((0,_utils_type__WEBPACK_IMPORTED_MODULE_1__.isString)(value)) {
        value = parseHeight(value, container)
    }
    if ((0,_utils_type__WEBPACK_IMPORTED_MODULE_1__.isNumeric)(value)) {
        return Math.max(0, value + offset)
    }
    var operationString = offset < 0 ? \" - \" : \" \";
    return \"calc(\" + value + operationString + Math.abs(offset) + \"px)\"
};
var addOffsetToMaxHeight = function(value, offset, container) {
    var maxHeight = getHeightWithOffset(value, offset, container);
    return null !== maxHeight ? maxHeight : \"none\"
};
var addOffsetToMinHeight = function(value, offset, container) {
    var minHeight = getHeightWithOffset(value, offset, container);
    return null !== minHeight ? minHeight : 0
};
var getVerticalOffsets = function(element, withMargins) {
    if (!element) {
        return 0
    }
    var boxParams = getElementBoxParams(\"height\", window.getComputedStyle(element));
    return boxParams.padding + boxParams.border + (withMargins ? boxParams.margin : 0)
};
var getVisibleHeight = function(element) {
    if (element) {
        var boundingClientRect = element.getBoundingClientRect();
        if (boundingClientRect.height) {
            return boundingClientRect.height
        }
    }
    return 0
};



/***/ }),

/***/ \"./node_modules/devextreme/esm/core/utils/string.js\":
/*!**********************************************************!*\\
  !*** ./node_modules/devextreme/esm/core/utils/string.js ***!
  \\**********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"encodeHtml\": () => (/* binding */ encodeHtml),
/* harmony export */   \"quadToObject\": () => (/* binding */ quadToObject),
/* harmony export */   \"format\": () => (/* binding */ format),
/* harmony export */   \"replaceAll\": () => (/* binding */ replaceAll),
/* harmony export */   \"isEmpty\": () => (/* binding */ isEmpty)
/* harmony export */ });
/* harmony import */ var _type__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./type */ \"./node_modules/devextreme/esm/core/utils/type.js\");
/**
 * DevExtreme (esm/core/utils/string.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */

var encodeHtml = function() {
    var encodeRegExp = [new RegExp(\"&\", \"g\"), new RegExp('\"', \"g\"), new RegExp(\"'\", \"g\"), new RegExp(\"<\", \"g\"), new RegExp(\">\", \"g\")];
    return function(str) {
        return String(str).replace(encodeRegExp[0], \"&amp;\").replace(encodeRegExp[1], \"&quot;\").replace(encodeRegExp[2], \"&#39;\").replace(encodeRegExp[3], \"&lt;\").replace(encodeRegExp[4], \"&gt;\")
    }
}();
var splitQuad = function(raw) {
    switch (typeof raw) {
        case \"string\":
            return raw.split(/\\s+/, 4);
        case \"object\":
            return [raw.x || raw.h || raw.left, raw.y || raw.v || raw.top, raw.x || raw.h || raw.right, raw.y || raw.v || raw.bottom];
        case \"number\":
            return [raw];
        default:
            return raw
    }
};
var quadToObject = function(raw) {
    var quad = splitQuad(raw);
    var left = parseInt(quad && quad[0], 10);
    var top = parseInt(quad && quad[1], 10);
    var right = parseInt(quad && quad[2], 10);
    var bottom = parseInt(quad && quad[3], 10);
    if (!isFinite(left)) {
        left = 0
    }
    if (!isFinite(top)) {
        top = left
    }
    if (!isFinite(right)) {
        right = left
    }
    if (!isFinite(bottom)) {
        bottom = top
    }
    return {
        top: top,
        right: right,
        bottom: bottom,
        left: left
    }
};
function format(template) {
    for (var _len = arguments.length, values = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
        values[_key - 1] = arguments[_key]
    }
    if ((0,_type__WEBPACK_IMPORTED_MODULE_0__.isFunction)(template)) {
        return template(...values)
    }
    values.forEach((value, index) => {
        if ((0,_type__WEBPACK_IMPORTED_MODULE_0__.isString)(value)) {
            value = value.replace(/\\\$/g, \"\$\$\$\$\")
        }
        var placeholderReg = new RegExp(\"\\\\{\" + index + \"\\\\}\", \"gm\");
        template = template.replace(placeholderReg, value)
    });
    return template
}
var replaceAll = function(text, searchToken, replacementToken) {
    return text.replace(new RegExp(\"(\" + (str = searchToken, (str + \"\").replace(/([+*?.[^\\]\$(){}><|=!:])/g, \"\\\\\$1\")) + \")\", \"gi\"), replacementToken);
    var str
};
var isEmpty = function() {
    var SPACE_REGEXP = /\\s/g;
    return function(text) {
        return !text || !text.replace(SPACE_REGEXP, \"\")
    }
}();


/***/ }),

/***/ \"./node_modules/devextreme/esm/core/utils/style.js\":
/*!*********************************************************!*\\
  !*** ./node_modules/devextreme/esm/core/utils/style.js ***!
  \\*********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"styleProp\": () => (/* binding */ styleProp),
/* harmony export */   \"stylePropPrefix\": () => (/* binding */ stylePropPrefix),
/* harmony export */   \"normalizeStyleProp\": () => (/* binding */ normalizeStyleProp),
/* harmony export */   \"setWidth\": () => (/* binding */ setWidth),
/* harmony export */   \"setHeight\": () => (/* binding */ setHeight)
/* harmony export */ });
/* harmony import */ var _inflector__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./inflector */ \"./node_modules/devextreme/esm/core/utils/inflector.js\");
/* harmony import */ var _call_once__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./call_once */ \"./node_modules/devextreme/esm/core/utils/call_once.js\");
/* harmony import */ var _type__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./type */ \"./node_modules/devextreme/esm/core/utils/type.js\");
/* harmony import */ var _dom_adapter__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../dom_adapter */ \"./node_modules/devextreme/esm/core/dom_adapter.js\");
/**
 * DevExtreme (esm/core/utils/style.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */




var jsPrefixes = [\"\", \"Webkit\", \"Moz\", \"O\", \"Ms\"];
var cssPrefixes = {
    \"\": \"\",
    Webkit: \"-webkit-\",
    Moz: \"-moz-\",
    O: \"-o-\",
    ms: \"-ms-\"
};
var getStyles = (0,_call_once__WEBPACK_IMPORTED_MODULE_1__.default)((function() {
    return _dom_adapter__WEBPACK_IMPORTED_MODULE_3__.default.createElement(\"dx\").style
}));
var forEachPrefixes = function(prop, callBack) {
    prop = (0,_inflector__WEBPACK_IMPORTED_MODULE_0__.camelize)(prop, true);
    var result;
    for (var i = 0, cssPrefixesCount = jsPrefixes.length; i < cssPrefixesCount; i++) {
        var jsPrefix = jsPrefixes[i];
        var prefixedProp = jsPrefix + prop;
        var lowerPrefixedProp = (0,_inflector__WEBPACK_IMPORTED_MODULE_0__.camelize)(prefixedProp);
        result = callBack(lowerPrefixedProp, jsPrefix);
        if (void 0 === result) {
            result = callBack(prefixedProp, jsPrefix)
        }
        if (void 0 !== result) {
            break
        }
    }
    return result || \"\"
};
var styleProp = function(name) {
    if (name in getStyles()) {
        return name
    }
    var originalName = name;
    name = name.charAt(0).toUpperCase() + name.substr(1);
    for (var i = 1; i < jsPrefixes.length; i++) {
        var prefixedProp = jsPrefixes[i].toLowerCase() + name;
        if (prefixedProp in getStyles()) {
            return prefixedProp
        }
    }
    return originalName
};
var stylePropPrefix = function(prop) {
    return forEachPrefixes(prop, (function(specific, jsPrefix) {
        if (specific in getStyles()) {
            return cssPrefixes[jsPrefix]
        }
    }))
};
var pxExceptions = [\"fillOpacity\", \"columnCount\", \"flexGrow\", \"flexShrink\", \"fontWeight\", \"lineHeight\", \"opacity\", \"zIndex\", \"zoom\"];
var normalizeStyleProp = function(prop, value) {
    if ((0,_type__WEBPACK_IMPORTED_MODULE_2__.isNumeric)(value) && -1 === pxExceptions.indexOf(prop)) {
        value += \"px\"
    }
    return value
};
var setDimensionProperty = function(elements, propertyName, value) {
    if (elements) {
        value = (0,_type__WEBPACK_IMPORTED_MODULE_2__.isNumeric)(value) ? value += \"px\" : value;
        for (var i = 0; i < elements.length; ++i) {
            elements[i].style[propertyName] = value
        }
    }
};
var setWidth = function(elements, value) {
    setDimensionProperty(elements, \"width\", value)
};
var setHeight = function(elements, value) {
    setDimensionProperty(elements, \"height\", value)
};



/***/ }),

/***/ \"./node_modules/devextreme/esm/core/utils/type.js\":
/*!********************************************************!*\\
  !*** ./node_modules/devextreme/esm/core/utils/type.js ***!
  \\********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"isBoolean\": () => (/* binding */ isBoolean),
/* harmony export */   \"isExponential\": () => (/* binding */ isExponential),
/* harmony export */   \"isDate\": () => (/* binding */ isDate),
/* harmony export */   \"isDefined\": () => (/* binding */ isDefined),
/* harmony export */   \"isFunction\": () => (/* binding */ isFunction),
/* harmony export */   \"isString\": () => (/* binding */ isString),
/* harmony export */   \"isNumeric\": () => (/* binding */ isNumeric),
/* harmony export */   \"isObject\": () => (/* binding */ isObject),
/* harmony export */   \"isEmptyObject\": () => (/* binding */ isEmptyObject),
/* harmony export */   \"isPlainObject\": () => (/* binding */ isPlainObject),
/* harmony export */   \"isPrimitive\": () => (/* binding */ isPrimitive),
/* harmony export */   \"isWindow\": () => (/* binding */ isWindow),
/* harmony export */   \"isRenderer\": () => (/* binding */ isRenderer),
/* harmony export */   \"isPromise\": () => (/* binding */ isPromise),
/* harmony export */   \"isDeferred\": () => (/* binding */ isDeferred),
/* harmony export */   \"type\": () => (/* binding */ type),
/* harmony export */   \"isEvent\": () => (/* binding */ isEvent)
/* harmony export */ });
/**
 * DevExtreme (esm/core/utils/type.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */
var types = {
    \"[object Array]\": \"array\",
    \"[object Date]\": \"date\",
    \"[object Object]\": \"object\",
    \"[object String]\": \"string\",
    \"[object Null]\": \"null\"
};
var type = function(object) {
    var typeOfObject = Object.prototype.toString.call(object);
    return \"object\" === typeof object ? types[typeOfObject] || \"object\" : typeof object
};
var isBoolean = function(object) {
    return \"boolean\" === typeof object
};
var isExponential = function(value) {
    return isNumeric(value) && -1 !== value.toString().indexOf(\"e\")
};
var isDate = function(object) {
    return \"date\" === type(object)
};
var isDefined = function(object) {
    return null !== object && void 0 !== object
};
var isFunction = function(object) {
    return \"function\" === typeof object
};
var isString = function(object) {
    return \"string\" === typeof object
};
var isNumeric = function(object) {
    return \"number\" === typeof object && isFinite(object) || !isNaN(object - parseFloat(object))
};
var isObject = function(object) {
    return \"object\" === type(object)
};
var isEmptyObject = function(object) {
    var property;
    for (property in object) {
        return false
    }
    return true
};
var isPlainObject = function(object) {
    if (!object || \"[object Object]\" !== Object.prototype.toString.call(object)) {
        return false
    }
    var proto = Object.getPrototypeOf(object);
    var ctor = Object.hasOwnProperty.call(proto, \"constructor\") && proto.constructor;
    return \"function\" === typeof ctor && Object.toString.call(ctor) === Object.toString.call(Object)
};
var isPrimitive = function(value) {
    return -1 === [\"object\", \"array\", \"function\"].indexOf(type(value))
};
var isWindow = function(object) {
    return null != object && object === object.window
};
var isRenderer = function(object) {
    return !!(object.jquery || object.dxRenderer)
};
var isPromise = function(object) {
    return object && isFunction(object.then)
};
var isDeferred = function(object) {
    return object && isFunction(object.done) && isFunction(object.fail)
};
var isEvent = function(object) {
    return !!(object && object.preventDefault)
};



/***/ }),

/***/ \"./node_modules/devextreme/esm/core/utils/variable_wrapper.js\":
/*!********************************************************************!*\\
  !*** ./node_modules/devextreme/esm/core/utils/variable_wrapper.js ***!
  \\********************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _console__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./console */ \"./node_modules/devextreme/esm/core/utils/console.js\");
/* harmony import */ var _dependency_injector__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./dependency_injector */ \"./node_modules/devextreme/esm/core/utils/dependency_injector.js\");
/**
 * DevExtreme (esm/core/utils/variable_wrapper.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */


/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_dependency_injector__WEBPACK_IMPORTED_MODULE_1__.default)({
    isWrapped: function() {
        return false
    },
    isWritableWrapped: function() {
        return false
    },
    wrap: function(value) {
        return value
    },
    unwrap: function(value) {
        return value
    },
    assign: function() {
        _console__WEBPACK_IMPORTED_MODULE_0__.logger.error(\"Method 'assign' should not be used for not wrapped variables. Use 'isWrapped' method for ensuring.\")
    }
}));


/***/ }),

/***/ \"./node_modules/devextreme/esm/core/utils/window.js\":
/*!**********************************************************!*\\
  !*** ./node_modules/devextreme/esm/core/utils/window.js ***!
  \\**********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"hasWindow\": () => (/* binding */ hasWindow),
/* harmony export */   \"getWindow\": () => (/* binding */ getWindow),
/* harmony export */   \"setWindow\": () => (/* binding */ setWindow),
/* harmony export */   \"hasProperty\": () => (/* binding */ hasProperty),
/* harmony export */   \"defaultScreenFactorFunc\": () => (/* binding */ defaultScreenFactorFunc),
/* harmony export */   \"getCurrentScreenFactor\": () => (/* binding */ getCurrentScreenFactor),
/* harmony export */   \"getNavigator\": () => (/* binding */ getNavigator)
/* harmony export */ });
/* harmony import */ var _dom_adapter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../dom_adapter */ \"./node_modules/devextreme/esm/core/dom_adapter.js\");
/**
 * DevExtreme (esm/core/utils/window.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */

var hasWindowValue = \"undefined\" !== typeof window;
var hasWindow = () => hasWindowValue;
var windowObject = hasWindow() ? window : void 0;
if (!windowObject) {
    windowObject = {};
    windowObject.window = windowObject
}
var getWindow = () => windowObject;
var setWindow = (newWindowObject, hasWindow) => {
    if (void 0 === hasWindow) {
        hasWindowValue = \"undefined\" !== typeof window && window === newWindowObject
    } else {
        hasWindowValue = hasWindow
    }
    windowObject = newWindowObject
};
var hasProperty = prop => hasWindow() && prop in windowObject;
var defaultScreenFactorFunc = width => {
    if (width < 768) {
        return \"xs\"
    } else if (width < 992) {
        return \"sm\"
    } else if (width < 1200) {
        return \"md\"
    } else {
        return \"lg\"
    }
};
var getCurrentScreenFactor = screenFactorCallback => {
    var screenFactorFunc = screenFactorCallback || defaultScreenFactorFunc;
    var windowWidth = _dom_adapter__WEBPACK_IMPORTED_MODULE_0__.default.getDocumentElement().clientWidth;
    return screenFactorFunc(windowWidth)
};
var getNavigator = () => hasWindow() ? windowObject.navigator : {
    userAgent: \"\"
};



/***/ }),

/***/ \"./node_modules/devextreme/esm/core/version.js\":
/*!*****************************************************!*\\
  !*** ./node_modules/devextreme/esm/core/version.js ***!
  \\*****************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"version\": () => (/* binding */ version)
/* harmony export */ });
/**
 * DevExtreme (esm/core/version.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */
var version = \"21.1.4\";


/***/ }),

/***/ \"./node_modules/devextreme/esm/events/core/event_registrator_callbacks.js\":
/*!********************************************************************************!*\\
  !*** ./node_modules/devextreme/esm/events/core/event_registrator_callbacks.js ***!
  \\********************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _core_memorized_callbacks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../core/memorized_callbacks */ \"./node_modules/devextreme/esm/core/memorized_callbacks.js\");
/**
 * DevExtreme (esm/events/core/event_registrator_callbacks.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */

/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (new _core_memorized_callbacks__WEBPACK_IMPORTED_MODULE_0__.default);


/***/ }),

/***/ \"./node_modules/devextreme/esm/events/core/events_engine.js\":
/*!******************************************************************!*\\
  !*** ./node_modules/devextreme/esm/events/core/events_engine.js ***!
  \\******************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _event_registrator_callbacks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./event_registrator_callbacks */ \"./node_modules/devextreme/esm/events/core/event_registrator_callbacks.js\");
/* harmony import */ var _core_utils_extend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../core/utils/extend */ \"./node_modules/devextreme/esm/core/utils/extend.js\");
/* harmony import */ var _core_dom_adapter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../core/dom_adapter */ \"./node_modules/devextreme/esm/core/dom_adapter.js\");
/* harmony import */ var _core_utils_window__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../core/utils/window */ \"./node_modules/devextreme/esm/core/utils/window.js\");
/* harmony import */ var _core_utils_dependency_injector__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../core/utils/dependency_injector */ \"./node_modules/devextreme/esm/core/utils/dependency_injector.js\");
/* harmony import */ var _core_utils_type__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../core/utils/type */ \"./node_modules/devextreme/esm/core/utils/type.js\");
/* harmony import */ var _core_utils_callbacks__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../core/utils/callbacks */ \"./node_modules/devextreme/esm/core/utils/callbacks.js\");
/* harmony import */ var _core_errors__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../core/errors */ \"./node_modules/devextreme/esm/core/errors.js\");
/* harmony import */ var _core_polyfills_weak_map__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../core/polyfills/weak_map */ \"./node_modules/devextreme/esm/core/polyfills/weak_map.js\");
/* harmony import */ var _events_core_hook_touch_props__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../events/core/hook_touch_props */ \"./node_modules/devextreme/esm/events/core/hook_touch_props.js\");
/* harmony import */ var _core_utils_call_once__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../core/utils/call_once */ \"./node_modules/devextreme/esm/core/utils/call_once.js\");
/**
 * DevExtreme (esm/events/core/events_engine.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */




var window = (0,_core_utils_window__WEBPACK_IMPORTED_MODULE_3__.getWindow)();







var EMPTY_EVENT_NAME = \"dxEmptyEventType\";
var NATIVE_EVENTS_TO_SUBSCRIBE = {
    mouseenter: \"mouseover\",
    mouseleave: \"mouseout\",
    pointerenter: \"pointerover\",
    pointerleave: \"pointerout\"
};
var NATIVE_EVENTS_TO_TRIGGER = {
    focusin: \"focus\",
    focusout: \"blur\"
};
var NO_BUBBLE_EVENTS = [\"blur\", \"focus\", \"load\"];
var forcePassiveFalseEventNames = [\"touchmove\", \"wheel\", \"mousewheel\", \"touchstart\"];

function matchesSafe(target, selector) {
    return !(0,_core_utils_type__WEBPACK_IMPORTED_MODULE_5__.isWindow)(target) && \"#document\" !== target.nodeName && _core_dom_adapter__WEBPACK_IMPORTED_MODULE_2__.default.elementMatches(target, selector)
}
var elementDataMap = new _core_polyfills_weak_map__WEBPACK_IMPORTED_MODULE_8__.default;
var guid = 0;
var skipEvent;
var special = function() {
    var specialData = {};
    _event_registrator_callbacks__WEBPACK_IMPORTED_MODULE_0__.default.add((function(eventName, eventObject) {
        specialData[eventName] = eventObject
    }));
    return {
        getField: function(eventName, field) {
            return specialData[eventName] && specialData[eventName][field]
        },
        callMethod: function(eventName, methodName, context, args) {
            return specialData[eventName] && specialData[eventName][methodName] && specialData[eventName][methodName].apply(context, args)
        }
    }
}();
var eventsEngine = (0,_core_utils_dependency_injector__WEBPACK_IMPORTED_MODULE_4__.default)({
    on: getHandler(normalizeOnArguments(iterate((function(element, eventName, selector, data, handler) {
        var handlersController = getHandlersController(element, eventName);
        handlersController.addHandler(handler, selector, data)
    })))),
    one: getHandler(normalizeOnArguments((function(element, eventName, selector, data, handler) {
        eventsEngine.on(element, eventName, selector, data, (function oneTimeHandler() {
            eventsEngine.off(element, eventName, selector, oneTimeHandler);
            handler.apply(this, arguments)
        }))
    }))),
    off: getHandler(normalizeOffArguments(iterate((function(element, eventName, selector, handler) {
        var handlersController = getHandlersController(element, eventName);
        handlersController.removeHandler(handler, selector)
    })))),
    trigger: getHandler(normalizeTriggerArguments((function(element, event, extraParameters) {
        var eventName = event.type;
        var handlersController = getHandlersController(element, event.type);
        special.callMethod(eventName, \"trigger\", element, [event, extraParameters]);
        handlersController.callHandlers(event, extraParameters);
        var noBubble = special.getField(eventName, \"noBubble\") || event.isPropagationStopped() || -1 !== NO_BUBBLE_EVENTS.indexOf(eventName);
        if (!noBubble) {
            var parents = [];
            ! function getParents(element) {
                var parent = element.parentNode;
                if (parent) {
                    parents.push(parent);
                    getParents(parent)
                }
            }(element);
            parents.push(window);
            var i = 0;
            while (parents[i] && !event.isPropagationStopped()) {
                var parentDataByEvent = getHandlersController(parents[i], event.type);
                parentDataByEvent.callHandlers((0,_core_utils_extend__WEBPACK_IMPORTED_MODULE_1__.extend)(event, {
                    currentTarget: parents[i]
                }), extraParameters);
                i++
            }
        }
        if (element.nodeType || (0,_core_utils_type__WEBPACK_IMPORTED_MODULE_5__.isWindow)(element)) {
            special.callMethod(eventName, \"_default\", element, [event, extraParameters]);
            callNativeMethod(eventName, element)
        }
    }))),
    triggerHandler: getHandler(normalizeTriggerArguments((function(element, event, extraParameters) {
        var handlersController = getHandlersController(element, event.type);
        handlersController.callHandlers(event, extraParameters)
    })))
});

function applyForEach(args, method) {
    var element = args[0];
    if (!element) {
        return
    }
    if (_core_dom_adapter__WEBPACK_IMPORTED_MODULE_2__.default.isNode(element) || (0,_core_utils_type__WEBPACK_IMPORTED_MODULE_5__.isWindow)(element)) {
        method.apply(eventsEngine, args)
    } else if (!(0,_core_utils_type__WEBPACK_IMPORTED_MODULE_5__.isString)(element) && \"length\" in element) {
        var itemArgs = Array.prototype.slice.call(args, 0);
        Array.prototype.forEach.call(element, (function(itemElement) {
            itemArgs[0] = itemElement;
            applyForEach(itemArgs, method)
        }))
    } else {
        throw _core_errors__WEBPACK_IMPORTED_MODULE_7__.default.Error(\"E0025\")
    }
}

function getHandler(method) {
    return function() {
        applyForEach(arguments, method)
    }
}

function detectPassiveEventHandlersSupport() {
    var isSupported = false;
    try {
        var options = Object.defineProperty({}, \"passive\", {
            get: function() {
                isSupported = true;
                return true
            }
        });
        window.addEventListener(\"test\", null, options)
    } catch (e) {}
    return isSupported
}
var passiveEventHandlersSupported = (0,_core_utils_call_once__WEBPACK_IMPORTED_MODULE_10__.default)(detectPassiveEventHandlersSupport);
var contains = (container, element) => {
    if ((0,_core_utils_type__WEBPACK_IMPORTED_MODULE_5__.isWindow)(container)) {
        return contains(container.document, element)
    }
    return container.contains ? container.contains(element) : !!(element.compareDocumentPosition(container) & element.DOCUMENT_POSITION_CONTAINS)
};

function getHandlersController(element, eventName) {
    var elementData = elementDataMap.get(element);
    eventName = eventName || \"\";
    var eventNameParts = eventName.split(\".\");
    var namespaces = eventNameParts.slice(1);
    var eventNameIsDefined = !!eventNameParts[0];
    eventName = eventNameParts[0] || EMPTY_EVENT_NAME;
    if (!elementData) {
        elementData = {};
        elementDataMap.set(element, elementData)
    }
    if (!elementData[eventName]) {
        elementData[eventName] = {
            handleObjects: [],
            nativeHandler: null
        }
    }
    var eventData = elementData[eventName];
    return {
        addHandler: function(handler, selector, data) {
            var callHandler = function(e, extraParameters) {
                var handlerArgs = [e];
                var target = e.currentTarget;
                var relatedTarget = e.relatedTarget;
                var secondaryTargetIsInside;
                var result;
                if (eventName in NATIVE_EVENTS_TO_SUBSCRIBE) {
                    secondaryTargetIsInside = relatedTarget && target && (relatedTarget === target || contains(target, relatedTarget))
                }
                if (void 0 !== extraParameters) {
                    handlerArgs.push(extraParameters)
                }
                special.callMethod(eventName, \"handle\", element, [e, data]);
                if (!secondaryTargetIsInside) {
                    result = handler.apply(target, handlerArgs)
                }
                if (false === result) {
                    e.preventDefault();
                    e.stopPropagation()
                }
            };
            var handleObject = {
                handler: handler,
                wrappedHandler: function(e, extraParameters) {
                    if (skipEvent && e.type === skipEvent) {
                        return
                    }
                    e.data = data;
                    e.delegateTarget = element;
                    if (selector) {
                        var currentTarget = e.target;
                        while (currentTarget && currentTarget !== element) {
                            if (matchesSafe(currentTarget, selector)) {
                                e.currentTarget = currentTarget;
                                callHandler(e, extraParameters)
                            }
                            currentTarget = currentTarget.parentNode
                        }
                    } else {
                        e.currentTarget = e.delegateTarget || e.target;
                        callHandler(e, extraParameters)
                    }
                },
                selector: selector,
                type: eventName,
                data: data,
                namespace: namespaces.join(\".\"),
                namespaces: namespaces,
                guid: ++guid
            };
            eventData.handleObjects.push(handleObject);
            var firstHandlerForTheType = 1 === eventData.handleObjects.length;
            var shouldAddNativeListener = firstHandlerForTheType && eventNameIsDefined;
            var nativeListenerOptions;
            if (shouldAddNativeListener) {
                shouldAddNativeListener = !special.callMethod(eventName, \"setup\", element, [data, namespaces, handler])
            }
            if (shouldAddNativeListener) {
                eventData.nativeHandler = getNativeHandler(eventName);
                if (passiveEventHandlersSupported() && forcePassiveFalseEventNames.indexOf(eventName) > -1) {
                    nativeListenerOptions = {
                        passive: false
                    }
                }
                eventData.removeListener = _core_dom_adapter__WEBPACK_IMPORTED_MODULE_2__.default.listen(element, NATIVE_EVENTS_TO_SUBSCRIBE[eventName] || eventName, eventData.nativeHandler, nativeListenerOptions)
            }
            special.callMethod(eventName, \"add\", element, [handleObject])
        },
        removeHandler: function(handler, selector) {
            var removeByEventName = function(eventName) {
                var eventData = elementData[eventName];
                if (!eventData.handleObjects.length) {
                    delete elementData[eventName];
                    return
                }
                var removedHandler;
                eventData.handleObjects = eventData.handleObjects.filter((function(handleObject) {
                    var skip = namespaces.length && !isSubset(handleObject.namespaces, namespaces) || handler && handleObject.handler !== handler || selector && handleObject.selector !== selector;
                    if (!skip) {
                        removedHandler = handleObject.handler;
                        special.callMethod(eventName, \"remove\", element, [handleObject])
                    }
                    return skip
                }));
                var lastHandlerForTheType = !eventData.handleObjects.length;
                var shouldRemoveNativeListener = lastHandlerForTheType && eventName !== EMPTY_EVENT_NAME;
                if (shouldRemoveNativeListener) {
                    special.callMethod(eventName, \"teardown\", element, [namespaces, removedHandler]);
                    if (eventData.nativeHandler) {
                        eventData.removeListener()
                    }
                    delete elementData[eventName]
                }
            };
            if (eventNameIsDefined) {
                removeByEventName(eventName)
            } else {
                for (var name in elementData) {
                    removeByEventName(name)
                }
            }
            var elementDataIsEmpty = 0 === Object.keys(elementData).length;
            if (elementDataIsEmpty) {
                elementDataMap.delete(element)
            }
        },
        callHandlers: function(event, extraParameters) {
            var forceStop = false;
            var handleCallback = function(handleObject) {
                if (forceStop) {
                    return
                }
                if (!namespaces.length || isSubset(handleObject.namespaces, namespaces)) {
                    handleObject.wrappedHandler(event, extraParameters);
                    forceStop = event.isImmediatePropagationStopped()
                }
            };
            eventData.handleObjects.forEach(handleCallback);
            if (namespaces.length && elementData[EMPTY_EVENT_NAME]) {
                elementData[EMPTY_EVENT_NAME].handleObjects.forEach(handleCallback)
            }
        }
    }
}

function getNativeHandler(subscribeName) {
    return function(event, extraParameters) {
        var handlersController = getHandlersController(this, subscribeName);
        event = eventsEngine.Event(event);
        handlersController.callHandlers(event, extraParameters)
    }
}

function isSubset(original, checked) {
    for (var i = 0; i < checked.length; i++) {
        if (original.indexOf(checked[i]) < 0) {
            return false
        }
    }
    return true
}

function normalizeOnArguments(callback) {
    return function(element, eventName, selector, data, handler) {
        if (!handler) {
            handler = data;
            data = void 0
        }
        if (\"string\" !== typeof selector) {
            data = selector;
            selector = void 0
        }
        if (!handler && \"string\" === typeof eventName) {
            handler = data || selector;
            selector = void 0;
            data = void 0
        }
        callback(element, eventName, selector, data, handler)
    }
}

function normalizeOffArguments(callback) {
    return function(element, eventName, selector, handler) {
        if (\"function\" === typeof selector) {
            handler = selector;
            selector = void 0
        }
        callback(element, eventName, selector, handler)
    }
}

function normalizeTriggerArguments(callback) {
    return function(element, src, extraParameters) {
        if (\"string\" === typeof src) {
            src = {
                type: src
            }
        }
        if (!src.target) {
            src.target = element
        }
        src.currentTarget = element;
        if (!src.delegateTarget) {
            src.delegateTarget = element
        }
        if (!src.type && src.originalEvent) {
            src.type = src.originalEvent.type
        }
        callback(element, src instanceof eventsEngine.Event ? src : eventsEngine.Event(src), extraParameters)
    }
}

function normalizeEventArguments(callback) {
    return function(src, config) {
        if (!(this instanceof eventsEngine.Event)) {
            return new eventsEngine.Event(src, config)
        }
        if (!src) {
            src = {}
        }
        if (\"string\" === typeof src) {
            src = {
                type: src
            }
        }
        if (!config) {
            config = {}
        }
        callback.call(this, src, config)
    }
}

function iterate(callback) {
    var iterateEventNames = function(element, eventName) {
        if (eventName && eventName.indexOf(\" \") > -1) {
            var args = Array.prototype.slice.call(arguments, 0);
            eventName.split(\" \").forEach((function(eventName) {
                args[1] = eventName;
                callback.apply(this, args)
            }))
        } else {
            callback.apply(this, arguments)
        }
    };
    return function(element, eventName) {
        if (\"object\" === typeof eventName) {
            var args = Array.prototype.slice.call(arguments, 0);
            for (var name in eventName) {
                args[1] = name;
                args[args.length - 1] = eventName[name];
                iterateEventNames.apply(this, args)
            }
        } else {
            iterateEventNames.apply(this, arguments)
        }
    }
}

function callNativeMethod(eventName, element) {
    var nativeMethodName = NATIVE_EVENTS_TO_TRIGGER[eventName] || eventName;
    if (function(eventName, element) {
            return \"click\" === eventName && \"a\" === element.localName
        }(eventName, element)) {
        return
    }
    if ((0,_core_utils_type__WEBPACK_IMPORTED_MODULE_5__.isFunction)(element[nativeMethodName])) {
        skipEvent = eventName;
        element[nativeMethodName]();
        skipEvent = void 0
    }
}

function calculateWhich(event) {
    if (function(event) {
            return null == event.which && 0 === event.type.indexOf(\"key\")
        }(event)) {
        return null != event.charCode ? event.charCode : event.keyCode
    }
    if (function(event) {
            return !event.which && void 0 !== event.button && /^(?:mouse|pointer|contextmenu|drag|drop)|click/.test(event.type)
        }(event)) {
        return {
            1: 1,
            2: 3,
            3: 1,
            4: 2
        } [event.button]
    }
    return event.which
}

function initEvent(EventClass) {
    if (EventClass) {
        eventsEngine.Event = EventClass;
        eventsEngine.Event.prototype = EventClass.prototype
    }
}
initEvent(normalizeEventArguments((function(src, config) {
    var that = this;
    var propagationStopped = false;
    var immediatePropagationStopped = false;
    var defaultPrevented = false;
    (0,_core_utils_extend__WEBPACK_IMPORTED_MODULE_1__.extend)(that, src);
    if (src instanceof eventsEngine.Event || (0,_core_utils_window__WEBPACK_IMPORTED_MODULE_3__.hasWindow)() && src instanceof window.Event) {
        that.originalEvent = src;
        that.currentTarget = void 0
    }
    if (!(src instanceof eventsEngine.Event)) {
        (0,_core_utils_extend__WEBPACK_IMPORTED_MODULE_1__.extend)(that, {
            isPropagationStopped: function() {
                return !!(propagationStopped || that.originalEvent && that.originalEvent.propagationStopped)
            },
            stopPropagation: function() {
                propagationStopped = true;
                that.originalEvent && that.originalEvent.stopPropagation()
            },
            isImmediatePropagationStopped: function() {
                return immediatePropagationStopped
            },
            stopImmediatePropagation: function() {
                this.stopPropagation();
                immediatePropagationStopped = true;
                that.originalEvent && that.originalEvent.stopImmediatePropagation()
            },
            isDefaultPrevented: function() {
                return !!(defaultPrevented || that.originalEvent && that.originalEvent.defaultPrevented)
            },
            preventDefault: function() {
                defaultPrevented = true;
                that.originalEvent && that.originalEvent.preventDefault()
            }
        })
    }
    addProperty(\"which\", calculateWhich, that);
    if (0 === src.type.indexOf(\"touch\")) {
        delete config.pageX;
        delete config.pageY
    }
    (0,_core_utils_extend__WEBPACK_IMPORTED_MODULE_1__.extend)(that, config);
    that.guid = ++guid
})));

function addProperty(propName, hook, eventInstance) {
    Object.defineProperty(eventInstance || eventsEngine.Event.prototype, propName, {
        enumerable: true,
        configurable: true,
        get: function() {
            return this.originalEvent && hook(this.originalEvent)
        },
        set: function(value) {
            Object.defineProperty(this, propName, {
                enumerable: true,
                configurable: true,
                writable: true,
                value: value
            })
        }
    })
}
(0,_events_core_hook_touch_props__WEBPACK_IMPORTED_MODULE_9__.default)(addProperty);
var beforeSetStrategy = (0,_core_utils_callbacks__WEBPACK_IMPORTED_MODULE_6__.default)();
var afterSetStrategy = (0,_core_utils_callbacks__WEBPACK_IMPORTED_MODULE_6__.default)();
eventsEngine.set = function(engine) {
    beforeSetStrategy.fire();
    eventsEngine.inject(engine);
    initEvent(engine.Event);
    afterSetStrategy.fire()
};
eventsEngine.subscribeGlobal = function() {
    applyForEach(arguments, normalizeOnArguments((function() {
        var args = arguments;
        eventsEngine.on.apply(this, args);
        beforeSetStrategy.add((function() {
            var offArgs = Array.prototype.slice.call(args, 0);
            offArgs.splice(3, 1);
            eventsEngine.off.apply(this, offArgs)
        }));
        afterSetStrategy.add((function() {
            eventsEngine.on.apply(this, args)
        }))
    })))
};
eventsEngine.forcePassiveFalseEventNames = forcePassiveFalseEventNames;
eventsEngine.passiveEventHandlersSupported = passiveEventHandlersSupported;
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (eventsEngine);


/***/ }),

/***/ \"./node_modules/devextreme/esm/events/core/hook_touch_props.js\":
/*!*********************************************************************!*\\
  !*** ./node_modules/devextreme/esm/events/core/hook_touch_props.js ***!
  \\*********************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/**
 * DevExtreme (esm/events/core/hook_touch_props.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */
var touchPropsToHook = [\"pageX\", \"pageY\", \"screenX\", \"screenY\", \"clientX\", \"clientY\"];
var touchPropHook = function(name, event) {
    if (event[name] && !event.touches || !event.touches) {
        return event[name]
    }
    var touches = event.touches.length ? event.touches : event.changedTouches;
    if (!touches.length) {
        return
    }
    return touches[0][name]
};
/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(callback) {
    touchPropsToHook.forEach((function(name) {
        callback(name, (function(event) {
            return touchPropHook(name, event)
        }))
    }), this)
}


/***/ }),

/***/ \"./node_modules/devextreme/esm/localization/cldr-data/accounting_formats.js\":
/*!**********************************************************************************!*\\
  !*** ./node_modules/devextreme/esm/localization/cldr-data/accounting_formats.js ***!
  \\**********************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/**
 * DevExtreme (esm/localization/cldr-data/accounting_formats.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
    af: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"af-NA\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    agq: \"#,##0.00\\xa4\",
    ak: \"\\xa4#,##0.00\",
    am: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    ar: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"ar-AE\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"ar-BH\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"ar-DJ\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"ar-DZ\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"ar-EG\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"ar-EH\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"ar-ER\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"ar-IL\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"ar-IQ\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"ar-JO\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"ar-KM\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"ar-KW\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"ar-LB\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"ar-LY\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"ar-MA\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"ar-MR\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"ar-OM\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"ar-PS\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"ar-QA\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"ar-SA\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"ar-SD\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"ar-SO\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"ar-SS\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"ar-SY\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"ar-TD\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"ar-TN\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"ar-YE\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    as: \"\\xa4\\xa0#,##,##0.00\",
    asa: \"#,##0.00\\xa0\\xa4\",
    ast: \"#,##0.00\\xa0\\xa4\",
    az: \"#,##0.00\\xa0\\xa4\",
    \"az-Cyrl\": \"#,##0.00\\xa0\\xa4\",
    \"az-Latn\": \"#,##0.00\\xa0\\xa4\",
    bas: \"#,##0.00\\xa0\\xa4\",
    be: \"#,##0.00\\xa0\\xa4\",
    bem: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    bez: \"#,##0.00\\xa4\",
    bg: \"0.00\\xa0\\xa4;(0.00\\xa0\\xa4)\",
    bm: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    bn: \"#,##,##0.00\\xa4;(#,##,##0.00\\xa4)\",
    \"bn-IN\": \"#,##,##0.00\\xa4;(#,##,##0.00\\xa4)\",
    bo: \"\\xa4\\xa0#,##0.00\",
    \"bo-IN\": \"\\xa4\\xa0#,##0.00\",
    br: \"#,##0.00\\xa0\\xa4\",
    brx: \"\\xa4\\xa0#,##,##0.00\",
    bs: \"#,##0.00\\xa0\\xa4\",
    \"bs-Cyrl\": \"#,##0.00\\xa0\\xa4\",
    \"bs-Latn\": \"#,##0.00\\xa0\\xa4\",
    ca: \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"ca-AD\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"ca-ES-VALENCIA\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"ca-FR\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"ca-IT\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    ccp: \"#,##,##0.00\\xa4;(#,##,##0.00\\xa4)\",
    \"ccp-IN\": \"#,##,##0.00\\xa4;(#,##,##0.00\\xa4)\",
    ce: \"#,##0.00\\xa0\\xa4\",
    ceb: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    cgg: \"\\xa4#,##0.00\",
    chr: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    ckb: \"\\xa4\\xa0#,##0.00\",
    \"ckb-IR\": \"\\xa4\\xa0#,##0.00\",
    cs: \"#,##0.00\\xa0\\xa4\",
    cy: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    da: \"#,##0.00\\xa0\\xa4\",
    \"da-GL\": \"#,##0.00\\xa0\\xa4\",
    dav: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    de: \"#,##0.00\\xa0\\xa4\",
    \"de-AT\": \"#,##0.00\\xa0\\xa4\",
    \"de-BE\": \"#,##0.00\\xa0\\xa4\",
    \"de-CH\": \"#,##0.00\\xa0\\xa4\",
    \"de-IT\": \"#,##0.00\\xa0\\xa4\",
    \"de-LI\": \"#,##0.00\\xa0\\xa4\",
    \"de-LU\": \"#,##0.00\\xa0\\xa4\",
    dje: \"#,##0.00\\xa4\",
    doi: \"\\xa4#,##0.00\",
    dsb: \"#,##0.00\\xa0\\xa4\",
    dua: \"#,##0.00\\xa0\\xa4\",
    dyo: \"#,##0.00\\xa0\\xa4\",
    dz: \"\\xa4#,##,##0.00\",
    ebu: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    ee: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"ee-TG\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    el: \"#,##0.00\\xa0\\xa4\",
    \"el-CY\": \"#,##0.00\\xa0\\xa4\",
    en: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-001\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-150\": \"#,##0.00\\xa0\\xa4\",
    \"en-AE\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-AG\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-AI\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-AS\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-AT\": \"\\xa4\\xa0#,##0.00\",
    \"en-AU\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-BB\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-BE\": \"#,##0.00\\xa0\\xa4\",
    \"en-BI\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-BM\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-BS\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-BW\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-BZ\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-CA\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-CC\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-CH\": \"\\xa4\\xa0#,##0.00;\\xa4-#,##0.00\",
    \"en-CK\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-CM\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-CX\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-CY\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-DE\": \"#,##0.00\\xa0\\xa4\",
    \"en-DG\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-DK\": \"#,##0.00\\xa0\\xa4\",
    \"en-DM\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-ER\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-FI\": \"#,##0.00\\xa0\\xa4\",
    \"en-FJ\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-FK\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-FM\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-GB\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-GD\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-GG\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-GH\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-GI\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-GM\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-GU\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-GY\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-HK\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-IE\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-IL\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-IM\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-IN\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-IO\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-JE\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-JM\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-KE\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-KI\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-KN\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-KY\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-LC\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-LR\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-LS\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-MG\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-MH\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-MO\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-MP\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-MS\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-MT\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-MU\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-MW\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-MY\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-NA\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-NF\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-NG\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-NL\": \"\\xa4\\xa0#,##0.00;(\\xa4\\xa0#,##0.00)\",
    \"en-NR\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-NU\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-NZ\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-PG\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-PH\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-PK\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-PN\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-PR\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-PW\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-RW\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-SB\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-SC\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-SD\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-SE\": \"#,##0.00\\xa0\\xa4\",
    \"en-SG\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-SH\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-SI\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"en-SL\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-SS\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-SX\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-SZ\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-TC\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-TK\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-TO\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-TT\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-TV\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-TZ\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-UG\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-UM\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-US-POSIX\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-VC\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-VG\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-VI\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-VU\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-WS\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-ZA\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-ZM\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-ZW\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    eo: \"\\xa4\\xa0#,##0.00\",
    es: \"#,##0.00\\xa0\\xa4\",
    \"es-419\": \"\\xa4#,##0.00\",
    \"es-AR\": \"\\xa4\\xa0#,##0.00;(\\xa4\\xa0#,##0.00)\",
    \"es-BO\": \"\\xa4#,##0.00\",
    \"es-BR\": \"\\xa4#,##0.00\",
    \"es-BZ\": \"\\xa4#,##0.00\",
    \"es-CL\": \"\\xa4#,##0.00\",
    \"es-CO\": \"\\xa4#,##0.00\",
    \"es-CR\": \"\\xa4#,##0.00\",
    \"es-CU\": \"\\xa4#,##0.00\",
    \"es-DO\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"es-EA\": \"#,##0.00\\xa0\\xa4\",
    \"es-EC\": \"\\xa4#,##0.00\",
    \"es-GQ\": \"#,##0.00\\xa0\\xa4\",
    \"es-GT\": \"\\xa4#,##0.00\",
    \"es-HN\": \"\\xa4#,##0.00\",
    \"es-IC\": \"#,##0.00\\xa0\\xa4\",
    \"es-MX\": \"\\xa4#,##0.00\",
    \"es-NI\": \"\\xa4#,##0.00\",
    \"es-PA\": \"\\xa4#,##0.00\",
    \"es-PE\": \"\\xa4#,##0.00\",
    \"es-PH\": \"#,##0.00\\xa0\\xa4\",
    \"es-PR\": \"\\xa4#,##0.00\",
    \"es-PY\": \"\\xa4#,##0.00\",
    \"es-SV\": \"\\xa4#,##0.00\",
    \"es-US\": \"\\xa4#,##0.00\",
    \"es-UY\": \"\\xa4\\xa0#,##0.00;(\\xa4\\xa0#,##0.00)\",
    \"es-VE\": \"\\xa4#,##0.00\",
    et: \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    eu: \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    ewo: \"#,##0.00\\xa0\\xa4\",
    fa: \"\\u200e\\xa4\\xa0#,##0.00;\\u200e(\\xa4\\xa0#,##0.00)\",
    \"fa-AF\": \"\\xa4\\xa0#,##0.00;\\u200e(\\xa4\\xa0#,##0.00)\",
    ff: \"#,##0.00\\xa0\\xa4\",
    \"ff-Adlm\": \"\\xa4\\xa0#,##0.00\",
    \"ff-Adlm-BF\": \"\\xa4\\xa0#,##0.00\",
    \"ff-Adlm-CM\": \"\\xa4\\xa0#,##0.00\",
    \"ff-Adlm-GH\": \"\\xa4\\xa0#,##0.00\",
    \"ff-Adlm-GM\": \"\\xa4\\xa0#,##0.00\",
    \"ff-Adlm-GW\": \"\\xa4\\xa0#,##0.00\",
    \"ff-Adlm-LR\": \"\\xa4\\xa0#,##0.00\",
    \"ff-Adlm-MR\": \"\\xa4\\xa0#,##0.00\",
    \"ff-Adlm-NE\": \"\\xa4\\xa0#,##0.00\",
    \"ff-Adlm-NG\": \"\\xa4\\xa0#,##0.00\",
    \"ff-Adlm-SL\": \"\\xa4\\xa0#,##0.00\",
    \"ff-Adlm-SN\": \"\\xa4\\xa0#,##0.00\",
    \"ff-Latn\": \"#,##0.00\\xa0\\xa4\",
    \"ff-Latn-BF\": \"#,##0.00\\xa0\\xa4\",
    \"ff-Latn-CM\": \"#,##0.00\\xa0\\xa4\",
    \"ff-Latn-GH\": \"#,##0.00\\xa0\\xa4\",
    \"ff-Latn-GM\": \"#,##0.00\\xa0\\xa4\",
    \"ff-Latn-GN\": \"#,##0.00\\xa0\\xa4\",
    \"ff-Latn-GW\": \"#,##0.00\\xa0\\xa4\",
    \"ff-Latn-LR\": \"#,##0.00\\xa0\\xa4\",
    \"ff-Latn-MR\": \"#,##0.00\\xa0\\xa4\",
    \"ff-Latn-NE\": \"#,##0.00\\xa0\\xa4\",
    \"ff-Latn-NG\": \"#,##0.00\\xa0\\xa4\",
    \"ff-Latn-SL\": \"#,##0.00\\xa0\\xa4\",
    fi: \"#,##0.00\\xa0\\xa4\",
    fil: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    fo: \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fo-DK\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    fr: \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-BE\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-BF\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-BI\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-BJ\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-BL\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-CA\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-CD\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-CF\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-CG\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-CH\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-CI\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-CM\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-DJ\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-DZ\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-GA\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-GF\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-GN\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-GP\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-GQ\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-HT\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-KM\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-LU\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-MA\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-MC\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-MF\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-MG\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-ML\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-MQ\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-MR\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-MU\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-NC\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-NE\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-PF\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-PM\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-RE\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-RW\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-SC\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-SN\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-SY\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-TD\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-TG\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-TN\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-VU\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-WF\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-YT\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    fur: \"\\xa4\\xa0#,##0.00\",
    fy: \"\\xa4\\xa0#,##0.00;(\\xa4\\xa0#,##0.00)\",
    ga: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"ga-GB\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    gd: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    gl: \"#,##0.00\\xa0\\xa4\",
    gsw: \"#,##0.00\\xa0\\xa4\",
    \"gsw-FR\": \"#,##0.00\\xa0\\xa4\",
    \"gsw-LI\": \"#,##0.00\\xa0\\xa4\",
    gu: \"\\xa4#,##,##0.00;(\\xa4#,##,##0.00)\",
    guz: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    gv: \"\\xa4#,##0.00\",
    ha: \"\\xa4\\xa0#,##0.00\",
    \"ha-GH\": \"\\xa4\\xa0#,##0.00\",
    \"ha-NE\": \"\\xa4\\xa0#,##0.00\",
    haw: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    he: \"#,##0.00\\xa0\\xa4\",
    hi: \"\\xa4#,##,##0.00\",
    hr: \"#,##0.00\\xa0\\xa4\",
    \"hr-BA\": \"#,##0.00\\xa0\\xa4\",
    hsb: \"#,##0.00\\xa0\\xa4\",
    hu: \"#,##0.00\\xa0\\xa4\",
    hy: \"#,##0.00\\xa0\\xa4\",
    ia: \"\\xa4\\xa0#,##0.00;(\\xa4\\xa0#,##0.00)\",
    id: \"\\xa4#,##0.00\",
    ig: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    ii: \"\\xa4\\xa0#,##0.00\",
    is: \"#,##0.00\\xa0\\xa4\",
    it: \"#,##0.00\\xa0\\xa4\",
    \"it-CH\": \"#,##0.00\\xa0\\xa4\",
    \"it-SM\": \"#,##0.00\\xa0\\xa4\",
    \"it-VA\": \"#,##0.00\\xa0\\xa4\",
    ja: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    jgo: \"\\xa4\\xa0#,##0.00\",
    jmc: \"\\xa4#,##0.00\",
    jv: \"\\xa4\\xa0#,##0.00\",
    ka: \"#,##0.00\\xa0\\xa4\",
    kab: \"#,##0.00\\xa4\",
    kam: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    kde: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    kea: \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    khq: \"#,##0.00\\xa4\",
    ki: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    kk: \"#,##0.00\\xa0\\xa4\",
    kkj: \"\\xa4\\xa0#,##0.00\",
    kl: \"\\xa4#,##0.00;\\xa4-#,##0.00\",
    kln: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    km: \"#,##0.00\\xa4;(#,##0.00\\xa4)\",
    kn: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    ko: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"ko-KP\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    kok: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    ks: \"\\xa4\\xa0#,##,##0.00\",
    \"ks-Arab\": \"\\xa4\\xa0#,##,##0.00\",
    ksb: \"#,##0.00\\xa4\",
    ksf: \"#,##0.00\\xa0\\xa4\",
    ksh: \"#,##0.00\\xa0\\xa4\",
    ku: \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    kw: \"\\xa4#,##0.00\",
    ky: \"#,##0.00\\xa0\\xa4\",
    lag: \"\\xa4\\xa0#,##0.00\",
    lb: \"#,##0.00\\xa0\\xa4\",
    lg: \"#,##0.00\\xa4\",
    lkt: \"\\xa4\\xa0#,##0.00\",
    ln: \"#,##0.00\\xa0\\xa4\",
    \"ln-AO\": \"#,##0.00\\xa0\\xa4\",
    \"ln-CF\": \"#,##0.00\\xa0\\xa4\",
    \"ln-CG\": \"#,##0.00\\xa0\\xa4\",
    lo: \"\\xa4#,##0.00;\\xa4-#,##0.00\",
    lrc: \"\\xa4\\xa0#,##0.00\",
    \"lrc-IQ\": \"\\xa4\\xa0#,##0.00\",
    lt: \"#,##0.00\\xa0\\xa4\",
    lu: \"#,##0.00\\xa4\",
    luo: \"#,##0.00\\xa4\",
    luy: \"\\xa4#,##0.00;\\xa4-\\xa0#,##0.00\",
    lv: \"#,##0.00\\xa0\\xa4\",
    mai: \"\\xa4\\xa0#,##0.00\",
    mas: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"mas-TZ\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    mer: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    mfe: \"\\xa4\\xa0#,##0.00\",
    mg: \"\\xa4#,##0.00\",
    mgh: \"\\xa4\\xa0#,##0.00\",
    mgo: \"\\xa4\\xa0#,##0.00\",
    mi: \"\\xa4\\xa0#,##0.00\",
    mk: \"#,##0.00\\xa0\\xa4\",
    ml: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    mn: \"\\xa4\\xa0#,##0.00\",
    mni: \"\\xa4\\xa0#,##0.00\",
    \"mni-Beng\": \"\\xa4\\xa0#,##0.00\",
    mr: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    ms: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"ms-BN\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"ms-ID\": \"\\xa4#,##0.00\",
    \"ms-SG\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    mt: \"\\xa4#,##0.00\",
    mua: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    my: \"\\xa4\\xa0#,##0.00\",
    mzn: \"\\xa4\\xa0#,##0.00\",
    naq: \"\\xa4#,##0.00\",
    nb: \"\\xa4\\xa0#,##0.00\",
    \"nb-SJ\": \"\\xa4\\xa0#,##0.00\",
    nd: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    nds: \"\\xa4\\xa0#,##0.00\",
    \"nds-NL\": \"\\xa4\\xa0#,##0.00\",
    ne: \"\\xa4\\xa0#,##,##0.00\",
    \"ne-IN\": \"\\xa4\\xa0#,##,##0.00\",
    nl: \"\\xa4\\xa0#,##0.00;(\\xa4\\xa0#,##0.00)\",
    \"nl-AW\": \"\\xa4\\xa0#,##0.00;(\\xa4\\xa0#,##0.00)\",
    \"nl-BE\": \"\\xa4\\xa0#,##0.00;(\\xa4\\xa0#,##0.00)\",
    \"nl-BQ\": \"\\xa4\\xa0#,##0.00;(\\xa4\\xa0#,##0.00)\",
    \"nl-CW\": \"\\xa4\\xa0#,##0.00;(\\xa4\\xa0#,##0.00)\",
    \"nl-SR\": \"\\xa4\\xa0#,##0.00;(\\xa4\\xa0#,##0.00)\",
    \"nl-SX\": \"\\xa4\\xa0#,##0.00;(\\xa4\\xa0#,##0.00)\",
    nmg: \"#,##0.00\\xa0\\xa4\",
    nn: \"#,##0.00\\xa0\\xa4\",
    nnh: \"\\xa4\\xa0#,##0.00\",
    no: \"\\xa4\\xa0#,##0.00\",
    nus: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    nyn: \"\\xa4#,##0.00\",
    om: \"\\xa4#,##0.00\",
    \"om-KE\": \"\\xa4#,##0.00\",
    or: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    os: \"\\xa4\\xa0#,##0.00\",
    \"os-RU\": \"\\xa4\\xa0#,##0.00\",
    pa: \"\\xa4\\xa0#,##0.00\",
    \"pa-Arab\": \"\\xa4\\xa0#,##0.00\",
    \"pa-Guru\": \"\\xa4\\xa0#,##0.00\",
    pcm: \"\\xa4#,##0.00\",
    pl: \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    ps: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"ps-PK\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    pt: \"\\xa4\\xa0#,##0.00\",
    \"pt-AO\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"pt-CH\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"pt-CV\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"pt-GQ\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"pt-GW\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"pt-LU\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"pt-MO\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"pt-MZ\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"pt-PT\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"pt-ST\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"pt-TL\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    qu: \"\\xa4\\xa0#,##0.00\",
    \"qu-BO\": \"\\xa4\\xa0#,##0.00\",
    \"qu-EC\": \"\\xa4\\xa0#,##0.00\",
    rm: \"#,##0.00\\xa0\\xa4\",
    rn: \"#,##0.00\\xa4\",
    ro: \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"ro-MD\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    rof: \"\\xa4#,##0.00\",
    root: \"\\xa4\\xa0#,##0.00\",
    ru: \"#,##0.00\\xa0\\xa4\",
    \"ru-BY\": \"#,##0.00\\xa0\\xa4\",
    \"ru-KG\": \"#,##0.00\\xa0\\xa4\",
    \"ru-KZ\": \"#,##0.00\\xa0\\xa4\",
    \"ru-MD\": \"#,##0.00\\xa0\\xa4\",
    \"ru-UA\": \"#,##0.00\\xa0\\xa4\",
    rw: \"\\xa4\\xa0#,##0.00\",
    rwk: \"#,##0.00\\xa4\",
    sa: \"\\xa4\\xa0#,##0.00\",
    sah: \"#,##0.00\\xa0\\xa4\",
    saq: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    sat: \"\\xa4\\xa0#,##0.00\",
    \"sat-Olck\": \"\\xa4\\xa0#,##0.00\",
    sbp: \"#,##0.00\\xa4\",
    sd: \"\\xa4\\xa0#,##0.00\",
    \"sd-Arab\": \"\\xa4\\xa0#,##0.00\",
    \"sd-Deva\": \"\\xa4\\xa0#,##0.00\",
    se: \"#,##0.00\\xa0\\xa4\",
    \"se-FI\": \"#,##0.00\\xa0\\xa4\",
    \"se-SE\": \"#,##0.00\\xa0\\xa4\",
    seh: \"#,##0.00\\xa4\",
    ses: \"#,##0.00\\xa4\",
    sg: \"\\xa4#,##0.00;\\xa4-#,##0.00\",
    shi: \"#,##0.00\\xa4\",
    \"shi-Latn\": \"#,##0.00\\xa4\",
    \"shi-Tfng\": \"#,##0.00\\xa4\",
    si: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    sk: \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    sl: \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    smn: \"#,##0.00\\xa0\\xa4\",
    sn: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    so: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"so-DJ\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"so-ET\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"so-KE\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    sq: \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"sq-MK\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"sq-XK\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    sr: \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"sr-Cyrl\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"sr-Cyrl-BA\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"sr-Cyrl-ME\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"sr-Cyrl-XK\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"sr-Latn\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"sr-Latn-BA\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"sr-Latn-ME\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"sr-Latn-XK\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    su: \"\\xa4#,##0.00\",
    \"su-Latn\": \"\\xa4#,##0.00\",
    sv: \"#,##0.00\\xa0\\xa4\",
    \"sv-AX\": \"#,##0.00\\xa0\\xa4\",
    \"sv-FI\": \"#,##0.00\\xa0\\xa4\",
    sw: \"\\xa4\\xa0#,##0.00\",
    \"sw-CD\": \"\\xa4\\xa0#,##0.00\",
    \"sw-KE\": \"\\xa4\\xa0#,##0.00\",
    \"sw-UG\": \"\\xa4\\xa0#,##0.00\",
    ta: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"ta-LK\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"ta-MY\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"ta-SG\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    te: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    teo: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"teo-KE\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    tg: \"#,##0.00\\xa0\\xa4\",
    th: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    ti: \"\\xa4#,##0.00\",
    \"ti-ER\": \"\\xa4#,##0.00\",
    tk: \"#,##0.00\\xa0\\xa4\",
    to: \"\\xa4\\xa0#,##0.00\",
    tr: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"tr-CY\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    tt: \"#,##0.00\\xa0\\xa4\",
    twq: \"#,##0.00\\xa4\",
    tzm: \"#,##0.00\\xa0\\xa4\",
    ug: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    uk: \"#,##0.00\\xa0\\xa4\",
    ur: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"ur-IN\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    uz: \"#,##0.00\\xa0\\xa4\",
    \"uz-Arab\": \"\\xa4\\xa0#,##0.00\",
    \"uz-Cyrl\": \"#,##0.00\\xa0\\xa4\",
    \"uz-Latn\": \"#,##0.00\\xa0\\xa4\",
    vai: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"vai-Latn\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"vai-Vaii\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    vi: \"#,##0.00\\xa0\\xa4\",
    vun: \"\\xa4#,##0.00\",
    wae: \"\\xa4\\xa0#,##0.00\",
    wo: \"\\xa4\\xa0#,##0.00\",
    xh: \"\\xa4#,##0.00\",
    xog: \"#,##0.00\\xa0\\xa4\",
    yav: \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    yi: \"\\xa4\\xa0#,##0.00\",
    yo: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"yo-BJ\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    yue: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"yue-Hans\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"yue-Hant\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    zgh: \"#,##0.00\\xa4\",
    zh: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"zh-Hans\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"zh-Hans-HK\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"zh-Hans-MO\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"zh-Hans-SG\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"zh-Hant\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"zh-Hant-HK\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"zh-Hant-MO\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    zu: \"\\xa4#,##0.00;(\\xa4#,##0.00)\"
});


/***/ }),

/***/ \"./node_modules/devextreme/esm/localization/cldr-data/parent_locales.js\":
/*!******************************************************************************!*\\
  !*** ./node_modules/devextreme/esm/localization/cldr-data/parent_locales.js ***!
  \\******************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/**
 * DevExtreme (esm/localization/cldr-data/parent_locales.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
    \"en-150\": \"en-001\",
    \"en-AG\": \"en-001\",
    \"en-AI\": \"en-001\",
    \"en-AU\": \"en-001\",
    \"en-BB\": \"en-001\",
    \"en-BM\": \"en-001\",
    \"en-BS\": \"en-001\",
    \"en-BW\": \"en-001\",
    \"en-BZ\": \"en-001\",
    \"en-CA\": \"en-001\",
    \"en-CC\": \"en-001\",
    \"en-CK\": \"en-001\",
    \"en-CM\": \"en-001\",
    \"en-CX\": \"en-001\",
    \"en-CY\": \"en-001\",
    \"en-DG\": \"en-001\",
    \"en-DM\": \"en-001\",
    \"en-ER\": \"en-001\",
    \"en-FJ\": \"en-001\",
    \"en-FK\": \"en-001\",
    \"en-FM\": \"en-001\",
    \"en-GB\": \"en-001\",
    \"en-GD\": \"en-001\",
    \"en-GG\": \"en-001\",
    \"en-GH\": \"en-001\",
    \"en-GI\": \"en-001\",
    \"en-GM\": \"en-001\",
    \"en-GY\": \"en-001\",
    \"en-HK\": \"en-001\",
    \"en-IE\": \"en-001\",
    \"en-IL\": \"en-001\",
    \"en-IM\": \"en-001\",
    \"en-IN\": \"en-001\",
    \"en-IO\": \"en-001\",
    \"en-JE\": \"en-001\",
    \"en-JM\": \"en-001\",
    \"en-KE\": \"en-001\",
    \"en-KI\": \"en-001\",
    \"en-KN\": \"en-001\",
    \"en-KY\": \"en-001\",
    \"en-LC\": \"en-001\",
    \"en-LR\": \"en-001\",
    \"en-LS\": \"en-001\",
    \"en-MG\": \"en-001\",
    \"en-MO\": \"en-001\",
    \"en-MS\": \"en-001\",
    \"en-MT\": \"en-001\",
    \"en-MU\": \"en-001\",
    \"en-MW\": \"en-001\",
    \"en-MY\": \"en-001\",
    \"en-NA\": \"en-001\",
    \"en-NF\": \"en-001\",
    \"en-NG\": \"en-001\",
    \"en-NR\": \"en-001\",
    \"en-NU\": \"en-001\",
    \"en-NZ\": \"en-001\",
    \"en-PG\": \"en-001\",
    \"en-PH\": \"en-001\",
    \"en-PK\": \"en-001\",
    \"en-PN\": \"en-001\",
    \"en-PW\": \"en-001\",
    \"en-RW\": \"en-001\",
    \"en-SB\": \"en-001\",
    \"en-SC\": \"en-001\",
    \"en-SD\": \"en-001\",
    \"en-SG\": \"en-001\",
    \"en-SH\": \"en-001\",
    \"en-SL\": \"en-001\",
    \"en-SS\": \"en-001\",
    \"en-SX\": \"en-001\",
    \"en-SZ\": \"en-001\",
    \"en-TC\": \"en-001\",
    \"en-TK\": \"en-001\",
    \"en-TO\": \"en-001\",
    \"en-TT\": \"en-001\",
    \"en-TV\": \"en-001\",
    \"en-TZ\": \"en-001\",
    \"en-UG\": \"en-001\",
    \"en-VC\": \"en-001\",
    \"en-VG\": \"en-001\",
    \"en-VU\": \"en-001\",
    \"en-WS\": \"en-001\",
    \"en-ZA\": \"en-001\",
    \"en-ZM\": \"en-001\",
    \"en-ZW\": \"en-001\",
    \"en-AT\": \"en-150\",
    \"en-BE\": \"en-150\",
    \"en-CH\": \"en-150\",
    \"en-DE\": \"en-150\",
    \"en-DK\": \"en-150\",
    \"en-FI\": \"en-150\",
    \"en-NL\": \"en-150\",
    \"en-SE\": \"en-150\",
    \"en-SI\": \"en-150\",
    \"es-AR\": \"es-419\",
    \"es-BO\": \"es-419\",
    \"es-BR\": \"es-419\",
    \"es-BZ\": \"es-419\",
    \"es-CL\": \"es-419\",
    \"es-CO\": \"es-419\",
    \"es-CR\": \"es-419\",
    \"es-CU\": \"es-419\",
    \"es-DO\": \"es-419\",
    \"es-EC\": \"es-419\",
    \"es-GT\": \"es-419\",
    \"es-HN\": \"es-419\",
    \"es-MX\": \"es-419\",
    \"es-NI\": \"es-419\",
    \"es-PA\": \"es-419\",
    \"es-PE\": \"es-419\",
    \"es-PR\": \"es-419\",
    \"es-PY\": \"es-419\",
    \"es-SV\": \"es-419\",
    \"es-US\": \"es-419\",
    \"es-UY\": \"es-419\",
    \"es-VE\": \"es-419\",
    nb: \"no\",
    nn: \"no\",
    \"pt-AO\": \"pt-PT\",
    \"pt-CH\": \"pt-PT\",
    \"pt-CV\": \"pt-PT\",
    \"pt-FR\": \"pt-PT\",
    \"pt-GQ\": \"pt-PT\",
    \"pt-GW\": \"pt-PT\",
    \"pt-LU\": \"pt-PT\",
    \"pt-MO\": \"pt-PT\",
    \"pt-MZ\": \"pt-PT\",
    \"pt-ST\": \"pt-PT\",
    \"pt-TL\": \"pt-PT\",
    \"az-Arab\": \"root\",
    \"az-Cyrl\": \"root\",
    \"blt-Latn\": \"root\",
    \"bm-Nkoo\": \"root\",
    \"bs-Cyrl\": \"root\",
    \"byn-Latn\": \"root\",
    \"cu-Glag\": \"root\",
    \"dje-Arab\": \"root\",
    \"dyo-Arab\": \"root\",
    \"en-Dsrt\": \"root\",
    \"en-Shaw\": \"root\",
    \"ff-Adlm\": \"root\",
    \"ff-Arab\": \"root\",
    \"ha-Arab\": \"root\",
    \"hi-Latn\": \"root\",
    \"iu-Latn\": \"root\",
    \"kk-Arab\": \"root\",
    \"ks-Deva\": \"root\",
    \"ku-Arab\": \"root\",
    \"ky-Arab\": \"root\",
    \"ky-Latn\": \"root\",
    \"ml-Arab\": \"root\",
    \"mn-Mong\": \"root\",
    \"mni-Mtei\": \"root\",
    \"ms-Arab\": \"root\",
    \"pa-Arab\": \"root\",
    \"sat-Deva\": \"root\",
    \"sd-Deva\": \"root\",
    \"sd-Khoj\": \"root\",
    \"sd-Sind\": \"root\",
    \"shi-Latn\": \"root\",
    \"so-Arab\": \"root\",
    \"sr-Latn\": \"root\",
    \"sw-Arab\": \"root\",
    \"tg-Arab\": \"root\",
    \"ug-Cyrl\": \"root\",
    \"uz-Arab\": \"root\",
    \"uz-Cyrl\": \"root\",
    \"vai-Latn\": \"root\",
    \"wo-Arab\": \"root\",
    \"yo-Arab\": \"root\",
    \"yue-Hans\": \"root\",
    \"zh-Hant\": \"root\",
    \"zh-Hant-MO\": \"zh-Hant-HK\"
});


/***/ }),

/***/ \"./node_modules/devextreme/esm/localization/core.js\":
/*!**********************************************************!*\\
  !*** ./node_modules/devextreme/esm/localization/core.js ***!
  \\**********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _core_utils_dependency_injector__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core/utils/dependency_injector */ \"./node_modules/devextreme/esm/core/utils/dependency_injector.js\");
/* harmony import */ var _cldr_data_parent_locales__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./cldr-data/parent_locales */ \"./node_modules/devextreme/esm/localization/cldr-data/parent_locales.js\");
/* harmony import */ var _parentLocale__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./parentLocale */ \"./node_modules/devextreme/esm/localization/parentLocale.js\");
/**
 * DevExtreme (esm/localization/core.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */



var DEFAULT_LOCALE = \"en\";
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_core_utils_dependency_injector__WEBPACK_IMPORTED_MODULE_0__.default)({
    locale: (() => {
        var currentLocale = DEFAULT_LOCALE;
        return locale => {
            if (!locale) {
                return currentLocale
            }
            currentLocale = locale
        }
    })(),
    getValueByClosestLocale: function(getter) {
        var locale = this.locale();
        var value = getter(locale);
        var isRootLocale;
        while (!value && !isRootLocale) {
            locale = (0,_parentLocale__WEBPACK_IMPORTED_MODULE_2__.default)(_cldr_data_parent_locales__WEBPACK_IMPORTED_MODULE_1__.default, locale);
            if (locale) {
                value = getter(locale)
            } else {
                isRootLocale = true
            }
        }
        if (void 0 === value && locale !== DEFAULT_LOCALE) {
            return getter(DEFAULT_LOCALE)
        }
        return value
    }
}));


/***/ }),

/***/ \"./node_modules/devextreme/esm/localization/currency.js\":
/*!**************************************************************!*\\
  !*** ./node_modules/devextreme/esm/localization/currency.js ***!
  \\**************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _core_utils_extend__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core/utils/extend */ \"./node_modules/devextreme/esm/core/utils/extend.js\");
/**
 * DevExtreme (esm/localization/currency.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */

/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
    _formatNumberCore: function(value, format, formatConfig) {
        if (\"currency\" === format) {
            formatConfig.precision = formatConfig.precision || 0;
            var result = this.format(value, (0,_core_utils_extend__WEBPACK_IMPORTED_MODULE_0__.extend)({}, formatConfig, {
                type: \"fixedpoint\"
            }));
            var currencyPart = this.getCurrencySymbol().symbol.replace(/\\\$/g, \"\$\$\$\$\");
            result = result.replace(/^(\\D*)(\\d.*)/, \"\$1\" + currencyPart + \"\$2\");
            return result
        }
        return this.callBase.apply(this, arguments)
    },
    getCurrencySymbol: function() {
        return {
            symbol: \"\$\"
        }
    },
    getOpenXmlCurrencyFormat: function() {
        return \"\$#,##0{0}_);\\\\(\$#,##0{0}\\\\)\"
    }
});


/***/ }),

/***/ \"./node_modules/devextreme/esm/localization/default_messages.js\":
/*!**********************************************************************!*\\
  !*** ./node_modules/devextreme/esm/localization/default_messages.js ***!
  \\**********************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"defaultMessages\": () => (/* binding */ defaultMessages)
/* harmony export */ });
/**
 * DevExtreme (esm/localization/default_messages.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */
var defaultMessages = {
    en: {
        Yes: \"Yes\",
        No: \"No\",
        Cancel: \"Cancel\",
        Clear: \"Clear\",
        Done: \"Done\",
        Loading: \"Loading...\",
        Select: \"Select...\",
        Search: \"Search\",
        Back: \"Back\",
        OK: \"OK\",
        \"dxCollectionWidget-noDataText\": \"No data to display\",
        \"dxDropDownEditor-selectLabel\": \"Select\",
        \"validation-required\": \"Required\",
        \"validation-required-formatted\": \"{0} is required\",
        \"validation-numeric\": \"Value must be a number\",
        \"validation-numeric-formatted\": \"{0} must be a number\",
        \"validation-range\": \"Value is out of range\",
        \"validation-range-formatted\": \"{0} is out of range\",
        \"validation-stringLength\": \"The length of the value is not correct\",
        \"validation-stringLength-formatted\": \"The length of {0} is not correct\",
        \"validation-custom\": \"Value is invalid\",
        \"validation-custom-formatted\": \"{0} is invalid\",
        \"validation-async\": \"Value is invalid\",
        \"validation-async-formatted\": \"{0} is invalid\",
        \"validation-compare\": \"Values do not match\",
        \"validation-compare-formatted\": \"{0} does not match\",
        \"validation-pattern\": \"Value does not match pattern\",
        \"validation-pattern-formatted\": \"{0} does not match pattern\",
        \"validation-email\": \"Email is invalid\",
        \"validation-email-formatted\": \"{0} is invalid\",
        \"validation-mask\": \"Value is invalid\",
        \"dxLookup-searchPlaceholder\": \"Minimum character number: {0}\",
        \"dxList-pullingDownText\": \"Pull down to refresh...\",
        \"dxList-pulledDownText\": \"Release to refresh...\",
        \"dxList-refreshingText\": \"Refreshing...\",
        \"dxList-pageLoadingText\": \"Loading...\",
        \"dxList-nextButtonText\": \"More\",
        \"dxList-selectAll\": \"Select All\",
        \"dxListEditDecorator-delete\": \"Delete\",
        \"dxListEditDecorator-more\": \"More\",
        \"dxScrollView-pullingDownText\": \"Pull down to refresh...\",
        \"dxScrollView-pulledDownText\": \"Release to refresh...\",
        \"dxScrollView-refreshingText\": \"Refreshing...\",
        \"dxScrollView-reachBottomText\": \"Loading...\",
        \"dxDateBox-simulatedDataPickerTitleTime\": \"Select time\",
        \"dxDateBox-simulatedDataPickerTitleDate\": \"Select date\",
        \"dxDateBox-simulatedDataPickerTitleDateTime\": \"Select date and time\",
        \"dxDateBox-validation-datetime\": \"Value must be a date or time\",
        \"dxFileUploader-selectFile\": \"Select file\",
        \"dxFileUploader-dropFile\": \"or Drop file here\",
        \"dxFileUploader-bytes\": \"bytes\",
        \"dxFileUploader-kb\": \"kb\",
        \"dxFileUploader-Mb\": \"Mb\",
        \"dxFileUploader-Gb\": \"Gb\",
        \"dxFileUploader-upload\": \"Upload\",
        \"dxFileUploader-uploaded\": \"Uploaded\",
        \"dxFileUploader-readyToUpload\": \"Ready to upload\",
        \"dxFileUploader-uploadAbortedMessage\": \"Upload cancelled\",
        \"dxFileUploader-uploadFailedMessage\": \"Upload failed\",
        \"dxFileUploader-invalidFileExtension\": \"File type is not allowed\",
        \"dxFileUploader-invalidMaxFileSize\": \"File is too large\",
        \"dxFileUploader-invalidMinFileSize\": \"File is too small\",
        \"dxRangeSlider-ariaFrom\": \"From\",
        \"dxRangeSlider-ariaTill\": \"Till\",
        \"dxSwitch-switchedOnText\": \"ON\",
        \"dxSwitch-switchedOffText\": \"OFF\",
        \"dxForm-optionalMark\": \"optional\",
        \"dxForm-requiredMessage\": \"{0} is required\",
        \"dxNumberBox-invalidValueMessage\": \"Value must be a number\",
        \"dxNumberBox-noDataText\": \"No data\",
        \"dxDataGrid-columnChooserTitle\": \"Column Chooser\",
        \"dxDataGrid-columnChooserEmptyText\": \"Drag a column here to hide it\",
        \"dxDataGrid-groupContinuesMessage\": \"Continues on the next page\",
        \"dxDataGrid-groupContinuedMessage\": \"Continued from the previous page\",
        \"dxDataGrid-groupHeaderText\": \"Group by This Column\",
        \"dxDataGrid-ungroupHeaderText\": \"Ungroup\",
        \"dxDataGrid-ungroupAllText\": \"Ungroup All\",
        \"dxDataGrid-editingEditRow\": \"Edit\",
        \"dxDataGrid-editingSaveRowChanges\": \"Save\",
        \"dxDataGrid-editingCancelRowChanges\": \"Cancel\",
        \"dxDataGrid-editingDeleteRow\": \"Delete\",
        \"dxDataGrid-editingUndeleteRow\": \"Undelete\",
        \"dxDataGrid-editingConfirmDeleteMessage\": \"Are you sure you want to delete this record?\",
        \"dxDataGrid-validationCancelChanges\": \"Cancel changes\",
        \"dxDataGrid-groupPanelEmptyText\": \"Drag a column header here to group by that column\",
        \"dxDataGrid-noDataText\": \"No data\",
        \"dxDataGrid-searchPanelPlaceholder\": \"Search...\",
        \"dxDataGrid-filterRowShowAllText\": \"(All)\",
        \"dxDataGrid-filterRowResetOperationText\": \"Reset\",
        \"dxDataGrid-filterRowOperationEquals\": \"Equals\",
        \"dxDataGrid-filterRowOperationNotEquals\": \"Does not equal\",
        \"dxDataGrid-filterRowOperationLess\": \"Less than\",
        \"dxDataGrid-filterRowOperationLessOrEquals\": \"Less than or equal to\",
        \"dxDataGrid-filterRowOperationGreater\": \"Greater than\",
        \"dxDataGrid-filterRowOperationGreaterOrEquals\": \"Greater than or equal to\",
        \"dxDataGrid-filterRowOperationStartsWith\": \"Starts with\",
        \"dxDataGrid-filterRowOperationContains\": \"Contains\",
        \"dxDataGrid-filterRowOperationNotContains\": \"Does not contain\",
        \"dxDataGrid-filterRowOperationEndsWith\": \"Ends with\",
        \"dxDataGrid-filterRowOperationBetween\": \"Between\",
        \"dxDataGrid-filterRowOperationBetweenStartText\": \"Start\",
        \"dxDataGrid-filterRowOperationBetweenEndText\": \"End\",
        \"dxDataGrid-applyFilterText\": \"Apply filter\",
        \"dxDataGrid-trueText\": \"true\",
        \"dxDataGrid-falseText\": \"false\",
        \"dxDataGrid-sortingAscendingText\": \"Sort Ascending\",
        \"dxDataGrid-sortingDescendingText\": \"Sort Descending\",
        \"dxDataGrid-sortingClearText\": \"Clear Sorting\",
        \"dxDataGrid-editingSaveAllChanges\": \"Save changes\",
        \"dxDataGrid-editingCancelAllChanges\": \"Discard changes\",
        \"dxDataGrid-editingAddRow\": \"Add a row\",
        \"dxDataGrid-summaryMin\": \"Min: {0}\",
        \"dxDataGrid-summaryMinOtherColumn\": \"Min of {1} is {0}\",
        \"dxDataGrid-summaryMax\": \"Max: {0}\",
        \"dxDataGrid-summaryMaxOtherColumn\": \"Max of {1} is {0}\",
        \"dxDataGrid-summaryAvg\": \"Avg: {0}\",
        \"dxDataGrid-summaryAvgOtherColumn\": \"Avg of {1} is {0}\",
        \"dxDataGrid-summarySum\": \"Sum: {0}\",
        \"dxDataGrid-summarySumOtherColumn\": \"Sum of {1} is {0}\",
        \"dxDataGrid-summaryCount\": \"Count: {0}\",
        \"dxDataGrid-columnFixingFix\": \"Fix\",
        \"dxDataGrid-columnFixingUnfix\": \"Unfix\",
        \"dxDataGrid-columnFixingLeftPosition\": \"To the left\",
        \"dxDataGrid-columnFixingRightPosition\": \"To the right\",
        \"dxDataGrid-exportTo\": \"Export\",
        \"dxDataGrid-exportToExcel\": \"Export to Excel file\",
        \"dxDataGrid-exporting\": \"Exporting...\",
        \"dxDataGrid-excelFormat\": \"Excel file\",
        \"dxDataGrid-selectedRows\": \"Selected rows\",
        \"dxDataGrid-exportSelectedRows\": \"Export selected rows\",
        \"dxDataGrid-exportAll\": \"Export all data\",
        \"dxDataGrid-headerFilterEmptyValue\": \"(Blanks)\",
        \"dxDataGrid-headerFilterOK\": \"OK\",
        \"dxDataGrid-headerFilterCancel\": \"Cancel\",
        \"dxDataGrid-ariaAdaptiveCollapse\": \"Hide additional data\",
        \"dxDataGrid-ariaAdaptiveExpand\": \"Display additional data\",
        \"dxDataGrid-ariaColumn\": \"Column\",
        \"dxDataGrid-ariaValue\": \"Value\",
        \"dxDataGrid-ariaFilterCell\": \"Filter cell\",
        \"dxDataGrid-ariaCollapse\": \"Collapse\",
        \"dxDataGrid-ariaExpand\": \"Expand\",
        \"dxDataGrid-ariaDataGrid\": \"Data grid\",
        \"dxDataGrid-ariaSearchInGrid\": \"Search in the data grid\",
        \"dxDataGrid-ariaSelectAll\": \"Select all\",
        \"dxDataGrid-ariaSelectRow\": \"Select row\",
        \"dxDataGrid-ariaToolbar\": \"Data grid toolbar\",
        \"dxDataGrid-filterBuilderPopupTitle\": \"Filter Builder\",
        \"dxDataGrid-filterPanelCreateFilter\": \"Create Filter\",
        \"dxDataGrid-filterPanelClearFilter\": \"Clear\",
        \"dxDataGrid-filterPanelFilterEnabledHint\": \"Enable the filter\",
        \"dxTreeList-ariaTreeList\": \"Tree list\",
        \"dxTreeList-ariaSearchInGrid\": \"Search in the tree list\",
        \"dxTreeList-ariaToolbar\": \"Tree list toolbar\",
        \"dxTreeList-editingAddRowToNode\": \"Add\",
        \"dxPager-infoText\": \"Page {0} of {1} ({2} items)\",
        \"dxPager-pagesCountText\": \"of\",
        \"dxPager-pageSizesAllText\": \"All\",
        \"dxPivotGrid-grandTotal\": \"Grand Total\",
        \"dxPivotGrid-total\": \"{0} Total\",
        \"dxPivotGrid-fieldChooserTitle\": \"Field Chooser\",
        \"dxPivotGrid-showFieldChooser\": \"Show Field Chooser\",
        \"dxPivotGrid-expandAll\": \"Expand All\",
        \"dxPivotGrid-collapseAll\": \"Collapse All\",
        \"dxPivotGrid-sortColumnBySummary\": 'Sort \"{0}\" by This Column',
        \"dxPivotGrid-sortRowBySummary\": 'Sort \"{0}\" by This Row',
        \"dxPivotGrid-removeAllSorting\": \"Remove All Sorting\",
        \"dxPivotGrid-dataNotAvailable\": \"N/A\",
        \"dxPivotGrid-rowFields\": \"Row Fields\",
        \"dxPivotGrid-columnFields\": \"Column Fields\",
        \"dxPivotGrid-dataFields\": \"Data Fields\",
        \"dxPivotGrid-filterFields\": \"Filter Fields\",
        \"dxPivotGrid-allFields\": \"All Fields\",
        \"dxPivotGrid-columnFieldArea\": \"Drop Column Fields Here\",
        \"dxPivotGrid-dataFieldArea\": \"Drop Data Fields Here\",
        \"dxPivotGrid-rowFieldArea\": \"Drop Row Fields Here\",
        \"dxPivotGrid-filterFieldArea\": \"Drop Filter Fields Here\",
        \"dxScheduler-editorLabelTitle\": \"Subject\",
        \"dxScheduler-editorLabelStartDate\": \"Start Date\",
        \"dxScheduler-editorLabelEndDate\": \"End Date\",
        \"dxScheduler-editorLabelDescription\": \"Description\",
        \"dxScheduler-editorLabelRecurrence\": \"Repeat\",
        \"dxScheduler-openAppointment\": \"Open appointment\",
        \"dxScheduler-recurrenceNever\": \"Never\",
        \"dxScheduler-recurrenceMinutely\": \"Every minute\",
        \"dxScheduler-recurrenceHourly\": \"Hourly\",
        \"dxScheduler-recurrenceDaily\": \"Daily\",
        \"dxScheduler-recurrenceWeekly\": \"Weekly\",
        \"dxScheduler-recurrenceMonthly\": \"Monthly\",
        \"dxScheduler-recurrenceYearly\": \"Yearly\",
        \"dxScheduler-recurrenceRepeatEvery\": \"Repeat Every\",
        \"dxScheduler-recurrenceRepeatOn\": \"Repeat On\",
        \"dxScheduler-recurrenceEnd\": \"End repeat\",
        \"dxScheduler-recurrenceAfter\": \"After\",
        \"dxScheduler-recurrenceOn\": \"On\",
        \"dxScheduler-recurrenceRepeatMinutely\": \"minute(s)\",
        \"dxScheduler-recurrenceRepeatHourly\": \"hour(s)\",
        \"dxScheduler-recurrenceRepeatDaily\": \"day(s)\",
        \"dxScheduler-recurrenceRepeatWeekly\": \"week(s)\",
        \"dxScheduler-recurrenceRepeatMonthly\": \"month(s)\",
        \"dxScheduler-recurrenceRepeatYearly\": \"year(s)\",
        \"dxScheduler-switcherDay\": \"Day\",
        \"dxScheduler-switcherWeek\": \"Week\",
        \"dxScheduler-switcherWorkWeek\": \"Work Week\",
        \"dxScheduler-switcherMonth\": \"Month\",
        \"dxScheduler-switcherAgenda\": \"Agenda\",
        \"dxScheduler-switcherTimelineDay\": \"Timeline Day\",
        \"dxScheduler-switcherTimelineWeek\": \"Timeline Week\",
        \"dxScheduler-switcherTimelineWorkWeek\": \"Timeline Work Week\",
        \"dxScheduler-switcherTimelineMonth\": \"Timeline Month\",
        \"dxScheduler-recurrenceRepeatOnDate\": \"on date\",
        \"dxScheduler-recurrenceRepeatCount\": \"occurrence(s)\",
        \"dxScheduler-allDay\": \"All day\",
        \"dxScheduler-confirmRecurrenceEditMessage\": \"Do you want to edit only this appointment or the whole series?\",
        \"dxScheduler-confirmRecurrenceDeleteMessage\": \"Do you want to delete only this appointment or the whole series?\",
        \"dxScheduler-confirmRecurrenceEditSeries\": \"Edit series\",
        \"dxScheduler-confirmRecurrenceDeleteSeries\": \"Delete series\",
        \"dxScheduler-confirmRecurrenceEditOccurrence\": \"Edit appointment\",
        \"dxScheduler-confirmRecurrenceDeleteOccurrence\": \"Delete appointment\",
        \"dxScheduler-noTimezoneTitle\": \"No timezone\",
        \"dxScheduler-moreAppointments\": \"{0} more\",
        \"dxCalendar-todayButtonText\": \"Today\",
        \"dxCalendar-ariaWidgetName\": \"Calendar\",
        \"dxColorView-ariaRed\": \"Red\",
        \"dxColorView-ariaGreen\": \"Green\",
        \"dxColorView-ariaBlue\": \"Blue\",
        \"dxColorView-ariaAlpha\": \"Transparency\",
        \"dxColorView-ariaHex\": \"Color code\",
        \"dxTagBox-selected\": \"{0} selected\",
        \"dxTagBox-allSelected\": \"All selected ({0})\",
        \"dxTagBox-moreSelected\": \"{0} more\",
        \"vizExport-printingButtonText\": \"Print\",
        \"vizExport-titleMenuText\": \"Exporting/Printing\",
        \"vizExport-exportButtonText\": \"{0} file\",
        \"dxFilterBuilder-and\": \"And\",
        \"dxFilterBuilder-or\": \"Or\",
        \"dxFilterBuilder-notAnd\": \"Not And\",
        \"dxFilterBuilder-notOr\": \"Not Or\",
        \"dxFilterBuilder-addCondition\": \"Add Condition\",
        \"dxFilterBuilder-addGroup\": \"Add Group\",
        \"dxFilterBuilder-enterValueText\": \"<enter a value>\",
        \"dxFilterBuilder-filterOperationEquals\": \"Equals\",
        \"dxFilterBuilder-filterOperationNotEquals\": \"Does not equal\",
        \"dxFilterBuilder-filterOperationLess\": \"Is less than\",
        \"dxFilterBuilder-filterOperationLessOrEquals\": \"Is less than or equal to\",
        \"dxFilterBuilder-filterOperationGreater\": \"Is greater than\",
        \"dxFilterBuilder-filterOperationGreaterOrEquals\": \"Is greater than or equal to\",
        \"dxFilterBuilder-filterOperationStartsWith\": \"Starts with\",
        \"dxFilterBuilder-filterOperationContains\": \"Contains\",
        \"dxFilterBuilder-filterOperationNotContains\": \"Does not contain\",
        \"dxFilterBuilder-filterOperationEndsWith\": \"Ends with\",
        \"dxFilterBuilder-filterOperationIsBlank\": \"Is blank\",
        \"dxFilterBuilder-filterOperationIsNotBlank\": \"Is not blank\",
        \"dxFilterBuilder-filterOperationBetween\": \"Is between\",
        \"dxFilterBuilder-filterOperationAnyOf\": \"Is any of\",
        \"dxFilterBuilder-filterOperationNoneOf\": \"Is none of\",
        \"dxHtmlEditor-dialogColorCaption\": \"Change Font Color\",
        \"dxHtmlEditor-dialogBackgroundCaption\": \"Change Background Color\",
        \"dxHtmlEditor-dialogLinkCaption\": \"Add Link\",
        \"dxHtmlEditor-dialogLinkUrlField\": \"URL\",
        \"dxHtmlEditor-dialogLinkTextField\": \"Text\",
        \"dxHtmlEditor-dialogLinkTargetField\": \"Open link in new window\",
        \"dxHtmlEditor-dialogImageCaption\": \"Add Image\",
        \"dxHtmlEditor-dialogImageUrlField\": \"URL\",
        \"dxHtmlEditor-dialogImageAltField\": \"Alternate text\",
        \"dxHtmlEditor-dialogImageWidthField\": \"Width (px)\",
        \"dxHtmlEditor-dialogImageHeightField\": \"Height (px)\",
        \"dxHtmlEditor-dialogInsertTableRowsField\": \"Rows\",
        \"dxHtmlEditor-dialogInsertTableColumnsField\": \"Columns\",
        \"dxHtmlEditor-dialogInsertTableCaption\": \"Insert Table\",
        \"dxHtmlEditor-heading\": \"Heading\",
        \"dxHtmlEditor-normalText\": \"Normal text\",
        \"dxHtmlEditor-background\": \"Background Color\",
        \"dxHtmlEditor-bold\": \"Bold\",
        \"dxHtmlEditor-color\": \"Font Color\",
        \"dxHtmlEditor-font\": \"Font\",
        \"dxHtmlEditor-italic\": \"Italic\",
        \"dxHtmlEditor-link\": \"Add Link\",
        \"dxHtmlEditor-image\": \"Add Image\",
        \"dxHtmlEditor-size\": \"Size\",
        \"dxHtmlEditor-strike\": \"Strikethrough\",
        \"dxHtmlEditor-subscript\": \"Subscript\",
        \"dxHtmlEditor-superscript\": \"Superscript\",
        \"dxHtmlEditor-underline\": \"Underline\",
        \"dxHtmlEditor-blockquote\": \"Blockquote\",
        \"dxHtmlEditor-header\": \"Header\",
        \"dxHtmlEditor-increaseIndent\": \"Increase Indent\",
        \"dxHtmlEditor-decreaseIndent\": \"Decrease Indent\",
        \"dxHtmlEditor-orderedList\": \"Ordered List\",
        \"dxHtmlEditor-bulletList\": \"Bullet List\",
        \"dxHtmlEditor-alignLeft\": \"Align Left\",
        \"dxHtmlEditor-alignCenter\": \"Align Center\",
        \"dxHtmlEditor-alignRight\": \"Align Right\",
        \"dxHtmlEditor-alignJustify\": \"Align Justify\",
        \"dxHtmlEditor-codeBlock\": \"Code Block\",
        \"dxHtmlEditor-variable\": \"Add Variable\",
        \"dxHtmlEditor-undo\": \"Undo\",
        \"dxHtmlEditor-redo\": \"Redo\",
        \"dxHtmlEditor-clear\": \"Clear Formatting\",
        \"dxHtmlEditor-insertTable\": \"Insert Table\",
        \"dxHtmlEditor-insertRowAbove\": \"Insert Row Above\",
        \"dxHtmlEditor-insertRowBelow\": \"Insert Row Below\",
        \"dxHtmlEditor-insertColumnLeft\": \"Insert Column Left\",
        \"dxHtmlEditor-insertColumnRight\": \"Insert Column Right\",
        \"dxHtmlEditor-deleteColumn\": \"Delete Column\",
        \"dxHtmlEditor-deleteRow\": \"Delete Row\",
        \"dxHtmlEditor-deleteTable\": \"Delete Table\",
        \"dxHtmlEditor-list\": \"List\",
        \"dxHtmlEditor-ordered\": \"Ordered\",
        \"dxHtmlEditor-bullet\": \"Bullet\",
        \"dxHtmlEditor-align\": \"Align\",
        \"dxHtmlEditor-center\": \"Center\",
        \"dxHtmlEditor-left\": \"Left\",
        \"dxHtmlEditor-right\": \"Right\",
        \"dxHtmlEditor-indent\": \"Indent\",
        \"dxHtmlEditor-justify\": \"Justify\",
        \"dxFileManager-newDirectoryName\": \"Untitled directory\",
        \"dxFileManager-rootDirectoryName\": \"Files\",
        \"dxFileManager-errorNoAccess\": \"Access Denied. Operation could not be completed.\",
        \"dxFileManager-errorDirectoryExistsFormat\": \"Directory '{0}' already exists.\",
        \"dxFileManager-errorFileExistsFormat\": \"File '{0}' already exists.\",
        \"dxFileManager-errorFileNotFoundFormat\": \"File '{0}' not found.\",
        \"dxFileManager-errorDirectoryNotFoundFormat\": \"Directory '{0}' not found.\",
        \"dxFileManager-errorWrongFileExtension\": \"File extension is not allowed.\",
        \"dxFileManager-errorMaxFileSizeExceeded\": \"File size exceeds the maximum allowed size.\",
        \"dxFileManager-errorInvalidSymbols\": \"This name contains invalid characters.\",
        \"dxFileManager-errorDefault\": \"Unspecified error.\",
        \"dxFileManager-errorDirectoryOpenFailed\": \"The directory cannot be opened\",
        \"dxFileManager-commandCreate\": \"New directory\",
        \"dxFileManager-commandRename\": \"Rename\",
        \"dxFileManager-commandMove\": \"Move to\",
        \"dxFileManager-commandCopy\": \"Copy to\",
        \"dxFileManager-commandDelete\": \"Delete\",
        \"dxFileManager-commandDownload\": \"Download\",
        \"dxFileManager-commandUpload\": \"Upload files\",
        \"dxFileManager-commandRefresh\": \"Refresh\",
        \"dxFileManager-commandThumbnails\": \"Thumbnails View\",
        \"dxFileManager-commandDetails\": \"Details View\",
        \"dxFileManager-commandClearSelection\": \"Clear selection\",
        \"dxFileManager-commandShowNavPane\": \"Toggle navigation pane\",
        \"dxFileManager-dialogDirectoryChooserMoveTitle\": \"Move to\",
        \"dxFileManager-dialogDirectoryChooserMoveButtonText\": \"Move\",
        \"dxFileManager-dialogDirectoryChooserCopyTitle\": \"Copy to\",
        \"dxFileManager-dialogDirectoryChooserCopyButtonText\": \"Copy\",
        \"dxFileManager-dialogRenameItemTitle\": \"Rename\",
        \"dxFileManager-dialogRenameItemButtonText\": \"Save\",
        \"dxFileManager-dialogCreateDirectoryTitle\": \"New directory\",
        \"dxFileManager-dialogCreateDirectoryButtonText\": \"Create\",
        \"dxFileManager-dialogDeleteItemTitle\": \"Delete\",
        \"dxFileManager-dialogDeleteItemButtonText\": \"Delete\",
        \"dxFileManager-dialogDeleteItemSingleItemConfirmation\": \"Are you sure you want to delete {0}?\",
        \"dxFileManager-dialogDeleteItemMultipleItemsConfirmation\": \"Are you sure you want to delete {0} items?\",
        \"dxFileManager-dialogButtonCancel\": \"Cancel\",
        \"dxFileManager-editingCreateSingleItemProcessingMessage\": \"Creating a directory inside {0}\",
        \"dxFileManager-editingCreateSingleItemSuccessMessage\": \"Created a directory inside {0}\",
        \"dxFileManager-editingCreateSingleItemErrorMessage\": \"Directory was not created\",
        \"dxFileManager-editingCreateCommonErrorMessage\": \"Directory was not created\",
        \"dxFileManager-editingRenameSingleItemProcessingMessage\": \"Renaming an item inside {0}\",
        \"dxFileManager-editingRenameSingleItemSuccessMessage\": \"Renamed an item inside {0}\",
        \"dxFileManager-editingRenameSingleItemErrorMessage\": \"Item was not renamed\",
        \"dxFileManager-editingRenameCommonErrorMessage\": \"Item was not renamed\",
        \"dxFileManager-editingDeleteSingleItemProcessingMessage\": \"Deleting an item from {0}\",
        \"dxFileManager-editingDeleteMultipleItemsProcessingMessage\": \"Deleting {0} items from {1}\",
        \"dxFileManager-editingDeleteSingleItemSuccessMessage\": \"Deleted an item from {0}\",
        \"dxFileManager-editingDeleteMultipleItemsSuccessMessage\": \"Deleted {0} items from {1}\",
        \"dxFileManager-editingDeleteSingleItemErrorMessage\": \"Item was not deleted\",
        \"dxFileManager-editingDeleteMultipleItemsErrorMessage\": \"{0} items were not deleted\",
        \"dxFileManager-editingDeleteCommonErrorMessage\": \"Some items were not deleted\",
        \"dxFileManager-editingMoveSingleItemProcessingMessage\": \"Moving an item to {0}\",
        \"dxFileManager-editingMoveMultipleItemsProcessingMessage\": \"Moving {0} items to {1}\",
        \"dxFileManager-editingMoveSingleItemSuccessMessage\": \"Moved an item to {0}\",
        \"dxFileManager-editingMoveMultipleItemsSuccessMessage\": \"Moved {0} items to {1}\",
        \"dxFileManager-editingMoveSingleItemErrorMessage\": \"Item was not moved\",
        \"dxFileManager-editingMoveMultipleItemsErrorMessage\": \"{0} items were not moved\",
        \"dxFileManager-editingMoveCommonErrorMessage\": \"Some items were not moved\",
        \"dxFileManager-editingCopySingleItemProcessingMessage\": \"Copying an item to {0}\",
        \"dxFileManager-editingCopyMultipleItemsProcessingMessage\": \"Copying {0} items to {1}\",
        \"dxFileManager-editingCopySingleItemSuccessMessage\": \"Copied an item to {0}\",
        \"dxFileManager-editingCopyMultipleItemsSuccessMessage\": \"Copied {0} items to {1}\",
        \"dxFileManager-editingCopySingleItemErrorMessage\": \"Item was not copied\",
        \"dxFileManager-editingCopyMultipleItemsErrorMessage\": \"{0} items were not copied\",
        \"dxFileManager-editingCopyCommonErrorMessage\": \"Some items were not copied\",
        \"dxFileManager-editingUploadSingleItemProcessingMessage\": \"Uploading an item to {0}\",
        \"dxFileManager-editingUploadMultipleItemsProcessingMessage\": \"Uploading {0} items to {1}\",
        \"dxFileManager-editingUploadSingleItemSuccessMessage\": \"Uploaded an item to {0}\",
        \"dxFileManager-editingUploadMultipleItemsSuccessMessage\": \"Uploaded {0} items to {1}\",
        \"dxFileManager-editingUploadSingleItemErrorMessage\": \"Item was not uploaded\",
        \"dxFileManager-editingUploadMultipleItemsErrorMessage\": \"{0} items were not uploaded\",
        \"dxFileManager-editingUploadCanceledMessage\": \"Canceled\",
        \"dxFileManager-listDetailsColumnCaptionName\": \"Name\",
        \"dxFileManager-listDetailsColumnCaptionDateModified\": \"Date Modified\",
        \"dxFileManager-listDetailsColumnCaptionFileSize\": \"File Size\",
        \"dxFileManager-listThumbnailsTooltipTextSize\": \"Size\",
        \"dxFileManager-listThumbnailsTooltipTextDateModified\": \"Date Modified\",
        \"dxFileManager-notificationProgressPanelTitle\": \"Progress\",
        \"dxFileManager-notificationProgressPanelEmptyListText\": \"No operations\",
        \"dxFileManager-notificationProgressPanelOperationCanceled\": \"Canceled\",
        \"dxDiagram-categoryGeneral\": \"General\",
        \"dxDiagram-categoryFlowchart\": \"Flowchart\",
        \"dxDiagram-categoryOrgChart\": \"Org Chart\",
        \"dxDiagram-categoryContainers\": \"Containers\",
        \"dxDiagram-categoryCustom\": \"Custom\",
        \"dxDiagram-commandExportToSvg\": \"Export to SVG\",
        \"dxDiagram-commandExportToPng\": \"Export to PNG\",
        \"dxDiagram-commandExportToJpg\": \"Export to JPEG\",
        \"dxDiagram-commandUndo\": \"Undo\",
        \"dxDiagram-commandRedo\": \"Redo\",
        \"dxDiagram-commandFontName\": \"Font Name\",
        \"dxDiagram-commandFontSize\": \"Font Size\",
        \"dxDiagram-commandBold\": \"Bold\",
        \"dxDiagram-commandItalic\": \"Italic\",
        \"dxDiagram-commandUnderline\": \"Underline\",
        \"dxDiagram-commandTextColor\": \"Font Color\",
        \"dxDiagram-commandLineColor\": \"Line Color\",
        \"dxDiagram-commandLineWidth\": \"Line Width\",
        \"dxDiagram-commandLineStyle\": \"Line Style\",
        \"dxDiagram-commandLineStyleSolid\": \"Solid\",
        \"dxDiagram-commandLineStyleDotted\": \"Dotted\",
        \"dxDiagram-commandLineStyleDashed\": \"Dashed\",
        \"dxDiagram-commandFillColor\": \"Fill Color\",
        \"dxDiagram-commandAlignLeft\": \"Align Left\",
        \"dxDiagram-commandAlignCenter\": \"Align Center\",
        \"dxDiagram-commandAlignRight\": \"Align Right\",
        \"dxDiagram-commandConnectorLineType\": \"Connector Line Type\",
        \"dxDiagram-commandConnectorLineStraight\": \"Straight\",
        \"dxDiagram-commandConnectorLineOrthogonal\": \"Orthogonal\",
        \"dxDiagram-commandConnectorLineStart\": \"Connector Line Start\",
        \"dxDiagram-commandConnectorLineEnd\": \"Connector Line End\",
        \"dxDiagram-commandConnectorLineNone\": \"None\",
        \"dxDiagram-commandConnectorLineArrow\": \"Arrow\",
        \"dxDiagram-commandFullscreen\": \"Full Screen\",
        \"dxDiagram-commandUnits\": \"Units\",
        \"dxDiagram-commandPageSize\": \"Page Size\",
        \"dxDiagram-commandPageOrientation\": \"Page Orientation\",
        \"dxDiagram-commandPageOrientationLandscape\": \"Landscape\",
        \"dxDiagram-commandPageOrientationPortrait\": \"Portrait\",
        \"dxDiagram-commandPageColor\": \"Page Color\",
        \"dxDiagram-commandShowGrid\": \"Show Grid\",
        \"dxDiagram-commandSnapToGrid\": \"Snap to Grid\",
        \"dxDiagram-commandGridSize\": \"Grid Size\",
        \"dxDiagram-commandZoomLevel\": \"Zoom Level\",
        \"dxDiagram-commandAutoZoom\": \"Auto Zoom\",
        \"dxDiagram-commandFitToContent\": \"Fit to Content\",
        \"dxDiagram-commandFitToWidth\": \"Fit to Width\",
        \"dxDiagram-commandAutoZoomByContent\": \"Auto Zoom by Content\",
        \"dxDiagram-commandAutoZoomByWidth\": \"Auto Zoom by Width\",
        \"dxDiagram-commandSimpleView\": \"Simple View\",
        \"dxDiagram-commandCut\": \"Cut\",
        \"dxDiagram-commandCopy\": \"Copy\",
        \"dxDiagram-commandPaste\": \"Paste\",
        \"dxDiagram-commandSelectAll\": \"Select All\",
        \"dxDiagram-commandDelete\": \"Delete\",
        \"dxDiagram-commandBringToFront\": \"Bring to Front\",
        \"dxDiagram-commandSendToBack\": \"Send to Back\",
        \"dxDiagram-commandLock\": \"Lock\",
        \"dxDiagram-commandUnlock\": \"Unlock\",
        \"dxDiagram-commandInsertShapeImage\": \"Insert Image...\",
        \"dxDiagram-commandEditShapeImage\": \"Change Image...\",
        \"dxDiagram-commandDeleteShapeImage\": \"Delete Image\",
        \"dxDiagram-commandLayoutLeftToRight\": \"Left-to-right\",
        \"dxDiagram-commandLayoutRightToLeft\": \"Right-to-left\",
        \"dxDiagram-commandLayoutTopToBottom\": \"Top-to-bottom\",
        \"dxDiagram-commandLayoutBottomToTop\": \"Bottom-to-top\",
        \"dxDiagram-unitIn\": \"in\",
        \"dxDiagram-unitCm\": \"cm\",
        \"dxDiagram-unitPx\": \"px\",
        \"dxDiagram-dialogButtonOK\": \"OK\",
        \"dxDiagram-dialogButtonCancel\": \"Cancel\",
        \"dxDiagram-dialogInsertShapeImageTitle\": \"Insert Image\",
        \"dxDiagram-dialogEditShapeImageTitle\": \"Change Image\",
        \"dxDiagram-dialogEditShapeImageSelectButton\": \"Select image\",
        \"dxDiagram-dialogEditShapeImageLabelText\": \"or drop file here\",
        \"dxDiagram-uiExport\": \"Export\",
        \"dxDiagram-uiProperties\": \"Properties\",
        \"dxDiagram-uiSettings\": \"Settings\",
        \"dxDiagram-uiShowToolbox\": \"Show Toolbox\",
        \"dxDiagram-uiSearch\": \"Search\",
        \"dxDiagram-uiStyle\": \"Style\",
        \"dxDiagram-uiLayout\": \"Layout\",
        \"dxDiagram-uiLayoutTree\": \"Tree\",
        \"dxDiagram-uiLayoutLayered\": \"Layered\",
        \"dxDiagram-uiDiagram\": \"Diagram\",
        \"dxDiagram-uiText\": \"Text\",
        \"dxDiagram-uiObject\": \"Object\",
        \"dxDiagram-uiConnector\": \"Connector\",
        \"dxDiagram-uiPage\": \"Page\",
        \"dxDiagram-shapeText\": \"Text\",
        \"dxDiagram-shapeRectangle\": \"Rectangle\",
        \"dxDiagram-shapeEllipse\": \"Ellipse\",
        \"dxDiagram-shapeCross\": \"Cross\",
        \"dxDiagram-shapeTriangle\": \"Triangle\",
        \"dxDiagram-shapeDiamond\": \"Diamond\",
        \"dxDiagram-shapeHeart\": \"Heart\",
        \"dxDiagram-shapePentagon\": \"Pentagon\",
        \"dxDiagram-shapeHexagon\": \"Hexagon\",
        \"dxDiagram-shapeOctagon\": \"Octagon\",
        \"dxDiagram-shapeStar\": \"Star\",
        \"dxDiagram-shapeArrowLeft\": \"Left Arrow\",
        \"dxDiagram-shapeArrowUp\": \"Up Arrow\",
        \"dxDiagram-shapeArrowRight\": \"Right Arrow\",
        \"dxDiagram-shapeArrowDown\": \"Down Arrow\",
        \"dxDiagram-shapeArrowUpDown\": \"Up Down Arrow\",
        \"dxDiagram-shapeArrowLeftRight\": \"Left Right Arrow\",
        \"dxDiagram-shapeProcess\": \"Process\",
        \"dxDiagram-shapeDecision\": \"Decision\",
        \"dxDiagram-shapeTerminator\": \"Terminator\",
        \"dxDiagram-shapePredefinedProcess\": \"Predefined Process\",
        \"dxDiagram-shapeDocument\": \"Document\",
        \"dxDiagram-shapeMultipleDocuments\": \"Multiple Documents\",
        \"dxDiagram-shapeManualInput\": \"Manual Input\",
        \"dxDiagram-shapePreparation\": \"Preparation\",
        \"dxDiagram-shapeData\": \"Data\",
        \"dxDiagram-shapeDatabase\": \"Database\",
        \"dxDiagram-shapeHardDisk\": \"Hard Disk\",
        \"dxDiagram-shapeInternalStorage\": \"Internal Storage\",
        \"dxDiagram-shapePaperTape\": \"Paper Tape\",
        \"dxDiagram-shapeManualOperation\": \"Manual Operation\",
        \"dxDiagram-shapeDelay\": \"Delay\",
        \"dxDiagram-shapeStoredData\": \"Stored Data\",
        \"dxDiagram-shapeDisplay\": \"Display\",
        \"dxDiagram-shapeMerge\": \"Merge\",
        \"dxDiagram-shapeConnector\": \"Connector\",
        \"dxDiagram-shapeOr\": \"Or\",
        \"dxDiagram-shapeSummingJunction\": \"Summing Junction\",
        \"dxDiagram-shapeContainerDefaultText\": \"Container\",
        \"dxDiagram-shapeVerticalContainer\": \"Vertical Container\",
        \"dxDiagram-shapeHorizontalContainer\": \"Horizontal Container\",
        \"dxDiagram-shapeCardDefaultText\": \"Person's Name\",
        \"dxDiagram-shapeCardWithImageOnLeft\": \"Card with Image on the Left\",
        \"dxDiagram-shapeCardWithImageOnTop\": \"Card with Image on the Top\",
        \"dxDiagram-shapeCardWithImageOnRight\": \"Card with Image on the Right\",
        \"dxGantt-dialogTitle\": \"Title\",
        \"dxGantt-dialogStartTitle\": \"Start\",
        \"dxGantt-dialogEndTitle\": \"End\",
        \"dxGantt-dialogProgressTitle\": \"Progress\",
        \"dxGantt-dialogResourcesTitle\": \"Resources\",
        \"dxGantt-dialogResourceManagerTitle\": \"Resource Manager\",
        \"dxGantt-dialogTaskDetailsTitle\": \"Task Details\",
        \"dxGantt-dialogEditResourceListHint\": \"Edit Resource List\",
        \"dxGantt-dialogEditNoResources\": \"No resources\",
        \"dxGantt-dialogButtonAdd\": \"Add\",
        \"dxGantt-contextMenuNewTask\": \"New Task\",
        \"dxGantt-contextMenuNewSubtask\": \"New Subtask\",
        \"dxGantt-contextMenuDeleteTask\": \"Delete Task\",
        \"dxGantt-contextMenuDeleteDependency\": \"Delete Dependency\",
        \"dxGantt-dialogTaskDeleteConfirmation\": \"Deleting a task also deletes all its dependencies and subtasks. Are you sure you want to delete this task?\",
        \"dxGantt-dialogDependencyDeleteConfirmation\": \"Are you sure you want to delete the dependency from the task?\",
        \"dxGantt-dialogResourcesDeleteConfirmation\": \"Deleting a resource also deletes it from tasks to which this resource is assigned. Are you sure you want to delete these resources? Resources: {0}\",
        \"dxGantt-dialogConstraintCriticalViolationMessage\": \"The task you are attempting to move is linked to a second task by a dependency relation. This change would conflict with dependency rules. How would you like to proceed?\",
        \"dxGantt-dialogConstraintViolationMessage\": \"The task you are attempting to move is linked to a second task by a dependency relation. How would you like to proceed?\",
        \"dxGantt-dialogCancelOperationMessage\": \"Cancel the operation\",
        \"dxGantt-dialogDeleteDependencyMessage\": \"Delete the dependency\",
        \"dxGantt-dialogMoveTaskAndKeepDependencyMessage\": \"Move the task and keep the dependency\",
        \"dxGantt-undo\": \"Undo\",
        \"dxGantt-redo\": \"Redo\",
        \"dxGantt-expandAll\": \"Expand All\",
        \"dxGantt-collapseAll\": \"Collapse All\",
        \"dxGantt-addNewTask\": \"Add New Task\",
        \"dxGantt-deleteSelectedTask\": \"Delete Selected Task\",
        \"dxGantt-zoomIn\": \"Zoom In\",
        \"dxGantt-zoomOut\": \"Zoom Out\",
        \"dxGantt-fullScreen\": \"Full Screen\",
        \"dxGantt-quarter\": \"Q{0}\"
    }
};


/***/ }),

/***/ \"./node_modules/devextreme/esm/localization/intl/number.js\":
/*!*****************************************************************!*\\
  !*** ./node_modules/devextreme/esm/localization/intl/number.js ***!
  \\*****************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _core_config__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../core/config */ \"./node_modules/devextreme/esm/core/config.js\");
/* harmony import */ var _core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../core */ \"./node_modules/devextreme/esm/localization/core.js\");
/* harmony import */ var _open_xml_currency_format__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../open_xml_currency_format */ \"./node_modules/devextreme/esm/localization/open_xml_currency_format.js\");
/* harmony import */ var _cldr_data_accounting_formats__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../cldr-data/accounting_formats */ \"./node_modules/devextreme/esm/localization/cldr-data/accounting_formats.js\");
/**
 * DevExtreme (esm/localization/intl/number.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */




var detectCurrencySymbolRegex = /([^\\s0]+)?(\\s*)0*[.,]*0*(\\s*)([^\\s0]+)?/;
var formattersCache = {};
var getFormatter = format => {
    var key = _core__WEBPACK_IMPORTED_MODULE_1__.default.locale() + \"/\" + JSON.stringify(format);
    if (!formattersCache[key]) {
        formattersCache[key] = new Intl.NumberFormat(_core__WEBPACK_IMPORTED_MODULE_1__.default.locale(), format).format
    }
    return formattersCache[key]
};
var getCurrencyFormatter = currency => new Intl.NumberFormat(_core__WEBPACK_IMPORTED_MODULE_1__.default.locale(), {
    style: \"currency\",
    currency: currency
});
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
    engine: function() {
        return \"intl\"
    },
    _formatNumberCore: function(value, format, formatConfig) {
        if (\"exponential\" === format) {
            return this.callBase.apply(this, arguments)
        }
        return getFormatter(this._normalizeFormatConfig(format, formatConfig, value))(value)
    },
    _normalizeFormatConfig: function(format, formatConfig, value) {
        var config;
        if (\"decimal\" === format) {
            config = {
                minimumIntegerDigits: formatConfig.precision || void 0,
                useGrouping: false,
                maximumFractionDigits: String(value).length,
                round: value < 0 ? \"ceil\" : \"floor\"
            }
        } else {
            config = this._getPrecisionConfig(formatConfig.precision)
        }
        if (\"percent\" === format) {
            config.style = \"percent\"
        } else if (\"currency\" === format) {
            config.style = \"currency\";
            config.currency = formatConfig.currency || (0,_core_config__WEBPACK_IMPORTED_MODULE_0__.default)().defaultCurrency
        }
        return config
    },
    _getPrecisionConfig: function(precision) {
        var config;
        if (null === precision) {
            config = {
                minimumFractionDigits: 0,
                maximumFractionDigits: 20
            }
        } else {
            config = {
                minimumFractionDigits: precision || 0,
                maximumFractionDigits: precision || 0
            }
        }
        return config
    },
    format: function(value, _format) {
        if (\"number\" !== typeof value) {
            return value
        }
        _format = this._normalizeFormat(_format);
        if (\"default\" === _format.currency) {
            _format.currency = (0,_core_config__WEBPACK_IMPORTED_MODULE_0__.default)().defaultCurrency
        }
        if (!_format || \"function\" !== typeof _format && !_format.type && !_format.formatter) {
            return getFormatter(_format)(value)
        }
        return this.callBase.apply(this, arguments)
    },
    _getCurrencySymbolInfo: function(currency) {
        var formatter = getCurrencyFormatter(currency);
        return this._extractCurrencySymbolInfo(formatter.format(0))
    },
    _extractCurrencySymbolInfo: function(currencyValueString) {
        var match = detectCurrencySymbolRegex.exec(currencyValueString) || [];
        var position = match[1] ? \"before\" : \"after\";
        var symbol = match[1] || match[4] || \"\";
        var delimiter = match[2] || match[3] || \"\";
        return {
            position: position,
            symbol: symbol,
            delimiter: delimiter
        }
    },
    getCurrencySymbol: function(currency) {
        if (!currency) {
            currency = (0,_core_config__WEBPACK_IMPORTED_MODULE_0__.default)().defaultCurrency
        }
        var symbolInfo = this._getCurrencySymbolInfo(currency);
        return {
            symbol: symbolInfo.symbol
        }
    },
    getOpenXmlCurrencyFormat: function(currency) {
        var targetCurrency = currency || (0,_core_config__WEBPACK_IMPORTED_MODULE_0__.default)().defaultCurrency;
        var currencySymbol = this._getCurrencySymbolInfo(targetCurrency).symbol;
        var closestAccountingFormat = _core__WEBPACK_IMPORTED_MODULE_1__.default.getValueByClosestLocale(locale => _cldr_data_accounting_formats__WEBPACK_IMPORTED_MODULE_3__.default[locale]);
        return (0,_open_xml_currency_format__WEBPACK_IMPORTED_MODULE_2__.default)(currencySymbol, closestAccountingFormat)
    }
});


/***/ }),

/***/ \"./node_modules/devextreme/esm/localization/ldml/number.js\":
/*!*****************************************************************!*\\
  !*** ./node_modules/devextreme/esm/localization/ldml/number.js ***!
  \\*****************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"getFormatter\": () => (/* binding */ getFormatter),
/* harmony export */   \"getFormat\": () => (/* binding */ getFormat)
/* harmony export */ });
/* harmony import */ var _core_utils_math__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../core/utils/math */ \"./node_modules/devextreme/esm/core/utils/math.js\");
/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils */ \"./node_modules/devextreme/esm/localization/utils.js\");
/**
 * DevExtreme (esm/localization/ldml/number.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */


var DEFAULT_CONFIG = {
    thousandsSeparator: \",\",
    decimalSeparator: \".\"
};
var ESCAPING_CHAR = \"'\";
var MAXIMUM_NUMBER_LENGTH = 15;

function getGroupSizes(formatString) {
    return formatString.split(\",\").slice(1).map((function(str) {
        return str.split(\"\").filter((function(char) {
            return \"#\" === char || \"0\" === char
        })).length
    }))
}

function getSignParts(format) {
    var signParts = format.split(\";\");
    if (1 === signParts.length) {
        signParts.push(\"-\" + signParts[0])
    }
    return signParts
}

function reverseString(str) {
    return str.toString().split(\"\").reverse().join(\"\")
}

function isPercentFormat(format) {
    return -1 !== format.indexOf(\"%\") && !format.match(/'[^']*%[^']*'/g)
}

function removeStubs(str) {
    return str.replace(/'.+'/g, \"\")
}

function getNonRequiredDigitCount(floatFormat) {
    if (!floatFormat) {
        return 0
    }
    var format = removeStubs(floatFormat);
    return format.length - format.replace(/[#]/g, \"\").length
}

function getRequiredDigitCount(floatFormat) {
    if (!floatFormat) {
        return 0
    }
    var format = removeStubs(floatFormat);
    return format.length - format.replace(/[0]/g, \"\").length
}

function normalizeValueString(valuePart, minDigitCount, maxDigitCount) {
    if (!valuePart) {
        return \"\"
    }
    if (valuePart.length > maxDigitCount) {
        valuePart = valuePart.substr(0, maxDigitCount)
    }
    while (valuePart.length > minDigitCount && \"0\" === valuePart.slice(-1)) {
        valuePart = valuePart.substr(0, valuePart.length - 1)
    }
    while (valuePart.length < minDigitCount) {
        valuePart += \"0\"
    }
    return valuePart
}

function applyGroups(valueString, groupSizes, thousandsSeparator) {
    if (!groupSizes.length) {
        return valueString
    }
    var groups = [];
    var index = 0;
    while (valueString) {
        var groupSize = groupSizes[index];
        if (!groupSize) {
            break
        }
        groups.push(valueString.slice(0, groupSize));
        valueString = valueString.slice(groupSize);
        if (index < groupSizes.length - 1) {
            index++
        }
    }
    return groups.join(thousandsSeparator)
}

function formatNumberPart(format, valueString) {
    return format.split(ESCAPING_CHAR).map((function(formatPart, escapeIndex) {
        var isEscape = escapeIndex % 2;
        if (!formatPart && isEscape) {
            return ESCAPING_CHAR
        }
        return isEscape ? formatPart : formatPart.replace(/[,#0]+/, valueString)
    })).join(\"\")
}

function getFloatPointIndex(format) {
    var isEscape = false;
    for (var index = 0; index < format.length; index++) {
        if (\"'\" === format[index]) {
            isEscape = !isEscape
        }
        if (\".\" === format[index] && !isEscape) {
            return index
        }
    }
    return format.length
}
function getFormatter(format, config) {
    config = config || DEFAULT_CONFIG;
    return function(value) {
        if (\"number\" !== typeof value || isNaN(value)) {
            return \"\"
        }
        var signFormatParts = getSignParts(format);
        var isPositiveZero = 1 / value === 1 / 0;
        var isPositive = value > 0 || isPositiveZero;
        var numberFormat = signFormatParts[isPositive ? 0 : 1];
        if (isPercentFormat(numberFormat)) {
            value *= 100
        }
        if (!isPositive) {
            value = -value
        }
        var floatPointIndex = getFloatPointIndex(numberFormat);
        var floatFormatParts = [numberFormat.substr(0, floatPointIndex), numberFormat.substr(floatPointIndex + 1)];
        var minFloatPrecision = getRequiredDigitCount(floatFormatParts[1]);
        var maxFloatPrecision = minFloatPrecision + getNonRequiredDigitCount(floatFormatParts[1]);
        var minIntegerPrecision = getRequiredDigitCount(floatFormatParts[0]);
        var maxIntegerPrecision = getNonRequiredDigitCount(floatFormatParts[0]) || config.unlimitedIntegerDigits ? void 0 : minIntegerPrecision;
        var integerLength = Math.floor(value).toString().length;
        var floatPrecision = (0,_core_utils_math__WEBPACK_IMPORTED_MODULE_0__.fitIntoRange)(maxFloatPrecision, 0, MAXIMUM_NUMBER_LENGTH - integerLength);
        var groupSizes = getGroupSizes(floatFormatParts[0]).reverse();
        var valueParts = (0,_utils__WEBPACK_IMPORTED_MODULE_1__.toFixed)(value, floatPrecision < 0 ? 0 : floatPrecision).split(\".\");
        var valueIntegerPart = normalizeValueString(reverseString(valueParts[0]), minIntegerPrecision, maxIntegerPrecision);
        var valueFloatPart = normalizeValueString(valueParts[1], minFloatPrecision, maxFloatPrecision);
        valueIntegerPart = applyGroups(valueIntegerPart, groupSizes, config.thousandsSeparator);
        var integerString = reverseString(formatNumberPart(reverseString(floatFormatParts[0]), valueIntegerPart));
        var floatString = maxFloatPrecision ? formatNumberPart(floatFormatParts[1], valueFloatPart) : \"\";
        var result = integerString + (floatString.match(/\\d/) ? config.decimalSeparator : \"\") + floatString;
        return result
    }
}

function parseValue(text, isPercent, isNegative) {
    var value = (isPercent ? .01 : 1) * parseFloat(text) || 0;
    return isNegative ? -value : value
}

function prepareValueText(valueText, formatter, isPercent, isIntegerPart) {
    var nextValueText = valueText;
    var char;
    var text;
    var nextText;
    do {
        if (nextText) {
            char = text.length === nextText.length ? \"0\" : \"1\";
            valueText = isIntegerPart ? char + valueText : valueText + char
        }
        text = nextText || formatter(parseValue(nextValueText, isPercent));
        nextValueText = isIntegerPart ? \"1\" + nextValueText : nextValueText + \"1\";
        nextText = formatter(parseValue(nextValueText, isPercent))
    } while (text !== nextText && (isIntegerPart ? text.length === nextText.length : text.length <= nextText.length));
    if (isIntegerPart && nextText.length > text.length) {
        var hasGroups = -1 === formatter(12345).indexOf(\"12345\");
        do {
            valueText = \"1\" + valueText
        } while (hasGroups && parseValue(valueText, isPercent) < 1e5)
    }
    return valueText
}

function getFormatByValueText(valueText, formatter, isPercent, isNegative) {
    var format = formatter(parseValue(valueText, isPercent, isNegative));
    var valueTextParts = valueText.split(\".\");
    var valueTextWithModifiedFloat = valueTextParts[0] + \".3\" + valueTextParts[1].slice(1);
    var valueWithModifiedFloat = parseValue(valueTextWithModifiedFloat, isPercent, isNegative);
    var decimalSeparatorIndex = formatter(valueWithModifiedFloat).indexOf(\"3\") - 1;
    format = format.replace(/(\\d)\\D(\\d)/g, \"\$1,\$2\");
    if (decimalSeparatorIndex >= 0) {
        format = format.slice(0, decimalSeparatorIndex) + \".\" + format.slice(decimalSeparatorIndex + 1)
    }
    format = format.replace(/1+/, \"1\").replace(/1/g, \"#\");
    if (!isPercent) {
        format = format.replace(\"%\", \"'%'\")
    }
    return format
}
function getFormat(formatter) {
    var valueText = \".\";
    var isPercent = formatter(1).indexOf(\"100\") >= 0;
    valueText = prepareValueText(valueText, formatter, isPercent, true);
    valueText = prepareValueText(valueText, formatter, isPercent, false);
    var positiveFormat = getFormatByValueText(valueText, formatter, isPercent, false);
    var negativeFormat = getFormatByValueText(valueText, formatter, isPercent, true);
    return negativeFormat === \"-\" + positiveFormat ? positiveFormat : positiveFormat + \";\" + negativeFormat
}


/***/ }),

/***/ \"./node_modules/devextreme/esm/localization/message.js\":
/*!*************************************************************!*\\
  !*** ./node_modules/devextreme/esm/localization/message.js ***!
  \\*************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _core_renderer__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core/renderer */ \"./node_modules/devextreme/esm/core/renderer.js\");
/* harmony import */ var _core_utils_dependency_injector__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../core/utils/dependency_injector */ \"./node_modules/devextreme/esm/core/utils/dependency_injector.js\");
/* harmony import */ var _core_utils_extend__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../core/utils/extend */ \"./node_modules/devextreme/esm/core/utils/extend.js\");
/* harmony import */ var _core_utils_iterator__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../core/utils/iterator */ \"./node_modules/devextreme/esm/core/utils/iterator.js\");
/* harmony import */ var _core_utils_string__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../core/utils/string */ \"./node_modules/devextreme/esm/core/utils/string.js\");
/* harmony import */ var _core_utils_inflector__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../core/utils/inflector */ \"./node_modules/devextreme/esm/core/utils/inflector.js\");
/* harmony import */ var _core__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./core */ \"./node_modules/devextreme/esm/localization/core.js\");
/* harmony import */ var _default_messages__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./default_messages */ \"./node_modules/devextreme/esm/localization/default_messages.js\");
/**
 * DevExtreme (esm/localization/message.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */








var baseDictionary = (0,_core_utils_extend__WEBPACK_IMPORTED_MODULE_2__.extend)(true, {}, _default_messages__WEBPACK_IMPORTED_MODULE_7__.defaultMessages);
var getDataByLocale = (localeData, locale) => localeData[locale] || {};
var newMessages = {};
var messageLocalization = (0,_core_utils_dependency_injector__WEBPACK_IMPORTED_MODULE_1__.default)({
    engine: function() {
        return \"base\"
    },
    _dictionary: baseDictionary,
    load: function(messages) {
        (0,_core_utils_extend__WEBPACK_IMPORTED_MODULE_2__.extend)(true, this._dictionary, messages)
    },
    _localizablePrefix: \"@\",
    setup: function(localizablePrefix) {
        this._localizablePrefix = localizablePrefix
    },
    localizeString: function(text) {
        var that = this;
        var regex = new RegExp(\"(^|[^a-zA-Z_0-9\" + that._localizablePrefix + \"-]+)(\" + that._localizablePrefix + \"{1,2})([a-zA-Z_0-9-]+)\", \"g\");
        var escapeString = that._localizablePrefix + that._localizablePrefix;
        return text.replace(regex, (str, prefix, escape, localizationKey) => {
            var defaultResult = that._localizablePrefix + localizationKey;
            var result;
            if (escape !== escapeString) {
                result = that.format(localizationKey)
            }
            if (!result) {
                newMessages[localizationKey] = (0,_core_utils_inflector__WEBPACK_IMPORTED_MODULE_5__.humanize)(localizationKey)
            }
            return prefix + (result || defaultResult)
        })
    },
    localizeNode: function(node) {
        var that = this;
        (0,_core_renderer__WEBPACK_IMPORTED_MODULE_0__.default)(node).each((index, nodeItem) => {
            if (!nodeItem.nodeType) {
                return
            }
            if (3 === nodeItem.nodeType) {
                nodeItem.nodeValue = that.localizeString(nodeItem.nodeValue)
            } else if (!(0,_core_renderer__WEBPACK_IMPORTED_MODULE_0__.default)(nodeItem).is(\"iframe\")) {
                (0,_core_utils_iterator__WEBPACK_IMPORTED_MODULE_3__.each)(nodeItem.attributes || [], (index, attr) => {
                    if (\"string\" === typeof attr.value) {
                        var localizedValue = that.localizeString(attr.value);
                        if (attr.value !== localizedValue) {
                            attr.value = localizedValue
                        }
                    }
                });
                (0,_core_renderer__WEBPACK_IMPORTED_MODULE_0__.default)(nodeItem).contents().each((index, node) => {
                    that.localizeNode(node)
                })
            }
        })
    },
    getMessagesByLocales: function() {
        return this._dictionary
    },
    getDictionary: function(onlyNew) {
        if (onlyNew) {
            return newMessages
        }
        return (0,_core_utils_extend__WEBPACK_IMPORTED_MODULE_2__.extend)({}, newMessages, this.getMessagesByLocales()[_core__WEBPACK_IMPORTED_MODULE_6__.default.locale()])
    },
    getFormatter: function(key) {
        return this._getFormatterBase(key) || this._getFormatterBase(key, \"en\")
    },
    _getFormatterBase: function(key, locale) {
        var message = _core__WEBPACK_IMPORTED_MODULE_6__.default.getValueByClosestLocale(locale => getDataByLocale(this._dictionary, locale)[key]);
        if (message) {
            return function() {
                var args = 1 === arguments.length && Array.isArray(arguments[0]) ? arguments[0].slice(0) : Array.prototype.slice.call(arguments, 0);
                args.unshift(message);
                return _core_utils_string__WEBPACK_IMPORTED_MODULE_4__.format.apply(this, args)
            }
        }
    },
    format: function(key) {
        var formatter = this.getFormatter(key);
        var values = Array.prototype.slice.call(arguments, 1);
        return formatter && formatter.apply(this, values) || \"\"
    }
});
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (messageLocalization);


/***/ }),

/***/ \"./node_modules/devextreme/esm/localization/number.js\":
/*!************************************************************!*\\
  !*** ./node_modules/devextreme/esm/localization/number.js ***!
  \\************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _core_utils_dependency_injector__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core/utils/dependency_injector */ \"./node_modules/devextreme/esm/core/utils/dependency_injector.js\");
/* harmony import */ var _core_utils_array__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../core/utils/array */ \"./node_modules/devextreme/esm/core/utils/array.js\");
/* harmony import */ var _core_utils_common__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../core/utils/common */ \"./node_modules/devextreme/esm/core/utils/common.js\");
/* harmony import */ var _core_utils_iterator__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../core/utils/iterator */ \"./node_modules/devextreme/esm/core/utils/iterator.js\");
/* harmony import */ var _core_utils_type__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../core/utils/type */ \"./node_modules/devextreme/esm/core/utils/type.js\");
/* harmony import */ var _ldml_number__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./ldml/number */ \"./node_modules/devextreme/esm/localization/ldml/number.js\");
/* harmony import */ var _core_config__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../core/config */ \"./node_modules/devextreme/esm/core/config.js\");
/* harmony import */ var _core_errors__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../core/errors */ \"./node_modules/devextreme/esm/core/errors.js\");
/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./utils */ \"./node_modules/devextreme/esm/localization/utils.js\");
/* harmony import */ var _currency__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./currency */ \"./node_modules/devextreme/esm/localization/currency.js\");
/* harmony import */ var _intl_number__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./intl/number */ \"./node_modules/devextreme/esm/localization/intl/number.js\");
/**
 * DevExtreme (esm/localization/number.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */











var hasIntl = \"undefined\" !== typeof Intl;
var MAX_LARGE_NUMBER_POWER = 4;
var DECIMAL_BASE = 10;
var NUMERIC_FORMATS = [\"currency\", \"fixedpoint\", \"exponential\", \"percent\", \"decimal\"];
var LargeNumberFormatPostfixes = {
    1: \"K\",
    2: \"M\",
    3: \"B\",
    4: \"T\"
};
var LargeNumberFormatPowers = {
    largenumber: \"auto\",
    thousands: 1,
    millions: 2,
    billions: 3,
    trillions: 4
};
var numberLocalization = (0,_core_utils_dependency_injector__WEBPACK_IMPORTED_MODULE_0__.default)({
    engine: function() {
        return \"base\"
    },
    numericFormats: NUMERIC_FORMATS,
    defaultLargeNumberFormatPostfixes: LargeNumberFormatPostfixes,
    _parseNumberFormatString: function(formatType) {
        var formatObject = {};
        if (!formatType || \"string\" !== typeof formatType) {
            return
        }
        var formatList = formatType.toLowerCase().split(\" \");
        (0,_core_utils_iterator__WEBPACK_IMPORTED_MODULE_3__.each)(formatList, (index, value) => {
            if ((0,_core_utils_array__WEBPACK_IMPORTED_MODULE_1__.inArray)(value, NUMERIC_FORMATS) > -1) {
                formatObject.formatType = value
            } else if (value in LargeNumberFormatPowers) {
                formatObject.power = LargeNumberFormatPowers[value]
            }
        });
        if (formatObject.power && !formatObject.formatType) {
            formatObject.formatType = \"fixedpoint\"
        }
        if (formatObject.formatType) {
            return formatObject
        }
    },
    _calculateNumberPower: function(value, base, minPower, maxPower) {
        var number = Math.abs(value);
        var power = 0;
        if (number > 1) {
            while (number && number >= base && (void 0 === maxPower || power < maxPower)) {
                power++;
                number /= base
            }
        } else if (number > 0 && number < 1) {
            while (number < 1 && (void 0 === minPower || power > minPower)) {
                power--;
                number *= base
            }
        }
        return power
    },
    _getNumberByPower: function(number, power, base) {
        var result = number;
        while (power > 0) {
            result /= base;
            power--
        }
        while (power < 0) {
            result *= base;
            power++
        }
        return result
    },
    _formatNumber: function(value, formatObject, formatConfig) {
        if (\"auto\" === formatObject.power) {
            formatObject.power = this._calculateNumberPower(value, 1e3, 0, MAX_LARGE_NUMBER_POWER)
        }
        if (formatObject.power) {
            value = this._getNumberByPower(value, formatObject.power, 1e3)
        }
        var powerPostfix = this.defaultLargeNumberFormatPostfixes[formatObject.power] || \"\";
        var result = this._formatNumberCore(value, formatObject.formatType, formatConfig);
        result = result.replace(/(\\d|.\$)(\\D*)\$/, \"\$1\" + powerPostfix + \"\$2\");
        return result
    },
    _formatNumberExponential: function(value, formatConfig) {
        var power = this._calculateNumberPower(value, DECIMAL_BASE);
        var number = this._getNumberByPower(value, power, DECIMAL_BASE);
        if (void 0 === formatConfig.precision) {
            formatConfig.precision = 1
        }
        if (number.toFixed(formatConfig.precision || 0) >= DECIMAL_BASE) {
            power++;
            number /= DECIMAL_BASE
        }
        var powString = (power >= 0 ? \"+\" : \"\") + power.toString();
        return this._formatNumberCore(number, \"fixedpoint\", formatConfig) + \"E\" + powString
    },
    _addZeroes: function(value, precision) {
        var multiplier = Math.pow(10, precision);
        var sign = value < 0 ? \"-\" : \"\";
        value = (Math.abs(value) * multiplier >>> 0) / multiplier;
        var result = value.toString();
        while (result.length < precision) {
            result = \"0\" + result
        }
        return sign + result
    },
    _addGroupSeparators: function(value) {
        var parts = value.toString().split(\".\");
        return parts[0].replace(/\\B(?=(\\d{3})+(?!\\d))/g, (0,_core_config__WEBPACK_IMPORTED_MODULE_6__.default)().thousandsSeparator) + (parts[1] ? (0,_core_config__WEBPACK_IMPORTED_MODULE_6__.default)().decimalSeparator + parts[1] : \"\")
    },
    _formatNumberCore: function(value, format, formatConfig) {
        if (\"exponential\" === format) {
            return this._formatNumberExponential(value, formatConfig)
        }
        if (\"decimal\" !== format && null !== formatConfig.precision) {
            formatConfig.precision = formatConfig.precision || 0
        }
        if (\"percent\" === format) {
            value *= 100
        }
        if (void 0 !== formatConfig.precision) {
            if (\"decimal\" === format) {
                value = this._addZeroes(value, formatConfig.precision)
            } else {
                value = null === formatConfig.precision ? value.toPrecision() : (0,_utils__WEBPACK_IMPORTED_MODULE_8__.toFixed)(value, formatConfig.precision)
            }
        }
        if (\"decimal\" !== format) {
            value = this._addGroupSeparators(value)
        } else {
            value = value.toString().replace(\".\", (0,_core_config__WEBPACK_IMPORTED_MODULE_6__.default)().decimalSeparator)
        }
        if (\"percent\" === format) {
            value += \"%\"
        }
        return value
    },
    _normalizeFormat: function(format) {
        if (!format) {
            return {}
        }
        if (\"function\" === typeof format) {
            return format
        }
        if (!(0,_core_utils_type__WEBPACK_IMPORTED_MODULE_4__.isPlainObject)(format)) {
            format = {
                type: format
            }
        }
        return format
    },
    _getSeparators: function() {
        return {
            decimalSeparator: this.getDecimalSeparator(),
            thousandsSeparator: this.getThousandsSeparator()
        }
    },
    getThousandsSeparator: function() {
        return this.format(1e4, \"fixedPoint\")[2]
    },
    getDecimalSeparator: function() {
        return this.format(1.2, {
            type: \"fixedPoint\",
            precision: 1
        })[1]
    },
    convertDigits: function(value, toStandard) {
        var digits = this.format(90, \"decimal\");
        if (\"string\" !== typeof value || \"0\" === digits[1]) {
            return value
        }
        var fromFirstDigit = toStandard ? digits[1] : \"0\";
        var toFirstDigit = toStandard ? \"0\" : digits[1];
        var fromLastDigit = toStandard ? digits[0] : \"9\";
        var regExp = new RegExp(\"[\" + fromFirstDigit + \"-\" + fromLastDigit + \"]\", \"g\");
        return value.replace(regExp, char => String.fromCharCode(char.charCodeAt(0) + (toFirstDigit.charCodeAt(0) - fromFirstDigit.charCodeAt(0))))
    },
    getNegativeEtalonRegExp: function(format) {
        var separators = this._getSeparators();
        var digitalRegExp = new RegExp(\"[0-9\" + (0,_core_utils_common__WEBPACK_IMPORTED_MODULE_2__.escapeRegExp)(separators.decimalSeparator + separators.thousandsSeparator) + \"]+\", \"g\");
        var negativeEtalon = this.format(-1, format).replace(digitalRegExp, \"1\");
        [\"\\\\\", \"(\", \")\", \"[\", \"]\", \"*\", \"+\", \"\$\", \"^\", \"?\", \"|\", \"{\", \"}\"].forEach(char => {
            negativeEtalon = negativeEtalon.replace(char, \"\\\\\".concat(char))
        });
        negativeEtalon = negativeEtalon.replace(\" \", \"\\\\s\");
        negativeEtalon = negativeEtalon.replace(\"1\", \".+\");
        return new RegExp(negativeEtalon, \"g\")
    },
    getSign: function(text, format) {
        if (\"-\" === text.replace(/[^0-9-]/g, \"\").charAt(0)) {
            return -1
        }
        if (!format) {
            return 1
        }
        var negativeEtalon = this.getNegativeEtalonRegExp(format);
        return text.match(negativeEtalon) ? -1 : 1
    },
    format: function(value, _format) {
        if (\"number\" !== typeof value) {
            return value
        }
        if (\"number\" === typeof _format) {
            return value
        }
        _format = _format && _format.formatter || _format;
        if (\"function\" === typeof _format) {
            return _format(value)
        }
        _format = this._normalizeFormat(_format);
        if (!_format.type) {
            _format.type = \"decimal\"
        }
        var numberConfig = this._parseNumberFormatString(_format.type);
        if (!numberConfig) {
            var formatterConfig = this._getSeparators();
            formatterConfig.unlimitedIntegerDigits = _format.unlimitedIntegerDigits;
            return this.convertDigits((0,_ldml_number__WEBPACK_IMPORTED_MODULE_5__.getFormatter)(_format.type, formatterConfig)(value))
        }
        return this._formatNumber(value, numberConfig, _format)
    },
    parse: function(text, format) {
        if (!text) {
            return
        }
        if (format && format.parser) {
            return format.parser(text)
        }
        text = this.convertDigits(text, true);
        if (format && \"string\" !== typeof format) {
            _core_errors__WEBPACK_IMPORTED_MODULE_7__.default.log(\"W0011\")
        }
        var decimalSeparator = this.getDecimalSeparator();
        var regExp = new RegExp(\"[^0-9\" + (0,_core_utils_common__WEBPACK_IMPORTED_MODULE_2__.escapeRegExp)(decimalSeparator) + \"]\", \"g\");
        var cleanedText = text.replace(regExp, \"\").replace(decimalSeparator, \".\").replace(/\\.\$/g, \"\");
        if (\".\" === cleanedText || \"\" === cleanedText) {
            return null
        }
        if (this._calcSignificantDigits(cleanedText) > 15) {
            return NaN
        }
        var parsed = +cleanedText * this.getSign(text, format);
        format = this._normalizeFormat(format);
        var formatConfig = this._parseNumberFormatString(format.type);
        var power = null === formatConfig || void 0 === formatConfig ? void 0 : formatConfig.power;
        if (power) {
            if (\"auto\" === power) {
                var match = text.match(/\\d(K|M|B|T)/);
                if (match) {
                    power = (0,_core_utils_array__WEBPACK_IMPORTED_MODULE_1__.find)(Object.keys(LargeNumberFormatPostfixes), power => LargeNumberFormatPostfixes[power] === match[1])
                }
            }
            parsed *= Math.pow(10, 3 * power)
        }
        if (\"percent\" === (null === formatConfig || void 0 === formatConfig ? void 0 : formatConfig.formatType)) {
            parsed /= 100
        }
        return parsed
    },
    _calcSignificantDigits: function(text) {
        var [integer, fractional] = text.split(\".\");
        var calcDigitsAfterLeadingZeros = digits => {
            var index = -1;
            for (var i = 0; i < digits.length; i++) {
                if (\"0\" !== digits[i]) {
                    index = i;
                    break
                }
            }
            return index > -1 ? digits.length - index : 0
        };
        var result = 0;
        if (integer) {
            result += calcDigitsAfterLeadingZeros(integer.split(\"\"))
        }
        if (fractional) {
            result += calcDigitsAfterLeadingZeros(fractional.split(\"\").reverse())
        }
        return result
    }
});
numberLocalization.inject(_currency__WEBPACK_IMPORTED_MODULE_9__.default);
if (hasIntl) {
    numberLocalization.inject(_intl_number__WEBPACK_IMPORTED_MODULE_10__.default)
}
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (numberLocalization);


/***/ }),

/***/ \"./node_modules/devextreme/esm/localization/open_xml_currency_format.js\":
/*!******************************************************************************!*\\
  !*** ./node_modules/devextreme/esm/localization/open_xml_currency_format.js ***!
  \\******************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/**
 * DevExtreme (esm/localization/open_xml_currency_format.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((currencySymbol, accountingFormat) => {
    if (!accountingFormat) {
        return
    }
    var encodedCurrencySymbol = currencySymbol;
    if (\"string\" === typeof currencySymbol) {
        encodedCurrencySymbol = \"\";
        for (var i = 0; i < currencySymbol.length; i++) {
            if (\"\$\" !== currencySymbol[i]) {
                encodedCurrencySymbol += \"\\\\\"
            }
            encodedCurrencySymbol += currencySymbol[i]
        }
    }
    var encodeSymbols = {
        \".00\": \"{0}\",
        \"'\": \"\\\\'\",
        \"\\\\(\": \"\\\\(\",
        \"\\\\)\": \"\\\\)\",
        \" \": \"\\\\ \",
        '\"': \"&quot;\",
        \"\\\\\\xa4\": encodedCurrencySymbol
    };
    var result = accountingFormat.split(\";\");
    for (var _i = 0; _i < result.length; _i++) {
        for (var symbol in encodeSymbols) {
            if (Object.prototype.hasOwnProperty.call(encodeSymbols, symbol)) {
                result[_i] = result[_i].replace(new RegExp(symbol, \"g\"), encodeSymbols[symbol])
            }
        }
    }
    return 2 === result.length ? result[0] + \"_);\" + result[1] : result[0]
});


/***/ }),

/***/ \"./node_modules/devextreme/esm/localization/parentLocale.js\":
/*!******************************************************************!*\\
  !*** ./node_modules/devextreme/esm/localization/parentLocale.js ***!
  \\******************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/**
 * DevExtreme (esm/localization/parentLocale.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */
var PARENT_LOCALE_SEPARATOR = \"-\";
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((parentLocales, locale) => {
    var parentLocale = parentLocales[locale];
    if (parentLocale) {
        return \"root\" !== parentLocale && parentLocale
    }
    return locale.substr(0, locale.lastIndexOf(PARENT_LOCALE_SEPARATOR))
});


/***/ }),

/***/ \"./node_modules/devextreme/esm/localization/utils.js\":
/*!***********************************************************!*\\
  !*** ./node_modules/devextreme/esm/localization/utils.js ***!
  \\***********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"toFixed\": () => (/* binding */ toFixed)
/* harmony export */ });
/* harmony import */ var _core_utils_math__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core/utils/math */ \"./node_modules/devextreme/esm/core/utils/math.js\");
/**
 * DevExtreme (esm/localization/utils.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */

var DECIMAL_BASE = 10;

function roundByAbs(value) {
    var valueSign = (0,_core_utils_math__WEBPACK_IMPORTED_MODULE_0__.sign)(value);
    return valueSign * Math.round(Math.abs(value))
}

function adjustValue(value, precision) {
    var precisionMultiplier = Math.pow(DECIMAL_BASE, precision);
    var roundMultiplier = precisionMultiplier * DECIMAL_BASE;
    var intermediateValue = value * roundMultiplier / DECIMAL_BASE;
    return roundByAbs(intermediateValue) / precisionMultiplier
}
function toFixed(value, precision) {
    var valuePrecision = precision || 0;
    var adjustedValue = valuePrecision > 0 ? adjustValue(...arguments) : value;
    return adjustedValue.toFixed(valuePrecision)
}


/***/ })

}]);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZGV2ZXh0cmVtZS9lc20vY29yZS9jbGFzcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZGV2ZXh0cmVtZS9lc20vY29yZS9jb25maWcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2RldmV4dHJlbWUvZXNtL2NvcmUvZG9tX2FkYXB0ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2RldmV4dHJlbWUvZXNtL2NvcmUvZWxlbWVudF9kYXRhLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9kZXZleHRyZW1lL2VzbS9jb3JlL2Vycm9ycy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZGV2ZXh0cmVtZS9lc20vY29yZS9ndWlkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9kZXZleHRyZW1lL2VzbS9jb3JlL21lbW9yaXplZF9jYWxsYmFja3MuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2RldmV4dHJlbWUvZXNtL2NvcmUvcG9seWZpbGxzL3dlYWtfbWFwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9kZXZleHRyZW1lL2VzbS9jb3JlL3JlbmRlcmVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9kZXZleHRyZW1lL2VzbS9jb3JlL3JlbmRlcmVyX2Jhc2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2RldmV4dHJlbWUvZXNtL2NvcmUvdXRpbHMvYXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2RldmV4dHJlbWUvZXNtL2NvcmUvdXRpbHMvY2FsbF9vbmNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9kZXZleHRyZW1lL2VzbS9jb3JlL3V0aWxzL2NhbGxiYWNrcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZGV2ZXh0cmVtZS9lc20vY29yZS91dGlscy9jb21tb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2RldmV4dHJlbWUvZXNtL2NvcmUvdXRpbHMvY29uc29sZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZGV2ZXh0cmVtZS9lc20vY29yZS91dGlscy9kYXRhLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9kZXZleHRyZW1lL2VzbS9jb3JlL3V0aWxzL2RlZmVycmVkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9kZXZleHRyZW1lL2VzbS9jb3JlL3V0aWxzL2RlcGVuZGVuY3lfaW5qZWN0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2RldmV4dHJlbWUvZXNtL2NvcmUvdXRpbHMvZXJyb3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2RldmV4dHJlbWUvZXNtL2NvcmUvdXRpbHMvZXh0ZW5kLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9kZXZleHRyZW1lL2VzbS9jb3JlL3V0aWxzL2h0bWxfcGFyc2VyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9kZXZleHRyZW1lL2VzbS9jb3JlL3V0aWxzL2luZmxlY3Rvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZGV2ZXh0cmVtZS9lc20vY29yZS91dGlscy9pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZGV2ZXh0cmVtZS9lc20vY29yZS91dGlscy9tYXRoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9kZXZleHRyZW1lL2VzbS9jb3JlL3V0aWxzL29iamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZGV2ZXh0cmVtZS9lc20vY29yZS91dGlscy9zaXplLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9kZXZleHRyZW1lL2VzbS9jb3JlL3V0aWxzL3N0cmluZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZGV2ZXh0cmVtZS9lc20vY29yZS91dGlscy9zdHlsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZGV2ZXh0cmVtZS9lc20vY29yZS91dGlscy90eXBlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9kZXZleHRyZW1lL2VzbS9jb3JlL3V0aWxzL3ZhcmlhYmxlX3dyYXBwZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2RldmV4dHJlbWUvZXNtL2NvcmUvdXRpbHMvd2luZG93LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9kZXZleHRyZW1lL2VzbS9jb3JlL3ZlcnNpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2RldmV4dHJlbWUvZXNtL2V2ZW50cy9jb3JlL2V2ZW50X3JlZ2lzdHJhdG9yX2NhbGxiYWNrcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZGV2ZXh0cmVtZS9lc20vZXZlbnRzL2NvcmUvZXZlbnRzX2VuZ2luZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZGV2ZXh0cmVtZS9lc20vZXZlbnRzL2NvcmUvaG9va190b3VjaF9wcm9wcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZGV2ZXh0cmVtZS9lc20vbG9jYWxpemF0aW9uL2NsZHItZGF0YS9hY2NvdW50aW5nX2Zvcm1hdHMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2RldmV4dHJlbWUvZXNtL2xvY2FsaXphdGlvbi9jbGRyLWRhdGEvcGFyZW50X2xvY2FsZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2RldmV4dHJlbWUvZXNtL2xvY2FsaXphdGlvbi9jb3JlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9kZXZleHRyZW1lL2VzbS9sb2NhbGl6YXRpb24vY3VycmVuY3kuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2RldmV4dHJlbWUvZXNtL2xvY2FsaXphdGlvbi9kZWZhdWx0X21lc3NhZ2VzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9kZXZleHRyZW1lL2VzbS9sb2NhbGl6YXRpb24vaW50bC9udW1iZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2RldmV4dHJlbWUvZXNtL2xvY2FsaXphdGlvbi9sZG1sL251bWJlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZGV2ZXh0cmVtZS9lc20vbG9jYWxpemF0aW9uL21lc3NhZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2RldmV4dHJlbWUvZXNtL2xvY2FsaXphdGlvbi9udW1iZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2RldmV4dHJlbWUvZXNtL2xvY2FsaXphdGlvbi9vcGVuX3htbF9jdXJyZW5jeV9mb3JtYXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2RldmV4dHJlbWUvZXNtL2xvY2FsaXphdGlvbi9wYXJlbnRMb2NhbGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2RldmV4dHJlbWUvZXNtL2xvY2FsaXphdGlvbi91dGlscy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQWU7QUFDZjtBQUNBLG1CQUFtQixzQkFBc0I7QUFDekM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxDOzs7Ozs7Ozs7Ozs7Ozs7OztBQ2hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQzhCO0FBR1I7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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QTtBQUNBO0FBQ0EsMkNBQTJDLDZEQUFpQjtBQUM1RDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsb0JBQW9CO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFD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dUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkIsc0JBQXNCO0FBQ3RCLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0Esc0JBQXNCO0FBQ3RCLDRCQUE0QjtBQUM1QjtBQUNBLDJCQUEyQjtBQUMzQiwyQkFBMkI7QUFDM0IsMkJBQTJCO0FBQzNCLDJCQUEyQjtBQUMzQjtBQUNBLDJCQUEyQjtBQUMzQiwyQkFBMkI7QUFDM0I7QUFDQSwyQkFBMkI7QUFDM0IsMkJBQTJCO0FBQzNCLDJCQUEyQjtBQUMzQiwyQkFBMkI7QUFDM0IsMkJBQTJCO0FBQzNCLDJCQUEyQjtBQUMzQiwyQkFBMkI7QUFDM0IsK0JBQStCO0FBQy9CLDJCQUEyQjtBQUMzQiwyQkFBMkI7QUFDM0IsMkJBQTJCO0FBQzNCLDJCQUEyQjtBQUMzQjtBQUNBLDJCQUEyQjtBQUMzQjtBQUNBLDJCQUEyQjtBQUMzQiwyQkFBMkI7QUFDM0I7QUFDQSwyQkFBMkI7QUFDM0IsMkJBQTJCO0FBQzNCLDJCQUEyQjtBQUMzQiwyQkFBMkI7QUFDM0IsMkJBQTJCO0FBQzNCLDJCQUEyQjtBQUMzQiwyQkFBMkI7QUFDM0IsMkJBQTJCO0FBQzNCLDJCQUEyQjtBQUMzQiwyQkFBMkI7QUFDM0IsMkJBQTJCO0FBQzNCLDJCQUEyQjtBQUMzQiwyQkFBMkI7QUFDM0IsMkJBQTJCO0FBQzNCLDJCQUEyQjtBQUMzQiwyQkFBMkI7QUFDM0IsMkJBQTJCO0FBQzNCLDJCQUEyQjtBQUMzQiwyQkFBMkI7QUFDM0IsMkJBQTJCO0FBQzNCLDJCQUEyQjtBQUMzQiwyQkFBMkI7QUFDM0IsMkJBQTJCO0FBQzNCLDJCQUEyQjtBQUMzQiwyQkFBMkI7QUFDM0IsMkJBQTJCO0FBQzNCLDJCQUEyQjtBQUMzQiwyQkFBMkI7QUFDM0IsMkJBQTJCO0FBQzNCLDJCQUEyQjtBQUMzQiwyQkFBMkI7QUFDM0IsMkJBQTJCO0FBQzNCLDJCQUEyQjtBQUMzQiwyQkFBMkI7QUFDM0IsMkJBQTJCO0FBQzNCLDJCQUEyQjtBQUMzQiwyQkFBMkI7QUFDM0IsMkJBQTJCO0FBQzNCLCtCQUErQjtBQUMvQiwyQkFBMkI7QUFDM0IsMkJBQTJCO0FBQzNCLDJCQUEyQjtBQUMzQiwyQkFBMkI7QUFDM0IsMkJBQTJCO0FBQzNCLDJCQUEyQjtBQUMzQiwyQkFBMkI7QUFDM0IsMkJBQTJCO0FBQzNCLDJCQUEyQjtBQUMzQiwyQkFBMkI7QUFDM0IsMkJBQTJCO0FBQzNCLDJCQUEyQjtBQUMzQiwyQkFBMkI7QUFDM0I7QUFDQSwyQkFBMkI7QUFDM0IsMkJBQTJCO0FBQzNCLCtCQUErQjtBQUMvQiwyQkFBMkI7QUFDM0IsMkJBQTJCO0FBQzNCLDJCQUEyQjtBQUMzQiwyQkFBMkI7QUFDM0IsMkJBQTJCO0FBQzNCLDJCQUEyQjtBQUMzQiwyQkFBMkI7QUFDM0IsMkJBQTJCO0FBQzNCLDJCQUEyQjtBQUMzQiwyQkFBMkI7QUFDM0IsMkJBQTJCO0FBQzNCLDJCQUEyQjtBQUMzQixpQ0FBaUM7QUFDakMsMkJBQTJCO0FBQzNCLDJCQUEyQjtBQUMzQiwyQkFBMkI7QUFDM0IsMkJBQTJCO0FBQzNCLDJCQUEyQjtBQUMzQiwyQkFBMkI7QUFDM0IsMkJBQTJCO0FBQzNCLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSwrQkFBK0I7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkI7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCO0FBQy9CO0FBQ0EsMEJBQTBCO0FBQzFCLDBCQUEwQjtBQUMxQjtBQUNBLGdDQUFnQztBQUNoQywrQkFBK0I7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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RUFBRTtBQUM1QztBQUNBLHdDQUF3QyxFQUFFO0FBQzFDO0FBQ0EsNkRBQTZELEVBQUU7QUFDL0Q7QUFDQSx5Q0FBeUMsRUFBRTtBQUMzQztBQUNBLHdDQUF3QyxFQUFFO0FBQzFDO0FBQ0EsMENBQTBDLEVBQUU7QUFDNUM7QUFDQSwwQ0FBMEMsRUFBRTtBQUM1QztBQUNBLHdDQUF3QyxFQUFFO0FBQzFDO0FBQ0Esa0VBQWtFLEVBQUU7QUFDcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQyxFQUFFO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDLEVBQUU7QUFDMUMscURBQXFELEVBQUUsS0FBSyxFQUFFO0FBQzlELHdDQUF3QyxFQUFFO0FBQzFDLHFEQUFxRCxFQUFFLEtBQUssRUFBRTtBQUM5RCx3Q0FBd0MsRUFBRTtBQUMxQyxxREFBcUQsRUFBRSxLQUFLLEVBQUU7QUFDOUQsd0NBQXdDLEVBQUU7QUFDMUMscURBQXFELEVBQUUsS0FBSyxFQUFFO0FBQzlELDRDQUE0QyxFQUFFO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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NkUsRUFBRSxXQUFXLEVBQUU7QUFDNUY7QUFDQSxrRUFBa0UsRUFBRTtBQUNwRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzTUFBc00sRUFBRTtBQUN4TTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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QUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCLG1CQUFtQjtBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCwwQkFBMEIsOENBQW9CO0FBQzlDO0FBQ0EsOEJBQThCLGtEQUFzQjtBQUNwRDtBQUNBLGlFQUFlLGtCQUFrQixFQUFDOzs7Ozs7Ozs7Ozs7Ozs7O0FDN1RsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsMkJBQTJCO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLEVBQUU7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQTtBQUNBLDBDQUEwQztBQUMxQyxvQkFBb0Isb0JBQW9CO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlEQUFpRDtBQUNqRCxDQUFDLEVBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7QUN4Q0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxFQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQ2ZGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHNEI7QUFDNUI7O0FBRUE7QUFDQSxvQkFBb0Isc0RBQUk7QUFDeEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6InZlbmRvcnMtbm9kZV9tb2R1bGVzX2RldmV4dHJlbWVfZXNtX2xvY2FsaXphdGlvbl9tZXNzYWdlX2pzLW5vZGVfbW9kdWxlc19kZXZleHRyZW1lX2VzbV9sb2NhbC0yYTk2MDkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfZXh0ZW5kcygpIHtcbiAgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTtcblxuICAgICAgZm9yICh2YXIga2V5IGluIHNvdXJjZSkge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkge1xuICAgICAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9O1xuXG4gIHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufSIsIi8qKlxyXG4gKiBEZXZFeHRyZW1lIChlc20vY29yZS9jbGFzcy5qcylcclxuICogVmVyc2lvbjogMjEuMS40XHJcbiAqIEJ1aWxkIGRhdGU6IE1vbiBKdW4gMjEgMjAyMVxyXG4gKlxyXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTIgLSAyMDIxIERldmVsb3BlciBFeHByZXNzIEluYy4gQUxMIFJJR0hUUyBSRVNFUlZFRFxyXG4gKiBSZWFkIGFib3V0IERldkV4dHJlbWUgbGljZW5zaW5nIGhlcmU6IGh0dHBzOi8vanMuZGV2ZXhwcmVzcy5jb20vTGljZW5zaW5nL1xyXG4gKi9cclxuaW1wb3J0IGVycm9ycyBmcm9tIFwiLi9lcnJvcnNcIjtcclxuaW1wb3J0IHtcclxuICAgIGlzV2luZG93XHJcbn0gZnJvbSBcIi4vdXRpbHMvdHlwZVwiO1xyXG52YXIgd3JhcE92ZXJyaWRkZW4gPSBmdW5jdGlvbihiYXNlUHJvdG8sIG1ldGhvZE5hbWUsIG1ldGhvZCkge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciBwcmV2Q2FsbEJhc2UgPSB0aGlzLmNhbGxCYXNlO1xyXG4gICAgICAgIHRoaXMuY2FsbEJhc2UgPSBiYXNlUHJvdG9bbWV0aG9kTmFtZV07XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgcmV0dXJuIG1ldGhvZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpXHJcbiAgICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICAgICAgdGhpcy5jYWxsQmFzZSA9IHByZXZDYWxsQmFzZVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxudmFyIGNsb25lUHJvdG90eXBlID0gZnVuY3Rpb24ob2JqKSB7XHJcbiAgICB2YXIgZnVuYyA9IGZ1bmN0aW9uKCkge307XHJcbiAgICBmdW5jLnByb3RvdHlwZSA9IG9iai5wcm90b3R5cGU7XHJcbiAgICByZXR1cm4gbmV3IGZ1bmNcclxufTtcclxudmFyIHJlZGVmaW5lID0gZnVuY3Rpb24obWVtYmVycykge1xyXG4gICAgdmFyIG92ZXJyaWRkZW47XHJcbiAgICB2YXIgbWVtYmVyTmFtZTtcclxuICAgIHZhciBtZW1iZXI7XHJcbiAgICBpZiAoIW1lbWJlcnMpIHtcclxuICAgICAgICByZXR1cm4gdGhpc1xyXG4gICAgfVxyXG4gICAgZm9yIChtZW1iZXJOYW1lIGluIG1lbWJlcnMpIHtcclxuICAgICAgICBtZW1iZXIgPSBtZW1iZXJzW21lbWJlck5hbWVdO1xyXG4gICAgICAgIG92ZXJyaWRkZW4gPSBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiB0aGlzLnByb3RvdHlwZVttZW1iZXJOYW1lXSAmJiBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBtZW1iZXI7XHJcbiAgICAgICAgdGhpcy5wcm90b3R5cGVbbWVtYmVyTmFtZV0gPSBvdmVycmlkZGVuID8gd3JhcE92ZXJyaWRkZW4odGhpcy5wYXJlbnQucHJvdG90eXBlLCBtZW1iZXJOYW1lLCBtZW1iZXIpIDogbWVtYmVyXHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpc1xyXG59O1xyXG52YXIgaW5jbHVkZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgdmFyIGNsYXNzT2JqID0gdGhpcztcclxuICAgIHZhciBhcmd1bWVudDtcclxuICAgIHZhciBuYW1lO1xyXG4gICAgdmFyIGk7XHJcbiAgICB2YXIgaGFzQ2xhc3NPYmpPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuYmluZChjbGFzc09iaik7XHJcbiAgICB2YXIgaXNFUzZDbGFzcyA9ICFoYXNDbGFzc09iak93blByb3BlcnR5KFwiX2luY2x1ZGVkQ3RvcnNcIikgJiYgIWhhc0NsYXNzT2JqT3duUHJvcGVydHkoXCJfaW5jbHVkZWRQb3N0Q3RvcnNcIik7XHJcbiAgICBpZiAoaXNFUzZDbGFzcykge1xyXG4gICAgICAgIGNsYXNzT2JqLl9pbmNsdWRlZEN0b3JzID0gY2xhc3NPYmouX2luY2x1ZGVkQ3RvcnMuc2xpY2UoMCk7XHJcbiAgICAgICAgY2xhc3NPYmouX2luY2x1ZGVkUG9zdEN0b3JzID0gY2xhc3NPYmouX2luY2x1ZGVkUG9zdEN0b3JzLnNsaWNlKDApXHJcbiAgICB9XHJcbiAgICBmb3IgKGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgYXJndW1lbnQgPSBhcmd1bWVudHNbaV07XHJcbiAgICAgICAgaWYgKGFyZ3VtZW50LmN0b3IpIHtcclxuICAgICAgICAgICAgY2xhc3NPYmouX2luY2x1ZGVkQ3RvcnMucHVzaChhcmd1bWVudC5jdG9yKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoYXJndW1lbnQucG9zdEN0b3IpIHtcclxuICAgICAgICAgICAgY2xhc3NPYmouX2luY2x1ZGVkUG9zdEN0b3JzLnB1c2goYXJndW1lbnQucG9zdEN0b3IpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAobmFtZSBpbiBhcmd1bWVudCkge1xyXG4gICAgICAgICAgICBpZiAoXCJjdG9yXCIgPT09IG5hbWUgfHwgXCJwb3N0Q3RvclwiID09PSBuYW1lIHx8IFwiZGVmYXVsdFwiID09PSBuYW1lKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNsYXNzT2JqLnByb3RvdHlwZVtuYW1lXSA9IGFyZ3VtZW50W25hbWVdXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNsYXNzT2JqXHJcbn07XHJcbnZhciBzdWJjbGFzc09mID0gZnVuY3Rpb24ocGFyZW50Q2xhc3MpIHtcclxuICAgIHZhciBoYXNQYXJlbnRQcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuYmluZCh0aGlzKShcInBhcmVudFwiKTtcclxuICAgIHZhciBpc0VTNkNsYXNzID0gIWhhc1BhcmVudFByb3BlcnR5ICYmIHRoaXMucGFyZW50O1xyXG4gICAgaWYgKGlzRVM2Q2xhc3MpIHtcclxuICAgICAgICB2YXIgYmFzZUNsYXNzID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpO1xyXG4gICAgICAgIHJldHVybiBiYXNlQ2xhc3MgPT09IHBhcmVudENsYXNzIHx8IGJhc2VDbGFzcy5zdWJjbGFzc09mKHBhcmVudENsYXNzKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAodGhpcy5wYXJlbnQgPT09IHBhcmVudENsYXNzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5wYXJlbnQgfHwgIXRoaXMucGFyZW50LnN1YmNsYXNzT2YpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLnBhcmVudC5zdWJjbGFzc09mKHBhcmVudENsYXNzKVxyXG4gICAgfVxyXG59O1xyXG52YXIgYWJzdHJhY3QgPSBmdW5jdGlvbigpIHtcclxuICAgIHRocm93IGVycm9ycy5FcnJvcihcIkUwMDAxXCIpXHJcbn07XHJcbnZhciBjb3B5U3RhdGljID0gZnVuY3Rpb24oKSB7XHJcbiAgICB2YXIgaGFzT3duID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcclxuICAgIHJldHVybiBmdW5jdGlvbihzb3VyY2UsIGRlc3RpbmF0aW9uKSB7XHJcbiAgICAgICAgZm9yICh2YXIga2V5IGluIHNvdXJjZSkge1xyXG4gICAgICAgICAgICBpZiAoIWhhc093bi5jYWxsKHNvdXJjZSwga2V5KSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZGVzdGluYXRpb25ba2V5XSA9IHNvdXJjZVtrZXldXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59KCk7XHJcbnZhciBjbGFzc0ltcGwgPSBmdW5jdGlvbigpIHt9O1xyXG5jbGFzc0ltcGwuaW5oZXJpdCA9IGZ1bmN0aW9uKG1lbWJlcnMpIHtcclxuICAgIHZhciBpbmhlcml0b3IgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICBpZiAoIXRoaXMgfHwgaXNXaW5kb3codGhpcykgfHwgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgdGhpcy5jb25zdHJ1Y3Rvcikge1xyXG4gICAgICAgICAgICB0aHJvdyBlcnJvcnMuRXJyb3IoXCJFMDAwM1wiKVxyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgaW5zdGFuY2UgPSB0aGlzO1xyXG4gICAgICAgIHZhciBjdG9yID0gaW5zdGFuY2UuY3RvcjtcclxuICAgICAgICB2YXIgaW5jbHVkZWRDdG9ycyA9IGluc3RhbmNlLmNvbnN0cnVjdG9yLl9pbmNsdWRlZEN0b3JzO1xyXG4gICAgICAgIHZhciBpbmNsdWRlZFBvc3RDdG9ycyA9IGluc3RhbmNlLmNvbnN0cnVjdG9yLl9pbmNsdWRlZFBvc3RDdG9ycztcclxuICAgICAgICB2YXIgaTtcclxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaW5jbHVkZWRDdG9ycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpbmNsdWRlZEN0b3JzW2ldLmNhbGwoaW5zdGFuY2UpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjdG9yKSB7XHJcbiAgICAgICAgICAgIGN0b3IuYXBwbHkoaW5zdGFuY2UsIGFyZ3VtZW50cylcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGluY2x1ZGVkUG9zdEN0b3JzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGluY2x1ZGVkUG9zdEN0b3JzW2ldLmNhbGwoaW5zdGFuY2UpXHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIGluaGVyaXRvci5wcm90b3R5cGUgPSBjbG9uZVByb3RvdHlwZSh0aGlzKTtcclxuICAgIGNvcHlTdGF0aWModGhpcywgaW5oZXJpdG9yKTtcclxuICAgIGluaGVyaXRvci5pbmhlcml0ID0gdGhpcy5pbmhlcml0O1xyXG4gICAgaW5oZXJpdG9yLmFic3RyYWN0ID0gYWJzdHJhY3Q7XHJcbiAgICBpbmhlcml0b3IucmVkZWZpbmUgPSByZWRlZmluZTtcclxuICAgIGluaGVyaXRvci5pbmNsdWRlID0gaW5jbHVkZTtcclxuICAgIGluaGVyaXRvci5zdWJjbGFzc09mID0gc3ViY2xhc3NPZjtcclxuICAgIGluaGVyaXRvci5wYXJlbnQgPSB0aGlzO1xyXG4gICAgaW5oZXJpdG9yLl9pbmNsdWRlZEN0b3JzID0gdGhpcy5faW5jbHVkZWRDdG9ycyA/IHRoaXMuX2luY2x1ZGVkQ3RvcnMuc2xpY2UoMCkgOiBbXTtcclxuICAgIGluaGVyaXRvci5faW5jbHVkZWRQb3N0Q3RvcnMgPSB0aGlzLl9pbmNsdWRlZFBvc3RDdG9ycyA/IHRoaXMuX2luY2x1ZGVkUG9zdEN0b3JzLnNsaWNlKDApIDogW107XHJcbiAgICBpbmhlcml0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gaW5oZXJpdG9yO1xyXG4gICAgaW5oZXJpdG9yLnJlZGVmaW5lKG1lbWJlcnMpO1xyXG4gICAgcmV0dXJuIGluaGVyaXRvclxyXG59O1xyXG5jbGFzc0ltcGwuYWJzdHJhY3QgPSBhYnN0cmFjdDtcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3NJbXBsO1xyXG4iLCIvKipcclxuICogRGV2RXh0cmVtZSAoZXNtL2NvcmUvY29uZmlnLmpzKVxyXG4gKiBWZXJzaW9uOiAyMS4xLjRcclxuICogQnVpbGQgZGF0ZTogTW9uIEp1biAyMSAyMDIxXHJcbiAqXHJcbiAqIENvcHlyaWdodCAoYykgMjAxMiAtIDIwMjEgRGV2ZWxvcGVyIEV4cHJlc3MgSW5jLiBBTEwgUklHSFRTIFJFU0VSVkVEXHJcbiAqIFJlYWQgYWJvdXQgRGV2RXh0cmVtZSBsaWNlbnNpbmcgaGVyZTogaHR0cHM6Ly9qcy5kZXZleHByZXNzLmNvbS9MaWNlbnNpbmcvXHJcbiAqL1xyXG5pbXBvcnQge1xyXG4gICAgZXh0ZW5kXHJcbn0gZnJvbSBcIi4vdXRpbHMvZXh0ZW5kXCI7XHJcbmltcG9ydCBlcnJvcnMgZnJvbSBcIi4vZXJyb3JzXCI7XHJcbnZhciBjb25maWcgPSB7XHJcbiAgICBydGxFbmFibGVkOiBmYWxzZSxcclxuICAgIGRlZmF1bHRDdXJyZW5jeTogXCJVU0RcIixcclxuICAgIG9EYXRhRmlsdGVyVG9Mb3dlcjogdHJ1ZSxcclxuICAgIHNlcnZlckRlY2ltYWxTZXBhcmF0b3I6IFwiLlwiLFxyXG4gICAgZGVjaW1hbFNlcGFyYXRvcjogXCIuXCIsXHJcbiAgICB0aG91c2FuZHNTZXBhcmF0b3I6IFwiLFwiLFxyXG4gICAgZm9yY2VJc29EYXRlUGFyc2luZzogdHJ1ZSxcclxuICAgIHdyYXBBY3Rpb25zQmVmb3JlRXhlY3V0ZTogdHJ1ZSxcclxuICAgIHVzZUxlZ2FjeVN0b3JlUmVzdWx0OiBmYWxzZSxcclxuICAgIHVzZUpRdWVyeTogdm9pZCAwLFxyXG4gICAgZWRpdG9yU3R5bGluZ01vZGU6IHZvaWQgMCxcclxuICAgIHVzZUxlZ2FjeVZpc2libGVJbmRleDogZmFsc2UsXHJcbiAgICBmbG9hdGluZ0FjdGlvbkJ1dHRvbkNvbmZpZzoge1xyXG4gICAgICAgIGljb246IFwiYWRkXCIsXHJcbiAgICAgICAgY2xvc2VJY29uOiBcImNsb3NlXCIsXHJcbiAgICAgICAgbGFiZWw6IFwiXCIsXHJcbiAgICAgICAgcG9zaXRpb246IHtcclxuICAgICAgICAgICAgYXQ6IFwicmlnaHQgYm90dG9tXCIsXHJcbiAgICAgICAgICAgIG15OiBcInJpZ2h0IGJvdHRvbVwiLFxyXG4gICAgICAgICAgICBvZmZzZXQ6IHtcclxuICAgICAgICAgICAgICAgIHg6IC0xNixcclxuICAgICAgICAgICAgICAgIHk6IC0xNlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBtYXhTcGVlZERpYWxBY3Rpb25Db3VudDogNSxcclxuICAgICAgICBzaGFkaW5nOiBmYWxzZSxcclxuICAgICAgICBkaXJlY3Rpb246IFwiYXV0b1wiXHJcbiAgICB9LFxyXG4gICAgb3B0aW9uc1BhcnNlcjogb3B0aW9uc1N0cmluZyA9PiB7XHJcbiAgICAgICAgaWYgKFwie1wiICE9PSBvcHRpb25zU3RyaW5nLnRyaW0oKS5jaGFyQXQoMCkpIHtcclxuICAgICAgICAgICAgb3B0aW9uc1N0cmluZyA9IFwie1wiICsgb3B0aW9uc1N0cmluZyArIFwifVwiXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgRnVuY3Rpb24oXCJyZXR1cm4gXCIgKyBvcHRpb25zU3RyaW5nKSgpXHJcbiAgICAgICAgfSBjYXRjaCAoZXgpIHtcclxuICAgICAgICAgICAgdGhyb3cgZXJyb3JzLkVycm9yKFwiRTMwMThcIiwgZXgsIG9wdGlvbnNTdHJpbmcpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG52YXIgZGVwcmVjYXRlZEZpZWxkcyA9IFtcImRlY2ltYWxTZXBhcmF0b3JcIiwgXCJ0aG91c2FuZHNTZXBhcmF0b3JcIl07XHJcbnZhciBjb25maWdNZXRob2QgPSBmdW5jdGlvbigpIHtcclxuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkge1xyXG4gICAgICAgIHJldHVybiBjb25maWdcclxuICAgIH1cclxuICAgIHZhciBuZXdDb25maWcgPSBhcmd1bWVudHMubGVuZ3RoIDw9IDAgPyB2b2lkIDAgOiBhcmd1bWVudHNbMF07XHJcbiAgICBkZXByZWNhdGVkRmllbGRzLmZvckVhY2goZGVwcmVjYXRlZEZpZWxkID0+IHtcclxuICAgICAgICBpZiAobmV3Q29uZmlnW2RlcHJlY2F0ZWRGaWVsZF0pIHtcclxuICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSBcIk5vdywgdGhlIFwiLmNvbmNhdChkZXByZWNhdGVkRmllbGQsIFwiIGlzIHNlbGVjdGVkIGJhc2VkIG9uIHRoZSBzcGVjaWZpZWQgbG9jYWxlLlwiKTtcclxuICAgICAgICAgICAgZXJyb3JzLmxvZyhcIlcwMDAzXCIsIFwiY29uZmlnXCIsIGRlcHJlY2F0ZWRGaWVsZCwgXCIxOS4yXCIsIG1lc3NhZ2UpXHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBleHRlbmQoY29uZmlnLCBuZXdDb25maWcpXHJcbn07XHJcbmlmIChcInVuZGVmaW5lZFwiICE9PSB0eXBlb2YgRGV2RXhwcmVzcyAmJiBEZXZFeHByZXNzLmNvbmZpZykge1xyXG4gICAgY29uZmlnTWV0aG9kKERldkV4cHJlc3MuY29uZmlnKVxyXG59XHJcbmV4cG9ydCBkZWZhdWx0IGNvbmZpZ01ldGhvZDtcclxuIiwiLyoqXHJcbiAqIERldkV4dHJlbWUgKGVzbS9jb3JlL2RvbV9hZGFwdGVyLmpzKVxyXG4gKiBWZXJzaW9uOiAyMS4xLjRcclxuICogQnVpbGQgZGF0ZTogTW9uIEp1biAyMSAyMDIxXHJcbiAqXHJcbiAqIENvcHlyaWdodCAoYykgMjAxMiAtIDIwMjEgRGV2ZWxvcGVyIEV4cHJlc3MgSW5jLiBBTEwgUklHSFRTIFJFU0VSVkVEXHJcbiAqIFJlYWQgYWJvdXQgRGV2RXh0cmVtZSBsaWNlbnNpbmcgaGVyZTogaHR0cHM6Ly9qcy5kZXZleHByZXNzLmNvbS9MaWNlbnNpbmcvXHJcbiAqL1xyXG5pbXBvcnQgaW5qZWN0b3IgZnJvbSBcIi4vdXRpbHMvZGVwZW5kZW5jeV9pbmplY3RvclwiO1xyXG5pbXBvcnQge1xyXG4gICAgbm9vcFxyXG59IGZyb20gXCIuL3V0aWxzL2NvbW1vblwiO1xyXG52YXIgRUxFTUVOVF9OT0RFID0gMTtcclxudmFyIFRFWFRfTk9ERSA9IDM7XHJcbnZhciBET0NVTUVOVF9OT0RFID0gOTtcclxudmFyIG5hdGl2ZURPTUFkYXB0ZXJTdHJhdGVneSA9IHtcclxuICAgIHF1ZXJ5U2VsZWN0b3JBbGw6IChlbGVtZW50LCBzZWxlY3RvcikgPT4gZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSxcclxuICAgIGVsZW1lbnRNYXRjaGVzKGVsZW1lbnQsIHNlbGVjdG9yKSB7XHJcbiAgICAgICAgdmFyIG1hdGNoZXMgPSBlbGVtZW50Lm1hdGNoZXMgfHwgZWxlbWVudC5tYXRjaGVzU2VsZWN0b3IgfHwgZWxlbWVudC5tb3pNYXRjaGVzU2VsZWN0b3IgfHwgZWxlbWVudC5tc01hdGNoZXNTZWxlY3RvciB8fCBlbGVtZW50Lm9NYXRjaGVzU2VsZWN0b3IgfHwgZWxlbWVudC53ZWJraXRNYXRjaGVzU2VsZWN0b3IgfHwgKHNlbGVjdG9yID0+IHtcclxuICAgICAgICAgICAgdmFyIGRvYyA9IGVsZW1lbnQuZG9jdW1lbnQgfHwgZWxlbWVudC5vd25lckRvY3VtZW50O1xyXG4gICAgICAgICAgICBpZiAoIWRvYykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGl0ZW1zID0gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKGRvYywgc2VsZWN0b3IpO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbXNbaV0gPT09IGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIG1hdGNoZXMuY2FsbChlbGVtZW50LCBzZWxlY3RvcilcclxuICAgIH0sXHJcbiAgICBjcmVhdGVFbGVtZW50KHRhZ05hbWUsIGNvbnRleHQpIHtcclxuICAgICAgICBjb250ZXh0ID0gY29udGV4dCB8fCB0aGlzLl9kb2N1bWVudDtcclxuICAgICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpXHJcbiAgICB9LFxyXG4gICAgY3JlYXRlRWxlbWVudE5TKG5zLCB0YWdOYW1lLCBjb250ZXh0KSB7XHJcbiAgICAgICAgY29udGV4dCA9IGNvbnRleHQgfHwgdGhpcy5fZG9jdW1lbnQ7XHJcbiAgICAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlRWxlbWVudE5TKG5zLCB0YWdOYW1lKVxyXG4gICAgfSxcclxuICAgIGNyZWF0ZVRleHROb2RlKHRleHQsIGNvbnRleHQpIHtcclxuICAgICAgICBjb250ZXh0ID0gY29udGV4dCB8fCB0aGlzLl9kb2N1bWVudDtcclxuICAgICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVUZXh0Tm9kZSh0ZXh0KVxyXG4gICAgfSxcclxuICAgIGlzTm9kZTogZWxlbWVudCA9PiBlbGVtZW50ICYmIFwib2JqZWN0XCIgPT09IHR5cGVvZiBlbGVtZW50ICYmIFwibm9kZVR5cGVcIiBpbiBlbGVtZW50ICYmIFwibm9kZU5hbWVcIiBpbiBlbGVtZW50LFxyXG4gICAgaXNFbGVtZW50Tm9kZTogZWxlbWVudCA9PiBlbGVtZW50ICYmIGVsZW1lbnQubm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERSxcclxuICAgIGlzVGV4dE5vZGU6IGVsZW1lbnQgPT4gZWxlbWVudCAmJiBlbGVtZW50Lm5vZGVUeXBlID09PSBURVhUX05PREUsXHJcbiAgICBpc0RvY3VtZW50OiBlbGVtZW50ID0+IGVsZW1lbnQgJiYgZWxlbWVudC5ub2RlVHlwZSA9PT0gRE9DVU1FTlRfTk9ERSxcclxuICAgIHJlbW92ZUVsZW1lbnQoZWxlbWVudCkge1xyXG4gICAgICAgIHZhciBwYXJlbnROb2RlID0gZWxlbWVudCAmJiBlbGVtZW50LnBhcmVudE5vZGU7XHJcbiAgICAgICAgaWYgKHBhcmVudE5vZGUpIHtcclxuICAgICAgICAgICAgcGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlbGVtZW50KVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICBpbnNlcnRFbGVtZW50KHBhcmVudEVsZW1lbnQsIG5ld0VsZW1lbnQsIG5leHRTaWJsaW5nRWxlbWVudCkge1xyXG4gICAgICAgIGlmIChwYXJlbnRFbGVtZW50ICYmIG5ld0VsZW1lbnQgJiYgcGFyZW50RWxlbWVudCAhPT0gbmV3RWxlbWVudCkge1xyXG4gICAgICAgICAgICBpZiAobmV4dFNpYmxpbmdFbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgICBwYXJlbnRFbGVtZW50Lmluc2VydEJlZm9yZShuZXdFbGVtZW50LCBuZXh0U2libGluZ0VsZW1lbnQpXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBwYXJlbnRFbGVtZW50LmFwcGVuZENoaWxkKG5ld0VsZW1lbnQpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgZ2V0QXR0cmlidXRlOiAoZWxlbWVudCwgbmFtZSkgPT4gZWxlbWVudC5nZXRBdHRyaWJ1dGUobmFtZSksXHJcbiAgICBzZXRBdHRyaWJ1dGUoZWxlbWVudCwgbmFtZSwgdmFsdWUpIHtcclxuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSlcclxuICAgIH0sXHJcbiAgICByZW1vdmVBdHRyaWJ1dGUoZWxlbWVudCwgbmFtZSkge1xyXG4gICAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKG5hbWUpXHJcbiAgICB9LFxyXG4gICAgc2V0UHJvcGVydHkoZWxlbWVudCwgbmFtZSwgdmFsdWUpIHtcclxuICAgICAgICBlbGVtZW50W25hbWVdID0gdmFsdWVcclxuICAgIH0sXHJcbiAgICBzZXRUZXh0KGVsZW1lbnQsIHRleHQpIHtcclxuICAgICAgICBpZiAoZWxlbWVudCkge1xyXG4gICAgICAgICAgICBlbGVtZW50LnRleHRDb250ZW50ID0gdGV4dFxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICBzZXRDbGFzcyhlbGVtZW50LCBjbGFzc05hbWUsIGlzQWRkKSB7XHJcbiAgICAgICAgaWYgKDEgPT09IGVsZW1lbnQubm9kZVR5cGUgJiYgY2xhc3NOYW1lKSB7XHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50LmNsYXNzTGlzdCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzQWRkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSlcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzTmFtZSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHZhciBjbGFzc05hbWVTdXBwb3J0ZWQgPSBcInN0cmluZ1wiID09PSB0eXBlb2YgZWxlbWVudC5jbGFzc05hbWU7XHJcbiAgICAgICAgICAgICAgICB2YXIgZWxlbWVudENsYXNzID0gY2xhc3NOYW1lU3VwcG9ydGVkID8gZWxlbWVudC5jbGFzc05hbWUgOiB0aGlzLmdldEF0dHJpYnV0ZShlbGVtZW50LCBcImNsYXNzXCIpIHx8IFwiXCI7XHJcbiAgICAgICAgICAgICAgICB2YXIgY2xhc3NOYW1lcyA9IGVsZW1lbnRDbGFzcy5zcGxpdChcIiBcIik7XHJcbiAgICAgICAgICAgICAgICB2YXIgY2xhc3NJbmRleCA9IGNsYXNzTmFtZXMuaW5kZXhPZihjbGFzc05hbWUpO1xyXG4gICAgICAgICAgICAgICAgdmFyIHJlc3VsdENsYXNzTmFtZTtcclxuICAgICAgICAgICAgICAgIGlmIChpc0FkZCAmJiBjbGFzc0luZGV4IDwgMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdENsYXNzTmFtZSA9IGVsZW1lbnRDbGFzcyA/IGVsZW1lbnRDbGFzcyArIFwiIFwiICsgY2xhc3NOYW1lIDogY2xhc3NOYW1lXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoIWlzQWRkICYmIGNsYXNzSW5kZXggPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZXMuc3BsaWNlKGNsYXNzSW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdENsYXNzTmFtZSA9IGNsYXNzTmFtZXMuam9pbihcIiBcIilcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICh2b2lkIDAgIT09IHJlc3VsdENsYXNzTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjbGFzc05hbWVTdXBwb3J0ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5jbGFzc05hbWUgPSByZXN1bHRDbGFzc05hbWVcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZShlbGVtZW50LCBcImNsYXNzXCIsIHJlc3VsdENsYXNzTmFtZSlcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgc2V0U3R5bGUoZWxlbWVudCwgbmFtZSwgdmFsdWUpIHtcclxuICAgICAgICBlbGVtZW50LnN0eWxlW25hbWVdID0gdmFsdWUgfHwgXCJcIlxyXG4gICAgfSxcclxuICAgIF9kb2N1bWVudDogXCJ1bmRlZmluZWRcIiA9PT0gdHlwZW9mIGRvY3VtZW50ID8gdm9pZCAwIDogZG9jdW1lbnQsXHJcbiAgICBnZXREb2N1bWVudCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZG9jdW1lbnRcclxuICAgIH0sXHJcbiAgICBnZXRBY3RpdmVFbGVtZW50KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9kb2N1bWVudC5hY3RpdmVFbGVtZW50XHJcbiAgICB9LFxyXG4gICAgZ2V0Qm9keSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZG9jdW1lbnQuYm9keVxyXG4gICAgfSxcclxuICAgIGNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKVxyXG4gICAgfSxcclxuICAgIGdldERvY3VtZW50RWxlbWVudCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XHJcbiAgICB9LFxyXG4gICAgZ2V0TG9jYXRpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RvY3VtZW50LmxvY2F0aW9uXHJcbiAgICB9LFxyXG4gICAgZ2V0U2VsZWN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9kb2N1bWVudC5zZWxlY3Rpb25cclxuICAgIH0sXHJcbiAgICBnZXRSZWFkeVN0YXRlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9kb2N1bWVudC5yZWFkeVN0YXRlXHJcbiAgICB9LFxyXG4gICAgZ2V0SGVhZCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZG9jdW1lbnQuaGVhZFxyXG4gICAgfSxcclxuICAgIGhhc0RvY3VtZW50UHJvcGVydHkocHJvcGVydHkpIHtcclxuICAgICAgICByZXR1cm4gcHJvcGVydHkgaW4gdGhpcy5fZG9jdW1lbnRcclxuICAgIH0sXHJcbiAgICBsaXN0ZW4oZWxlbWVudCwgZXZlbnQsIGNhbGxiYWNrLCBvcHRpb25zKSB7XHJcbiAgICAgICAgaWYgKCFlbGVtZW50IHx8ICEoXCJhZGRFdmVudExpc3RlbmVyXCIgaW4gZWxlbWVudCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5vb3BcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBjYWxsYmFjaywgb3B0aW9ucyk7XHJcbiAgICAgICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50LCBjYWxsYmFjaylcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcbmV4cG9ydCBkZWZhdWx0IGluamVjdG9yKG5hdGl2ZURPTUFkYXB0ZXJTdHJhdGVneSk7XHJcbiIsIi8qKlxyXG4gKiBEZXZFeHRyZW1lIChlc20vY29yZS9lbGVtZW50X2RhdGEuanMpXHJcbiAqIFZlcnNpb246IDIxLjEuNFxyXG4gKiBCdWlsZCBkYXRlOiBNb24gSnVuIDIxIDIwMjFcclxuICpcclxuICogQ29weXJpZ2h0IChjKSAyMDEyIC0gMjAyMSBEZXZlbG9wZXIgRXhwcmVzcyBJbmMuIEFMTCBSSUdIVFMgUkVTRVJWRURcclxuICogUmVhZCBhYm91dCBEZXZFeHRyZW1lIGxpY2Vuc2luZyBoZXJlOiBodHRwczovL2pzLmRldmV4cHJlc3MuY29tL0xpY2Vuc2luZy9cclxuICovXHJcbmltcG9ydCBXZWFrTWFwIGZyb20gXCIuL3BvbHlmaWxscy93ZWFrX21hcFwiO1xyXG5pbXBvcnQgZG9tQWRhcHRlciBmcm9tIFwiLi9kb21fYWRhcHRlclwiO1xyXG5pbXBvcnQgZXZlbnRzRW5naW5lIGZyb20gXCIuLi9ldmVudHMvY29yZS9ldmVudHNfZW5naW5lXCI7XHJcbmltcG9ydCBNZW1vcml6ZWRDYWxsYmFja3MgZnJvbSBcIi4vbWVtb3JpemVkX2NhbGxiYWNrc1wiO1xyXG52YXIgZGF0YU1hcCA9IG5ldyBXZWFrTWFwO1xyXG52YXIgc3RyYXRlZ3k7XHJcbmV4cG9ydCB2YXIgc3RyYXRlZ3lDaGFuZ2luZyA9IG5ldyBNZW1vcml6ZWRDYWxsYmFja3M7XHJcbnZhciBiZWZvcmVDbGVhbkRhdGFGdW5jID0gZnVuY3Rpb24oKSB7fTtcclxudmFyIGFmdGVyQ2xlYW5EYXRhRnVuYyA9IGZ1bmN0aW9uKCkge307XHJcbmV4cG9ydCB2YXIgc2V0RGF0YVN0cmF0ZWd5ID0gZnVuY3Rpb24odmFsdWUpIHtcclxuICAgIHN0cmF0ZWd5Q2hhbmdpbmcuZmlyZSh2YWx1ZSk7XHJcbiAgICBzdHJhdGVneSA9IHZhbHVlO1xyXG4gICAgdmFyIGNsZWFuRGF0YSA9IHN0cmF0ZWd5LmNsZWFuRGF0YTtcclxuICAgIHN0cmF0ZWd5LmNsZWFuRGF0YSA9IGZ1bmN0aW9uKG5vZGVzKSB7XHJcbiAgICAgICAgYmVmb3JlQ2xlYW5EYXRhRnVuYyhub2Rlcyk7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IGNsZWFuRGF0YS5jYWxsKHRoaXMsIG5vZGVzKTtcclxuICAgICAgICBhZnRlckNsZWFuRGF0YUZ1bmMobm9kZXMpO1xyXG4gICAgICAgIHJldHVybiByZXN1bHRcclxuICAgIH1cclxufTtcclxuc2V0RGF0YVN0cmF0ZWd5KHtcclxuICAgIGRhdGE6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciBlbGVtZW50ID0gYXJndW1lbnRzWzBdO1xyXG4gICAgICAgIHZhciBrZXkgPSBhcmd1bWVudHNbMV07XHJcbiAgICAgICAgdmFyIHZhbHVlID0gYXJndW1lbnRzWzJdO1xyXG4gICAgICAgIGlmICghZWxlbWVudCkge1xyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGVsZW1lbnREYXRhID0gZGF0YU1hcC5nZXQoZWxlbWVudCk7XHJcbiAgICAgICAgaWYgKCFlbGVtZW50RGF0YSkge1xyXG4gICAgICAgICAgICBlbGVtZW50RGF0YSA9IHt9O1xyXG4gICAgICAgICAgICBkYXRhTWFwLnNldChlbGVtZW50LCBlbGVtZW50RGF0YSlcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHZvaWQgMCA9PT0ga2V5KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBlbGVtZW50RGF0YVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoMiA9PT0gYXJndW1lbnRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZWxlbWVudERhdGFba2V5XVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbGVtZW50RGF0YVtrZXldID0gdmFsdWU7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlXHJcbiAgICB9LFxyXG4gICAgcmVtb3ZlRGF0YTogZnVuY3Rpb24oZWxlbWVudCwga2V5KSB7XHJcbiAgICAgICAgaWYgKCFlbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodm9pZCAwID09PSBrZXkpIHtcclxuICAgICAgICAgICAgZGF0YU1hcC5kZWxldGUoZWxlbWVudClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB2YXIgZWxlbWVudERhdGEgPSBkYXRhTWFwLmdldChlbGVtZW50KTtcclxuICAgICAgICAgICAgaWYgKGVsZW1lbnREYXRhKSB7XHJcbiAgICAgICAgICAgICAgICBkZWxldGUgZWxlbWVudERhdGFba2V5XVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIGNsZWFuRGF0YTogZnVuY3Rpb24oZWxlbWVudHMpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGV2ZW50c0VuZ2luZS5vZmYoZWxlbWVudHNbaV0pO1xyXG4gICAgICAgICAgICBkYXRhTWFwLmRlbGV0ZShlbGVtZW50c1tpXSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0pO1xyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGF0YVN0cmF0ZWd5KCkge1xyXG4gICAgcmV0dXJuIHN0cmF0ZWd5XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGRhdGEoKSB7XHJcbiAgICByZXR1cm4gc3RyYXRlZ3kuZGF0YS5hcHBseSh0aGlzLCBhcmd1bWVudHMpXHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGJlZm9yZUNsZWFuRGF0YShjYWxsYmFjaykge1xyXG4gICAgYmVmb3JlQ2xlYW5EYXRhRnVuYyA9IGNhbGxiYWNrXHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGFmdGVyQ2xlYW5EYXRhKGNhbGxiYWNrKSB7XHJcbiAgICBhZnRlckNsZWFuRGF0YUZ1bmMgPSBjYWxsYmFja1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBjbGVhbkRhdGEobm9kZXMpIHtcclxuICAgIHJldHVybiBzdHJhdGVneS5jbGVhbkRhdGEuY2FsbCh0aGlzLCBub2RlcylcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlRGF0YShlbGVtZW50LCBrZXkpIHtcclxuICAgIHJldHVybiBzdHJhdGVneS5yZW1vdmVEYXRhLmNhbGwodGhpcywgZWxlbWVudCwga2V5KVxyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBjbGVhbkRhdGFSZWN1cnNpdmUoZWxlbWVudCwgY2xlYW5TZWxmKSB7XHJcbiAgICBpZiAoIWRvbUFkYXB0ZXIuaXNFbGVtZW50Tm9kZShlbGVtZW50KSkge1xyXG4gICAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgdmFyIGNoaWxkRWxlbWVudHMgPSBlbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiKlwiKTtcclxuICAgIHN0cmF0ZWd5LmNsZWFuRGF0YShjaGlsZEVsZW1lbnRzKTtcclxuICAgIGlmIChjbGVhblNlbGYpIHtcclxuICAgICAgICBzdHJhdGVneS5jbGVhbkRhdGEoW2VsZW1lbnRdKVxyXG4gICAgfVxyXG59XHJcbiIsIi8qKlxyXG4gKiBEZXZFeHRyZW1lIChlc20vY29yZS9lcnJvcnMuanMpXHJcbiAqIFZlcnNpb246IDIxLjEuNFxyXG4gKiBCdWlsZCBkYXRlOiBNb24gSnVuIDIxIDIwMjFcclxuICpcclxuICogQ29weXJpZ2h0IChjKSAyMDEyIC0gMjAyMSBEZXZlbG9wZXIgRXhwcmVzcyBJbmMuIEFMTCBSSUdIVFMgUkVTRVJWRURcclxuICogUmVhZCBhYm91dCBEZXZFeHRyZW1lIGxpY2Vuc2luZyBoZXJlOiBodHRwczovL2pzLmRldmV4cHJlc3MuY29tL0xpY2Vuc2luZy9cclxuICovXHJcbmltcG9ydCBlcnJvclV0aWxzIGZyb20gXCIuL3V0aWxzL2Vycm9yXCI7XHJcbmV4cG9ydCBkZWZhdWx0IGVycm9yVXRpbHMoe1xyXG4gICAgRTAwMDE6IFwiTWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZFwiLFxyXG4gICAgRTAwMDI6IFwiTWVtYmVyIG5hbWUgY29sbGlzaW9uOiB7MH1cIixcclxuICAgIEUwMDAzOiBcIkEgY2xhc3MgbXVzdCBiZSBpbnN0YW50aWF0ZWQgdXNpbmcgdGhlICduZXcnIGtleXdvcmRcIixcclxuICAgIEUwMDA0OiBcIlRoZSBOQU1FIHByb3BlcnR5IG9mIHRoZSBjb21wb25lbnQgaXMgbm90IHNwZWNpZmllZFwiLFxyXG4gICAgRTAwMDU6IFwiVW5rbm93biBkZXZpY2VcIixcclxuICAgIEUwMDA2OiBcIlVua25vd24gZW5kcG9pbnQga2V5IGlzIHJlcXVlc3RlZFwiLFxyXG4gICAgRTAwMDc6IFwiJ0ludmFsaWRhdGUnIG1ldGhvZCBpcyBjYWxsZWQgb3V0c2lkZSB0aGUgdXBkYXRlIHRyYW5zYWN0aW9uXCIsXHJcbiAgICBFMDAwODogXCJUeXBlIG9mIHRoZSBvcHRpb24gbmFtZSBpcyBub3QgYXBwcm9wcmlhdGUgdG8gY3JlYXRlIGFuIGFjdGlvblwiLFxyXG4gICAgRTAwMDk6IFwiQ29tcG9uZW50ICd7MH0nIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZCBmb3IgYW4gZWxlbWVudFwiLFxyXG4gICAgRTAwMTA6IFwiQW5pbWF0aW9uIGNvbmZpZ3VyYXRpb24gd2l0aCB0aGUgJ3swfScgdHlwZSByZXF1aXJlcyAnezF9JyBjb25maWd1cmF0aW9uIGFzIHsyfVwiLFxyXG4gICAgRTAwMTE6IFwiVW5rbm93biBhbmltYXRpb24gdHlwZSAnezB9J1wiLFxyXG4gICAgRTAwMTI6IFwialF1ZXJ5IHZlcnNpb24gaXMgdG9vIG9sZC4gUGxlYXNlIHVwZ3JhZGUgalF1ZXJ5IHRvIDEuMTAuMCBvciBsYXRlclwiLFxyXG4gICAgRTAwMTM6IFwiS25vY2tvdXRKUyB2ZXJzaW9uIGlzIHRvbyBvbGQuIFBsZWFzZSB1cGdyYWRlIEtub2Nrb3V0SlMgdG8gMi4zLjAgb3IgbGF0ZXJcIixcclxuICAgIEUwMDE0OiBcIlRoZSAncmVsZWFzZScgbWV0aG9kIHNob3VsZG4ndCBiZSBjYWxsZWQgZm9yIGFuIHVubG9ja2VkIExvY2sgb2JqZWN0XCIsXHJcbiAgICBFMDAxNTogXCJRdWV1ZWQgdGFzayByZXR1cm5lZCBhbiB1bmV4cGVjdGVkIHJlc3VsdFwiLFxyXG4gICAgRTAwMTc6IFwiRXZlbnQgbmFtZXNwYWNlIGlzIG5vdCBkZWZpbmVkXCIsXHJcbiAgICBFMDAxODogXCJEZXZFeHByZXNzLnVpLkRldkV4cHJlc3NQb3B1cCB3aWRnZXQgaXMgcmVxdWlyZWRcIixcclxuICAgIEUwMDIwOiBcIlRlbXBsYXRlIGVuZ2luZSAnezB9JyBpcyBub3Qgc3VwcG9ydGVkXCIsXHJcbiAgICBFMDAyMTogXCJVbmtub3duIHRoZW1lIGlzIHNldDogezB9XCIsXHJcbiAgICBFMDAyMjogXCJMSU5LW3JlbD1EZXZFeHByZXNzLXRoZW1lXSB0YWdzIG11c3QgZ28gYmVmb3JlIERldkV4cHJlc3MgaW5jbHVkZWQgc2NyaXB0c1wiLFxyXG4gICAgRTAwMjM6IFwiVGVtcGxhdGUgbmFtZSBpcyBub3Qgc3BlY2lmaWVkXCIsXHJcbiAgICBFMDAyNDogXCJEZXZFeHRyZW1lIGJ1bmRsZSBhbHJlYWR5IGluY2x1ZGVkXCIsXHJcbiAgICBFMDAyNTogXCJVbmV4cGVjdGVkIGFyZ3VtZW50IHR5cGVcIixcclxuICAgIEUwMTAwOiBcIlVua25vd24gdmFsaWRhdGlvbiB0eXBlIGlzIGRldGVjdGVkXCIsXHJcbiAgICBFMDEwMTogXCJNaXNjb25maWd1cmVkIHJhbmdlIHZhbGlkYXRpb24gcnVsZSBpcyBkZXRlY3RlZFwiLFxyXG4gICAgRTAxMDI6IFwiTWlzY29uZmlndXJlZCBjb21wYXJpc29uIHZhbGlkYXRpb24gcnVsZSBpcyBkZXRlY3RlZFwiLFxyXG4gICAgRTAxMDM6IFwidmFsaWRhdGlvbkNhbGxiYWNrIG9mIGFuIGFzeW5jaHJvbm91cyBydWxlIHNob3VsZCByZXR1cm4gYSBqUXVlcnkgb3IgYSBuYXRpdmUgcHJvbWlzZVwiLFxyXG4gICAgRTAxMTA6IFwiVW5rbm93biB2YWxpZGF0aW9uIGdyb3VwIGlzIGRldGVjdGVkXCIsXHJcbiAgICBFMDEyMDogXCJBZGFwdGVyIGZvciBhIERldkV4cHJlc3NWYWxpZGF0b3IgY29tcG9uZW50IGNhbm5vdCBiZSBjb25maWd1cmVkXCIsXHJcbiAgICBFMDEyMTogXCJUaGUgJ2N1c3RvbUl0ZW0nIGZpZWxkIG9mIHRoZSAnb25DdXN0b21JdGVtQ3JlYXRpbmcnIGZ1bmN0aW9uJ3MgcGFyYW1ldGVyIHNob3VsZCBjb250YWluIGEgY3VzdG9tIGl0ZW0gb3IgUHJvbWlzZSB0aGF0IGlzIHJlc29sdmVkIGFmdGVyIHRoZSBpdGVtIGlzIGNyZWF0ZWQuXCIsXHJcbiAgICBXMDAwMDogXCInezB9JyBpcyBkZXByZWNhdGVkIGluIHsxfS4gezJ9XCIsXHJcbiAgICBXMDAwMTogXCJ7MH0gLSAnezF9JyBvcHRpb24gaXMgZGVwcmVjYXRlZCBpbiB7Mn0uIHszfVwiLFxyXG4gICAgVzAwMDI6IFwiezB9IC0gJ3sxfScgbWV0aG9kIGlzIGRlcHJlY2F0ZWQgaW4gezJ9LiB7M31cIixcclxuICAgIFcwMDAzOiBcInswfSAtICd7MX0nIHByb3BlcnR5IGlzIGRlcHJlY2F0ZWQgaW4gezJ9LiB7M31cIixcclxuICAgIFcwMDA0OiBcIlRpbWVvdXQgZm9yIHRoZW1lIGxvYWRpbmcgaXMgb3ZlcjogezB9XCIsXHJcbiAgICBXMDAwNTogXCInezB9JyBldmVudCBpcyBkZXByZWNhdGVkIGluIHsxfS4gezJ9XCIsXHJcbiAgICBXMDAwNjogXCJJbnZhbGlkIHJlY3VycmVuY2UgcnVsZTogJ3swfSdcIixcclxuICAgIFcwMDA3OiBcIid7MH0nIEdsb2JhbGl6ZSBjdWx0dXJlIGlzIG5vdCBkZWZpbmVkXCIsXHJcbiAgICBXMDAwODogXCJJbnZhbGlkIHZpZXcgbmFtZTogJ3swfSdcIixcclxuICAgIFcwMDA5OiBcIkludmFsaWQgdGltZSB6b25lIG5hbWU6ICd7MH0nXCIsXHJcbiAgICBXMDAxMDogXCJ7MH0gaXMgZGVwcmVjYXRlZCBpbiB7MX0uIHsyfVwiLFxyXG4gICAgVzAwMTE6IFwiTnVtYmVyIHBhcnNpbmcgaXMgaW52b2tlZCB3aGlsZSB0aGUgcGFyc2VyIGlzIG5vdCBkZWZpbmVkXCIsXHJcbiAgICBXMDAxMjogXCJEYXRlIHBhcnNpbmcgaXMgaW52b2tlZCB3aGlsZSB0aGUgcGFyc2VyIGlzIG5vdCBkZWZpbmVkXCIsXHJcbiAgICBXMDAxMzogXCInezB9JyBmaWxlIGlzIGRlcHJlY2F0ZWQgaW4gezF9LiB7Mn1cIixcclxuICAgIFcwMDE0OiBcInswfSAtICd7MX0nIHR5cGUgaXMgZGVwcmVjYXRlZCBpbiB7Mn0uIHszfVwiLFxyXG4gICAgVzAwMTU6IFwiSW5zdGVhZCBvZiByZXR1cm5pbmcgYSB2YWx1ZSBmcm9tIHRoZSAnezB9JyBmdW5jdGlvbiwgd3JpdGUgaXQgaW50byB0aGUgJ3sxfScgZmllbGQgb2YgdGhlIGZ1bmN0aW9uJ3MgcGFyYW1ldGVyLlwiLFxyXG4gICAgVzAwMTY6ICdUaGUgXCJ7MH1cIiBvcHRpb24gZG9lcyBub3QgYWNjZXB0IHRoZSBcInsxfVwiIHZhbHVlIHNpbmNlIHYuezJ9LiB7M30uJ1xyXG59KTtcclxuIiwiLyoqXHJcbiAqIERldkV4dHJlbWUgKGVzbS9jb3JlL2d1aWQuanMpXHJcbiAqIFZlcnNpb246IDIxLjEuNFxyXG4gKiBCdWlsZCBkYXRlOiBNb24gSnVuIDIxIDIwMjFcclxuICpcclxuICogQ29weXJpZ2h0IChjKSAyMDEyIC0gMjAyMSBEZXZlbG9wZXIgRXhwcmVzcyBJbmMuIEFMTCBSSUdIVFMgUkVTRVJWRURcclxuICogUmVhZCBhYm91dCBEZXZFeHRyZW1lIGxpY2Vuc2luZyBoZXJlOiBodHRwczovL2pzLmRldmV4cHJlc3MuY29tL0xpY2Vuc2luZy9cclxuICovXHJcbmltcG9ydCBDbGFzcyBmcm9tIFwiLi9jbGFzc1wiO1xyXG52YXIgR3VpZCA9IENsYXNzLmluaGVyaXQoe1xyXG4gICAgY3RvcjogZnVuY3Rpb24odmFsdWUpIHtcclxuICAgICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdmFsdWUgPSBTdHJpbmcodmFsdWUpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3ZhbHVlID0gdGhpcy5fbm9ybWFsaXplKHZhbHVlIHx8IHRoaXMuX2dlbmVyYXRlKCkpXHJcbiAgICB9LFxyXG4gICAgX25vcm1hbGl6ZTogZnVuY3Rpb24odmFsdWUpIHtcclxuICAgICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoL1teYS1mMC05XS9naSwgXCJcIikudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICB3aGlsZSAodmFsdWUubGVuZ3RoIDwgMzIpIHtcclxuICAgICAgICAgICAgdmFsdWUgKz0gXCIwXCJcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFt2YWx1ZS5zdWJzdHIoMCwgOCksIHZhbHVlLnN1YnN0cig4LCA0KSwgdmFsdWUuc3Vic3RyKDEyLCA0KSwgdmFsdWUuc3Vic3RyKDE2LCA0KSwgdmFsdWUuc3Vic3RyKDIwLCAxMildLmpvaW4oXCItXCIpXHJcbiAgICB9LFxyXG4gICAgX2dlbmVyYXRlOiBmdW5jdGlvbigpIHtcclxuICAgICAgICB2YXIgdmFsdWUgPSBcIlwiO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMzI7IGkrKykge1xyXG4gICAgICAgICAgICB2YWx1ZSArPSBNYXRoLnJvdW5kKDE1ICogTWF0aC5yYW5kb20oKSkudG9TdHJpbmcoMTYpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB2YWx1ZVxyXG4gICAgfSxcclxuICAgIHRvU3RyaW5nOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWVcclxuICAgIH0sXHJcbiAgICB2YWx1ZU9mOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWVcclxuICAgIH0sXHJcbiAgICB0b0pTT046IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl92YWx1ZVxyXG4gICAgfVxyXG59KTtcclxuZXhwb3J0IGRlZmF1bHQgR3VpZDtcclxuIiwiLyoqXHJcbiAqIERldkV4dHJlbWUgKGVzbS9jb3JlL21lbW9yaXplZF9jYWxsYmFja3MuanMpXHJcbiAqIFZlcnNpb246IDIxLjEuNFxyXG4gKiBCdWlsZCBkYXRlOiBNb24gSnVuIDIxIDIwMjFcclxuICpcclxuICogQ29weXJpZ2h0IChjKSAyMDEyIC0gMjAyMSBEZXZlbG9wZXIgRXhwcmVzcyBJbmMuIEFMTCBSSUdIVFMgUkVTRVJWRURcclxuICogUmVhZCBhYm91dCBEZXZFeHRyZW1lIGxpY2Vuc2luZyBoZXJlOiBodHRwczovL2pzLmRldmV4cHJlc3MuY29tL0xpY2Vuc2luZy9cclxuICovXHJcbmltcG9ydCB7XHJcbiAgICBlYWNoXHJcbn0gZnJvbSBcIi4uL2NvcmUvdXRpbHMvaXRlcmF0b3JcIjtcclxuaW1wb3J0IENhbGxiYWNrcyBmcm9tIFwiLi91dGlscy9jYWxsYmFja3NcIjtcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWVtb3JpemVkQ2FsbGJhY2tzIHtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMubWVtb3J5ID0gW107XHJcbiAgICAgICAgdGhpcy5jYWxsYmFja3MgPSBDYWxsYmFja3MoKVxyXG4gICAgfVxyXG4gICAgYWRkKGZuKSB7XHJcbiAgICAgICAgZWFjaCh0aGlzLm1lbW9yeSwgKF8sIGl0ZW0pID0+IGZuLmFwcGx5KGZuLCBpdGVtKSk7XHJcbiAgICAgICAgdGhpcy5jYWxsYmFja3MuYWRkKGZuKVxyXG4gICAgfVxyXG4gICAgcmVtb3ZlKGZuKSB7XHJcbiAgICAgICAgdGhpcy5jYWxsYmFja3MucmVtb3ZlKGZuKVxyXG4gICAgfVxyXG4gICAgZmlyZSgpIHtcclxuICAgICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcclxuICAgICAgICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm1lbW9yeS5wdXNoKGFyZ3MpO1xyXG4gICAgICAgIHRoaXMuY2FsbGJhY2tzLmZpcmUuYXBwbHkodGhpcy5jYWxsYmFja3MsIGFyZ3MpXHJcbiAgICB9XHJcbn1cclxuIiwiLyoqXHJcbiAqIERldkV4dHJlbWUgKGVzbS9jb3JlL3BvbHlmaWxscy93ZWFrX21hcC5qcylcclxuICogVmVyc2lvbjogMjEuMS40XHJcbiAqIEJ1aWxkIGRhdGU6IE1vbiBKdW4gMjEgMjAyMVxyXG4gKlxyXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTIgLSAyMDIxIERldmVsb3BlciBFeHByZXNzIEluYy4gQUxMIFJJR0hUUyBSRVNFUlZFRFxyXG4gKiBSZWFkIGFib3V0IERldkV4dHJlbWUgbGljZW5zaW5nIGhlcmU6IGh0dHBzOi8vanMuZGV2ZXhwcmVzcy5jb20vTGljZW5zaW5nL1xyXG4gKi9cclxuaW1wb3J0IHtcclxuICAgIGluQXJyYXlcclxufSBmcm9tIFwiLi4vdXRpbHMvYXJyYXlcIjtcclxuaW1wb3J0IHtcclxuICAgIGhhc1dpbmRvdyxcclxuICAgIGdldFdpbmRvd1xyXG59IGZyb20gXCIuLi91dGlscy93aW5kb3dcIjtcclxudmFyIHdlYWtNYXAgPSBoYXNXaW5kb3coKSA/IGdldFdpbmRvdygpLldlYWtNYXAgOiBXZWFrTWFwO1xyXG5pZiAoIXdlYWtNYXApIHtcclxuICAgIHdlYWtNYXAgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICB2YXIga2V5cyA9IFtdO1xyXG4gICAgICAgIHZhciB2YWx1ZXMgPSBbXTtcclxuICAgICAgICB0aGlzLnNldCA9IGZ1bmN0aW9uKGtleSwgdmFsdWUpIHtcclxuICAgICAgICAgICAgdmFyIGluZGV4ID0gaW5BcnJheShrZXksIGtleXMpO1xyXG4gICAgICAgICAgICBpZiAoLTEgPT09IGluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goa2V5KTtcclxuICAgICAgICAgICAgICAgIHZhbHVlcy5wdXNoKHZhbHVlKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdmFsdWVzW2luZGV4XSA9IHZhbHVlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuZ2V0ID0gZnVuY3Rpb24oa2V5KSB7XHJcbiAgICAgICAgICAgIHZhciBpbmRleCA9IGluQXJyYXkoa2V5LCBrZXlzKTtcclxuICAgICAgICAgICAgaWYgKC0xID09PSBpbmRleCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlc1tpbmRleF1cclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuaGFzID0gZnVuY3Rpb24oa2V5KSB7XHJcbiAgICAgICAgICAgIHZhciBpbmRleCA9IGluQXJyYXkoa2V5LCBrZXlzKTtcclxuICAgICAgICAgICAgaWYgKC0xID09PSBpbmRleCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRydWVcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuZGVsZXRlID0gZnVuY3Rpb24oa2V5KSB7XHJcbiAgICAgICAgICAgIHZhciBpbmRleCA9IGluQXJyYXkoa2V5LCBrZXlzKTtcclxuICAgICAgICAgICAgaWYgKC0xID09PSBpbmRleCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAga2V5cy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICB2YWx1ZXMuc3BsaWNlKGluZGV4LCAxKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5leHBvcnQgZGVmYXVsdCB3ZWFrTWFwO1xyXG4iLCIvKipcclxuICogRGV2RXh0cmVtZSAoZXNtL2NvcmUvcmVuZGVyZXIuanMpXHJcbiAqIFZlcnNpb246IDIxLjEuNFxyXG4gKiBCdWlsZCBkYXRlOiBNb24gSnVuIDIxIDIwMjFcclxuICpcclxuICogQ29weXJpZ2h0IChjKSAyMDEyIC0gMjAyMSBEZXZlbG9wZXIgRXhwcmVzcyBJbmMuIEFMTCBSSUdIVFMgUkVTRVJWRURcclxuICogUmVhZCBhYm91dCBEZXZFeHRyZW1lIGxpY2Vuc2luZyBoZXJlOiBodHRwczovL2pzLmRldmV4cHJlc3MuY29tL0xpY2Vuc2luZy9cclxuICovXHJcbmltcG9ydCByZW5kZXJlckJhc2UgZnJvbSBcIi4vcmVuZGVyZXJfYmFzZVwiO1xyXG5leHBvcnQgZGVmYXVsdCByZW5kZXJlckJhc2UuZ2V0KCk7XHJcbiIsIi8qKlxyXG4gKiBEZXZFeHRyZW1lIChlc20vY29yZS9yZW5kZXJlcl9iYXNlLmpzKVxyXG4gKiBWZXJzaW9uOiAyMS4xLjRcclxuICogQnVpbGQgZGF0ZTogTW9uIEp1biAyMSAyMDIxXHJcbiAqXHJcbiAqIENvcHlyaWdodCAoYykgMjAxMiAtIDIwMjEgRGV2ZWxvcGVyIEV4cHJlc3MgSW5jLiBBTEwgUklHSFRTIFJFU0VSVkVEXHJcbiAqIFJlYWQgYWJvdXQgRGV2RXh0cmVtZSBsaWNlbnNpbmcgaGVyZTogaHR0cHM6Ly9qcy5kZXZleHByZXNzLmNvbS9MaWNlbnNpbmcvXHJcbiAqL1xyXG5pbXBvcnQge1xyXG4gICAgY2xlYW5EYXRhUmVjdXJzaXZlLFxyXG4gICAgcmVtb3ZlRGF0YSxcclxuICAgIGRhdGEgYXMgZWxlbWVudERhdGFcclxufSBmcm9tIFwiLi9lbGVtZW50X2RhdGFcIjtcclxuaW1wb3J0IGRvbUFkYXB0ZXIgZnJvbSBcIi4vZG9tX2FkYXB0ZXJcIjtcclxuaW1wb3J0IHtcclxuICAgIGdldFdpbmRvd1xyXG59IGZyb20gXCIuL3V0aWxzL3dpbmRvd1wiO1xyXG5pbXBvcnQge1xyXG4gICAgaXNPYmplY3QsXHJcbiAgICBpc1dpbmRvdyxcclxuICAgIGlzUGxhaW5PYmplY3QsXHJcbiAgICBpc1N0cmluZyxcclxuICAgIGlzTnVtZXJpYyxcclxuICAgIGlzRGVmaW5lZCxcclxuICAgIGlzRnVuY3Rpb24sXHJcbiAgICB0eXBlXHJcbn0gZnJvbSBcIi4vdXRpbHMvdHlwZVwiO1xyXG5pbXBvcnQge1xyXG4gICAgc3R5bGVQcm9wLFxyXG4gICAgbm9ybWFsaXplU3R5bGVQcm9wXHJcbn0gZnJvbSBcIi4vdXRpbHMvc3R5bGVcIjtcclxuaW1wb3J0IHtcclxuICAgIGdldFNpemUsXHJcbiAgICBnZXRFbGVtZW50Qm94UGFyYW1zXHJcbn0gZnJvbSBcIi4vdXRpbHMvc2l6ZVwiO1xyXG5pbXBvcnQge1xyXG4gICAgcGFyc2VIVE1MLFxyXG4gICAgaXNUYWJsZVBhcnRcclxufSBmcm9tIFwiLi91dGlscy9odG1sX3BhcnNlclwiO1xyXG52YXIgd2luZG93ID0gZ2V0V2luZG93KCk7XHJcbnZhciByZW5kZXJlcjtcclxudmFyIGluaXRSZW5kZXIgPSBmdW5jdGlvbihzZWxlY3RvciwgY29udGV4dCkge1xyXG4gICAgaWYgKCFzZWxlY3Rvcikge1xyXG4gICAgICAgIHRoaXMubGVuZ3RoID0gMDtcclxuICAgICAgICByZXR1cm4gdGhpc1xyXG4gICAgfVxyXG4gICAgaWYgKFwic3RyaW5nXCIgPT09IHR5cGVvZiBzZWxlY3Rvcikge1xyXG4gICAgICAgIGlmIChcImJvZHlcIiA9PT0gc2VsZWN0b3IpIHtcclxuICAgICAgICAgICAgdGhpc1swXSA9IGNvbnRleHQgPyBjb250ZXh0LmJvZHkgOiBkb21BZGFwdGVyLmdldEJvZHkoKTtcclxuICAgICAgICAgICAgdGhpcy5sZW5ndGggPSAxO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpc1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb250ZXh0ID0gY29udGV4dCB8fCBkb21BZGFwdGVyLmdldERvY3VtZW50KCk7XHJcbiAgICAgICAgaWYgKFwiPFwiID09PSBzZWxlY3RvclswXSkge1xyXG4gICAgICAgICAgICB0aGlzWzBdID0gZG9tQWRhcHRlci5jcmVhdGVFbGVtZW50KHNlbGVjdG9yLnNsaWNlKDEsIC0xKSwgY29udGV4dCk7XHJcbiAgICAgICAgICAgIHRoaXMubGVuZ3RoID0gMTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXNcclxuICAgICAgICB9IFtdLnB1c2guYXBwbHkodGhpcywgZG9tQWRhcHRlci5xdWVyeVNlbGVjdG9yQWxsKGNvbnRleHQsIHNlbGVjdG9yKSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuICAgIH0gZWxzZSBpZiAoZG9tQWRhcHRlci5pc05vZGUoc2VsZWN0b3IpIHx8IGlzV2luZG93KHNlbGVjdG9yKSkge1xyXG4gICAgICAgIHRoaXNbMF0gPSBzZWxlY3RvcjtcclxuICAgICAgICB0aGlzLmxlbmd0aCA9IDE7XHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShzZWxlY3RvcikpIHtcclxuICAgICAgICBbXS5wdXNoLmFwcGx5KHRoaXMsIHNlbGVjdG9yKTtcclxuICAgICAgICByZXR1cm4gdGhpc1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlbmRlcmVyKHNlbGVjdG9yLnRvQXJyYXkgPyBzZWxlY3Rvci50b0FycmF5KCkgOiBbc2VsZWN0b3JdKVxyXG59O1xyXG5yZW5kZXJlciA9IGZ1bmN0aW9uKHNlbGVjdG9yLCBjb250ZXh0KSB7XHJcbiAgICByZXR1cm4gbmV3IGluaXRSZW5kZXIoc2VsZWN0b3IsIGNvbnRleHQpXHJcbn07XHJcbnJlbmRlcmVyLmZuID0ge1xyXG4gICAgZHhSZW5kZXJlcjogdHJ1ZVxyXG59O1xyXG5pbml0UmVuZGVyLnByb3RvdHlwZSA9IHJlbmRlcmVyLmZuO1xyXG52YXIgcmVwZWF0TWV0aG9kID0gZnVuY3Rpb24obWV0aG9kTmFtZSwgYXJncykge1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIGl0ZW0gPSByZW5kZXJlcih0aGlzW2ldKTtcclxuICAgICAgICBpdGVtW21ldGhvZE5hbWVdLmFwcGx5KGl0ZW0sIGFyZ3MpXHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpc1xyXG59O1xyXG52YXIgc2V0QXR0cmlidXRlVmFsdWUgPSBmdW5jdGlvbihlbGVtZW50LCBhdHRyTmFtZSwgdmFsdWUpIHtcclxuICAgIGlmICh2b2lkIDAgIT09IHZhbHVlICYmIG51bGwgIT09IHZhbHVlKSB7XHJcbiAgICAgICAgZG9tQWRhcHRlci5zZXRBdHRyaWJ1dGUoZWxlbWVudCwgYXR0ck5hbWUsIHZhbHVlKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBkb21BZGFwdGVyLnJlbW92ZUF0dHJpYnV0ZShlbGVtZW50LCBhdHRyTmFtZSlcclxuICAgIH1cclxufTtcclxuaW5pdFJlbmRlci5wcm90b3R5cGUuc2hvdyA9IGZ1bmN0aW9uKCkge1xyXG4gICAgcmV0dXJuIHRoaXMudG9nZ2xlKHRydWUpXHJcbn07XHJcbmluaXRSZW5kZXIucHJvdG90eXBlLmhpZGUgPSBmdW5jdGlvbigpIHtcclxuICAgIHJldHVybiB0aGlzLnRvZ2dsZShmYWxzZSlcclxufTtcclxuaW5pdFJlbmRlci5wcm90b3R5cGUudG9nZ2xlID0gZnVuY3Rpb24odmFsdWUpIHtcclxuICAgIGlmICh0aGlzWzBdKSB7XHJcbiAgICAgICAgdGhpcy50b2dnbGVDbGFzcyhcImR4LXN0YXRlLWludmlzaWJsZVwiLCAhdmFsdWUpXHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpc1xyXG59O1xyXG5pbml0UmVuZGVyLnByb3RvdHlwZS5hdHRyID0gZnVuY3Rpb24oYXR0ck5hbWUsIHZhbHVlKSB7XHJcbiAgICBpZiAodGhpcy5sZW5ndGggPiAxICYmIGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgcmV0dXJuIHJlcGVhdE1ldGhvZC5jYWxsKHRoaXMsIFwiYXR0clwiLCBhcmd1bWVudHMpXHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXNbMF0pIHtcclxuICAgICAgICBpZiAoaXNPYmplY3QoYXR0ck5hbWUpIHx8IHZvaWQgMCAhPT0gdmFsdWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXNcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXNbMF0uZ2V0QXR0cmlidXRlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcChhdHRyTmFtZSwgdmFsdWUpXHJcbiAgICB9XHJcbiAgICBpZiAoXCJzdHJpbmdcIiA9PT0gdHlwZW9mIGF0dHJOYW1lICYmIDEgPT09IGFyZ3VtZW50cy5sZW5ndGgpIHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gdGhpc1swXS5nZXRBdHRyaWJ1dGUoYXR0ck5hbWUpO1xyXG4gICAgICAgIHJldHVybiBudWxsID09IHJlc3VsdCA/IHZvaWQgMCA6IHJlc3VsdFxyXG4gICAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KGF0dHJOYW1lKSkge1xyXG4gICAgICAgIGZvciAodmFyIGtleSBpbiBhdHRyTmFtZSkge1xyXG4gICAgICAgICAgICB0aGlzLmF0dHIoa2V5LCBhdHRyTmFtZVtrZXldKVxyXG4gICAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgc2V0QXR0cmlidXRlVmFsdWUodGhpc1swXSwgYXR0ck5hbWUsIHZhbHVlKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXNcclxufTtcclxuaW5pdFJlbmRlci5wcm90b3R5cGUucmVtb3ZlQXR0ciA9IGZ1bmN0aW9uKGF0dHJOYW1lKSB7XHJcbiAgICB0aGlzWzBdICYmIGRvbUFkYXB0ZXIucmVtb3ZlQXR0cmlidXRlKHRoaXNbMF0sIGF0dHJOYW1lKTtcclxuICAgIHJldHVybiB0aGlzXHJcbn07XHJcbmluaXRSZW5kZXIucHJvdG90eXBlLnByb3AgPSBmdW5jdGlvbihwcm9wTmFtZSwgdmFsdWUpIHtcclxuICAgIGlmICghdGhpc1swXSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzXHJcbiAgICB9XHJcbiAgICBpZiAoXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHByb3BOYW1lICYmIDEgPT09IGFyZ3VtZW50cy5sZW5ndGgpIHtcclxuICAgICAgICByZXR1cm4gdGhpc1swXVtwcm9wTmFtZV1cclxuICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChwcm9wTmFtZSkpIHtcclxuICAgICAgICBmb3IgKHZhciBrZXkgaW4gcHJvcE5hbWUpIHtcclxuICAgICAgICAgICAgdGhpcy5wcm9wKGtleSwgcHJvcE5hbWVba2V5XSlcclxuICAgICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIGRvbUFkYXB0ZXIuc2V0UHJvcGVydHkodGhpc1swXSwgcHJvcE5hbWUsIHZhbHVlKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXNcclxufTtcclxuaW5pdFJlbmRlci5wcm90b3R5cGUuYWRkQ2xhc3MgPSBmdW5jdGlvbihjbGFzc05hbWUpIHtcclxuICAgIHJldHVybiB0aGlzLnRvZ2dsZUNsYXNzKGNsYXNzTmFtZSwgdHJ1ZSlcclxufTtcclxuaW5pdFJlbmRlci5wcm90b3R5cGUucmVtb3ZlQ2xhc3MgPSBmdW5jdGlvbihjbGFzc05hbWUpIHtcclxuICAgIHJldHVybiB0aGlzLnRvZ2dsZUNsYXNzKGNsYXNzTmFtZSwgZmFsc2UpXHJcbn07XHJcbmluaXRSZW5kZXIucHJvdG90eXBlLmhhc0NsYXNzID0gZnVuY3Rpb24oY2xhc3NOYW1lKSB7XHJcbiAgICBpZiAoIXRoaXNbMF0gfHwgdm9pZCAwID09PSB0aGlzWzBdLmNsYXNzTmFtZSkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgfVxyXG4gICAgdmFyIGNsYXNzTmFtZXMgPSBjbGFzc05hbWUuc3BsaXQoXCIgXCIpO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjbGFzc05hbWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKHRoaXNbMF0uY2xhc3NMaXN0KSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzWzBdLmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWVzW2ldKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHZhciBfY2xhc3NOYW1lID0gaXNTdHJpbmcodGhpc1swXS5jbGFzc05hbWUpID8gdGhpc1swXS5jbGFzc05hbWUgOiBkb21BZGFwdGVyLmdldEF0dHJpYnV0ZSh0aGlzWzBdLCBcImNsYXNzXCIpO1xyXG4gICAgICAgICAgICBpZiAoKF9jbGFzc05hbWUgfHwgXCJcIikuc3BsaXQoXCIgXCIpLmluZGV4T2YoY2xhc3NOYW1lc1tpXSkgPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZVxyXG59O1xyXG5pbml0UmVuZGVyLnByb3RvdHlwZS50b2dnbGVDbGFzcyA9IGZ1bmN0aW9uKGNsYXNzTmFtZSwgdmFsdWUpIHtcclxuICAgIGlmICh0aGlzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICByZXR1cm4gcmVwZWF0TWV0aG9kLmNhbGwodGhpcywgXCJ0b2dnbGVDbGFzc1wiLCBhcmd1bWVudHMpXHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXNbMF0gfHwgIWNsYXNzTmFtZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzXHJcbiAgICB9XHJcbiAgICB2YWx1ZSA9IHZvaWQgMCA9PT0gdmFsdWUgPyAhdGhpcy5oYXNDbGFzcyhjbGFzc05hbWUpIDogdmFsdWU7XHJcbiAgICB2YXIgY2xhc3NOYW1lcyA9IGNsYXNzTmFtZS5zcGxpdChcIiBcIik7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNsYXNzTmFtZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBkb21BZGFwdGVyLnNldENsYXNzKHRoaXNbMF0sIGNsYXNzTmFtZXNbaV0sIHZhbHVlKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXNcclxufTtcclxuW1wid2lkdGhcIiwgXCJoZWlnaHRcIiwgXCJvdXRlcldpZHRoXCIsIFwib3V0ZXJIZWlnaHRcIiwgXCJpbm5lcldpZHRoXCIsIFwiaW5uZXJIZWlnaHRcIl0uZm9yRWFjaCgoZnVuY3Rpb24obWV0aG9kTmFtZSkge1xyXG4gICAgdmFyIHBhcnRpYWxOYW1lID0gbWV0aG9kTmFtZS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoXCJ3aWR0aFwiKSA+PSAwID8gXCJXaWR0aFwiIDogXCJIZWlnaHRcIjtcclxuICAgIHZhciBwcm9wTmFtZSA9IHBhcnRpYWxOYW1lLnRvTG93ZXJDYXNlKCk7XHJcbiAgICB2YXIgaXNPdXRlciA9IDAgPT09IG1ldGhvZE5hbWUuaW5kZXhPZihcIm91dGVyXCIpO1xyXG4gICAgdmFyIGlzSW5uZXIgPSAwID09PSBtZXRob2ROYW1lLmluZGV4T2YoXCJpbm5lclwiKTtcclxuICAgIGluaXRSZW5kZXIucHJvdG90eXBlW21ldGhvZE5hbWVdID0gZnVuY3Rpb24odmFsdWUpIHtcclxuICAgICAgICBpZiAodGhpcy5sZW5ndGggPiAxICYmIGFyZ3VtZW50cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByZXBlYXRNZXRob2QuY2FsbCh0aGlzLCBtZXRob2ROYW1lLCBhcmd1bWVudHMpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBlbGVtZW50ID0gdGhpc1swXTtcclxuICAgICAgICBpZiAoIWVsZW1lbnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpc1dpbmRvdyhlbGVtZW50KSkge1xyXG4gICAgICAgICAgICByZXR1cm4gaXNPdXRlciA/IGVsZW1lbnRbXCJpbm5lclwiICsgcGFydGlhbE5hbWVdIDogZG9tQWRhcHRlci5nZXREb2N1bWVudEVsZW1lbnQoKVtcImNsaWVudFwiICsgcGFydGlhbE5hbWVdXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChkb21BZGFwdGVyLmlzRG9jdW1lbnQoZWxlbWVudCkpIHtcclxuICAgICAgICAgICAgdmFyIGRvY3VtZW50RWxlbWVudCA9IGRvbUFkYXB0ZXIuZ2V0RG9jdW1lbnRFbGVtZW50KCk7XHJcbiAgICAgICAgICAgIHZhciBib2R5ID0gZG9tQWRhcHRlci5nZXRCb2R5KCk7XHJcbiAgICAgICAgICAgIHJldHVybiBNYXRoLm1heChib2R5W1wic2Nyb2xsXCIgKyBwYXJ0aWFsTmFtZV0sIGJvZHlbXCJvZmZzZXRcIiArIHBhcnRpYWxOYW1lXSwgZG9jdW1lbnRFbGVtZW50W1wic2Nyb2xsXCIgKyBwYXJ0aWFsTmFtZV0sIGRvY3VtZW50RWxlbWVudFtcIm9mZnNldFwiICsgcGFydGlhbE5hbWVdLCBkb2N1bWVudEVsZW1lbnRbXCJjbGllbnRcIiArIHBhcnRpYWxOYW1lXSlcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKDAgPT09IGFyZ3VtZW50cy5sZW5ndGggfHwgXCJib29sZWFuXCIgPT09IHR5cGVvZiB2YWx1ZSkge1xyXG4gICAgICAgICAgICB2YXIgaW5jbHVkZSA9IHtcclxuICAgICAgICAgICAgICAgIHBhZGRpbmdzOiBpc0lubmVyIHx8IGlzT3V0ZXIsXHJcbiAgICAgICAgICAgICAgICBib3JkZXJzOiBpc091dGVyLFxyXG4gICAgICAgICAgICAgICAgbWFyZ2luczogdmFsdWVcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgcmV0dXJuIGdldFNpemUoZWxlbWVudCwgcHJvcE5hbWUsIGluY2x1ZGUpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh2b2lkIDAgPT09IHZhbHVlIHx8IG51bGwgPT09IHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpc051bWVyaWModmFsdWUpKSB7XHJcbiAgICAgICAgICAgIHZhciBlbGVtZW50U3R5bGVzID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XHJcbiAgICAgICAgICAgIHZhciBzaXplQWRqdXN0bWVudCA9IGdldEVsZW1lbnRCb3hQYXJhbXMocHJvcE5hbWUsIGVsZW1lbnRTdHlsZXMpO1xyXG4gICAgICAgICAgICB2YXIgaXNCb3JkZXJCb3ggPSBcImJvcmRlci1ib3hcIiA9PT0gZWxlbWVudFN0eWxlcy5ib3hTaXppbmc7XHJcbiAgICAgICAgICAgIHZhbHVlID0gTnVtYmVyKHZhbHVlKTtcclxuICAgICAgICAgICAgaWYgKGlzT3V0ZXIpIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlIC09IGlzQm9yZGVyQm94ID8gMCA6IHNpemVBZGp1c3RtZW50LmJvcmRlciArIHNpemVBZGp1c3RtZW50LnBhZGRpbmdcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChpc0lubmVyKSB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZSArPSBpc0JvcmRlckJveCA/IHNpemVBZGp1c3RtZW50LmJvcmRlciA6IC1zaXplQWRqdXN0bWVudC5wYWRkaW5nXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNCb3JkZXJCb3gpIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlICs9IHNpemVBZGp1c3RtZW50LmJvcmRlciArIHNpemVBZGp1c3RtZW50LnBhZGRpbmdcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB2YWx1ZSArPSBpc051bWVyaWModmFsdWUpID8gXCJweFwiIDogXCJcIjtcclxuICAgICAgICBkb21BZGFwdGVyLnNldFN0eWxlKGVsZW1lbnQsIHByb3BOYW1lLCB2YWx1ZSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuICAgIH1cclxufSkpO1xyXG5pbml0UmVuZGVyLnByb3RvdHlwZS5odG1sID0gZnVuY3Rpb24odmFsdWUpIHtcclxuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzWzBdLmlubmVySFRNTFxyXG4gICAgfVxyXG4gICAgdGhpcy5lbXB0eSgpO1xyXG4gICAgaWYgKFwic3RyaW5nXCIgPT09IHR5cGVvZiB2YWx1ZSAmJiAhaXNUYWJsZVBhcnQodmFsdWUpIHx8IFwibnVtYmVyXCIgPT09IHR5cGVvZiB2YWx1ZSkge1xyXG4gICAgICAgIHRoaXNbMF0uaW5uZXJIVE1MID0gdmFsdWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmFwcGVuZChwYXJzZUhUTUwodmFsdWUpKVxyXG59O1xyXG52YXIgYXBwZW5kRWxlbWVudHMgPSBmdW5jdGlvbihlbGVtZW50LCBuZXh0U2libGluZykge1xyXG4gICAgaWYgKCF0aGlzWzBdIHx8ICFlbGVtZW50KSB7XHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBpZiAoXCJzdHJpbmdcIiA9PT0gdHlwZW9mIGVsZW1lbnQpIHtcclxuICAgICAgICBlbGVtZW50ID0gcGFyc2VIVE1MKGVsZW1lbnQpXHJcbiAgICB9IGVsc2UgaWYgKGVsZW1lbnQubm9kZVR5cGUpIHtcclxuICAgICAgICBlbGVtZW50ID0gW2VsZW1lbnRdXHJcbiAgICB9IGVsc2UgaWYgKGlzTnVtZXJpYyhlbGVtZW50KSkge1xyXG4gICAgICAgIGVsZW1lbnQgPSBbZG9tQWRhcHRlci5jcmVhdGVUZXh0Tm9kZShlbGVtZW50KV1cclxuICAgIH1cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlbWVudC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhciBpdGVtID0gZWxlbWVudFtpXTtcclxuICAgICAgICB2YXIgY29udGFpbmVyID0gdGhpc1swXTtcclxuICAgICAgICB2YXIgd3JhcFRSID0gXCJUQUJMRVwiID09PSBjb250YWluZXIudGFnTmFtZSAmJiBcIlRSXCIgPT09IGl0ZW0udGFnTmFtZTtcclxuICAgICAgICBpZiAod3JhcFRSICYmIGNvbnRhaW5lci50Qm9kaWVzICYmIGNvbnRhaW5lci50Qm9kaWVzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBjb250YWluZXIgPSBjb250YWluZXIudEJvZGllc1swXVxyXG4gICAgICAgIH1cclxuICAgICAgICBkb21BZGFwdGVyLmluc2VydEVsZW1lbnQoY29udGFpbmVyLCBpdGVtLm5vZGVUeXBlID8gaXRlbSA6IGl0ZW1bMF0sIG5leHRTaWJsaW5nKVxyXG4gICAgfVxyXG59O1xyXG52YXIgc2V0Q3NzID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcclxuICAgIGlmICghdGhpc1swXSB8fCAhdGhpc1swXS5zdHlsZSkge1xyXG4gICAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgaWYgKG51bGwgPT09IHZhbHVlIHx8IFwibnVtYmVyXCIgPT09IHR5cGVvZiB2YWx1ZSAmJiBpc05hTih2YWx1ZSkpIHtcclxuICAgICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIG5hbWUgPSBzdHlsZVByb3AobmFtZSk7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB0aGlzW2ldLnN0eWxlW25hbWVdID0gbm9ybWFsaXplU3R5bGVQcm9wKG5hbWUsIHZhbHVlKVxyXG4gICAgfVxyXG59O1xyXG5pbml0UmVuZGVyLnByb3RvdHlwZS5jc3MgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xyXG4gICAgaWYgKGlzU3RyaW5nKG5hbWUpKSB7XHJcbiAgICAgICAgaWYgKDIgPT09IGFyZ3VtZW50cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgc2V0Q3NzLmNhbGwodGhpcywgbmFtZSwgdmFsdWUpXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzWzBdKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBuYW1lID0gc3R5bGVQcm9wKG5hbWUpO1xyXG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpc1swXSlbbmFtZV0gfHwgdGhpc1swXS5zdHlsZVtuYW1lXTtcclxuICAgICAgICAgICAgcmV0dXJuIGlzTnVtZXJpYyhyZXN1bHQpID8gcmVzdWx0LnRvU3RyaW5nKCkgOiByZXN1bHRcclxuICAgICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3QobmFtZSkpIHtcclxuICAgICAgICBmb3IgKHZhciBrZXkgaW4gbmFtZSkge1xyXG4gICAgICAgICAgICBzZXRDc3MuY2FsbCh0aGlzLCBrZXksIG5hbWVba2V5XSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpc1xyXG59O1xyXG5pbml0UmVuZGVyLnByb3RvdHlwZS5wcmVwZW5kID0gZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5wcmVwZW5kKGFyZ3VtZW50c1tpXSlcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuICAgIH1cclxuICAgIGFwcGVuZEVsZW1lbnRzLmFwcGx5KHRoaXMsIFtlbGVtZW50LCB0aGlzWzBdLmZpcnN0Q2hpbGRdKTtcclxuICAgIHJldHVybiB0aGlzXHJcbn07XHJcbmluaXRSZW5kZXIucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKGFyZ3VtZW50c1tpXSlcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuICAgIH1cclxuICAgIGFwcGVuZEVsZW1lbnRzLmFwcGx5KHRoaXMsIFtlbGVtZW50XSk7XHJcbiAgICByZXR1cm4gdGhpc1xyXG59O1xyXG5pbml0UmVuZGVyLnByb3RvdHlwZS5wcmVwZW5kVG8gPSBmdW5jdGlvbihlbGVtZW50KSB7XHJcbiAgICBpZiAodGhpcy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICAgICAgcmVuZGVyZXIodGhpc1tpXSkucHJlcGVuZFRvKGVsZW1lbnQpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzXHJcbiAgICB9XHJcbiAgICBlbGVtZW50ID0gcmVuZGVyZXIoZWxlbWVudCk7XHJcbiAgICBpZiAoZWxlbWVudFswXSkge1xyXG4gICAgICAgIGRvbUFkYXB0ZXIuaW5zZXJ0RWxlbWVudChlbGVtZW50WzBdLCB0aGlzWzBdLCBlbGVtZW50WzBdLmZpcnN0Q2hpbGQpXHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpc1xyXG59O1xyXG5pbml0UmVuZGVyLnByb3RvdHlwZS5hcHBlbmRUbyA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICAgIGlmICh0aGlzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICByZXR1cm4gcmVwZWF0TWV0aG9kLmNhbGwodGhpcywgXCJhcHBlbmRUb1wiLCBhcmd1bWVudHMpXHJcbiAgICB9XHJcbiAgICBkb21BZGFwdGVyLmluc2VydEVsZW1lbnQocmVuZGVyZXIoZWxlbWVudClbMF0sIHRoaXNbMF0pO1xyXG4gICAgcmV0dXJuIHRoaXNcclxufTtcclxuaW5pdFJlbmRlci5wcm90b3R5cGUuaW5zZXJ0QmVmb3JlID0gZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudFswXSkge1xyXG4gICAgICAgIGRvbUFkYXB0ZXIuaW5zZXJ0RWxlbWVudChlbGVtZW50WzBdLnBhcmVudE5vZGUsIHRoaXNbMF0sIGVsZW1lbnRbMF0pXHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpc1xyXG59O1xyXG5pbml0UmVuZGVyLnByb3RvdHlwZS5pbnNlcnRBZnRlciA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICAgIGlmIChlbGVtZW50ICYmIGVsZW1lbnRbMF0pIHtcclxuICAgICAgICBkb21BZGFwdGVyLmluc2VydEVsZW1lbnQoZWxlbWVudFswXS5wYXJlbnROb2RlLCB0aGlzWzBdLCBlbGVtZW50WzBdLm5leHRTaWJsaW5nKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXNcclxufTtcclxuaW5pdFJlbmRlci5wcm90b3R5cGUuYmVmb3JlID0gZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gICAgaWYgKHRoaXNbMF0pIHtcclxuICAgICAgICBkb21BZGFwdGVyLmluc2VydEVsZW1lbnQodGhpc1swXS5wYXJlbnROb2RlLCBlbGVtZW50WzBdLCB0aGlzWzBdKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXNcclxufTtcclxuaW5pdFJlbmRlci5wcm90b3R5cGUuYWZ0ZXIgPSBmdW5jdGlvbihlbGVtZW50KSB7XHJcbiAgICBpZiAodGhpc1swXSkge1xyXG4gICAgICAgIGRvbUFkYXB0ZXIuaW5zZXJ0RWxlbWVudCh0aGlzWzBdLnBhcmVudE5vZGUsIGVsZW1lbnRbMF0sIHRoaXNbMF0ubmV4dFNpYmxpbmcpXHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpc1xyXG59O1xyXG5pbml0UmVuZGVyLnByb3RvdHlwZS53cmFwID0gZnVuY3Rpb24od3JhcHBlcikge1xyXG4gICAgaWYgKHRoaXNbMF0pIHtcclxuICAgICAgICB2YXIgd3JhcCA9IHJlbmRlcmVyKHdyYXBwZXIpO1xyXG4gICAgICAgIHdyYXAuaW5zZXJ0QmVmb3JlKHRoaXMpO1xyXG4gICAgICAgIHdyYXAuYXBwZW5kKHRoaXMpXHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpc1xyXG59O1xyXG5pbml0UmVuZGVyLnByb3RvdHlwZS53cmFwSW5uZXIgPSBmdW5jdGlvbih3cmFwcGVyKSB7XHJcbiAgICB2YXIgY29udGVudHMgPSB0aGlzLmNvbnRlbnRzKCk7XHJcbiAgICBpZiAoY29udGVudHMubGVuZ3RoKSB7XHJcbiAgICAgICAgY29udGVudHMud3JhcCh3cmFwcGVyKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmFwcGVuZCh3cmFwcGVyKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXNcclxufTtcclxuaW5pdFJlbmRlci5wcm90b3R5cGUucmVwbGFjZVdpdGggPSBmdW5jdGlvbihlbGVtZW50KSB7XHJcbiAgICBpZiAoIShlbGVtZW50ICYmIGVsZW1lbnRbMF0pKSB7XHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBpZiAoZWxlbWVudC5pcyh0aGlzKSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzXHJcbiAgICB9XHJcbiAgICBlbGVtZW50Lmluc2VydEJlZm9yZSh0aGlzKTtcclxuICAgIHRoaXMucmVtb3ZlKCk7XHJcbiAgICByZXR1cm4gZWxlbWVudFxyXG59O1xyXG5pbml0UmVuZGVyLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbigpIHtcclxuICAgIGlmICh0aGlzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICByZXR1cm4gcmVwZWF0TWV0aG9kLmNhbGwodGhpcywgXCJyZW1vdmVcIiwgYXJndW1lbnRzKVxyXG4gICAgfVxyXG4gICAgY2xlYW5EYXRhUmVjdXJzaXZlKHRoaXNbMF0sIHRydWUpO1xyXG4gICAgZG9tQWRhcHRlci5yZW1vdmVFbGVtZW50KHRoaXNbMF0pO1xyXG4gICAgcmV0dXJuIHRoaXNcclxufTtcclxuaW5pdFJlbmRlci5wcm90b3R5cGUuZGV0YWNoID0gZnVuY3Rpb24oKSB7XHJcbiAgICBpZiAodGhpcy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgcmV0dXJuIHJlcGVhdE1ldGhvZC5jYWxsKHRoaXMsIFwiZGV0YWNoXCIsIGFyZ3VtZW50cylcclxuICAgIH1cclxuICAgIGRvbUFkYXB0ZXIucmVtb3ZlRWxlbWVudCh0aGlzWzBdKTtcclxuICAgIHJldHVybiB0aGlzXHJcbn07XHJcbmluaXRSZW5kZXIucHJvdG90eXBlLmVtcHR5ID0gZnVuY3Rpb24oKSB7XHJcbiAgICBpZiAodGhpcy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgcmV0dXJuIHJlcGVhdE1ldGhvZC5jYWxsKHRoaXMsIFwiZW1wdHlcIiwgYXJndW1lbnRzKVxyXG4gICAgfVxyXG4gICAgY2xlYW5EYXRhUmVjdXJzaXZlKHRoaXNbMF0pO1xyXG4gICAgZG9tQWRhcHRlci5zZXRUZXh0KHRoaXNbMF0sIFwiXCIpO1xyXG4gICAgcmV0dXJuIHRoaXNcclxufTtcclxuaW5pdFJlbmRlci5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbigpIHtcclxuICAgIHZhciByZXN1bHQgPSBbXTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHJlc3VsdC5wdXNoKHRoaXNbaV0uY2xvbmVOb2RlKHRydWUpKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlbmRlcmVyKHJlc3VsdClcclxufTtcclxuaW5pdFJlbmRlci5wcm90b3R5cGUudGV4dCA9IGZ1bmN0aW9uKHZhbHVlKSB7XHJcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gXCJcIjtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgcmVzdWx0ICs9IHRoaXNbaV0gJiYgdGhpc1tpXS50ZXh0Q29udGVudCB8fCBcIlwiXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHRcclxuICAgIH1cclxuICAgIHZhciB0ZXh0ID0gaXNGdW5jdGlvbih2YWx1ZSkgPyB2YWx1ZSgpIDogdmFsdWU7XHJcbiAgICBjbGVhbkRhdGFSZWN1cnNpdmUodGhpc1swXSwgZmFsc2UpO1xyXG4gICAgZG9tQWRhcHRlci5zZXRUZXh0KHRoaXNbMF0sIGlzRGVmaW5lZCh0ZXh0KSA/IHRleHQgOiBcIlwiKTtcclxuICAgIHJldHVybiB0aGlzXHJcbn07XHJcbmluaXRSZW5kZXIucHJvdG90eXBlLnZhbCA9IGZ1bmN0aW9uKHZhbHVlKSB7XHJcbiAgICBpZiAoMSA9PT0gYXJndW1lbnRzLmxlbmd0aCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnByb3AoXCJ2YWx1ZVwiLCBpc0RlZmluZWQodmFsdWUpID8gdmFsdWUgOiBcIlwiKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMucHJvcChcInZhbHVlXCIpXHJcbn07XHJcbmluaXRSZW5kZXIucHJvdG90eXBlLmNvbnRlbnRzID0gZnVuY3Rpb24oKSB7XHJcbiAgICBpZiAoIXRoaXNbMF0pIHtcclxuICAgICAgICByZXR1cm4gcmVuZGVyZXIoKVxyXG4gICAgfVxyXG4gICAgdmFyIHJlc3VsdCA9IFtdO1xyXG4gICAgcmVzdWx0LnB1c2guYXBwbHkocmVzdWx0LCB0aGlzWzBdLmNoaWxkTm9kZXMpO1xyXG4gICAgcmV0dXJuIHJlbmRlcmVyKHJlc3VsdClcclxufTtcclxuaW5pdFJlbmRlci5wcm90b3R5cGUuZmluZCA9IGZ1bmN0aW9uKHNlbGVjdG9yKSB7XHJcbiAgICB2YXIgcmVzdWx0ID0gcmVuZGVyZXIoKTtcclxuICAgIGlmICghc2VsZWN0b3IpIHtcclxuICAgICAgICByZXR1cm4gcmVzdWx0XHJcbiAgICB9XHJcbiAgICB2YXIgbm9kZXMgPSBbXTtcclxuICAgIHZhciBpO1xyXG4gICAgaWYgKFwic3RyaW5nXCIgPT09IHR5cGVvZiBzZWxlY3Rvcikge1xyXG4gICAgICAgIHNlbGVjdG9yID0gc2VsZWN0b3IudHJpbSgpO1xyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBlbGVtZW50ID0gdGhpc1tpXTtcclxuICAgICAgICAgICAgaWYgKGRvbUFkYXB0ZXIuaXNFbGVtZW50Tm9kZShlbGVtZW50KSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGVsZW1lbnRJZCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiaWRcIik7XHJcbiAgICAgICAgICAgICAgICB2YXIgcXVlcnlJZCA9IGVsZW1lbnRJZCB8fCBcImR4LXF1ZXJ5LWNoaWxkcmVuXCI7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWVsZW1lbnRJZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNldEF0dHJpYnV0ZVZhbHVlKGVsZW1lbnQsIFwiaWRcIiwgcXVlcnlJZClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHF1ZXJ5SWQgPSBcIltpZD0nXCIgKyBxdWVyeUlkICsgXCInXSBcIjtcclxuICAgICAgICAgICAgICAgIHZhciBxdWVyeVNlbGVjdG9yID0gcXVlcnlJZCArIHNlbGVjdG9yLnJlcGxhY2UoLyhbXlxcXFxdKSgsKS9nLCBcIiQxLCBcIiArIHF1ZXJ5SWQpO1xyXG4gICAgICAgICAgICAgICAgbm9kZXMucHVzaC5hcHBseShub2RlcywgZG9tQWRhcHRlci5xdWVyeVNlbGVjdG9yQWxsKGVsZW1lbnQsIHF1ZXJ5U2VsZWN0b3IpKTtcclxuICAgICAgICAgICAgICAgIHNldEF0dHJpYnV0ZVZhbHVlKGVsZW1lbnQsIFwiaWRcIiwgZWxlbWVudElkKVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGRvbUFkYXB0ZXIuaXNEb2N1bWVudChlbGVtZW50KSkge1xyXG4gICAgICAgICAgICAgICAgbm9kZXMucHVzaC5hcHBseShub2RlcywgZG9tQWRhcHRlci5xdWVyeVNlbGVjdG9yQWxsKGVsZW1lbnQsIHNlbGVjdG9yKSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgc2VsZWN0b3IgPSBkb21BZGFwdGVyLmlzTm9kZShzZWxlY3RvcikgPyBzZWxlY3RvciA6IHNlbGVjdG9yWzBdO1xyXG4gICAgICAgICAgICBpZiAodGhpc1tpXSAhPT0gc2VsZWN0b3IgJiYgdGhpc1tpXS5jb250YWlucyhzZWxlY3RvcikpIHtcclxuICAgICAgICAgICAgICAgIG5vZGVzLnB1c2goc2VsZWN0b3IpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0LmFkZChub2RlcylcclxufTtcclxudmFyIGlzVmlzaWJsZSA9IGZ1bmN0aW9uKF8sIGVsZW1lbnQpIHtcclxuICAgIGlmICghZWxlbWVudC5ub2RlVHlwZSkge1xyXG4gICAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9XHJcbiAgICByZXR1cm4gISEoZWxlbWVudC5vZmZzZXRXaWR0aCB8fCBlbGVtZW50Lm9mZnNldEhlaWdodCB8fCBlbGVtZW50LmdldENsaWVudFJlY3RzKCkubGVuZ3RoKVxyXG59O1xyXG5pbml0UmVuZGVyLnByb3RvdHlwZS5maWx0ZXIgPSBmdW5jdGlvbihzZWxlY3Rvcikge1xyXG4gICAgaWYgKCFzZWxlY3Rvcikge1xyXG4gICAgICAgIHJldHVybiByZW5kZXJlcigpXHJcbiAgICB9XHJcbiAgICBpZiAoXCI6dmlzaWJsZVwiID09PSBzZWxlY3Rvcikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmZpbHRlcihpc1Zpc2libGUpXHJcbiAgICB9IGVsc2UgaWYgKFwiOmhpZGRlblwiID09PSBzZWxlY3Rvcikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmZpbHRlcigoZnVuY3Rpb24oXywgZWxlbWVudCkge1xyXG4gICAgICAgICAgICByZXR1cm4gIWlzVmlzaWJsZShfLCBlbGVtZW50KVxyXG4gICAgICAgIH0pKVxyXG4gICAgfVxyXG4gICAgdmFyIHJlc3VsdCA9IFtdO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIGl0ZW0gPSB0aGlzW2ldO1xyXG4gICAgICAgIGlmIChkb21BZGFwdGVyLmlzRWxlbWVudE5vZGUoaXRlbSkgJiYgXCJzdHJpbmdcIiA9PT0gdHlwZShzZWxlY3RvcikpIHtcclxuICAgICAgICAgICAgZG9tQWRhcHRlci5lbGVtZW50TWF0Y2hlcyhpdGVtLCBzZWxlY3RvcikgJiYgcmVzdWx0LnB1c2goaXRlbSlcclxuICAgICAgICB9IGVsc2UgaWYgKGRvbUFkYXB0ZXIuaXNOb2RlKHNlbGVjdG9yKSB8fCBpc1dpbmRvdyhzZWxlY3RvcikpIHtcclxuICAgICAgICAgICAgc2VsZWN0b3IgPT09IGl0ZW0gJiYgcmVzdWx0LnB1c2goaXRlbSlcclxuICAgICAgICB9IGVsc2UgaWYgKGlzRnVuY3Rpb24oc2VsZWN0b3IpKSB7XHJcbiAgICAgICAgICAgIHNlbGVjdG9yLmNhbGwoaXRlbSwgaSwgaXRlbSkgJiYgcmVzdWx0LnB1c2goaXRlbSlcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHNlbGVjdG9yLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxlY3RvcltqXSA9PT0gaXRlbSAmJiByZXN1bHQucHVzaChpdGVtKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlbmRlcmVyKHJlc3VsdClcclxufTtcclxuaW5pdFJlbmRlci5wcm90b3R5cGUubm90ID0gZnVuY3Rpb24oc2VsZWN0b3IpIHtcclxuICAgIHZhciByZXN1bHQgPSBbXTtcclxuICAgIHZhciBub2RlcyA9IHRoaXMuZmlsdGVyKHNlbGVjdG9yKS50b0FycmF5KCk7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBpZiAoLTEgPT09IG5vZGVzLmluZGV4T2YodGhpc1tpXSkpIHtcclxuICAgICAgICAgICAgcmVzdWx0LnB1c2godGhpc1tpXSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVuZGVyZXIocmVzdWx0KVxyXG59O1xyXG5pbml0UmVuZGVyLnByb3RvdHlwZS5pcyA9IGZ1bmN0aW9uKHNlbGVjdG9yKSB7XHJcbiAgICByZXR1cm4gISF0aGlzLmZpbHRlcihzZWxlY3RvcikubGVuZ3RoXHJcbn07XHJcbmluaXRSZW5kZXIucHJvdG90eXBlLmNoaWxkcmVuID0gZnVuY3Rpb24oc2VsZWN0b3IpIHtcclxuICAgIHZhciByZXN1bHQgPSBbXTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhciBub2RlcyA9IHRoaXNbaV0gPyB0aGlzW2ldLmNoaWxkTm9kZXMgOiBbXTtcclxuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG5vZGVzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgIGlmIChkb21BZGFwdGVyLmlzRWxlbWVudE5vZGUobm9kZXNbal0pKSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChub2Rlc1tqXSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJlc3VsdCA9IHJlbmRlcmVyKHJlc3VsdCk7XHJcbiAgICByZXR1cm4gc2VsZWN0b3IgPyByZXN1bHQuZmlsdGVyKHNlbGVjdG9yKSA6IHJlc3VsdFxyXG59O1xyXG5pbml0UmVuZGVyLnByb3RvdHlwZS5zaWJsaW5ncyA9IGZ1bmN0aW9uKCkge1xyXG4gICAgdmFyIGVsZW1lbnQgPSB0aGlzWzBdO1xyXG4gICAgaWYgKCFlbGVtZW50IHx8ICFlbGVtZW50LnBhcmVudE5vZGUpIHtcclxuICAgICAgICByZXR1cm4gcmVuZGVyZXIoKVxyXG4gICAgfVxyXG4gICAgdmFyIHJlc3VsdCA9IFtdO1xyXG4gICAgdmFyIHBhcmVudENoaWxkTm9kZXMgPSBlbGVtZW50LnBhcmVudE5vZGUuY2hpbGROb2RlcyB8fCBbXTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFyZW50Q2hpbGROb2Rlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhciBub2RlID0gcGFyZW50Q2hpbGROb2Rlc1tpXTtcclxuICAgICAgICBpZiAoZG9tQWRhcHRlci5pc0VsZW1lbnROb2RlKG5vZGUpICYmIG5vZGUgIT09IGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgcmVzdWx0LnB1c2gobm9kZSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVuZGVyZXIocmVzdWx0KVxyXG59O1xyXG5pbml0UmVuZGVyLnByb3RvdHlwZS5lYWNoID0gZnVuY3Rpb24oY2FsbGJhY2spIHtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGlmIChmYWxzZSA9PT0gY2FsbGJhY2suY2FsbCh0aGlzW2ldLCBpLCB0aGlzW2ldKSkge1xyXG4gICAgICAgICAgICBicmVha1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuaW5pdFJlbmRlci5wcm90b3R5cGUuaW5kZXggPSBmdW5jdGlvbihlbGVtZW50KSB7XHJcbiAgICBpZiAoIWVsZW1lbnQpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQoKS5jaGlsZHJlbigpLmluZGV4KHRoaXMpXHJcbiAgICB9XHJcbiAgICBlbGVtZW50ID0gcmVuZGVyZXIoZWxlbWVudCk7XHJcbiAgICByZXR1cm4gdGhpcy50b0FycmF5KCkuaW5kZXhPZihlbGVtZW50WzBdKVxyXG59O1xyXG5pbml0UmVuZGVyLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbihpbmRleCkge1xyXG4gICAgcmV0dXJuIHRoaXNbaW5kZXggPCAwID8gdGhpcy5sZW5ndGggKyBpbmRleCA6IGluZGV4XVxyXG59O1xyXG5pbml0UmVuZGVyLnByb3RvdHlwZS5lcSA9IGZ1bmN0aW9uKGluZGV4KSB7XHJcbiAgICBpbmRleCA9IGluZGV4IDwgMCA/IHRoaXMubGVuZ3RoICsgaW5kZXggOiBpbmRleDtcclxuICAgIHJldHVybiByZW5kZXJlcih0aGlzW2luZGV4XSlcclxufTtcclxuaW5pdFJlbmRlci5wcm90b3R5cGUuZmlyc3QgPSBmdW5jdGlvbigpIHtcclxuICAgIHJldHVybiB0aGlzLmVxKDApXHJcbn07XHJcbmluaXRSZW5kZXIucHJvdG90eXBlLmxhc3QgPSBmdW5jdGlvbigpIHtcclxuICAgIHJldHVybiB0aGlzLmVxKC0xKVxyXG59O1xyXG5pbml0UmVuZGVyLnByb3RvdHlwZS5wYXJlbnQgPSBmdW5jdGlvbihzZWxlY3Rvcikge1xyXG4gICAgaWYgKCF0aGlzWzBdKSB7XHJcbiAgICAgICAgcmV0dXJuIHJlbmRlcmVyKClcclxuICAgIH1cclxuICAgIHZhciByZXN1bHQgPSByZW5kZXJlcih0aGlzWzBdLnBhcmVudE5vZGUpO1xyXG4gICAgcmV0dXJuICFzZWxlY3RvciB8fCByZXN1bHQuaXMoc2VsZWN0b3IpID8gcmVzdWx0IDogcmVuZGVyZXIoKVxyXG59O1xyXG5pbml0UmVuZGVyLnByb3RvdHlwZS5wYXJlbnRzID0gZnVuY3Rpb24oc2VsZWN0b3IpIHtcclxuICAgIHZhciByZXN1bHQgPSBbXTtcclxuICAgIHZhciBwYXJlbnQgPSB0aGlzLnBhcmVudCgpO1xyXG4gICAgd2hpbGUgKHBhcmVudCAmJiBwYXJlbnRbMF0gJiYgIWRvbUFkYXB0ZXIuaXNEb2N1bWVudChwYXJlbnRbMF0pKSB7XHJcbiAgICAgICAgaWYgKGRvbUFkYXB0ZXIuaXNFbGVtZW50Tm9kZShwYXJlbnRbMF0pKSB7XHJcbiAgICAgICAgICAgIGlmICghc2VsZWN0b3IgfHwgcGFyZW50LmlzKHNlbGVjdG9yKSkge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gocGFyZW50LmdldCgwKSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50KClcclxuICAgIH1cclxuICAgIHJldHVybiByZW5kZXJlcihyZXN1bHQpXHJcbn07XHJcbmluaXRSZW5kZXIucHJvdG90eXBlLmNsb3Nlc3QgPSBmdW5jdGlvbihzZWxlY3Rvcikge1xyXG4gICAgaWYgKHRoaXMuaXMoc2VsZWN0b3IpKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuICAgIH1cclxuICAgIHZhciBwYXJlbnQgPSB0aGlzLnBhcmVudCgpO1xyXG4gICAgd2hpbGUgKHBhcmVudCAmJiBwYXJlbnQubGVuZ3RoKSB7XHJcbiAgICAgICAgaWYgKHBhcmVudC5pcyhzZWxlY3RvcikpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHBhcmVudFxyXG4gICAgICAgIH1cclxuICAgICAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50KClcclxuICAgIH1cclxuICAgIHJldHVybiByZW5kZXJlcigpXHJcbn07XHJcbmluaXRSZW5kZXIucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbihzZWxlY3Rvcikge1xyXG4gICAgaWYgKCF0aGlzWzBdKSB7XHJcbiAgICAgICAgcmV0dXJuIHJlbmRlcmVyKClcclxuICAgIH1cclxuICAgIHZhciBuZXh0ID0gcmVuZGVyZXIodGhpc1swXS5uZXh0U2libGluZyk7XHJcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHtcclxuICAgICAgICByZXR1cm4gbmV4dFxyXG4gICAgfVxyXG4gICAgd2hpbGUgKG5leHQgJiYgbmV4dC5sZW5ndGgpIHtcclxuICAgICAgICBpZiAobmV4dC5pcyhzZWxlY3RvcikpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5leHRcclxuICAgICAgICB9XHJcbiAgICAgICAgbmV4dCA9IG5leHQubmV4dCgpXHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVuZGVyZXIoKVxyXG59O1xyXG5pbml0UmVuZGVyLnByb3RvdHlwZS5wcmV2ID0gZnVuY3Rpb24oKSB7XHJcbiAgICBpZiAoIXRoaXNbMF0pIHtcclxuICAgICAgICByZXR1cm4gcmVuZGVyZXIoKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlbmRlcmVyKHRoaXNbMF0ucHJldmlvdXNTaWJsaW5nKVxyXG59O1xyXG5pbml0UmVuZGVyLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbihzZWxlY3Rvcikge1xyXG4gICAgdmFyIHRhcmdldHMgPSByZW5kZXJlcihzZWxlY3Rvcik7XHJcbiAgICB2YXIgcmVzdWx0ID0gdGhpcy50b0FycmF5KCk7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRhcmdldHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YXIgdGFyZ2V0ID0gdGFyZ2V0c1tpXTtcclxuICAgICAgICBpZiAoLTEgPT09IHJlc3VsdC5pbmRleE9mKHRhcmdldCkpIHtcclxuICAgICAgICAgICAgcmVzdWx0LnB1c2godGFyZ2V0KVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByZW5kZXJlcihyZXN1bHQpXHJcbn07XHJcbnZhciBlbXB0eUFycmF5ID0gW107XHJcbmluaXRSZW5kZXIucHJvdG90eXBlLnNwbGljZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgcmV0dXJuIHJlbmRlcmVyKGVtcHR5QXJyYXkuc3BsaWNlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpXHJcbn07XHJcbmluaXRSZW5kZXIucHJvdG90eXBlLnNsaWNlID0gZnVuY3Rpb24oKSB7XHJcbiAgICByZXR1cm4gcmVuZGVyZXIoZW1wdHlBcnJheS5zbGljZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpKVxyXG59O1xyXG5pbml0UmVuZGVyLnByb3RvdHlwZS50b0FycmF5ID0gZnVuY3Rpb24oKSB7XHJcbiAgICByZXR1cm4gZW1wdHlBcnJheS5zbGljZS5jYWxsKHRoaXMpXHJcbn07XHJcbnZhciBnZXRXaW5kb3dCeUVsZW1lbnQgPSBmdW5jdGlvbihlbGVtZW50KSB7XHJcbiAgICByZXR1cm4gaXNXaW5kb3coZWxlbWVudCkgPyBlbGVtZW50IDogZWxlbWVudC5kZWZhdWx0Vmlld1xyXG59O1xyXG5pbml0UmVuZGVyLnByb3RvdHlwZS5vZmZzZXQgPSBmdW5jdGlvbigpIHtcclxuICAgIGlmICghdGhpc1swXSkge1xyXG4gICAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzWzBdLmdldENsaWVudFJlY3RzKCkubGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdG9wOiAwLFxyXG4gICAgICAgICAgICBsZWZ0OiAwXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgdmFyIHJlY3QgPSB0aGlzWzBdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgdmFyIHdpbiA9IGdldFdpbmRvd0J5RWxlbWVudCh0aGlzWzBdLm93bmVyRG9jdW1lbnQpO1xyXG4gICAgdmFyIGRvY0VsZW0gPSB0aGlzWzBdLm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICB0b3A6IHJlY3QudG9wICsgd2luLnBhZ2VZT2Zmc2V0IC0gZG9jRWxlbS5jbGllbnRUb3AsXHJcbiAgICAgICAgbGVmdDogcmVjdC5sZWZ0ICsgd2luLnBhZ2VYT2Zmc2V0IC0gZG9jRWxlbS5jbGllbnRMZWZ0XHJcbiAgICB9XHJcbn07XHJcbmluaXRSZW5kZXIucHJvdG90eXBlLm9mZnNldFBhcmVudCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgaWYgKCF0aGlzWzBdKSB7XHJcbiAgICAgICAgcmV0dXJuIHJlbmRlcmVyKClcclxuICAgIH1cclxuICAgIHZhciBvZmZzZXRQYXJlbnQgPSByZW5kZXJlcih0aGlzWzBdLm9mZnNldFBhcmVudCk7XHJcbiAgICB3aGlsZSAob2Zmc2V0UGFyZW50WzBdICYmIFwic3RhdGljXCIgPT09IG9mZnNldFBhcmVudC5jc3MoXCJwb3NpdGlvblwiKSkge1xyXG4gICAgICAgIG9mZnNldFBhcmVudCA9IHJlbmRlcmVyKG9mZnNldFBhcmVudFswXS5vZmZzZXRQYXJlbnQpXHJcbiAgICB9XHJcbiAgICBvZmZzZXRQYXJlbnQgPSBvZmZzZXRQYXJlbnRbMF0gPyBvZmZzZXRQYXJlbnQgOiByZW5kZXJlcihkb21BZGFwdGVyLmdldERvY3VtZW50RWxlbWVudCgpKTtcclxuICAgIHJldHVybiBvZmZzZXRQYXJlbnRcclxufTtcclxuaW5pdFJlbmRlci5wcm90b3R5cGUucG9zaXRpb24gPSBmdW5jdGlvbigpIHtcclxuICAgIGlmICghdGhpc1swXSkge1xyXG4gICAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgdmFyIG9mZnNldDtcclxuICAgIHZhciBtYXJnaW5Ub3AgPSBwYXJzZUZsb2F0KHRoaXMuY3NzKFwibWFyZ2luVG9wXCIpKTtcclxuICAgIHZhciBtYXJnaW5MZWZ0ID0gcGFyc2VGbG9hdCh0aGlzLmNzcyhcIm1hcmdpbkxlZnRcIikpO1xyXG4gICAgaWYgKFwiZml4ZWRcIiA9PT0gdGhpcy5jc3MoXCJwb3NpdGlvblwiKSkge1xyXG4gICAgICAgIG9mZnNldCA9IHRoaXNbMF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdG9wOiBvZmZzZXQudG9wIC0gbWFyZ2luVG9wLFxyXG4gICAgICAgICAgICBsZWZ0OiBvZmZzZXQubGVmdCAtIG1hcmdpbkxlZnRcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBvZmZzZXQgPSB0aGlzLm9mZnNldCgpO1xyXG4gICAgdmFyIG9mZnNldFBhcmVudCA9IHRoaXMub2Zmc2V0UGFyZW50KCk7XHJcbiAgICB2YXIgcGFyZW50T2Zmc2V0ID0ge1xyXG4gICAgICAgIHRvcDogMCxcclxuICAgICAgICBsZWZ0OiAwXHJcbiAgICB9O1xyXG4gICAgaWYgKFwiSFRNTFwiICE9PSBvZmZzZXRQYXJlbnRbMF0ubm9kZU5hbWUpIHtcclxuICAgICAgICBwYXJlbnRPZmZzZXQgPSBvZmZzZXRQYXJlbnQub2Zmc2V0KClcclxuICAgIH1cclxuICAgIHBhcmVudE9mZnNldCA9IHtcclxuICAgICAgICB0b3A6IHBhcmVudE9mZnNldC50b3AgKyBwYXJzZUZsb2F0KG9mZnNldFBhcmVudC5jc3MoXCJib3JkZXJUb3BXaWR0aFwiKSksXHJcbiAgICAgICAgbGVmdDogcGFyZW50T2Zmc2V0LmxlZnQgKyBwYXJzZUZsb2F0KG9mZnNldFBhcmVudC5jc3MoXCJib3JkZXJMZWZ0V2lkdGhcIikpXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICB0b3A6IG9mZnNldC50b3AgLSBwYXJlbnRPZmZzZXQudG9wIC0gbWFyZ2luVG9wLFxyXG4gICAgICAgIGxlZnQ6IG9mZnNldC5sZWZ0IC0gcGFyZW50T2Zmc2V0LmxlZnQgLSBtYXJnaW5MZWZ0XHJcbiAgICB9XHJcbn07XHJcblt7XHJcbiAgICBuYW1lOiBcInNjcm9sbExlZnRcIixcclxuICAgIG9mZnNldFByb3A6IFwicGFnZVhPZmZzZXRcIixcclxuICAgIHNjcm9sbFdpbmRvdzogZnVuY3Rpb24od2luLCB2YWx1ZSkge1xyXG4gICAgICAgIHdpbi5zY3JvbGxUbyh2YWx1ZSwgd2luLnBhZ2VZT2Zmc2V0KVxyXG4gICAgfVxyXG59LCB7XHJcbiAgICBuYW1lOiBcInNjcm9sbFRvcFwiLFxyXG4gICAgb2Zmc2V0UHJvcDogXCJwYWdlWU9mZnNldFwiLFxyXG4gICAgc2Nyb2xsV2luZG93OiBmdW5jdGlvbih3aW4sIHZhbHVlKSB7XHJcbiAgICAgICAgd2luLnNjcm9sbFRvKHdpbi5wYWdlWE9mZnNldCwgdmFsdWUpXHJcbiAgICB9XHJcbn1dLmZvckVhY2goKGZ1bmN0aW9uKGRpcmVjdGlvblN0cmF0ZWd5KSB7XHJcbiAgICB2YXIgcHJvcE5hbWUgPSBkaXJlY3Rpb25TdHJhdGVneS5uYW1lO1xyXG4gICAgaW5pdFJlbmRlci5wcm90b3R5cGVbcHJvcE5hbWVdID0gZnVuY3Rpb24odmFsdWUpIHtcclxuICAgICAgICBpZiAoIXRoaXNbMF0pIHtcclxuICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciB3aW5kb3cgPSBnZXRXaW5kb3dCeUVsZW1lbnQodGhpc1swXSk7XHJcbiAgICAgICAgaWYgKHZvaWQgMCA9PT0gdmFsdWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHdpbmRvdyA/IHdpbmRvd1tkaXJlY3Rpb25TdHJhdGVneS5vZmZzZXRQcm9wXSA6IHRoaXNbMF1bcHJvcE5hbWVdXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh3aW5kb3cpIHtcclxuICAgICAgICAgICAgZGlyZWN0aW9uU3RyYXRlZ3kuc2Nyb2xsV2luZG93KHdpbmRvdywgdmFsdWUpXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpc1swXVtwcm9wTmFtZV0gPSB2YWx1ZVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpc1xyXG4gICAgfVxyXG59KSk7XHJcbmluaXRSZW5kZXIucHJvdG90eXBlLmRhdGEgPSBmdW5jdGlvbihrZXksIHZhbHVlKSB7XHJcbiAgICBpZiAoIXRoaXNbMF0pIHtcclxuICAgICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50RGF0YS5jYWxsKHJlbmRlcmVyLCB0aGlzWzBdLCBrZXkpXHJcbiAgICB9XHJcbiAgICBlbGVtZW50RGF0YS5jYWxsKHJlbmRlcmVyLCB0aGlzWzBdLCBrZXksIHZhbHVlKTtcclxuICAgIHJldHVybiB0aGlzXHJcbn07XHJcbmluaXRSZW5kZXIucHJvdG90eXBlLnJlbW92ZURhdGEgPSBmdW5jdGlvbihrZXkpIHtcclxuICAgIHRoaXNbMF0gJiYgcmVtb3ZlRGF0YSh0aGlzWzBdLCBrZXkpO1xyXG4gICAgcmV0dXJuIHRoaXNcclxufTtcclxudmFyIHJlbmRlcmVyV3JhcHBlciA9IGZ1bmN0aW9uKCkge1xyXG4gICAgcmV0dXJuIHJlbmRlcmVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcclxufTtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlbmRlcmVyV3JhcHBlciwgXCJmblwiLCB7XHJcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxyXG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxyXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gcmVuZGVyZXIuZm5cclxuICAgIH0sXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKHZhbHVlKSB7XHJcbiAgICAgICAgcmVuZGVyZXIuZm4gPSB2YWx1ZVxyXG4gICAgfVxyXG59KTtcclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gICAgc2V0OiBmdW5jdGlvbihzdHJhdGVneSkge1xyXG4gICAgICAgIHJlbmRlcmVyID0gc3RyYXRlZ3lcclxuICAgIH0sXHJcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiByZW5kZXJlcldyYXBwZXJcclxuICAgIH1cclxufTtcclxuIiwiLyoqXHJcbiAqIERldkV4dHJlbWUgKGVzbS9jb3JlL3V0aWxzL2FycmF5LmpzKVxyXG4gKiBWZXJzaW9uOiAyMS4xLjRcclxuICogQnVpbGQgZGF0ZTogTW9uIEp1biAyMSAyMDIxXHJcbiAqXHJcbiAqIENvcHlyaWdodCAoYykgMjAxMiAtIDIwMjEgRGV2ZWxvcGVyIEV4cHJlc3MgSW5jLiBBTEwgUklHSFRTIFJFU0VSVkVEXHJcbiAqIFJlYWQgYWJvdXQgRGV2RXh0cmVtZSBsaWNlbnNpbmcgaGVyZTogaHR0cHM6Ly9qcy5kZXZleHByZXNzLmNvbS9MaWNlbnNpbmcvXHJcbiAqL1xyXG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcclxuaW1wb3J0IHtcclxuICAgIGlzRGVmaW5lZFxyXG59IGZyb20gXCIuL3R5cGVcIjtcclxuaW1wb3J0IHtcclxuICAgIGVhY2hcclxufSBmcm9tIFwiLi9pdGVyYXRvclwiO1xyXG5pbXBvcnQge1xyXG4gICAgb3JkZXJFYWNoXHJcbn0gZnJvbSBcIi4vb2JqZWN0XCI7XHJcbmltcG9ydCBjb25maWcgZnJvbSBcIi4uL2NvbmZpZ1wiO1xyXG5leHBvcnQgdmFyIGlzRW1wdHkgPSBmdW5jdGlvbihlbnRpdHkpIHtcclxuICAgIHJldHVybiBBcnJheS5pc0FycmF5KGVudGl0eSkgJiYgIWVudGl0eS5sZW5ndGhcclxufTtcclxuZXhwb3J0IHZhciB3cmFwVG9BcnJheSA9IGZ1bmN0aW9uKGVudGl0eSkge1xyXG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoZW50aXR5KSA/IGVudGl0eSA6IFtlbnRpdHldXHJcbn07XHJcbmV4cG9ydCB2YXIgaW5BcnJheSA9IGZ1bmN0aW9uKHZhbHVlLCBvYmplY3QpIHtcclxuICAgIGlmICghb2JqZWN0KSB7XHJcbiAgICAgICAgcmV0dXJuIC0xXHJcbiAgICB9XHJcbiAgICB2YXIgYXJyYXkgPSBBcnJheS5pc0FycmF5KG9iamVjdCkgPyBvYmplY3QgOiBvYmplY3QudG9BcnJheSgpO1xyXG4gICAgcmV0dXJuIGFycmF5LmluZGV4T2YodmFsdWUpXHJcbn07XHJcbmV4cG9ydCB2YXIgaW50ZXJzZWN0aW9uID0gZnVuY3Rpb24oYSwgYikge1xyXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGEpIHx8IDAgPT09IGEubGVuZ3RoIHx8ICFBcnJheS5pc0FycmF5KGIpIHx8IDAgPT09IGIubGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuIFtdXHJcbiAgICB9XHJcbiAgICB2YXIgcmVzdWx0ID0gW107XHJcbiAgICBlYWNoKGEsIChmdW5jdGlvbihfLCB2YWx1ZSkge1xyXG4gICAgICAgIHZhciBpbmRleCA9IGluQXJyYXkodmFsdWUsIGIpO1xyXG4gICAgICAgIGlmICgtMSAhPT0gaW5kZXgpIHtcclxuICAgICAgICAgICAgcmVzdWx0LnB1c2godmFsdWUpXHJcbiAgICAgICAgfVxyXG4gICAgfSkpO1xyXG4gICAgcmV0dXJuIHJlc3VsdFxyXG59O1xyXG5leHBvcnQgdmFyIHVuaXF1ZVZhbHVlcyA9IGZ1bmN0aW9uKGRhdGEpIHtcclxuICAgIHJldHVybiBkYXRhLmZpbHRlcigoZnVuY3Rpb24oaXRlbSwgcG9zaXRpb24pIHtcclxuICAgICAgICByZXR1cm4gZGF0YS5pbmRleE9mKGl0ZW0pID09PSBwb3NpdGlvblxyXG4gICAgfSkpXHJcbn07XHJcbmV4cG9ydCB2YXIgcmVtb3ZlRHVwbGljYXRlcyA9IGZ1bmN0aW9uKGZyb20sIHdoYXQpIHtcclxuICAgIGlmICghQXJyYXkuaXNBcnJheShmcm9tKSB8fCAwID09PSBmcm9tLmxlbmd0aCkge1xyXG4gICAgICAgIHJldHVybiBbXVxyXG4gICAgfVxyXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHdoYXQpIHx8IDAgPT09IHdoYXQubGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuIGZyb20uc2xpY2UoKVxyXG4gICAgfVxyXG4gICAgdmFyIHJlc3VsdCA9IFtdO1xyXG4gICAgZWFjaChmcm9tLCAoZnVuY3Rpb24oXywgdmFsdWUpIHtcclxuICAgICAgICB2YXIgaW5kZXggPSBpbkFycmF5KHZhbHVlLCB3aGF0KTtcclxuICAgICAgICBpZiAoLTEgPT09IGluZGV4KSB7XHJcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKVxyXG4gICAgICAgIH1cclxuICAgIH0pKTtcclxuICAgIHJldHVybiByZXN1bHRcclxufTtcclxuZXhwb3J0IHZhciBub3JtYWxpemVJbmRleGVzID0gZnVuY3Rpb24oaXRlbXMsIGluZGV4UGFyYW1ldGVyTmFtZSwgY3VycmVudEl0ZW0sIG5lZWRJbmRleENhbGxiYWNrKSB7XHJcbiAgICB2YXIgaW5kZXhlZEl0ZW1zID0ge307XHJcbiAgICB2YXIgcGFyYW1ldGVySW5kZXggPSAwO1xyXG4gICAgdmFyIHVzZUxlZ2FjeVZpc2libGVJbmRleCA9IGNvbmZpZygpLnVzZUxlZ2FjeVZpc2libGVJbmRleDtcclxuICAgIGVhY2goaXRlbXMsIChmdW5jdGlvbihpbmRleCwgaXRlbSkge1xyXG4gICAgICAgIGluZGV4ID0gaXRlbVtpbmRleFBhcmFtZXRlck5hbWVdO1xyXG4gICAgICAgIGlmIChpbmRleCA+PSAwKSB7XHJcbiAgICAgICAgICAgIGluZGV4ZWRJdGVtc1tpbmRleF0gPSBpbmRleGVkSXRlbXNbaW5kZXhdIHx8IFtdO1xyXG4gICAgICAgICAgICBpZiAoaXRlbSA9PT0gY3VycmVudEl0ZW0pIHtcclxuICAgICAgICAgICAgICAgIGluZGV4ZWRJdGVtc1tpbmRleF0udW5zaGlmdChpdGVtKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaW5kZXhlZEl0ZW1zW2luZGV4XS5wdXNoKGl0ZW0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpdGVtW2luZGV4UGFyYW1ldGVyTmFtZV0gPSB2b2lkIDBcclxuICAgICAgICB9XHJcbiAgICB9KSk7XHJcbiAgICBpZiAoIXVzZUxlZ2FjeVZpc2libGVJbmRleCkge1xyXG4gICAgICAgIGVhY2goaXRlbXMsIChmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgaWYgKCFpc0RlZmluZWQodGhpc1tpbmRleFBhcmFtZXRlck5hbWVdKSAmJiAoIW5lZWRJbmRleENhbGxiYWNrIHx8IG5lZWRJbmRleENhbGxiYWNrKHRoaXMpKSkge1xyXG4gICAgICAgICAgICAgICAgd2hpbGUgKGluZGV4ZWRJdGVtc1twYXJhbWV0ZXJJbmRleF0pIHtcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJJbmRleCsrXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpbmRleGVkSXRlbXNbcGFyYW1ldGVySW5kZXhdID0gW3RoaXNdO1xyXG4gICAgICAgICAgICAgICAgcGFyYW1ldGVySW5kZXgrK1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSkpXHJcbiAgICB9XHJcbiAgICBwYXJhbWV0ZXJJbmRleCA9IDA7XHJcbiAgICBvcmRlckVhY2goaW5kZXhlZEl0ZW1zLCAoZnVuY3Rpb24oaW5kZXgsIGl0ZW1zKSB7XHJcbiAgICAgICAgZWFjaChpdGVtcywgKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpc1tpbmRleFBhcmFtZXRlck5hbWVdID0gcGFyYW1ldGVySW5kZXgrK1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSkpXHJcbiAgICB9KSk7XHJcbiAgICBpZiAodXNlTGVnYWN5VmlzaWJsZUluZGV4KSB7XHJcbiAgICAgICAgZWFjaChpdGVtcywgKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICBpZiAoIWlzRGVmaW5lZCh0aGlzW2luZGV4UGFyYW1ldGVyTmFtZV0pICYmICghbmVlZEluZGV4Q2FsbGJhY2sgfHwgbmVlZEluZGV4Q2FsbGJhY2sodGhpcykpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzW2luZGV4UGFyYW1ldGVyTmFtZV0gPSBwYXJhbWV0ZXJJbmRleCsrXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KSlcclxuICAgIH1cclxuICAgIHJldHVybiBwYXJhbWV0ZXJJbmRleFxyXG59O1xyXG5leHBvcnQgdmFyIG1lcmdlID0gZnVuY3Rpb24oYXJyYXkxLCBhcnJheTIpIHtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkyLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgYXJyYXkxW2FycmF5MS5sZW5ndGhdID0gYXJyYXkyW2ldXHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXJyYXkxXHJcbn07XHJcbmV4cG9ydCB2YXIgZmluZCA9IGZ1bmN0aW9uKGFycmF5LCBjb25kaXRpb24pIHtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBpZiAoY29uZGl0aW9uKGFycmF5W2ldKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gYXJyYXlbaV1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcbmV4cG9ydCB2YXIgZ3JvdXBCeSA9IChhcnJheSwgY2IpID0+IGFycmF5LnJlZHVjZSgocmVzdWx0LCBpdGVtKSA9PiBfZXh0ZW5kcyh7fSwgcmVzdWx0LCB7XHJcbiAgICBbY2IoaXRlbSldOiBbLi4ucmVzdWx0W2NiKGl0ZW0pXSB8fCBbXSwgaXRlbV1cclxufSksIHt9KTtcclxuIiwiLyoqXHJcbiAqIERldkV4dHJlbWUgKGVzbS9jb3JlL3V0aWxzL2NhbGxfb25jZS5qcylcclxuICogVmVyc2lvbjogMjEuMS40XHJcbiAqIEJ1aWxkIGRhdGU6IE1vbiBKdW4gMjEgMjAyMVxyXG4gKlxyXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTIgLSAyMDIxIERldmVsb3BlciBFeHByZXNzIEluYy4gQUxMIFJJR0hUUyBSRVNFUlZFRFxyXG4gKiBSZWFkIGFib3V0IERldkV4dHJlbWUgbGljZW5zaW5nIGhlcmU6IGh0dHBzOi8vanMuZGV2ZXhwcmVzcy5jb20vTGljZW5zaW5nL1xyXG4gKi9cclxudmFyIGNhbGxPbmNlID0gZnVuY3Rpb24oaGFuZGxlcikge1xyXG4gICAgdmFyIHJlc3VsdDtcclxuICAgIHZhciBfd3JhcHBlZEhhbmRsZXIgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXN1bHQgPSBoYW5kbGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcbiAgICAgICAgX3dyYXBwZWRIYW5kbGVyID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiByZXN1bHRcclxuICAgIH07XHJcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIF93cmFwcGVkSGFuZGxlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpXHJcbiAgICB9XHJcbn07XHJcbmV4cG9ydCBkZWZhdWx0IGNhbGxPbmNlO1xyXG4iLCIvKipcclxuICogRGV2RXh0cmVtZSAoZXNtL2NvcmUvdXRpbHMvY2FsbGJhY2tzLmpzKVxyXG4gKiBWZXJzaW9uOiAyMS4xLjRcclxuICogQnVpbGQgZGF0ZTogTW9uIEp1biAyMSAyMDIxXHJcbiAqXHJcbiAqIENvcHlyaWdodCAoYykgMjAxMiAtIDIwMjEgRGV2ZWxvcGVyIEV4cHJlc3MgSW5jLiBBTEwgUklHSFRTIFJFU0VSVkVEXHJcbiAqIFJlYWQgYWJvdXQgRGV2RXh0cmVtZSBsaWNlbnNpbmcgaGVyZTogaHR0cHM6Ly9qcy5kZXZleHByZXNzLmNvbS9MaWNlbnNpbmcvXHJcbiAqL1xyXG52YXIgQ2FsbGJhY2sgPSBmdW5jdGlvbihvcHRpb25zKSB7XHJcbiAgICB0aGlzLl9vcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcclxuICAgIHRoaXMuX2xpc3QgPSBbXTtcclxuICAgIHRoaXMuX3F1ZXVlID0gW107XHJcbiAgICB0aGlzLl9maXJpbmcgPSBmYWxzZTtcclxuICAgIHRoaXMuX2ZpcmVkID0gZmFsc2U7XHJcbiAgICB0aGlzLl9maXJpbmdJbmRleGVzID0gW11cclxufTtcclxuQ2FsbGJhY2sucHJvdG90eXBlLl9maXJlQ29yZSA9IGZ1bmN0aW9uKGNvbnRleHQsIGFyZ3MpIHtcclxuICAgIHZhciBmaXJpbmdJbmRleGVzID0gdGhpcy5fZmlyaW5nSW5kZXhlcztcclxuICAgIHZhciBsaXN0ID0gdGhpcy5fbGlzdDtcclxuICAgIHZhciBzdG9wT25GYWxzZSA9IHRoaXMuX29wdGlvbnMuc3RvcE9uRmFsc2U7XHJcbiAgICB2YXIgc3RlcCA9IGZpcmluZ0luZGV4ZXMubGVuZ3RoO1xyXG4gICAgZm9yIChmaXJpbmdJbmRleGVzW3N0ZXBdID0gMDsgZmlyaW5nSW5kZXhlc1tzdGVwXSA8IGxpc3QubGVuZ3RoOyBmaXJpbmdJbmRleGVzW3N0ZXBdKyspIHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gbGlzdFtmaXJpbmdJbmRleGVzW3N0ZXBdXS5hcHBseShjb250ZXh0LCBhcmdzKTtcclxuICAgICAgICBpZiAoZmFsc2UgPT09IHJlc3VsdCAmJiBzdG9wT25GYWxzZSkge1xyXG4gICAgICAgICAgICBicmVha1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZpcmluZ0luZGV4ZXMucG9wKClcclxufTtcclxuQ2FsbGJhY2sucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uKGZuKSB7XHJcbiAgICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgZm4gJiYgKCF0aGlzLl9vcHRpb25zLnVuaXF1ZSB8fCAhdGhpcy5oYXMoZm4pKSkge1xyXG4gICAgICAgIHRoaXMuX2xpc3QucHVzaChmbilcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzXHJcbn07XHJcbkNhbGxiYWNrLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbihmbikge1xyXG4gICAgdmFyIGxpc3QgPSB0aGlzLl9saXN0O1xyXG4gICAgdmFyIGZpcmluZ0luZGV4ZXMgPSB0aGlzLl9maXJpbmdJbmRleGVzO1xyXG4gICAgdmFyIGluZGV4ID0gbGlzdC5pbmRleE9mKGZuKTtcclxuICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgbGlzdC5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgIGlmICh0aGlzLl9maXJpbmcgJiYgZmlyaW5nSW5kZXhlcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgc3RlcCA9IDA7IHN0ZXAgPCBmaXJpbmdJbmRleGVzLmxlbmd0aDsgc3RlcCsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPD0gZmlyaW5nSW5kZXhlc1tzdGVwXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZpcmluZ0luZGV4ZXNbc3RlcF0tLVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXNcclxufTtcclxuQ2FsbGJhY2sucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uKGZuKSB7XHJcbiAgICB2YXIgbGlzdCA9IHRoaXMuX2xpc3Q7XHJcbiAgICByZXR1cm4gZm4gPyBsaXN0LmluZGV4T2YoZm4pID4gLTEgOiAhIWxpc3QubGVuZ3RoXHJcbn07XHJcbkNhbGxiYWNrLnByb3RvdHlwZS5lbXB0eSA9IGZ1bmN0aW9uKGZuKSB7XHJcbiAgICB0aGlzLl9saXN0ID0gW107XHJcbiAgICByZXR1cm4gdGhpc1xyXG59O1xyXG5DYWxsYmFjay5wcm90b3R5cGUuZmlyZVdpdGggPSBmdW5jdGlvbihjb250ZXh0LCBhcmdzKSB7XHJcbiAgICB2YXIgcXVldWUgPSB0aGlzLl9xdWV1ZTtcclxuICAgIGFyZ3MgPSBhcmdzIHx8IFtdO1xyXG4gICAgYXJncyA9IGFyZ3Muc2xpY2UgPyBhcmdzLnNsaWNlKCkgOiBhcmdzO1xyXG4gICAgaWYgKHRoaXMuX29wdGlvbnMuc3luY1N0cmF0ZWd5KSB7XHJcbiAgICAgICAgdGhpcy5fZmlyaW5nID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9maXJlQ29yZShjb250ZXh0LCBhcmdzKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBxdWV1ZS5wdXNoKFtjb250ZXh0LCBhcmdzXSk7XHJcbiAgICAgICAgaWYgKHRoaXMuX2ZpcmluZykge1xyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fZmlyaW5nID0gdHJ1ZTtcclxuICAgICAgICB3aGlsZSAocXVldWUubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHZhciBtZW1vcnkgPSBxdWV1ZS5zaGlmdCgpO1xyXG4gICAgICAgICAgICB0aGlzLl9maXJlQ29yZShtZW1vcnlbMF0sIG1lbW9yeVsxXSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLl9maXJpbmcgPSBmYWxzZTtcclxuICAgIHRoaXMuX2ZpcmVkID0gdHJ1ZTtcclxuICAgIHJldHVybiB0aGlzXHJcbn07XHJcbkNhbGxiYWNrLnByb3RvdHlwZS5maXJlID0gZnVuY3Rpb24oKSB7XHJcbiAgICB0aGlzLmZpcmVXaXRoKHRoaXMsIGFyZ3VtZW50cylcclxufTtcclxuQ2FsbGJhY2sucHJvdG90eXBlLmZpcmVkID0gZnVuY3Rpb24oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZmlyZWRcclxufTtcclxudmFyIENhbGxiYWNrcyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcclxuICAgIHJldHVybiBuZXcgQ2FsbGJhY2sob3B0aW9ucylcclxufTtcclxuZXhwb3J0IGRlZmF1bHQgQ2FsbGJhY2tzO1xyXG4iLCIvKipcclxuICogRGV2RXh0cmVtZSAoZXNtL2NvcmUvdXRpbHMvY29tbW9uLmpzKVxyXG4gKiBWZXJzaW9uOiAyMS4xLjRcclxuICogQnVpbGQgZGF0ZTogTW9uIEp1biAyMSAyMDIxXHJcbiAqXHJcbiAqIENvcHlyaWdodCAoYykgMjAxMiAtIDIwMjEgRGV2ZWxvcGVyIEV4cHJlc3MgSW5jLiBBTEwgUklHSFRTIFJFU0VSVkVEXHJcbiAqIFJlYWQgYWJvdXQgRGV2RXh0cmVtZSBsaWNlbnNpbmcgaGVyZTogaHR0cHM6Ly9qcy5kZXZleHByZXNzLmNvbS9MaWNlbnNpbmcvXHJcbiAqL1xyXG5pbXBvcnQgY29uZmlnIGZyb20gXCIuLi9jb25maWdcIjtcclxuaW1wb3J0IEd1aWQgZnJvbSBcIi4uL2d1aWRcIjtcclxuaW1wb3J0IHtcclxuICAgIHdoZW4sXHJcbiAgICBEZWZlcnJlZFxyXG59IGZyb20gXCIuLi91dGlscy9kZWZlcnJlZFwiO1xyXG5pbXBvcnQge1xyXG4gICAgdG9Db21wYXJhYmxlXHJcbn0gZnJvbSBcIi4vZGF0YVwiO1xyXG5pbXBvcnQge1xyXG4gICAgZWFjaFxyXG59IGZyb20gXCIuL2l0ZXJhdG9yXCI7XHJcbmltcG9ydCB7XHJcbiAgICBpc0RlZmluZWQsXHJcbiAgICBpc0Z1bmN0aW9uLFxyXG4gICAgaXNTdHJpbmcsXHJcbiAgICBpc09iamVjdCxcclxuICAgIHR5cGVcclxufSBmcm9tIFwiLi90eXBlXCI7XHJcbmV4cG9ydCB2YXIgZW5zdXJlRGVmaW5lZCA9IGZ1bmN0aW9uKHZhbHVlLCBkZWZhdWx0VmFsdWUpIHtcclxuICAgIHJldHVybiBpc0RlZmluZWQodmFsdWUpID8gdmFsdWUgOiBkZWZhdWx0VmFsdWVcclxufTtcclxuZXhwb3J0IHZhciBleGVjdXRlQXN5bmMgPSBmdW5jdGlvbihhY3Rpb24sIGNvbnRleHQpIHtcclxuICAgIHZhciBkZWZlcnJlZCA9IG5ldyBEZWZlcnJlZDtcclxuICAgIHZhciBub3JtYWxpemVkQ29udGV4dCA9IGNvbnRleHQgfHwgdGhpcztcclxuICAgIHZhciB0YXNrID0ge1xyXG4gICAgICAgIHByb21pc2U6IGRlZmVycmVkLnByb21pc2UoKSxcclxuICAgICAgICBhYm9ydDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcklkKTtcclxuICAgICAgICAgICAgZGVmZXJyZWQucmVqZWN0V2l0aChub3JtYWxpemVkQ29udGV4dClcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgdmFyIGNhbGxiYWNrID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IGFjdGlvbi5jYWxsKG5vcm1hbGl6ZWRDb250ZXh0KTtcclxuICAgICAgICBpZiAocmVzdWx0ICYmIHJlc3VsdC5kb25lICYmIGlzRnVuY3Rpb24ocmVzdWx0LmRvbmUpKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdC5kb25lKChmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgIGRlZmVycmVkLnJlc29sdmVXaXRoKG5vcm1hbGl6ZWRDb250ZXh0KVxyXG4gICAgICAgICAgICB9KSlcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBkZWZlcnJlZC5yZXNvbHZlV2l0aChub3JtYWxpemVkQ29udGV4dClcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgdmFyIHRpbWVySWQgPSAoYXJndW1lbnRzWzJdIHx8IHNldFRpbWVvdXQpKGNhbGxiYWNrLCBcIm51bWJlclwiID09PSB0eXBlb2YgY29udGV4dCA/IGNvbnRleHQgOiAwKTtcclxuICAgIHJldHVybiB0YXNrXHJcbn07XHJcbnZhciBkZWxheWVkRnVuY3MgPSBbXTtcclxudmFyIGRlbGF5ZWROYW1lcyA9IFtdO1xyXG52YXIgZGVsYXllZERlZmVycmVkcyA9IFtdO1xyXG52YXIgZXhlY3V0aW5nTmFtZTtcclxudmFyIGRlZmVyRXhlY3V0ZSA9IGZ1bmN0aW9uKG5hbWUsIGZ1bmMsIGRlZmVycmVkKSB7XHJcbiAgICBpZiAoZXhlY3V0aW5nTmFtZSAmJiBleGVjdXRpbmdOYW1lICE9PSBuYW1lKSB7XHJcbiAgICAgICAgZGVsYXllZEZ1bmNzLnB1c2goZnVuYyk7XHJcbiAgICAgICAgZGVsYXllZE5hbWVzLnB1c2gobmFtZSk7XHJcbiAgICAgICAgZGVmZXJyZWQgPSBkZWZlcnJlZCB8fCBuZXcgRGVmZXJyZWQ7XHJcbiAgICAgICAgZGVsYXllZERlZmVycmVkcy5wdXNoKGRlZmVycmVkKTtcclxuICAgICAgICByZXR1cm4gZGVmZXJyZWRcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdmFyIG9sZEV4ZWN1dGluZ05hbWUgPSBleGVjdXRpbmdOYW1lO1xyXG4gICAgICAgIHZhciBjdXJyZW50RGVsYXllZENvdW50ID0gZGVsYXllZERlZmVycmVkcy5sZW5ndGg7XHJcbiAgICAgICAgZXhlY3V0aW5nTmFtZSA9IG5hbWU7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IGZ1bmMoKTtcclxuICAgICAgICBpZiAoIXJlc3VsdCkge1xyXG4gICAgICAgICAgICBpZiAoZGVsYXllZERlZmVycmVkcy5sZW5ndGggPiBjdXJyZW50RGVsYXllZENvdW50KSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSB3aGVuLmFwcGx5KHRoaXMsIGRlbGF5ZWREZWZlcnJlZHMuc2xpY2UoY3VycmVudERlbGF5ZWRDb3VudCkpXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZGVmZXJyZWQpIHtcclxuICAgICAgICAgICAgICAgIGRlZmVycmVkLnJlc29sdmUoKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGV4ZWN1dGluZ05hbWUgPSBvbGRFeGVjdXRpbmdOYW1lO1xyXG4gICAgICAgIGlmIChkZWZlcnJlZCAmJiByZXN1bHQgJiYgcmVzdWx0LmRvbmUpIHtcclxuICAgICAgICAgICAgcmVzdWx0LmRvbmUoZGVmZXJyZWQucmVzb2x2ZSkuZmFpbChkZWZlcnJlZC5yZWplY3QpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghZXhlY3V0aW5nTmFtZSAmJiBkZWxheWVkRnVuY3MubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIChcInJlbmRlclwiID09PSBkZWxheWVkTmFtZXMuc2hpZnQoKSA/IGRlZmVyUmVuZGVyIDogZGVmZXJVcGRhdGUpKGRlbGF5ZWRGdW5jcy5zaGlmdCgpLCBkZWxheWVkRGVmZXJyZWRzLnNoaWZ0KCkpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQgfHwgd2hlbigpXHJcbiAgICB9XHJcbn07XHJcbmV4cG9ydCB2YXIgZGVmZXJSZW5kZXIgPSBmdW5jdGlvbihmdW5jLCBkZWZlcnJlZCkge1xyXG4gICAgcmV0dXJuIGRlZmVyRXhlY3V0ZShcInJlbmRlclwiLCBmdW5jLCBkZWZlcnJlZClcclxufTtcclxuZXhwb3J0IHZhciBkZWZlclVwZGF0ZSA9IGZ1bmN0aW9uKGZ1bmMsIGRlZmVycmVkKSB7XHJcbiAgICByZXR1cm4gZGVmZXJFeGVjdXRlKFwidXBkYXRlXCIsIGZ1bmMsIGRlZmVycmVkKVxyXG59O1xyXG5leHBvcnQgdmFyIGRlZmVyUmVuZGVyZXIgPSBmdW5jdGlvbihmdW5jKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xyXG4gICAgICAgIHJldHVybiBkZWZlckV4ZWN1dGUoXCJyZW5kZXJcIiwgKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZnVuYy5jYWxsKHRoYXQpXHJcbiAgICAgICAgfSkpXHJcbiAgICB9XHJcbn07XHJcbmV4cG9ydCB2YXIgZGVmZXJVcGRhdGVyID0gZnVuY3Rpb24oZnVuYykge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciB0aGF0ID0gdGhpcztcclxuICAgICAgICByZXR1cm4gZGVmZXJFeGVjdXRlKFwidXBkYXRlXCIsIChmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbCh0aGF0KVxyXG4gICAgICAgIH0pKVxyXG4gICAgfVxyXG59O1xyXG5leHBvcnQgdmFyIGZpbmRCZXN0TWF0Y2hlcyA9IGZ1bmN0aW9uKHRhcmdldEZpbHRlciwgaXRlbXMsIG1hcEZuKSB7XHJcbiAgICB2YXIgYmVzdE1hdGNoZXMgPSBbXTtcclxuICAgIHZhciBtYXhNYXRjaENvdW50ID0gMDtcclxuICAgIGVhY2goaXRlbXMsIChpbmRleCwgaXRlbVNyYykgPT4ge1xyXG4gICAgICAgIHZhciBtYXRjaENvdW50ID0gMDtcclxuICAgICAgICB2YXIgaXRlbSA9IG1hcEZuID8gbWFwRm4oaXRlbVNyYykgOiBpdGVtU3JjO1xyXG4gICAgICAgIGVhY2godGFyZ2V0RmlsdGVyLCAocGFyYW1OYW1lLCB0YXJnZXRWYWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICB2YXIgdmFsdWUgPSBpdGVtW3BhcmFtTmFtZV07XHJcbiAgICAgICAgICAgIGlmICh2b2lkIDAgPT09IHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAobWF0Y2godmFsdWUsIHRhcmdldFZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgbWF0Y2hDb3VudCsrO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbWF0Y2hDb3VudCA9IC0xO1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAobWF0Y2hDb3VudCA8IG1heE1hdGNoQ291bnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtYXRjaENvdW50ID4gbWF4TWF0Y2hDb3VudCkge1xyXG4gICAgICAgICAgICBiZXN0TWF0Y2hlcy5sZW5ndGggPSAwO1xyXG4gICAgICAgICAgICBtYXhNYXRjaENvdW50ID0gbWF0Y2hDb3VudFxyXG4gICAgICAgIH1cclxuICAgICAgICBiZXN0TWF0Y2hlcy5wdXNoKGl0ZW1TcmMpXHJcbiAgICB9KTtcclxuICAgIHJldHVybiBiZXN0TWF0Y2hlc1xyXG59O1xyXG52YXIgbWF0Y2ggPSBmdW5jdGlvbih2YWx1ZSwgdGFyZ2V0VmFsdWUpIHtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSAmJiBBcnJheS5pc0FycmF5KHRhcmdldFZhbHVlKSkge1xyXG4gICAgICAgIHZhciBtaXNtYXRjaCA9IGZhbHNlO1xyXG4gICAgICAgIGVhY2godmFsdWUsIChpbmRleCwgdmFsdWVJdGVtKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZUl0ZW0gIT09IHRhcmdldFZhbHVlW2luZGV4XSkge1xyXG4gICAgICAgICAgICAgICAgbWlzbWF0Y2ggPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAobWlzbWF0Y2gpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9XHJcbiAgICBpZiAodmFsdWUgPT09IHRhcmdldFZhbHVlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWVcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZVxyXG59O1xyXG5leHBvcnQgdmFyIHNwbGl0UGFpciA9IGZ1bmN0aW9uKHJhdykge1xyXG4gICAgdmFyIF9yYXckeCwgX3JhdyR5O1xyXG4gICAgc3dpdGNoICh0eXBlKHJhdykpIHtcclxuICAgICAgICBjYXNlIFwic3RyaW5nXCI6XHJcbiAgICAgICAgICAgIHJldHVybiByYXcuc3BsaXQoL1xccysvLCAyKTtcclxuICAgICAgICBjYXNlIFwib2JqZWN0XCI6XHJcbiAgICAgICAgICAgIHJldHVybiBbbnVsbCAhPT0gKF9yYXckeCA9IHJhdy54KSAmJiB2b2lkIDAgIT09IF9yYXckeCA/IF9yYXckeCA6IHJhdy5oLCBudWxsICE9PSAoX3JhdyR5ID0gcmF3LnkpICYmIHZvaWQgMCAhPT0gX3JhdyR5ID8gX3JhdyR5IDogcmF3LnZdO1xyXG4gICAgICAgIGNhc2UgXCJudW1iZXJcIjpcclxuICAgICAgICAgICAgcmV0dXJuIFtyYXddO1xyXG4gICAgICAgIGNhc2UgXCJhcnJheVwiOlxyXG4gICAgICAgICAgICByZXR1cm4gcmF3O1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsXHJcbiAgICB9XHJcbn07XHJcbmV4cG9ydCB2YXIgbm9ybWFsaXplS2V5ID0gZnVuY3Rpb24oaWQpIHtcclxuICAgIHZhciBrZXkgPSBpc1N0cmluZyhpZCkgPyBpZCA6IGlkLnRvU3RyaW5nKCk7XHJcbiAgICB2YXIgYXJyID0ga2V5Lm1hdGNoKC9bXmEtekEtWjAtOV9dL2cpO1xyXG4gICAgYXJyICYmIGVhY2goYXJyLCAoXywgc2lnbikgPT4ge1xyXG4gICAgICAgIGtleSA9IGtleS5yZXBsYWNlKHNpZ24sIFwiX19cIiArIHNpZ24uY2hhckNvZGVBdCgpICsgXCJfX1wiKVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4ga2V5XHJcbn07XHJcbmV4cG9ydCB2YXIgZGVub3JtYWxpemVLZXkgPSBmdW5jdGlvbihrZXkpIHtcclxuICAgIHZhciBhcnIgPSBrZXkubWF0Y2goL19fXFxkK19fL2cpO1xyXG4gICAgYXJyICYmIGFyci5mb3JFYWNoKGNoYXIgPT4ge1xyXG4gICAgICAgIHZhciBjaGFyQ29kZSA9IHBhcnNlSW50KGNoYXIucmVwbGFjZShcIl9fXCIsIFwiXCIpKTtcclxuICAgICAgICBrZXkgPSBrZXkucmVwbGFjZShjaGFyLCBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoYXJDb2RlKSlcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGtleVxyXG59O1xyXG5leHBvcnQgdmFyIHBhaXJUb09iamVjdCA9IGZ1bmN0aW9uKHJhdywgcHJldmVudFJvdW5kKSB7XHJcbiAgICB2YXIgcGFpciA9IHNwbGl0UGFpcihyYXcpO1xyXG4gICAgdmFyIGggPSBwcmV2ZW50Um91bmQgPyBwYXJzZUZsb2F0KHBhaXIgJiYgcGFpclswXSkgOiBwYXJzZUludChwYWlyICYmIHBhaXJbMF0sIDEwKTtcclxuICAgIHZhciB2ID0gcHJldmVudFJvdW5kID8gcGFyc2VGbG9hdChwYWlyICYmIHBhaXJbMV0pIDogcGFyc2VJbnQocGFpciAmJiBwYWlyWzFdLCAxMCk7XHJcbiAgICBpZiAoIWlzRmluaXRlKGgpKSB7XHJcbiAgICAgICAgaCA9IDBcclxuICAgIH1cclxuICAgIGlmICghaXNGaW5pdGUodikpIHtcclxuICAgICAgICB2ID0gaFxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBoOiBoLFxyXG4gICAgICAgIHY6IHZcclxuICAgIH1cclxufTtcclxuZXhwb3J0IHZhciBnZXRLZXlIYXNoID0gZnVuY3Rpb24oa2V5KSB7XHJcbiAgICBpZiAoa2V5IGluc3RhbmNlb2YgR3VpZCkge1xyXG4gICAgICAgIHJldHVybiBrZXkudG9TdHJpbmcoKVxyXG4gICAgfSBlbHNlIGlmIChpc09iamVjdChrZXkpIHx8IEFycmF5LmlzQXJyYXkoa2V5KSkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHZhciBrZXlIYXNoID0gSlNPTi5zdHJpbmdpZnkoa2V5KTtcclxuICAgICAgICAgICAgcmV0dXJuIFwie31cIiA9PT0ga2V5SGFzaCA/IGtleSA6IGtleUhhc2hcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBrZXlcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4ga2V5XHJcbn07XHJcbmV4cG9ydCB2YXIgZXNjYXBlUmVnRXhwID0gZnVuY3Rpb24oc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1tbXFxde31cXC0oKSorPy5cXFxcXiR8XFxzXS9nLCBcIlxcXFwkJlwiKVxyXG59O1xyXG5leHBvcnQgdmFyIGFwcGx5U2VydmVyRGVjaW1hbFNlcGFyYXRvciA9IGZ1bmN0aW9uKHZhbHVlKSB7XHJcbiAgICB2YXIgc2VwYXJhdG9yID0gY29uZmlnKCkuc2VydmVyRGVjaW1hbFNlcGFyYXRvcjtcclxuICAgIGlmIChpc0RlZmluZWQodmFsdWUpKSB7XHJcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS50b1N0cmluZygpLnJlcGxhY2UoXCIuXCIsIHNlcGFyYXRvcilcclxuICAgIH1cclxuICAgIHJldHVybiB2YWx1ZVxyXG59O1xyXG5leHBvcnQgdmFyIG5vb3AgPSBmdW5jdGlvbigpIHt9O1xyXG5leHBvcnQgdmFyIGFzeW5jTm9vcCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgcmV0dXJuIChuZXcgRGVmZXJyZWQpLnJlc29sdmUoKS5wcm9taXNlKClcclxufTtcclxuZXhwb3J0IHZhciBncmVwID0gZnVuY3Rpb24oZWxlbWVudHMsIGNoZWNrRnVuY3Rpb24sIGludmVydCkge1xyXG4gICAgdmFyIHJlc3VsdCA9IFtdO1xyXG4gICAgdmFyIGNoZWNrO1xyXG4gICAgdmFyIGV4cGVjdGVkQ2hlY2sgPSAhaW52ZXJ0O1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNoZWNrID0gISFjaGVja0Z1bmN0aW9uKGVsZW1lbnRzW2ldLCBpKTtcclxuICAgICAgICBpZiAoY2hlY2sgPT09IGV4cGVjdGVkQ2hlY2spIHtcclxuICAgICAgICAgICAgcmVzdWx0LnB1c2goZWxlbWVudHNbaV0pXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdFxyXG59O1xyXG52YXIgYXJyYXlzRXF1YWxCeVZhbHVlID0gZnVuY3Rpb24oYXJyYXkxLCBhcnJheTIsIGRlcHRoKSB7XHJcbiAgICBpZiAoYXJyYXkxLmxlbmd0aCAhPT0gYXJyYXkyLmxlbmd0aCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgfVxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheTEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBpZiAoIWVxdWFsQnlWYWx1ZShhcnJheTFbaV0sIGFycmF5MltpXSwgZGVwdGggKyAxKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZVxyXG59O1xyXG52YXIgb2JqZWN0c0VxdWFsQnlWYWx1ZSA9IGZ1bmN0aW9uKG9iamVjdDEsIG9iamVjdDIsIGRlcHRoLCBzdHJpY3QpIHtcclxuICAgIGZvciAodmFyIHByb3BlcnR5TmFtZSBpbiBvYmplY3QxKSB7XHJcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QxLCBwcm9wZXJ0eU5hbWUpICYmICFlcXVhbEJ5VmFsdWUob2JqZWN0MVtwcm9wZXJ0eU5hbWVdLCBvYmplY3QyW3Byb3BlcnR5TmFtZV0sIGRlcHRoICsgMSwgc3RyaWN0KSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmb3IgKHZhciBfcHJvcGVydHlOYW1lIGluIG9iamVjdDIpIHtcclxuICAgICAgICBpZiAoIShfcHJvcGVydHlOYW1lIGluIG9iamVjdDEpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlXHJcbn07XHJcbnZhciBtYXhFcXVhbGl0eURlcHRoID0gMztcclxuZXhwb3J0IHZhciBlcXVhbEJ5VmFsdWUgPSBmdW5jdGlvbihvYmplY3QxLCBvYmplY3QyKSB7XHJcbiAgICB2YXIgZGVwdGggPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiB2b2lkIDAgIT09IGFyZ3VtZW50c1syXSA/IGFyZ3VtZW50c1syXSA6IDA7XHJcbiAgICB2YXIgc3RyaWN0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgdm9pZCAwICE9PSBhcmd1bWVudHNbM10gPyBhcmd1bWVudHNbM10gOiB0cnVlO1xyXG4gICAgb2JqZWN0MSA9IHRvQ29tcGFyYWJsZShvYmplY3QxLCB0cnVlKTtcclxuICAgIG9iamVjdDIgPSB0b0NvbXBhcmFibGUob2JqZWN0MiwgdHJ1ZSk7XHJcbiAgICB2YXIgY29tcGFyaXNvblJlc3VsdCA9IHN0cmljdCA/IG9iamVjdDEgPT09IG9iamVjdDIgOiBvYmplY3QxID09IG9iamVjdDI7XHJcbiAgICBpZiAoY29tcGFyaXNvblJlc3VsdCB8fCBkZXB0aCA+PSBtYXhFcXVhbGl0eURlcHRoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWVcclxuICAgIH1cclxuICAgIGlmIChpc09iamVjdChvYmplY3QxKSAmJiBpc09iamVjdChvYmplY3QyKSkge1xyXG4gICAgICAgIHJldHVybiBvYmplY3RzRXF1YWxCeVZhbHVlKG9iamVjdDEsIG9iamVjdDIsIGRlcHRoLCBzdHJpY3QpXHJcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkob2JqZWN0MSkgJiYgQXJyYXkuaXNBcnJheShvYmplY3QyKSkge1xyXG4gICAgICAgIHJldHVybiBhcnJheXNFcXVhbEJ5VmFsdWUob2JqZWN0MSwgb2JqZWN0MiwgZGVwdGgpXHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2VcclxufTtcclxuIiwiLyoqXHJcbiAqIERldkV4dHJlbWUgKGVzbS9jb3JlL3V0aWxzL2NvbnNvbGUuanMpXHJcbiAqIFZlcnNpb246IDIxLjEuNFxyXG4gKiBCdWlsZCBkYXRlOiBNb24gSnVuIDIxIDIwMjFcclxuICpcclxuICogQ29weXJpZ2h0IChjKSAyMDEyIC0gMjAyMSBEZXZlbG9wZXIgRXhwcmVzcyBJbmMuIEFMTCBSSUdIVFMgUkVTRVJWRURcclxuICogUmVhZCBhYm91dCBEZXZFeHRyZW1lIGxpY2Vuc2luZyBoZXJlOiBodHRwczovL2pzLmRldmV4cHJlc3MuY29tL0xpY2Vuc2luZy9cclxuICovXHJcbmltcG9ydCB7XHJcbiAgICBpc0Z1bmN0aW9uXHJcbn0gZnJvbSBcIi4vdHlwZVwiO1xyXG52YXIgbm9vcCA9IGZ1bmN0aW9uKCkge307XHJcbnZhciBnZXRDb25zb2xlTWV0aG9kID0gZnVuY3Rpb24obWV0aG9kKSB7XHJcbiAgICBpZiAoXCJ1bmRlZmluZWRcIiA9PT0gdHlwZW9mIGNvbnNvbGUgfHwgIWlzRnVuY3Rpb24oY29uc29sZVttZXRob2RdKSkge1xyXG4gICAgICAgIHJldHVybiBub29wXHJcbiAgICB9XHJcbiAgICByZXR1cm4gY29uc29sZVttZXRob2RdLmJpbmQoY29uc29sZSlcclxufTtcclxuZXhwb3J0IHZhciBsb2dnZXIgPSB7XHJcbiAgICBpbmZvOiBnZXRDb25zb2xlTWV0aG9kKFwiaW5mb1wiKSxcclxuICAgIHdhcm46IGdldENvbnNvbGVNZXRob2QoXCJ3YXJuXCIpLFxyXG4gICAgZXJyb3I6IGdldENvbnNvbGVNZXRob2QoXCJlcnJvclwiKVxyXG59O1xyXG5leHBvcnQgdmFyIGRlYnVnID0gZnVuY3Rpb24oKSB7XHJcbiAgICBmdW5jdGlvbiBhc3NlcnQoY29uZGl0aW9uLCBtZXNzYWdlKSB7XHJcbiAgICAgICAgaWYgKCFjb25kaXRpb24pIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBhc3NlcnQ6IGFzc2VydCxcclxuICAgICAgICBhc3NlcnRQYXJhbTogZnVuY3Rpb24ocGFyYW1ldGVyLCBtZXNzYWdlKSB7XHJcbiAgICAgICAgICAgIGFzc2VydChudWxsICE9PSBwYXJhbWV0ZXIgJiYgdm9pZCAwICE9PSBwYXJhbWV0ZXIsIG1lc3NhZ2UpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59KCk7XHJcbiIsIi8qKlxyXG4gKiBEZXZFeHRyZW1lIChlc20vY29yZS91dGlscy9kYXRhLmpzKVxyXG4gKiBWZXJzaW9uOiAyMS4xLjRcclxuICogQnVpbGQgZGF0ZTogTW9uIEp1biAyMSAyMDIxXHJcbiAqXHJcbiAqIENvcHlyaWdodCAoYykgMjAxMiAtIDIwMjEgRGV2ZWxvcGVyIEV4cHJlc3MgSW5jLiBBTEwgUklHSFRTIFJFU0VSVkVEXHJcbiAqIFJlYWQgYWJvdXQgRGV2RXh0cmVtZSBsaWNlbnNpbmcgaGVyZTogaHR0cHM6Ly9qcy5kZXZleHByZXNzLmNvbS9MaWNlbnNpbmcvXHJcbiAqL1xyXG5pbXBvcnQgZXJyb3JzIGZyb20gXCIuLi9lcnJvcnNcIjtcclxuaW1wb3J0IENsYXNzIGZyb20gXCIuLi9jbGFzc1wiO1xyXG5pbXBvcnQge1xyXG4gICAgZGVlcEV4dGVuZEFycmF5U2FmZVxyXG59IGZyb20gXCIuL29iamVjdFwiO1xyXG5pbXBvcnQge1xyXG4gICAgaXNPYmplY3QsXHJcbiAgICBpc1BsYWluT2JqZWN0LFxyXG4gICAgaXNGdW5jdGlvbixcclxuICAgIGlzRGVmaW5lZFxyXG59IGZyb20gXCIuL3R5cGVcIjtcclxuaW1wb3J0IHtcclxuICAgIGVhY2hcclxufSBmcm9tIFwiLi9pdGVyYXRvclwiO1xyXG5pbXBvcnQgdmFyaWFibGVXcmFwcGVyIGZyb20gXCIuL3ZhcmlhYmxlX3dyYXBwZXJcIjtcclxudmFyIHVud3JhcFZhcmlhYmxlID0gdmFyaWFibGVXcmFwcGVyLnVud3JhcDtcclxudmFyIGlzV3JhcHBlZCA9IHZhcmlhYmxlV3JhcHBlci5pc1dyYXBwZWQ7XHJcbnZhciBhc3NpZ24gPSB2YXJpYWJsZVdyYXBwZXIuYXNzaWduO1xyXG52YXIgYnJhY2tldHNUb0RvdHMgPSBmdW5jdGlvbihleHByKSB7XHJcbiAgICByZXR1cm4gZXhwci5yZXBsYWNlKC9cXFsvZywgXCIuXCIpLnJlcGxhY2UoL1xcXS9nLCBcIlwiKVxyXG59O1xyXG52YXIgcmVhZFByb3BWYWx1ZSA9IGZ1bmN0aW9uKG9iaiwgcHJvcE5hbWUsIG9wdGlvbnMpIHtcclxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xyXG4gICAgaWYgKFwidGhpc1wiID09PSBwcm9wTmFtZSkge1xyXG4gICAgICAgIHJldHVybiB1bndyYXAob2JqLCBvcHRpb25zKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHVud3JhcChvYmpbcHJvcE5hbWVdLCBvcHRpb25zKVxyXG59O1xyXG52YXIgYXNzaWduUHJvcFZhbHVlID0gZnVuY3Rpb24ob2JqLCBwcm9wTmFtZSwgdmFsdWUsIG9wdGlvbnMpIHtcclxuICAgIGlmIChcInRoaXNcIiA9PT0gcHJvcE5hbWUpIHtcclxuICAgICAgICB0aHJvdyBuZXcgZXJyb3JzLkVycm9yKFwiRTQwMTZcIilcclxuICAgIH1cclxuICAgIHZhciBwcm9wVmFsdWUgPSBvYmpbcHJvcE5hbWVdO1xyXG4gICAgaWYgKG9wdGlvbnMudW53cmFwT2JzZXJ2YWJsZXMgJiYgaXNXcmFwcGVkKHByb3BWYWx1ZSkpIHtcclxuICAgICAgICBhc3NpZ24ocHJvcFZhbHVlLCB2YWx1ZSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgb2JqW3Byb3BOYW1lXSA9IHZhbHVlXHJcbiAgICB9XHJcbn07XHJcbnZhciBwcmVwYXJlT3B0aW9ucyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcclxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xyXG4gICAgb3B0aW9ucy51bndyYXBPYnNlcnZhYmxlcyA9IHZvaWQgMCAhPT0gb3B0aW9ucy51bndyYXBPYnNlcnZhYmxlcyA/IG9wdGlvbnMudW53cmFwT2JzZXJ2YWJsZXMgOiB0cnVlO1xyXG4gICAgcmV0dXJuIG9wdGlvbnNcclxufTtcclxuXHJcbmZ1bmN0aW9uIHVud3JhcCh2YWx1ZSwgb3B0aW9ucykge1xyXG4gICAgcmV0dXJuIG9wdGlvbnMudW53cmFwT2JzZXJ2YWJsZXMgPyB1bndyYXBWYXJpYWJsZSh2YWx1ZSkgOiB2YWx1ZVxyXG59XHJcbmV4cG9ydCB2YXIgY29tcGlsZUdldHRlciA9IGZ1bmN0aW9uKGV4cHIpIHtcclxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xyXG4gICAgICAgIGV4cHIgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cylcclxuICAgIH1cclxuICAgIGlmICghZXhwciB8fCBcInRoaXNcIiA9PT0gZXhwcikge1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbihvYmopIHtcclxuICAgICAgICAgICAgcmV0dXJuIG9ialxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChcInN0cmluZ1wiID09PSB0eXBlb2YgZXhwcikge1xyXG4gICAgICAgIGV4cHIgPSBicmFja2V0c1RvRG90cyhleHByKTtcclxuICAgICAgICB2YXIgcGF0aCA9IGV4cHIuc3BsaXQoXCIuXCIpO1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbihvYmosIG9wdGlvbnMpIHtcclxuICAgICAgICAgICAgb3B0aW9ucyA9IHByZXBhcmVPcHRpb25zKG9wdGlvbnMpO1xyXG4gICAgICAgICAgICB2YXIgZnVuY3Rpb25Bc0lzID0gb3B0aW9ucy5mdW5jdGlvbnNBc0lzO1xyXG4gICAgICAgICAgICB2YXIgaGFzRGVmYXVsdFZhbHVlID0gXCJkZWZhdWx0VmFsdWVcIiBpbiBvcHRpb25zO1xyXG4gICAgICAgICAgICB2YXIgY3VycmVudCA9IHVud3JhcChvYmosIG9wdGlvbnMpO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGlmICghY3VycmVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChudWxsID09IGN1cnJlbnQgJiYgaGFzRGVmYXVsdFZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvcHRpb25zLmRlZmF1bHRWYWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdmFyIHBhdGhQYXJ0ID0gcGF0aFtpXTtcclxuICAgICAgICAgICAgICAgIGlmIChoYXNEZWZhdWx0VmFsdWUgJiYgaXNPYmplY3QoY3VycmVudCkgJiYgIShwYXRoUGFydCBpbiBjdXJyZW50KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvcHRpb25zLmRlZmF1bHRWYWx1ZVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdmFyIG5leHQgPSB1bndyYXAoY3VycmVudFtwYXRoUGFydF0sIG9wdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFmdW5jdGlvbkFzSXMgJiYgaXNGdW5jdGlvbihuZXh0KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG5leHQgPSBuZXh0LmNhbGwoY3VycmVudClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBuZXh0XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShleHByKSkge1xyXG4gICAgICAgIHJldHVybiBjb21iaW5lR2V0dGVycyhleHByKVxyXG4gICAgfVxyXG4gICAgaWYgKGlzRnVuY3Rpb24oZXhwcikpIHtcclxuICAgICAgICByZXR1cm4gZXhwclxyXG4gICAgfVxyXG59O1xyXG5cclxuZnVuY3Rpb24gY29tYmluZUdldHRlcnMoZ2V0dGVycykge1xyXG4gICAgdmFyIGNvbXBpbGVkR2V0dGVycyA9IHt9O1xyXG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSBnZXR0ZXJzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgIHZhciBnZXR0ZXIgPSBnZXR0ZXJzW2ldO1xyXG4gICAgICAgIGNvbXBpbGVkR2V0dGVyc1tnZXR0ZXJdID0gY29tcGlsZUdldHRlcihnZXR0ZXIpXHJcbiAgICB9XHJcbiAgICByZXR1cm4gZnVuY3Rpb24ob2JqLCBvcHRpb25zKSB7XHJcbiAgICAgICAgdmFyIHJlc3VsdDtcclxuICAgICAgICBlYWNoKGNvbXBpbGVkR2V0dGVycywgKGZ1bmN0aW9uKG5hbWUpIHtcclxuICAgICAgICAgICAgdmFyIHZhbHVlID0gdGhpcyhvYmosIG9wdGlvbnMpO1xyXG4gICAgICAgICAgICBpZiAodm9pZCAwID09PSB2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGN1cnJlbnQgPSByZXN1bHQgfHwgKHJlc3VsdCA9IHt9KTtcclxuICAgICAgICAgICAgdmFyIHBhdGggPSBuYW1lLnNwbGl0KFwiLlwiKTtcclxuICAgICAgICAgICAgdmFyIGxhc3QgPSBwYXRoLmxlbmd0aCAtIDE7XHJcbiAgICAgICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBsYXN0OyBfaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcGF0aEl0ZW0gPSBwYXRoW19pXTtcclxuICAgICAgICAgICAgICAgIGlmICghKHBhdGhJdGVtIGluIGN1cnJlbnQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFtwYXRoSXRlbV0gPSB7fVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnRbcGF0aEl0ZW1dXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY3VycmVudFtwYXRoW2xhc3RdXSA9IHZhbHVlXHJcbiAgICAgICAgfSkpO1xyXG4gICAgICAgIHJldHVybiByZXN1bHRcclxuICAgIH1cclxufVxyXG52YXIgZW5zdXJlUHJvcFZhbHVlRGVmaW5lZCA9IGZ1bmN0aW9uKG9iaiwgcHJvcE5hbWUsIHZhbHVlLCBvcHRpb25zKSB7XHJcbiAgICBpZiAoaXNEZWZpbmVkKHZhbHVlKSkge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZVxyXG4gICAgfVxyXG4gICAgdmFyIG5ld1ZhbHVlID0ge307XHJcbiAgICBhc3NpZ25Qcm9wVmFsdWUob2JqLCBwcm9wTmFtZSwgbmV3VmFsdWUsIG9wdGlvbnMpO1xyXG4gICAgcmV0dXJuIG5ld1ZhbHVlXHJcbn07XHJcbmV4cG9ydCB2YXIgY29tcGlsZVNldHRlciA9IGZ1bmN0aW9uKGV4cHIpIHtcclxuICAgIGV4cHIgPSBicmFja2V0c1RvRG90cyhleHByIHx8IFwidGhpc1wiKS5zcGxpdChcIi5cIik7XHJcbiAgICB2YXIgbGFzdExldmVsSW5kZXggPSBleHByLmxlbmd0aCAtIDE7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24ob2JqLCB2YWx1ZSwgb3B0aW9ucykge1xyXG4gICAgICAgIG9wdGlvbnMgPSBwcmVwYXJlT3B0aW9ucyhvcHRpb25zKTtcclxuICAgICAgICB2YXIgY3VycmVudFZhbHVlID0gdW53cmFwKG9iaiwgb3B0aW9ucyk7XHJcbiAgICAgICAgZXhwci5mb3JFYWNoKChmdW5jdGlvbihwcm9wZXJ0eU5hbWUsIGxldmVsSW5kZXgpIHtcclxuICAgICAgICAgICAgdmFyIHByb3BlcnR5VmFsdWUgPSByZWFkUHJvcFZhbHVlKGN1cnJlbnRWYWx1ZSwgcHJvcGVydHlOYW1lLCBvcHRpb25zKTtcclxuICAgICAgICAgICAgdmFyIGlzUHJvcGVydHlGdW5jID0gIW9wdGlvbnMuZnVuY3Rpb25zQXNJcyAmJiBpc0Z1bmN0aW9uKHByb3BlcnR5VmFsdWUpICYmICFpc1dyYXBwZWQocHJvcGVydHlWYWx1ZSk7XHJcbiAgICAgICAgICAgIGlmIChsZXZlbEluZGV4ID09PSBsYXN0TGV2ZWxJbmRleCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMubWVyZ2UgJiYgaXNQbGFpbk9iamVjdCh2YWx1ZSkgJiYgKCFpc0RlZmluZWQocHJvcGVydHlWYWx1ZSkgfHwgaXNQbGFpbk9iamVjdChwcm9wZXJ0eVZhbHVlKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVZhbHVlID0gZW5zdXJlUHJvcFZhbHVlRGVmaW5lZChjdXJyZW50VmFsdWUsIHByb3BlcnR5TmFtZSwgcHJvcGVydHlWYWx1ZSwgb3B0aW9ucyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVlcEV4dGVuZEFycmF5U2FmZShwcm9wZXJ0eVZhbHVlLCB2YWx1ZSwgZmFsc2UsIHRydWUpXHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzUHJvcGVydHlGdW5jKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFZhbHVlW3Byb3BlcnR5TmFtZV0odmFsdWUpXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGFzc2lnblByb3BWYWx1ZShjdXJyZW50VmFsdWUsIHByb3BlcnR5TmFtZSwgdmFsdWUsIG9wdGlvbnMpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eVZhbHVlID0gZW5zdXJlUHJvcFZhbHVlRGVmaW5lZChjdXJyZW50VmFsdWUsIHByb3BlcnR5TmFtZSwgcHJvcGVydHlWYWx1ZSwgb3B0aW9ucyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNQcm9wZXJ0eUZ1bmMpIHtcclxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVZhbHVlID0gcHJvcGVydHlWYWx1ZS5jYWxsKGN1cnJlbnRWYWx1ZSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGN1cnJlbnRWYWx1ZSA9IHByb3BlcnR5VmFsdWVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pKVxyXG4gICAgfVxyXG59O1xyXG5leHBvcnQgdmFyIHRvQ29tcGFyYWJsZSA9IGZ1bmN0aW9uKHZhbHVlLCBjYXNlU2Vuc2l0aXZlKSB7XHJcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlLmdldFRpbWUoKVxyXG4gICAgfVxyXG4gICAgaWYgKHZhbHVlICYmIHZhbHVlIGluc3RhbmNlb2YgQ2xhc3MgJiYgdmFsdWUudmFsdWVPZikge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZS52YWx1ZU9mKClcclxuICAgIH1cclxuICAgIGlmICghY2FzZVNlbnNpdGl2ZSAmJiBcInN0cmluZ1wiID09PSB0eXBlb2YgdmFsdWUpIHtcclxuICAgICAgICByZXR1cm4gdmFsdWUudG9Mb3dlckNhc2UoKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZhbHVlXHJcbn07XHJcbiIsIi8qKlxyXG4gKiBEZXZFeHRyZW1lIChlc20vY29yZS91dGlscy9kZWZlcnJlZC5qcylcclxuICogVmVyc2lvbjogMjEuMS40XHJcbiAqIEJ1aWxkIGRhdGU6IE1vbiBKdW4gMjEgMjAyMVxyXG4gKlxyXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTIgLSAyMDIxIERldmVsb3BlciBFeHByZXNzIEluYy4gQUxMIFJJR0hUUyBSRVNFUlZFRFxyXG4gKiBSZWFkIGFib3V0IERldkV4dHJlbWUgbGljZW5zaW5nIGhlcmU6IGh0dHBzOi8vanMuZGV2ZXhwcmVzcy5jb20vTGljZW5zaW5nL1xyXG4gKi9cclxuaW1wb3J0IHtcclxuICAgIGlzRGVmZXJyZWQsXHJcbiAgICBpc0RlZmluZWQsXHJcbiAgICBpc1Byb21pc2VcclxufSBmcm9tIFwiLi4vdXRpbHMvdHlwZVwiO1xyXG5pbXBvcnQge1xyXG4gICAgZXh0ZW5kXHJcbn0gZnJvbSBcIi4uL3V0aWxzL2V4dGVuZFwiO1xyXG5pbXBvcnQgQ2FsbGJhY2tzIGZyb20gXCIuLi91dGlscy9jYWxsYmFja3NcIjtcclxudmFyIGRlZmVycmVkQ29uZmlnID0gW3tcclxuICAgIG1ldGhvZDogXCJyZXNvbHZlXCIsXHJcbiAgICBoYW5kbGVyOiBcImRvbmVcIixcclxuICAgIHN0YXRlOiBcInJlc29sdmVkXCJcclxufSwge1xyXG4gICAgbWV0aG9kOiBcInJlamVjdFwiLFxyXG4gICAgaGFuZGxlcjogXCJmYWlsXCIsXHJcbiAgICBzdGF0ZTogXCJyZWplY3RlZFwiXHJcbn0sIHtcclxuICAgIG1ldGhvZDogXCJub3RpZnlcIixcclxuICAgIGhhbmRsZXI6IFwicHJvZ3Jlc3NcIlxyXG59XTtcclxudmFyIF9EZWZlcnJlZE9iaiA9IGZ1bmN0aW9uKCkge1xyXG4gICAgdmFyIHRoYXQgPSB0aGlzO1xyXG4gICAgdGhpcy5fc3RhdGUgPSBcInBlbmRpbmdcIjtcclxuICAgIHRoaXMuX3Byb21pc2UgPSB7fTtcclxuICAgIGRlZmVycmVkQ29uZmlnLmZvckVhY2goZnVuY3Rpb24oY29uZmlnKSB7XHJcbiAgICAgICAgdmFyIG1ldGhvZE5hbWUgPSBjb25maWcubWV0aG9kO1xyXG4gICAgICAgIHRoaXNbbWV0aG9kTmFtZSArIFwiQ2FsbGJhY2tzXCJdID0gbmV3IENhbGxiYWNrcztcclxuICAgICAgICB0aGlzW21ldGhvZE5hbWVdID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzW21ldGhvZE5hbWUgKyBcIldpdGhcIl0odGhpcy5fcHJvbWlzZSwgYXJndW1lbnRzKVxyXG4gICAgICAgIH0uYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLl9wcm9taXNlW2NvbmZpZy5oYW5kbGVyXSA9IGZ1bmN0aW9uKGhhbmRsZXIpIHtcclxuICAgICAgICAgICAgaWYgKCFoYW5kbGVyKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpc1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBjYWxsYmFja3MgPSB0aGF0W21ldGhvZE5hbWUgKyBcIkNhbGxiYWNrc1wiXTtcclxuICAgICAgICAgICAgaWYgKGNhbGxiYWNrcy5maXJlZCgpKSB7XHJcbiAgICAgICAgICAgICAgICBoYW5kbGVyLmFwcGx5KHRoYXRbbWV0aG9kTmFtZSArIFwiQ29udGV4dFwiXSwgdGhhdFttZXRob2ROYW1lICsgXCJBcmdzXCJdKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY2FsbGJhY2tzLmFkZChmdW5jdGlvbihjb250ZXh0LCBhcmdzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlci5hcHBseShjb250ZXh0LCBhcmdzKVxyXG4gICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzXHJcbiAgICAgICAgfVxyXG4gICAgfS5iaW5kKHRoaXMpKTtcclxuICAgIHRoaXMuX3Byb21pc2UuYWx3YXlzID0gZnVuY3Rpb24oaGFuZGxlcikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRvbmUoaGFuZGxlcikuZmFpbChoYW5kbGVyKVxyXG4gICAgfTtcclxuICAgIHRoaXMuX3Byb21pc2UuY2F0Y2ggPSBmdW5jdGlvbihoYW5kbGVyKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudGhlbihudWxsLCBoYW5kbGVyKVxyXG4gICAgfTtcclxuICAgIHRoaXMuX3Byb21pc2UudGhlbiA9IGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBuZXcgX0RlZmVycmVkT2JqO1xyXG4gICAgICAgIFtcImRvbmVcIiwgXCJmYWlsXCJdLmZvckVhY2goZnVuY3Rpb24obWV0aG9kKSB7XHJcbiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IFwiZG9uZVwiID09PSBtZXRob2QgPyByZXNvbHZlIDogcmVqZWN0O1xyXG4gICAgICAgICAgICB0aGlzW21ldGhvZF0oKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFjYWxsYmFjaykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdFtcImRvbmVcIiA9PT0gbWV0aG9kID8gXCJyZXNvbHZlXCIgOiBcInJlamVjdFwiXS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdmFyIGNhbGxiYWNrUmVzdWx0ID0gY2FsbGJhY2sgJiYgY2FsbGJhY2suYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxuICAgICAgICAgICAgICAgIGlmIChpc0RlZmVycmVkKGNhbGxiYWNrUmVzdWx0KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrUmVzdWx0LmRvbmUocmVzdWx0LnJlc29sdmUpLmZhaWwocmVzdWx0LnJlamVjdClcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNQcm9taXNlKGNhbGxiYWNrUmVzdWx0KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrUmVzdWx0LnRoZW4ocmVzdWx0LnJlc29sdmUsIHJlc3VsdC5yZWplY3QpXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5yZXNvbHZlLmFwcGx5KHRoaXMsIGlzRGVmaW5lZChjYWxsYmFja1Jlc3VsdCkgPyBbY2FsbGJhY2tSZXN1bHRdIDogYXJndW1lbnRzKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KSlcclxuICAgICAgICB9LmJpbmQodGhpcykpO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQucHJvbWlzZSgpXHJcbiAgICB9O1xyXG4gICAgdGhpcy5fcHJvbWlzZS5zdGF0ZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiB0aGF0Ll9zdGF0ZVxyXG4gICAgfTtcclxuICAgIHRoaXMuX3Byb21pc2UucHJvbWlzZSA9IGZ1bmN0aW9uKGFyZ3MpIHtcclxuICAgICAgICByZXR1cm4gYXJncyA/IGV4dGVuZChhcmdzLCB0aGF0Ll9wcm9taXNlKSA6IHRoYXQuX3Byb21pc2VcclxuICAgIH07XHJcbiAgICB0aGlzLl9wcm9taXNlLnByb21pc2UodGhpcylcclxufTtcclxuZGVmZXJyZWRDb25maWcuZm9yRWFjaCgoZnVuY3Rpb24oY29uZmlnKSB7XHJcbiAgICB2YXIgbWV0aG9kTmFtZSA9IGNvbmZpZy5tZXRob2Q7XHJcbiAgICB2YXIgc3RhdGUgPSBjb25maWcuc3RhdGU7XHJcbiAgICBfRGVmZXJyZWRPYmoucHJvdG90eXBlW21ldGhvZE5hbWUgKyBcIldpdGhcIl0gPSBmdW5jdGlvbihjb250ZXh0LCBhcmdzKSB7XHJcbiAgICAgICAgdmFyIGNhbGxiYWNrcyA9IHRoaXNbbWV0aG9kTmFtZSArIFwiQ2FsbGJhY2tzXCJdO1xyXG4gICAgICAgIGlmIChcInBlbmRpbmdcIiA9PT0gdGhpcy5zdGF0ZSgpKSB7XHJcbiAgICAgICAgICAgIHRoaXNbbWV0aG9kTmFtZSArIFwiQXJnc1wiXSA9IGFyZ3M7XHJcbiAgICAgICAgICAgIHRoaXNbbWV0aG9kTmFtZSArIFwiQ29udGV4dFwiXSA9IGNvbnRleHQ7XHJcbiAgICAgICAgICAgIGlmIChzdGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGUgPSBzdGF0ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhbGxiYWNrcy5maXJlKGNvbnRleHQsIGFyZ3MpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzXHJcbiAgICB9XHJcbn0pKTtcclxuZXhwb3J0IGZ1bmN0aW9uIGZyb21Qcm9taXNlKHByb21pc2UsIGNvbnRleHQpIHtcclxuICAgIGlmIChpc0RlZmVycmVkKHByb21pc2UpKSB7XHJcbiAgICAgICAgcmV0dXJuIHByb21pc2VcclxuICAgIH0gZWxzZSBpZiAoaXNQcm9taXNlKHByb21pc2UpKSB7XHJcbiAgICAgICAgdmFyIGQgPSBuZXcgX0RlZmVycmVkT2JqO1xyXG4gICAgICAgIHByb21pc2UudGhlbigoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIGQucmVzb2x2ZVdpdGguYXBwbHkoZCwgW2NvbnRleHRdLmNvbmNhdChbXHJcbiAgICAgICAgICAgICAgICBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cylcclxuICAgICAgICAgICAgXSkpXHJcbiAgICAgICAgfSksIChmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgZC5yZWplY3RXaXRoLmFwcGx5KGQsIFtjb250ZXh0XS5jb25jYXQoW1xyXG4gICAgICAgICAgICAgICAgW10uc2xpY2UuY2FsbChhcmd1bWVudHMpXHJcbiAgICAgICAgICAgIF0pKVxyXG4gICAgICAgIH0pKTtcclxuICAgICAgICByZXR1cm4gZFxyXG4gICAgfVxyXG4gICAgcmV0dXJuIChuZXcgX0RlZmVycmVkT2JqKS5yZXNvbHZlV2l0aChjb250ZXh0LCBbcHJvbWlzZV0pXHJcbn1cclxudmFyIHdoZW5GdW5jID0gZnVuY3Rpb24oKSB7XHJcbiAgICBpZiAoMSA9PT0gYXJndW1lbnRzLmxlbmd0aCkge1xyXG4gICAgICAgIHJldHVybiBmcm9tUHJvbWlzZShhcmd1bWVudHNbMF0pXHJcbiAgICB9XHJcbiAgICB2YXIgdmFsdWVzID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMpO1xyXG4gICAgdmFyIGNvbnRleHRzID0gW107XHJcbiAgICB2YXIgcmVzb2x2ZWRDb3VudCA9IDA7XHJcbiAgICB2YXIgZGVmZXJyZWQgPSBuZXcgX0RlZmVycmVkT2JqO1xyXG4gICAgdmFyIHVwZGF0ZVN0YXRlID0gZnVuY3Rpb24oaSkge1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xyXG4gICAgICAgICAgICBjb250ZXh0c1tpXSA9IHRoaXM7XHJcbiAgICAgICAgICAgIHZhbHVlc1tpXSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gW10uc2xpY2UuY2FsbChhcmd1bWVudHMpIDogdmFsdWU7XHJcbiAgICAgICAgICAgIHJlc29sdmVkQ291bnQrKztcclxuICAgICAgICAgICAgaWYgKHJlc29sdmVkQ291bnQgPT09IHZhbHVlcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIGRlZmVycmVkLnJlc29sdmVXaXRoKGNvbnRleHRzLCB2YWx1ZXMpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBpZiAoaXNEZWZlcnJlZCh2YWx1ZXNbaV0pKSB7XHJcbiAgICAgICAgICAgIHZhbHVlc1tpXS5wcm9taXNlKCkuZG9uZSh1cGRhdGVTdGF0ZShpKSkuZmFpbChkZWZlcnJlZC5yZWplY3QpXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmVzb2x2ZWRDb3VudCsrXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHJlc29sdmVkQ291bnQgPT09IHZhbHVlcy5sZW5ndGgpIHtcclxuICAgICAgICBkZWZlcnJlZC5yZXNvbHZlV2l0aChjb250ZXh0cywgdmFsdWVzKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRlZmVycmVkLnByb21pc2UoKVxyXG59O1xyXG5leHBvcnQgZnVuY3Rpb24gc2V0U3RyYXRlZ3kodmFsdWUpIHtcclxuICAgIF9EZWZlcnJlZE9iaiA9IHZhbHVlLkRlZmVycmVkO1xyXG4gICAgd2hlbkZ1bmMgPSB2YWx1ZS53aGVuXHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIERlZmVycmVkKCkge1xyXG4gICAgcmV0dXJuIG5ldyBfRGVmZXJyZWRPYmpcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gd2hlbigpIHtcclxuICAgIHJldHVybiB3aGVuRnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpXHJcbn1cclxuIiwiLyoqXHJcbiAqIERldkV4dHJlbWUgKGVzbS9jb3JlL3V0aWxzL2RlcGVuZGVuY3lfaW5qZWN0b3IuanMpXHJcbiAqIFZlcnNpb246IDIxLjEuNFxyXG4gKiBCdWlsZCBkYXRlOiBNb24gSnVuIDIxIDIwMjFcclxuICpcclxuICogQ29weXJpZ2h0IChjKSAyMDEyIC0gMjAyMSBEZXZlbG9wZXIgRXhwcmVzcyBJbmMuIEFMTCBSSUdIVFMgUkVTRVJWRURcclxuICogUmVhZCBhYm91dCBEZXZFeHRyZW1lIGxpY2Vuc2luZyBoZXJlOiBodHRwczovL2pzLmRldmV4cHJlc3MuY29tL0xpY2Vuc2luZy9cclxuICovXHJcbmltcG9ydCB7XHJcbiAgICBleHRlbmRcclxufSBmcm9tIFwiLi9leHRlbmRcIjtcclxuaW1wb3J0IHtcclxuICAgIGlzRnVuY3Rpb25cclxufSBmcm9tIFwiLi90eXBlXCI7XHJcbmltcG9ydCB7XHJcbiAgICBlYWNoXHJcbn0gZnJvbSBcIi4vaXRlcmF0b3JcIjtcclxuaW1wb3J0IENsYXNzIGZyb20gXCIuLi9jbGFzc1wiO1xyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihvYmplY3QpIHtcclxuICAgIHZhciBCYXNlQ2xhc3MgPSBDbGFzcy5pbmhlcml0KG9iamVjdCk7XHJcbiAgICB2YXIgSW5qZWN0ZWRDbGFzcyA9IEJhc2VDbGFzcztcclxuICAgIHZhciBpbnN0YW5jZSA9IG5ldyBJbmplY3RlZENsYXNzKG9iamVjdCk7XHJcbiAgICB2YXIgaW5pdGlhbEZpZWxkcyA9IHt9O1xyXG4gICAgdmFyIGluamVjdEZpZWxkcyA9IGZ1bmN0aW9uKGluamVjdGlvbk9iamVjdCwgaW5pdGlhbCkge1xyXG4gICAgICAgIGVhY2goaW5qZWN0aW9uT2JqZWN0LCAoZnVuY3Rpb24oa2V5KSB7XHJcbiAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKGluc3RhbmNlW2tleV0pKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5pdGlhbCB8fCAhb2JqZWN0W2tleV0pIHtcclxuICAgICAgICAgICAgICAgICAgICBvYmplY3Rba2V5XSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2Vba2V5XS5hcHBseShvYmplY3QsIGFyZ3VtZW50cylcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5pdGlhbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGluaXRpYWxGaWVsZHNba2V5XSA9IG9iamVjdFtrZXldXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBvYmplY3Rba2V5XSA9IGluc3RhbmNlW2tleV1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pKVxyXG4gICAgfTtcclxuICAgIGluamVjdEZpZWxkcyhvYmplY3QsIHRydWUpO1xyXG4gICAgb2JqZWN0LmluamVjdCA9IGZ1bmN0aW9uKGluamVjdGlvbk9iamVjdCkge1xyXG4gICAgICAgIEluamVjdGVkQ2xhc3MgPSBJbmplY3RlZENsYXNzLmluaGVyaXQoaW5qZWN0aW9uT2JqZWN0KTtcclxuICAgICAgICBpbnN0YW5jZSA9IG5ldyBJbmplY3RlZENsYXNzO1xyXG4gICAgICAgIGluamVjdEZpZWxkcyhpbmplY3Rpb25PYmplY3QpXHJcbiAgICB9O1xyXG4gICAgb2JqZWN0LnJlc2V0SW5qZWN0aW9uID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgZXh0ZW5kKG9iamVjdCwgaW5pdGlhbEZpZWxkcyk7XHJcbiAgICAgICAgSW5qZWN0ZWRDbGFzcyA9IEJhc2VDbGFzcztcclxuICAgICAgICBpbnN0YW5jZSA9IG5ldyBCYXNlQ2xhc3NcclxuICAgIH07XHJcbiAgICByZXR1cm4gb2JqZWN0XHJcbn1cclxuIiwiLyoqXHJcbiAqIERldkV4dHJlbWUgKGVzbS9jb3JlL3V0aWxzL2Vycm9yLmpzKVxyXG4gKiBWZXJzaW9uOiAyMS4xLjRcclxuICogQnVpbGQgZGF0ZTogTW9uIEp1biAyMSAyMDIxXHJcbiAqXHJcbiAqIENvcHlyaWdodCAoYykgMjAxMiAtIDIwMjEgRGV2ZWxvcGVyIEV4cHJlc3MgSW5jLiBBTEwgUklHSFRTIFJFU0VSVkVEXHJcbiAqIFJlYWQgYWJvdXQgRGV2RXh0cmVtZSBsaWNlbnNpbmcgaGVyZTogaHR0cHM6Ly9qcy5kZXZleHByZXNzLmNvbS9MaWNlbnNpbmcvXHJcbiAqL1xyXG5pbXBvcnQge1xyXG4gICAgZXh0ZW5kXHJcbn0gZnJvbSBcIi4vZXh0ZW5kXCI7XHJcbmltcG9ydCB7XHJcbiAgICBsb2dnZXJcclxufSBmcm9tIFwiLi9jb25zb2xlXCI7XHJcbmltcG9ydCB7XHJcbiAgICBmb3JtYXRcclxufSBmcm9tIFwiLi9zdHJpbmdcIjtcclxuaW1wb3J0IHtcclxuICAgIHZlcnNpb25cclxufSBmcm9tIFwiLi4vdmVyc2lvblwiO1xyXG52YXIgRVJST1JfVVJMID0gXCJodHRwOi8vanMuZGV2ZXhwcmVzcy5jb20vZXJyb3IvXCIgKyB2ZXJzaW9uLnNwbGl0KFwiLlwiKS5zbGljZSgwLCAyKS5qb2luKFwiX1wiKSArIFwiL1wiO1xyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihiYXNlRXJyb3JzLCBlcnJvcnMpIHtcclxuICAgIHZhciBleHBvcnRzID0ge1xyXG4gICAgICAgIEVSUk9SX01FU1NBR0VTOiBleHRlbmQoZXJyb3JzLCBiYXNlRXJyb3JzKSxcclxuICAgICAgICBFcnJvcjogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBtYWtlRXJyb3IoW10uc2xpY2UuY2FsbChhcmd1bWVudHMpKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbG9nOiBmdW5jdGlvbihpZCkge1xyXG4gICAgICAgICAgICB2YXIgbWV0aG9kID0gXCJsb2dcIjtcclxuICAgICAgICAgICAgaWYgKC9eRVxcZCskLy50ZXN0KGlkKSkge1xyXG4gICAgICAgICAgICAgICAgbWV0aG9kID0gXCJlcnJvclwiXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoL15XXFxkKyQvLnRlc3QoaWQpKSB7XHJcbiAgICAgICAgICAgICAgICBtZXRob2QgPSBcIndhcm5cIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxvZ2dlclttZXRob2RdKFwibG9nXCIgPT09IG1ldGhvZCA/IGlkIDogY29tYmluZU1lc3NhZ2UoW10uc2xpY2UuY2FsbChhcmd1bWVudHMpKSlcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGZ1bmN0aW9uIGNvbWJpbmVNZXNzYWdlKGFyZ3MpIHtcclxuICAgICAgICB2YXIgaWQgPSBhcmdzWzBdO1xyXG4gICAgICAgIGFyZ3MgPSBhcmdzLnNsaWNlKDEpO1xyXG4gICAgICAgIHJldHVybiBmb3JtYXRNZXNzYWdlKGlkLCBmb3JtYXREZXRhaWxzKGlkLCBhcmdzKSlcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBmb3JtYXREZXRhaWxzKGlkLCBhcmdzKSB7XHJcbiAgICAgICAgYXJncyA9IFtleHBvcnRzLkVSUk9SX01FU1NBR0VTW2lkXV0uY29uY2F0KGFyZ3MpO1xyXG4gICAgICAgIHJldHVybiBmb3JtYXQuYXBwbHkodGhpcywgYXJncykucmVwbGFjZSgvXFwuKlxccyo/JC8sIFwiXCIpXHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gZm9ybWF0TWVzc2FnZShpZCwgZGV0YWlscykge1xyXG4gICAgICAgIHJldHVybiBmb3JtYXQuYXBwbHkodGhpcywgW1wiezB9IC0gezF9LiBTZWU6XFxuezJ9XCIsIGlkLCBkZXRhaWxzLCBnZXRFcnJvclVybChpZCldKVxyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIG1ha2VFcnJvcihhcmdzKSB7XHJcbiAgICAgICAgdmFyIGlkID0gYXJnc1swXTtcclxuICAgICAgICBhcmdzID0gYXJncy5zbGljZSgxKTtcclxuICAgICAgICB2YXIgZGV0YWlscyA9IGZvcm1hdERldGFpbHMoaWQsIGFyZ3MpO1xyXG4gICAgICAgIHZhciB1cmwgPSBnZXRFcnJvclVybChpZCk7XHJcbiAgICAgICAgdmFyIG1lc3NhZ2UgPSBmb3JtYXRNZXNzYWdlKGlkLCBkZXRhaWxzKTtcclxuICAgICAgICByZXR1cm4gZXh0ZW5kKG5ldyBFcnJvcihtZXNzYWdlKSwge1xyXG4gICAgICAgICAgICBfX2lkOiBpZCxcclxuICAgICAgICAgICAgX19kZXRhaWxzOiBkZXRhaWxzLFxyXG4gICAgICAgICAgICB1cmw6IHVybFxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gZ2V0RXJyb3JVcmwoaWQpIHtcclxuICAgICAgICByZXR1cm4gRVJST1JfVVJMICsgaWRcclxuICAgIH1cclxuICAgIHJldHVybiBleHBvcnRzXHJcbn1cclxuIiwiLyoqXHJcbiAqIERldkV4dHJlbWUgKGVzbS9jb3JlL3V0aWxzL2V4dGVuZC5qcylcclxuICogVmVyc2lvbjogMjEuMS40XHJcbiAqIEJ1aWxkIGRhdGU6IE1vbiBKdW4gMjEgMjAyMVxyXG4gKlxyXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTIgLSAyMDIxIERldmVsb3BlciBFeHByZXNzIEluYy4gQUxMIFJJR0hUUyBSRVNFUlZFRFxyXG4gKiBSZWFkIGFib3V0IERldkV4dHJlbWUgbGljZW5zaW5nIGhlcmU6IGh0dHBzOi8vanMuZGV2ZXhwcmVzcy5jb20vTGljZW5zaW5nL1xyXG4gKi9cclxuaW1wb3J0IHtcclxuICAgIGlzUGxhaW5PYmplY3RcclxufSBmcm9tIFwiLi90eXBlXCI7XHJcbmV4cG9ydCB2YXIgZXh0ZW5kRnJvbU9iamVjdCA9IGZ1bmN0aW9uKHRhcmdldCwgc291cmNlLCBvdmVycmlkZUV4aXN0aW5nVmFsdWVzKSB7XHJcbiAgICB0YXJnZXQgPSB0YXJnZXQgfHwge307XHJcbiAgICBmb3IgKHZhciBwcm9wIGluIHNvdXJjZSkge1xyXG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBwcm9wKSkge1xyXG4gICAgICAgICAgICB2YXIgdmFsdWUgPSBzb3VyY2VbcHJvcF07XHJcbiAgICAgICAgICAgIGlmICghKHByb3AgaW4gdGFyZ2V0KSB8fCBvdmVycmlkZUV4aXN0aW5nVmFsdWVzKSB7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRbcHJvcF0gPSB2YWx1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRhcmdldFxyXG59O1xyXG5leHBvcnQgdmFyIGV4dGVuZCA9IGZ1bmN0aW9uIGV4dGVuZCh0YXJnZXQpIHtcclxuICAgIHRhcmdldCA9IHRhcmdldCB8fCB7fTtcclxuICAgIHZhciBpID0gMTtcclxuICAgIHZhciBkZWVwID0gZmFsc2U7XHJcbiAgICBpZiAoXCJib29sZWFuXCIgPT09IHR5cGVvZiB0YXJnZXQpIHtcclxuICAgICAgICBkZWVwID0gdGFyZ2V0O1xyXG4gICAgICAgIHRhcmdldCA9IGFyZ3VtZW50c1sxXSB8fCB7fTtcclxuICAgICAgICBpKytcclxuICAgIH1cclxuICAgIGZvciAoOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTtcclxuICAgICAgICBpZiAobnVsbCA9PSBzb3VyY2UpIHtcclxuICAgICAgICAgICAgY29udGludWVcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yICh2YXIga2V5IGluIHNvdXJjZSkge1xyXG4gICAgICAgICAgICB2YXIgdGFyZ2V0VmFsdWUgPSB0YXJnZXRba2V5XTtcclxuICAgICAgICAgICAgdmFyIHNvdXJjZVZhbHVlID0gc291cmNlW2tleV07XHJcbiAgICAgICAgICAgIHZhciBzb3VyY2VWYWx1ZUlzQXJyYXkgPSBmYWxzZTtcclxuICAgICAgICAgICAgdmFyIGNsb25lID0gdm9pZCAwO1xyXG4gICAgICAgICAgICBpZiAoXCJfX3Byb3RvX19cIiA9PT0ga2V5IHx8IFwiY29uc3RydWN0b3JcIiA9PT0ga2V5IHx8IHRhcmdldCA9PT0gc291cmNlVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGRlZXAgJiYgc291cmNlVmFsdWUgJiYgKGlzUGxhaW5PYmplY3Qoc291cmNlVmFsdWUpIHx8IChzb3VyY2VWYWx1ZUlzQXJyYXkgPSBBcnJheS5pc0FycmF5KHNvdXJjZVZhbHVlKSkpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc291cmNlVmFsdWVJc0FycmF5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2xvbmUgPSB0YXJnZXRWYWx1ZSAmJiBBcnJheS5pc0FycmF5KHRhcmdldFZhbHVlKSA/IHRhcmdldFZhbHVlIDogW11cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2xvbmUgPSB0YXJnZXRWYWx1ZSAmJiBpc1BsYWluT2JqZWN0KHRhcmdldFZhbHVlKSA/IHRhcmdldFZhbHVlIDoge31cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRhcmdldFtrZXldID0gZXh0ZW5kKGRlZXAsIGNsb25lLCBzb3VyY2VWYWx1ZSlcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh2b2lkIDAgIT09IHNvdXJjZVZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVZhbHVlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGFyZ2V0XHJcbn07XHJcbiIsIi8qKlxyXG4gKiBEZXZFeHRyZW1lIChlc20vY29yZS91dGlscy9odG1sX3BhcnNlci5qcylcclxuICogVmVyc2lvbjogMjEuMS40XHJcbiAqIEJ1aWxkIGRhdGU6IE1vbiBKdW4gMjEgMjAyMVxyXG4gKlxyXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTIgLSAyMDIxIERldmVsb3BlciBFeHByZXNzIEluYy4gQUxMIFJJR0hUUyBSRVNFUlZFRFxyXG4gKiBSZWFkIGFib3V0IERldkV4dHJlbWUgbGljZW5zaW5nIGhlcmU6IGh0dHBzOi8vanMuZGV2ZXhwcmVzcy5jb20vTGljZW5zaW5nL1xyXG4gKi9cclxuaW1wb3J0IHtcclxuICAgIG1lcmdlXHJcbn0gZnJvbSBcIi4vYXJyYXlcIjtcclxuaW1wb3J0IGRvbUFkYXB0ZXIgZnJvbSBcIi4uL2RvbV9hZGFwdGVyXCI7XHJcbnZhciBpc1RhZ05hbWUgPSAvPChbYS16XVteL1xcMD5cXHgyMFxcdFxcclxcblxcZl0rKS9pO1xyXG52YXIgdGFnV3JhcHBlcnMgPSB7XHJcbiAgICBkZWZhdWx0OiB7XHJcbiAgICAgICAgdGFnc0NvdW50OiAwLFxyXG4gICAgICAgIHN0YXJ0VGFnczogXCJcIixcclxuICAgICAgICBlbmRUYWdzOiBcIlwiXHJcbiAgICB9LFxyXG4gICAgdGhlYWQ6IHtcclxuICAgICAgICB0YWdzQ291bnQ6IDEsXHJcbiAgICAgICAgc3RhcnRUYWdzOiBcIjx0YWJsZT5cIixcclxuICAgICAgICBlbmRUYWdzOiBcIjwvdGFibGU+XCJcclxuICAgIH0sXHJcbiAgICB0ZDoge1xyXG4gICAgICAgIHRhZ3NDb3VudDogMyxcclxuICAgICAgICBzdGFydFRhZ3M6IFwiPHRhYmxlPjx0Ym9keT48dHI+XCIsXHJcbiAgICAgICAgZW5kVGFnczogXCI8L3RyPjwvdGJvZHk+PC90YWJsZT5cIlxyXG4gICAgfSxcclxuICAgIGNvbDoge1xyXG4gICAgICAgIHRhZ3NDb3VudDogMixcclxuICAgICAgICBzdGFydFRhZ3M6IFwiPHRhYmxlPjxjb2xncm91cD5cIixcclxuICAgICAgICBlbmRUYWdzOiBcIjwvY29sZ3JvdXA+PC90YWJsZT5cIlxyXG4gICAgfSxcclxuICAgIHRyOiB7XHJcbiAgICAgICAgdGFnc0NvdW50OiAyLFxyXG4gICAgICAgIHN0YXJ0VGFnczogXCI8dGFibGU+PHRib2R5PlwiLFxyXG4gICAgICAgIGVuZFRhZ3M6IFwiPC90Ym9keT48L3RhYmxlPlwiXHJcbiAgICB9XHJcbn07XHJcbnRhZ1dyYXBwZXJzLnRib2R5ID0gdGFnV3JhcHBlcnMuY29sZ3JvdXAgPSB0YWdXcmFwcGVycy5jYXB0aW9uID0gdGFnV3JhcHBlcnMudGZvb3QgPSB0YWdXcmFwcGVycy50aGVhZDtcclxudGFnV3JhcHBlcnMudGggPSB0YWdXcmFwcGVycy50ZDtcclxuZXhwb3J0IHZhciBwYXJzZUhUTUwgPSBmdW5jdGlvbihodG1sKSB7XHJcbiAgICBpZiAoXCJzdHJpbmdcIiAhPT0gdHlwZW9mIGh0bWwpIHtcclxuICAgICAgICByZXR1cm4gbnVsbFxyXG4gICAgfVxyXG4gICAgdmFyIGZyYWdtZW50ID0gZG9tQWRhcHRlci5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XHJcbiAgICB2YXIgY29udGFpbmVyID0gZnJhZ21lbnQuYXBwZW5kQ2hpbGQoZG9tQWRhcHRlci5jcmVhdGVFbGVtZW50KFwiZGl2XCIpKTtcclxuICAgIHZhciB0YWdzID0gaXNUYWdOYW1lLmV4ZWMoaHRtbCk7XHJcbiAgICB2YXIgZmlyc3RSb290VGFnID0gdGFncyAmJiB0YWdzWzFdLnRvTG93ZXJDYXNlKCk7XHJcbiAgICB2YXIgdGFnV3JhcHBlciA9IHRhZ1dyYXBwZXJzW2ZpcnN0Um9vdFRhZ10gfHwgdGFnV3JhcHBlcnMuZGVmYXVsdDtcclxuICAgIGNvbnRhaW5lci5pbm5lckhUTUwgPSB0YWdXcmFwcGVyLnN0YXJ0VGFncyArIGh0bWwgKyB0YWdXcmFwcGVyLmVuZFRhZ3M7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRhZ1dyYXBwZXIudGFnc0NvdW50OyBpKyspIHtcclxuICAgICAgICBjb250YWluZXIgPSBjb250YWluZXIubGFzdENoaWxkXHJcbiAgICB9XHJcbiAgICByZXR1cm4gbWVyZ2UoW10sIGNvbnRhaW5lci5jaGlsZE5vZGVzKVxyXG59O1xyXG5leHBvcnQgdmFyIGlzVGFibGVQYXJ0ID0gZnVuY3Rpb24oaHRtbCkge1xyXG4gICAgdmFyIHRhZ3MgPSBpc1RhZ05hbWUuZXhlYyhodG1sKTtcclxuICAgIHJldHVybiB0YWdzICYmIHRhZ3NbMV0gaW4gdGFnV3JhcHBlcnNcclxufTtcclxuIiwiLyoqXHJcbiAqIERldkV4dHJlbWUgKGVzbS9jb3JlL3V0aWxzL2luZmxlY3Rvci5qcylcclxuICogVmVyc2lvbjogMjEuMS40XHJcbiAqIEJ1aWxkIGRhdGU6IE1vbiBKdW4gMjEgMjAyMVxyXG4gKlxyXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTIgLSAyMDIxIERldmVsb3BlciBFeHByZXNzIEluYy4gQUxMIFJJR0hUUyBSRVNFUlZFRFxyXG4gKiBSZWFkIGFib3V0IERldkV4dHJlbWUgbGljZW5zaW5nIGhlcmU6IGh0dHBzOi8vanMuZGV2ZXhwcmVzcy5jb20vTGljZW5zaW5nL1xyXG4gKi9cclxuaW1wb3J0IHtcclxuICAgIG1hcFxyXG59IGZyb20gXCIuL2l0ZXJhdG9yXCI7XHJcbnZhciBfbm9ybWFsaXplID0gZnVuY3Rpb24odGV4dCkge1xyXG4gICAgaWYgKHZvaWQgMCA9PT0gdGV4dCB8fCBudWxsID09PSB0ZXh0KSB7XHJcbiAgICAgICAgcmV0dXJuIFwiXCJcclxuICAgIH1cclxuICAgIHJldHVybiBTdHJpbmcodGV4dClcclxufTtcclxudmFyIF91cHBlckNhc2VGaXJzdCA9IGZ1bmN0aW9uKHRleHQpIHtcclxuICAgIHJldHVybiBfbm9ybWFsaXplKHRleHQpLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdGV4dC5zdWJzdHIoMSlcclxufTtcclxudmFyIF9jaG9wID0gZnVuY3Rpb24odGV4dCkge1xyXG4gICAgcmV0dXJuIF9ub3JtYWxpemUodGV4dCkucmVwbGFjZSgvKFthLXpcXGRdKShbQS1aXSkvZywgXCIkMSAkMlwiKS5zcGxpdCgvW1xcc18tXSsvKVxyXG59O1xyXG5leHBvcnQgdmFyIGRhc2hlcml6ZSA9IGZ1bmN0aW9uKHRleHQpIHtcclxuICAgIHJldHVybiBtYXAoX2Nob3AodGV4dCksIChmdW5jdGlvbihwKSB7XHJcbiAgICAgICAgcmV0dXJuIHAudG9Mb3dlckNhc2UoKVxyXG4gICAgfSkpLmpvaW4oXCItXCIpXHJcbn07XHJcbmV4cG9ydCB2YXIgdW5kZXJzY29yZSA9IGZ1bmN0aW9uKHRleHQpIHtcclxuICAgIHJldHVybiBkYXNoZXJpemUodGV4dCkucmVwbGFjZSgvLS9nLCBcIl9cIilcclxufTtcclxuZXhwb3J0IHZhciBjYW1lbGl6ZSA9IGZ1bmN0aW9uKHRleHQsIHVwcGVyRmlyc3QpIHtcclxuICAgIHJldHVybiBtYXAoX2Nob3AodGV4dCksIChmdW5jdGlvbihwLCBpKSB7XHJcbiAgICAgICAgcCA9IHAudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICBpZiAodXBwZXJGaXJzdCB8fCBpID4gMCkge1xyXG4gICAgICAgICAgICBwID0gX3VwcGVyQ2FzZUZpcnN0KHApXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwXHJcbiAgICB9KSkuam9pbihcIlwiKVxyXG59O1xyXG5leHBvcnQgdmFyIGh1bWFuaXplID0gZnVuY3Rpb24odGV4dCkge1xyXG4gICAgcmV0dXJuIF91cHBlckNhc2VGaXJzdChkYXNoZXJpemUodGV4dCkucmVwbGFjZSgvLS9nLCBcIiBcIikpXHJcbn07XHJcbmV4cG9ydCB2YXIgdGl0bGVpemUgPSBmdW5jdGlvbih0ZXh0KSB7XHJcbiAgICByZXR1cm4gbWFwKF9jaG9wKHRleHQpLCAoZnVuY3Rpb24ocCkge1xyXG4gICAgICAgIHJldHVybiBfdXBwZXJDYXNlRmlyc3QocC50b0xvd2VyQ2FzZSgpKVxyXG4gICAgfSkpLmpvaW4oXCIgXCIpXHJcbn07XHJcbnZhciBESUdJVF9DSEFSUyA9IFtcIjBcIiwgXCIxXCIsIFwiMlwiLCBcIjNcIiwgXCI0XCIsIFwiNVwiLCBcIjZcIiwgXCI3XCIsIFwiOFwiLCBcIjlcIl07XHJcbmV4cG9ydCB2YXIgY2FwdGlvbml6ZSA9IGZ1bmN0aW9uKG5hbWUpIHtcclxuICAgIHZhciBjYXB0aW9uTGlzdCA9IFtdO1xyXG4gICAgdmFyIGk7XHJcbiAgICB2YXIgY2hhcjtcclxuICAgIHZhciBpc1ByZXZDaGFyTmV3V29yZCA9IGZhbHNlO1xyXG4gICAgdmFyIGlzTmV3V29yZCA9IGZhbHNlO1xyXG4gICAgZm9yIChpID0gMDsgaSA8IG5hbWUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjaGFyID0gbmFtZS5jaGFyQXQoaSk7XHJcbiAgICAgICAgaXNOZXdXb3JkID0gY2hhciA9PT0gY2hhci50b1VwcGVyQ2FzZSgpICYmIFwiLVwiICE9PSBjaGFyICYmIFwiKVwiICE9PSBjaGFyICYmIFwiL1wiICE9PSBjaGFyIHx8IGNoYXIgaW4gRElHSVRfQ0hBUlM7XHJcbiAgICAgICAgaWYgKFwiX1wiID09PSBjaGFyIHx8IFwiLlwiID09PSBjaGFyKSB7XHJcbiAgICAgICAgICAgIGNoYXIgPSBcIiBcIjtcclxuICAgICAgICAgICAgaXNOZXdXb3JkID0gdHJ1ZVxyXG4gICAgICAgIH0gZWxzZSBpZiAoMCA9PT0gaSkge1xyXG4gICAgICAgICAgICBjaGFyID0gY2hhci50b1VwcGVyQ2FzZSgpO1xyXG4gICAgICAgICAgICBpc05ld1dvcmQgPSB0cnVlXHJcbiAgICAgICAgfSBlbHNlIGlmICghaXNQcmV2Q2hhck5ld1dvcmQgJiYgaXNOZXdXb3JkKSB7XHJcbiAgICAgICAgICAgIGlmIChjYXB0aW9uTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBjYXB0aW9uTGlzdC5wdXNoKFwiIFwiKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhcHRpb25MaXN0LnB1c2goY2hhcik7XHJcbiAgICAgICAgaXNQcmV2Q2hhck5ld1dvcmQgPSBpc05ld1dvcmRcclxuICAgIH1cclxuICAgIHJldHVybiBjYXB0aW9uTGlzdC5qb2luKFwiXCIpXHJcbn07XHJcbiIsIi8qKlxyXG4gKiBEZXZFeHRyZW1lIChlc20vY29yZS91dGlscy9pdGVyYXRvci5qcylcclxuICogVmVyc2lvbjogMjEuMS40XHJcbiAqIEJ1aWxkIGRhdGU6IE1vbiBKdW4gMjEgMjAyMVxyXG4gKlxyXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTIgLSAyMDIxIERldmVsb3BlciBFeHByZXNzIEluYy4gQUxMIFJJR0hUUyBSRVNFUlZFRFxyXG4gKiBSZWFkIGFib3V0IERldkV4dHJlbWUgbGljZW5zaW5nIGhlcmU6IGh0dHBzOi8vanMuZGV2ZXhwcmVzcy5jb20vTGljZW5zaW5nL1xyXG4gKi9cclxudmFyIG1hcCA9ICh2YWx1ZXMsIGNhbGxiYWNrKSA9PiB7XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZXMpKSB7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlcy5tYXAoY2FsbGJhY2spXHJcbiAgICB9XHJcbiAgICB2YXIgcmVzdWx0ID0gW107XHJcbiAgICBmb3IgKHZhciBrZXkgaW4gdmFsdWVzKSB7XHJcbiAgICAgICAgcmVzdWx0LnB1c2goY2FsbGJhY2sodmFsdWVzW2tleV0sIGtleSkpXHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0XHJcbn07XHJcbnZhciBlYWNoID0gKHZhbHVlcywgY2FsbGJhY2spID0+IHtcclxuICAgIGlmICghdmFsdWVzKSB7XHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBpZiAoXCJsZW5ndGhcIiBpbiB2YWx1ZXMpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoZmFsc2UgPT09IGNhbGxiYWNrLmNhbGwodmFsdWVzW2ldLCBpLCB2YWx1ZXNbaV0pKSB7XHJcbiAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBmb3IgKHZhciBrZXkgaW4gdmFsdWVzKSB7XHJcbiAgICAgICAgICAgIGlmIChmYWxzZSA9PT0gY2FsbGJhY2suY2FsbCh2YWx1ZXNba2V5XSwga2V5LCB2YWx1ZXNba2V5XSkpIHtcclxuICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsdWVzXHJcbn07XHJcbnZhciByZXZlcnNlRWFjaCA9IChhcnJheSwgY2FsbGJhY2spID0+IHtcclxuICAgIGlmICghYXJyYXkgfHwgIShcImxlbmd0aFwiIGluIGFycmF5KSB8fCAwID09PSBhcnJheS5sZW5ndGgpIHtcclxuICAgICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIGZvciAodmFyIGkgPSBhcnJheS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIGlmIChmYWxzZSA9PT0gY2FsbGJhY2suY2FsbChhcnJheVtpXSwgaSwgYXJyYXlbaV0pKSB7XHJcbiAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG5leHBvcnQge1xyXG4gICAgbWFwLFxyXG4gICAgZWFjaCxcclxuICAgIHJldmVyc2VFYWNoXHJcbn07XHJcbiIsIi8qKlxyXG4gKiBEZXZFeHRyZW1lIChlc20vY29yZS91dGlscy9tYXRoLmpzKVxyXG4gKiBWZXJzaW9uOiAyMS4xLjRcclxuICogQnVpbGQgZGF0ZTogTW9uIEp1biAyMSAyMDIxXHJcbiAqXHJcbiAqIENvcHlyaWdodCAoYykgMjAxMiAtIDIwMjEgRGV2ZWxvcGVyIEV4cHJlc3MgSW5jLiBBTEwgUklHSFRTIFJFU0VSVkVEXHJcbiAqIFJlYWQgYWJvdXQgRGV2RXh0cmVtZSBsaWNlbnNpbmcgaGVyZTogaHR0cHM6Ly9qcy5kZXZleHByZXNzLmNvbS9MaWNlbnNpbmcvXHJcbiAqL1xyXG5pbXBvcnQge1xyXG4gICAgaXNFeHBvbmVudGlhbFxyXG59IGZyb20gXCIuL3R5cGVcIjtcclxudmFyIHNpZ24gPSBmdW5jdGlvbih2YWx1ZSkge1xyXG4gICAgaWYgKDAgPT09IHZhbHVlKSB7XHJcbiAgICAgICAgcmV0dXJuIDBcclxuICAgIH1cclxuICAgIHJldHVybiB2YWx1ZSAvIE1hdGguYWJzKHZhbHVlKVxyXG59O1xyXG52YXIgZml0SW50b1JhbmdlID0gZnVuY3Rpb24odmFsdWUsIG1pblZhbHVlLCBtYXhWYWx1ZSkge1xyXG4gICAgdmFyIGlzTWluVmFsdWVVbmRlZmluZWQgPSAhbWluVmFsdWUgJiYgMCAhPT0gbWluVmFsdWU7XHJcbiAgICB2YXIgaXNNYXhWYWx1ZVVuZGVmaW5lZCA9ICFtYXhWYWx1ZSAmJiAwICE9PSBtYXhWYWx1ZTtcclxuICAgIGlzTWluVmFsdWVVbmRlZmluZWQgJiYgKG1pblZhbHVlID0gIWlzTWF4VmFsdWVVbmRlZmluZWQgPyBNYXRoLm1pbih2YWx1ZSwgbWF4VmFsdWUpIDogdmFsdWUpO1xyXG4gICAgaXNNYXhWYWx1ZVVuZGVmaW5lZCAmJiAobWF4VmFsdWUgPSAhaXNNaW5WYWx1ZVVuZGVmaW5lZCA/IE1hdGgubWF4KHZhbHVlLCBtaW5WYWx1ZSkgOiB2YWx1ZSk7XHJcbiAgICByZXR1cm4gTWF0aC5taW4oTWF0aC5tYXgodmFsdWUsIG1pblZhbHVlKSwgbWF4VmFsdWUpXHJcbn07XHJcbnZhciBpblJhbmdlID0gZnVuY3Rpb24odmFsdWUsIG1pblZhbHVlLCBtYXhWYWx1ZSkge1xyXG4gICAgcmV0dXJuIHZhbHVlID49IG1pblZhbHVlICYmIHZhbHVlIDw9IG1heFZhbHVlXHJcbn07XHJcblxyXG5mdW5jdGlvbiBnZXRFeHBvbmVudCh2YWx1ZSkge1xyXG4gICAgcmV0dXJuIE1hdGguYWJzKHBhcnNlSW50KHZhbHVlLnRvRXhwb25lbnRpYWwoKS5zcGxpdChcImVcIilbMV0pKVxyXG59XHJcblxyXG5mdW5jdGlvbiBfaXNFZGdlQnVnKCkge1xyXG4gICAgcmV0dXJuIFwiMC4wMDAzMDBcIiAhPT0gM2UtNC50b1ByZWNpc2lvbigzKVxyXG59XHJcblxyXG5mdW5jdGlvbiBhZGp1c3QodmFsdWUsIGludGVydmFsKSB7XHJcbiAgICB2YXIgcHJlY2lzaW9uID0gZ2V0UHJlY2lzaW9uKGludGVydmFsIHx8IDApICsgMjtcclxuICAgIHZhciBzZXBhcmF0ZWRWYWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCkuc3BsaXQoXCIuXCIpO1xyXG4gICAgdmFyIHNvdXJjZVZhbHVlID0gdmFsdWU7XHJcbiAgICB2YXIgYWJzVmFsdWUgPSBNYXRoLmFicyh2YWx1ZSk7XHJcbiAgICB2YXIgc2VwYXJhdGVkQWRqdXN0ZWRWYWx1ZTtcclxuICAgIHZhciBpc0V4cG9uZW50VmFsdWUgPSBpc0V4cG9uZW50aWFsKHZhbHVlKTtcclxuICAgIHZhciBpbnRlZ2VyUGFydCA9IGFic1ZhbHVlID4gMSA/IDEwIDogMDtcclxuICAgIGlmICgxID09PSBzZXBhcmF0ZWRWYWx1ZS5sZW5ndGgpIHtcclxuICAgICAgICByZXR1cm4gdmFsdWVcclxuICAgIH1cclxuICAgIGlmICghaXNFeHBvbmVudFZhbHVlKSB7XHJcbiAgICAgICAgaWYgKGlzRXhwb25lbnRpYWwoaW50ZXJ2YWwpKSB7XHJcbiAgICAgICAgICAgIHByZWNpc2lvbiA9IHNlcGFyYXRlZFZhbHVlWzBdLmxlbmd0aCArIGdldEV4cG9uZW50KGludGVydmFsKVxyXG4gICAgICAgIH1cclxuICAgICAgICB2YWx1ZSA9IGFic1ZhbHVlO1xyXG4gICAgICAgIHZhbHVlID0gdmFsdWUgLSBNYXRoLmZsb29yKHZhbHVlKSArIGludGVnZXJQYXJ0XHJcbiAgICB9XHJcbiAgICBwcmVjaXNpb24gPSBfaXNFZGdlQnVnKCkgJiYgZ2V0RXhwb25lbnQodmFsdWUpID4gNiB8fCBwcmVjaXNpb24gPiA3ID8gMTUgOiA3O1xyXG4gICAgaWYgKCFpc0V4cG9uZW50VmFsdWUpIHtcclxuICAgICAgICBzZXBhcmF0ZWRBZGp1c3RlZFZhbHVlID0gcGFyc2VGbG9hdCh2YWx1ZS50b1ByZWNpc2lvbihwcmVjaXNpb24pKS50b1N0cmluZygpLnNwbGl0KFwiLlwiKTtcclxuICAgICAgICBpZiAoc2VwYXJhdGVkQWRqdXN0ZWRWYWx1ZVswXSA9PT0gaW50ZWdlclBhcnQudG9TdHJpbmcoKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gcGFyc2VGbG9hdChzZXBhcmF0ZWRWYWx1ZVswXSArIFwiLlwiICsgc2VwYXJhdGVkQWRqdXN0ZWRWYWx1ZVsxXSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcGFyc2VGbG9hdChzb3VyY2VWYWx1ZS50b1ByZWNpc2lvbihwcmVjaXNpb24pKVxyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRQcmVjaXNpb24odmFsdWUpIHtcclxuICAgIHZhciBzdHIgPSB2YWx1ZS50b1N0cmluZygpO1xyXG4gICAgaWYgKHN0ci5pbmRleE9mKFwiLlwiKSA8IDApIHtcclxuICAgICAgICByZXR1cm4gMFxyXG4gICAgfVxyXG4gICAgdmFyIG1hbnRpc3NhID0gc3RyLnNwbGl0KFwiLlwiKTtcclxuICAgIHZhciBwb3NpdGlvbk9mRGVsaW1pdGVyID0gbWFudGlzc2FbMV0uaW5kZXhPZihcImVcIik7XHJcbiAgICByZXR1cm4gcG9zaXRpb25PZkRlbGltaXRlciA+PSAwID8gcG9zaXRpb25PZkRlbGltaXRlciA6IG1hbnRpc3NhWzFdLmxlbmd0aFxyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRSb290KHgsIG4pIHtcclxuICAgIGlmICh4IDwgMCAmJiBuICUgMiAhPT0gMSkge1xyXG4gICAgICAgIHJldHVybiBOYU5cclxuICAgIH1cclxuICAgIHZhciB5ID0gTWF0aC5wb3coTWF0aC5hYnMoeCksIDEgLyBuKTtcclxuICAgIHJldHVybiBuICUgMiA9PT0gMSAmJiB4IDwgMCA/IC15IDogeVxyXG59XHJcblxyXG5mdW5jdGlvbiBzb2x2ZUN1YmljRXF1YXRpb24oYSwgYiwgYywgZCkge1xyXG4gICAgaWYgKE1hdGguYWJzKGEpIDwgMWUtOCkge1xyXG4gICAgICAgIGEgPSBiO1xyXG4gICAgICAgIGIgPSBjO1xyXG4gICAgICAgIGMgPSBkO1xyXG4gICAgICAgIGlmIChNYXRoLmFicyhhKSA8IDFlLTgpIHtcclxuICAgICAgICAgICAgYSA9IGI7XHJcbiAgICAgICAgICAgIGIgPSBjO1xyXG4gICAgICAgICAgICBpZiAoTWF0aC5hYnMoYSkgPCAxZS04KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gW11cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gWy1iIC8gYV1cclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIEQyID0gYiAqIGIgLSA0ICogYSAqIGM7XHJcbiAgICAgICAgaWYgKE1hdGguYWJzKEQyKSA8IDFlLTgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFstYiAvICgyICogYSldXHJcbiAgICAgICAgfSBlbHNlIGlmIChEMiA+IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIFsoLWIgKyBNYXRoLnNxcnQoRDIpKSAvICgyICogYSksICgtYiAtIE1hdGguc3FydChEMikpIC8gKDIgKiBhKV1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFtdXHJcbiAgICB9XHJcbiAgICB2YXIgcCA9ICgzICogYSAqIGMgLSBiICogYikgLyAoMyAqIGEgKiBhKTtcclxuICAgIHZhciBxID0gKDIgKiBiICogYiAqIGIgLSA5ICogYSAqIGIgKiBjICsgMjcgKiBhICogYSAqIGQpIC8gKDI3ICogYSAqIGEgKiBhKTtcclxuICAgIHZhciByb290cztcclxuICAgIHZhciB1O1xyXG4gICAgaWYgKE1hdGguYWJzKHApIDwgMWUtOCkge1xyXG4gICAgICAgIHJvb3RzID0gW2dldFJvb3QoLXEsIDMpXVxyXG4gICAgfSBlbHNlIGlmIChNYXRoLmFicyhxKSA8IDFlLTgpIHtcclxuICAgICAgICByb290cyA9IFswXS5jb25jYXQocCA8IDAgPyBbTWF0aC5zcXJ0KC1wKSwgLU1hdGguc3FydCgtcCldIDogW10pXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHZhciBEMyA9IHEgKiBxIC8gNCArIHAgKiBwICogcCAvIDI3O1xyXG4gICAgICAgIGlmIChNYXRoLmFicyhEMykgPCAxZS04KSB7XHJcbiAgICAgICAgICAgIHJvb3RzID0gWy0xLjUgKiBxIC8gcCwgMyAqIHEgLyBwXVxyXG4gICAgICAgIH0gZWxzZSBpZiAoRDMgPiAwKSB7XHJcbiAgICAgICAgICAgIHUgPSBnZXRSb290KC1xIC8gMiAtIE1hdGguc3FydChEMyksIDMpO1xyXG4gICAgICAgICAgICByb290cyA9IFt1IC0gcCAvICgzICogdSldXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdSA9IDIgKiBNYXRoLnNxcnQoLXAgLyAzKTtcclxuICAgICAgICAgICAgdmFyIHQgPSBNYXRoLmFjb3MoMyAqIHEgLyBwIC8gdSkgLyAzO1xyXG4gICAgICAgICAgICB2YXIgayA9IDIgKiBNYXRoLlBJIC8gMztcclxuICAgICAgICAgICAgcm9vdHMgPSBbdSAqIE1hdGguY29zKHQpLCB1ICogTWF0aC5jb3ModCAtIGspLCB1ICogTWF0aC5jb3ModCAtIDIgKiBrKV1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvb3RzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgcm9vdHNbaV0gLT0gYiAvICgzICogYSlcclxuICAgIH1cclxuICAgIHJldHVybiByb290c1xyXG59XHJcblxyXG5mdW5jdGlvbiB0cnVuYyh2YWx1ZSkge1xyXG4gICAgcmV0dXJuIE1hdGgudHJ1bmMgPyBNYXRoLnRydW5jKHZhbHVlKSA6IHZhbHVlID4gMCA/IE1hdGguZmxvb3IodmFsdWUpIDogTWF0aC5jZWlsKHZhbHVlKVxyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRSZW1haW5kZXJCeURpdmlzaW9uKGRpdmlkZW5kLCBkaXZpZGVyLCBkaWdpdHNDb3VudCkge1xyXG4gICAgaWYgKGRpdmlkZXIgPT09IHBhcnNlSW50KGRpdmlkZXIpKSB7XHJcbiAgICAgICAgcmV0dXJuIGRpdmlkZW5kICUgZGl2aWRlclxyXG4gICAgfVxyXG4gICAgdmFyIHF1b3RpZW50ID0gcm91bmRGbG9hdFBhcnQoZGl2aWRlbmQgLyBkaXZpZGVyLCBkaWdpdHNDb3VudCk7XHJcbiAgICByZXR1cm4gKHF1b3RpZW50IC0gcGFyc2VJbnQocXVvdGllbnQpKSAqIGRpdmlkZXJcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0RXhwb25lbnRMZW5ndGgodmFsdWUpIHtcclxuICAgIHZhciBfdmFsdWVTdHJpbmckc3BsaXQkO1xyXG4gICAgdmFyIHZhbHVlU3RyaW5nID0gdmFsdWUudG9TdHJpbmcoKTtcclxuICAgIHJldHVybiAobnVsbCA9PT0gKF92YWx1ZVN0cmluZyRzcGxpdCQgPSB2YWx1ZVN0cmluZy5zcGxpdChcIi5cIilbMV0pIHx8IHZvaWQgMCA9PT0gX3ZhbHVlU3RyaW5nJHNwbGl0JCA/IHZvaWQgMCA6IF92YWx1ZVN0cmluZyRzcGxpdCQubGVuZ3RoKSB8fCBwYXJzZUludCh2YWx1ZVN0cmluZy5zcGxpdChcImUtXCIpWzFdKSB8fCAwXHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJvdW5kRmxvYXRQYXJ0KHZhbHVlKSB7XHJcbiAgICB2YXIgZGlnaXRzQ291bnQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiB2b2lkIDAgIT09IGFyZ3VtZW50c1sxXSA/IGFyZ3VtZW50c1sxXSA6IDA7XHJcbiAgICByZXR1cm4gcGFyc2VGbG9hdCh2YWx1ZS50b0ZpeGVkKGRpZ2l0c0NvdW50KSlcclxufVxyXG5leHBvcnQge1xyXG4gICAgc2lnbixcclxuICAgIGZpdEludG9SYW5nZSxcclxuICAgIGluUmFuZ2UsXHJcbiAgICBhZGp1c3QsXHJcbiAgICBnZXRQcmVjaXNpb24sXHJcbiAgICBnZXRFeHBvbmVudCxcclxuICAgIGdldFJvb3QsXHJcbiAgICBzb2x2ZUN1YmljRXF1YXRpb24sXHJcbiAgICB0cnVuYyxcclxuICAgIHJvdW5kRmxvYXRQYXJ0LFxyXG4gICAgZ2V0RXhwb25lbnRMZW5ndGgsXHJcbiAgICBnZXRSZW1haW5kZXJCeURpdmlzaW9uXHJcbn07XHJcbiIsIi8qKlxyXG4gKiBEZXZFeHRyZW1lIChlc20vY29yZS91dGlscy9vYmplY3QuanMpXHJcbiAqIFZlcnNpb246IDIxLjEuNFxyXG4gKiBCdWlsZCBkYXRlOiBNb24gSnVuIDIxIDIwMjFcclxuICpcclxuICogQ29weXJpZ2h0IChjKSAyMDEyIC0gMjAyMSBEZXZlbG9wZXIgRXhwcmVzcyBJbmMuIEFMTCBSSUdIVFMgUkVTRVJWRURcclxuICogUmVhZCBhYm91dCBEZXZFeHRyZW1lIGxpY2Vuc2luZyBoZXJlOiBodHRwczovL2pzLmRldmV4cHJlc3MuY29tL0xpY2Vuc2luZy9cclxuICovXHJcbmltcG9ydCB7XHJcbiAgICBpc051bWVyaWMsXHJcbiAgICBpc1BsYWluT2JqZWN0LFxyXG4gICAgaXNPYmplY3RcclxufSBmcm9tIFwiLi90eXBlXCI7XHJcbmltcG9ydCB2YXJpYWJsZVdyYXBwZXIgZnJvbSBcIi4vdmFyaWFibGVfd3JhcHBlclwiO1xyXG52YXIgY2xvbmUgPSBmdW5jdGlvbigpIHtcclxuICAgIGZ1bmN0aW9uIENsb25lKCkge31cclxuICAgIHJldHVybiBmdW5jdGlvbihvYmopIHtcclxuICAgICAgICBDbG9uZS5wcm90b3R5cGUgPSBvYmo7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBDbG9uZVxyXG4gICAgfVxyXG59KCk7XHJcbnZhciBvcmRlckVhY2ggPSBmdW5jdGlvbihtYXAsIGZ1bmMpIHtcclxuICAgIHZhciBrZXlzID0gW107XHJcbiAgICB2YXIga2V5O1xyXG4gICAgdmFyIGk7XHJcbiAgICBmb3IgKGtleSBpbiBtYXApIHtcclxuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1hcCwga2V5KSkge1xyXG4gICAgICAgICAgICBrZXlzLnB1c2goa2V5KVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGtleXMuc29ydCgoZnVuY3Rpb24oeCwgeSkge1xyXG4gICAgICAgIHZhciBpc051bWJlclggPSBpc051bWVyaWMoeCk7XHJcbiAgICAgICAgdmFyIGlzTnVtYmVyWSA9IGlzTnVtZXJpYyh5KTtcclxuICAgICAgICBpZiAoaXNOdW1iZXJYICYmIGlzTnVtYmVyWSkge1xyXG4gICAgICAgICAgICByZXR1cm4geCAtIHlcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlzTnVtYmVyWCAmJiAhaXNOdW1iZXJZKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAtMVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWlzTnVtYmVyWCAmJiBpc051bWJlclkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIDFcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHggPCB5KSB7XHJcbiAgICAgICAgICAgIHJldHVybiAtMVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoeCA+IHkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIDFcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIDBcclxuICAgIH0pKTtcclxuICAgIGZvciAoaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAga2V5ID0ga2V5c1tpXTtcclxuICAgICAgICBmdW5jKGtleSwgbWFwW2tleV0pXHJcbiAgICB9XHJcbn07XHJcbnZhciBhc3NpZ25WYWx1ZVRvUHJvcGVydHkgPSBmdW5jdGlvbih0YXJnZXQsIHByb3BlcnR5LCB2YWx1ZSwgYXNzaWduQnlSZWZlcmVuY2UpIHtcclxuICAgIGlmICghYXNzaWduQnlSZWZlcmVuY2UgJiYgdmFyaWFibGVXcmFwcGVyLmlzV3JhcHBlZCh0YXJnZXRbcHJvcGVydHldKSkge1xyXG4gICAgICAgIHZhcmlhYmxlV3JhcHBlci5hc3NpZ24odGFyZ2V0W3Byb3BlcnR5XSwgdmFsdWUpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRhcmdldFtwcm9wZXJ0eV0gPSB2YWx1ZVxyXG4gICAgfVxyXG59O1xyXG52YXIgZGVlcEV4dGVuZEFycmF5U2FmZSA9IGZ1bmN0aW9uIGRlZXBFeHRlbmRBcnJheVNhZmUodGFyZ2V0LCBjaGFuZ2VzLCBleHRlbmRDb21wbGV4T2JqZWN0LCBhc3NpZ25CeVJlZmVyZW5jZSkge1xyXG4gICAgdmFyIHByZXZWYWx1ZTtcclxuICAgIHZhciBuZXdWYWx1ZTtcclxuICAgIGZvciAodmFyIG5hbWUgaW4gY2hhbmdlcykge1xyXG4gICAgICAgIHByZXZWYWx1ZSA9IHRhcmdldFtuYW1lXTtcclxuICAgICAgICBuZXdWYWx1ZSA9IGNoYW5nZXNbbmFtZV07XHJcbiAgICAgICAgaWYgKFwiX19wcm90b19fXCIgPT09IG5hbWUgfHwgXCJjb25zdHJ1Y3RvclwiID09PSBuYW1lIHx8IHRhcmdldCA9PT0gbmV3VmFsdWUpIHtcclxuICAgICAgICAgICAgY29udGludWVcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlzUGxhaW5PYmplY3QobmV3VmFsdWUpKSB7XHJcbiAgICAgICAgICAgIHZhciBnb0RlZXBlciA9IGV4dGVuZENvbXBsZXhPYmplY3QgPyBpc09iamVjdChwcmV2VmFsdWUpIDogaXNQbGFpbk9iamVjdChwcmV2VmFsdWUpO1xyXG4gICAgICAgICAgICBuZXdWYWx1ZSA9IGRlZXBFeHRlbmRBcnJheVNhZmUoZ29EZWVwZXIgPyBwcmV2VmFsdWUgOiB7fSwgbmV3VmFsdWUsIGV4dGVuZENvbXBsZXhPYmplY3QsIGFzc2lnbkJ5UmVmZXJlbmNlKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodm9pZCAwICE9PSBuZXdWYWx1ZSAmJiBwcmV2VmFsdWUgIT09IG5ld1ZhbHVlKSB7XHJcbiAgICAgICAgICAgIGFzc2lnblZhbHVlVG9Qcm9wZXJ0eSh0YXJnZXQsIG5hbWUsIG5ld1ZhbHVlLCBhc3NpZ25CeVJlZmVyZW5jZSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGFyZ2V0XHJcbn07XHJcbmV4cG9ydCB7XHJcbiAgICBjbG9uZSxcclxuICAgIG9yZGVyRWFjaCxcclxuICAgIGRlZXBFeHRlbmRBcnJheVNhZmVcclxufTtcclxuIiwiLyoqXHJcbiAqIERldkV4dHJlbWUgKGVzbS9jb3JlL3V0aWxzL3NpemUuanMpXHJcbiAqIFZlcnNpb246IDIxLjEuNFxyXG4gKiBCdWlsZCBkYXRlOiBNb24gSnVuIDIxIDIwMjFcclxuICpcclxuICogQ29weXJpZ2h0IChjKSAyMDEyIC0gMjAyMSBEZXZlbG9wZXIgRXhwcmVzcyBJbmMuIEFMTCBSSUdIVFMgUkVTRVJWRURcclxuICogUmVhZCBhYm91dCBEZXZFeHRyZW1lIGxpY2Vuc2luZyBoZXJlOiBodHRwczovL2pzLmRldmV4cHJlc3MuY29tL0xpY2Vuc2luZy9cclxuICovXHJcbmltcG9ydCB7XHJcbiAgICBnZXRXaW5kb3dcclxufSBmcm9tIFwiLi4vLi4vY29yZS91dGlscy93aW5kb3dcIjtcclxuaW1wb3J0IHtcclxuICAgIGlzV2luZG93LFxyXG4gICAgaXNTdHJpbmcsXHJcbiAgICBpc051bWVyaWNcclxufSBmcm9tIFwiLi4vdXRpbHMvdHlwZVwiO1xyXG52YXIgd2luZG93ID0gZ2V0V2luZG93KCk7XHJcbnZhciBTUEVDSUFMX0hFSUdIVF9WQUxVRVMgPSBbXCJhdXRvXCIsIFwibm9uZVwiLCBcImluaGVyaXRcIiwgXCJpbml0aWFsXCJdO1xyXG52YXIgZ2V0U2l6ZUJ5U3R5bGVzID0gZnVuY3Rpb24oZWxlbWVudFN0eWxlcywgc3R5bGVzKSB7XHJcbiAgICB2YXIgcmVzdWx0ID0gMDtcclxuICAgIHN0eWxlcy5mb3JFYWNoKChmdW5jdGlvbihzdHlsZSkge1xyXG4gICAgICAgIHJlc3VsdCArPSBwYXJzZUZsb2F0KGVsZW1lbnRTdHlsZXNbc3R5bGVdKSB8fCAwXHJcbiAgICB9KSk7XHJcbiAgICByZXR1cm4gcmVzdWx0XHJcbn07XHJcbnZhciBnZXRFbGVtZW50Qm94UGFyYW1zID0gZnVuY3Rpb24obmFtZSwgZWxlbWVudFN0eWxlcykge1xyXG4gICAgdmFyIGJlZm9yZU5hbWUgPSBcIndpZHRoXCIgPT09IG5hbWUgPyBcIkxlZnRcIiA6IFwiVG9wXCI7XHJcbiAgICB2YXIgYWZ0ZXJOYW1lID0gXCJ3aWR0aFwiID09PSBuYW1lID8gXCJSaWdodFwiIDogXCJCb3R0b21cIjtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgcGFkZGluZzogZ2V0U2l6ZUJ5U3R5bGVzKGVsZW1lbnRTdHlsZXMsIFtcInBhZGRpbmdcIiArIGJlZm9yZU5hbWUsIFwicGFkZGluZ1wiICsgYWZ0ZXJOYW1lXSksXHJcbiAgICAgICAgYm9yZGVyOiBnZXRTaXplQnlTdHlsZXMoZWxlbWVudFN0eWxlcywgW1wiYm9yZGVyXCIgKyBiZWZvcmVOYW1lICsgXCJXaWR0aFwiLCBcImJvcmRlclwiICsgYWZ0ZXJOYW1lICsgXCJXaWR0aFwiXSksXHJcbiAgICAgICAgbWFyZ2luOiBnZXRTaXplQnlTdHlsZXMoZWxlbWVudFN0eWxlcywgW1wibWFyZ2luXCIgKyBiZWZvcmVOYW1lLCBcIm1hcmdpblwiICsgYWZ0ZXJOYW1lXSlcclxuICAgIH1cclxufTtcclxudmFyIGdldEJveFNpemluZ09mZnNldCA9IGZ1bmN0aW9uKG5hbWUsIGVsZW1lbnRTdHlsZXMsIGJveFBhcmFtcykge1xyXG4gICAgdmFyIHNpemUgPSBlbGVtZW50U3R5bGVzW25hbWVdO1xyXG4gICAgaWYgKFwiYm9yZGVyLWJveFwiID09PSBlbGVtZW50U3R5bGVzLmJveFNpemluZyAmJiBzaXplLmxlbmd0aCAmJiBcIiVcIiAhPT0gc2l6ZVtzaXplLmxlbmd0aCAtIDFdKSB7XHJcbiAgICAgICAgcmV0dXJuIGJveFBhcmFtcy5ib3JkZXIgKyBib3hQYXJhbXMucGFkZGluZ1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIDBcclxufTtcclxudmFyIGdldFNpemUgPSBmdW5jdGlvbihlbGVtZW50LCBuYW1lLCBpbmNsdWRlKSB7XHJcbiAgICB2YXIgZWxlbWVudFN0eWxlcyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xyXG4gICAgdmFyIGJveFBhcmFtcyA9IGdldEVsZW1lbnRCb3hQYXJhbXMobmFtZSwgZWxlbWVudFN0eWxlcyk7XHJcbiAgICB2YXIgY2xpZW50UmVjdCA9IGVsZW1lbnQuZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGg7XHJcbiAgICB2YXIgYm91bmRpbmdDbGllbnRSZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVtuYW1lXTtcclxuICAgIHZhciByZXN1bHQgPSBjbGllbnRSZWN0ID8gYm91bmRpbmdDbGllbnRSZWN0IDogMDtcclxuICAgIGlmIChyZXN1bHQgPD0gMCkge1xyXG4gICAgICAgIHJlc3VsdCA9IHBhcnNlRmxvYXQoZWxlbWVudFN0eWxlc1tuYW1lXSB8fCBlbGVtZW50LnN0eWxlW25hbWVdKSB8fCAwO1xyXG4gICAgICAgIHJlc3VsdCAtPSBnZXRCb3hTaXppbmdPZmZzZXQobmFtZSwgZWxlbWVudFN0eWxlcywgYm94UGFyYW1zKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICByZXN1bHQgLT0gYm94UGFyYW1zLnBhZGRpbmcgKyBib3hQYXJhbXMuYm9yZGVyXHJcbiAgICB9XHJcbiAgICBpZiAoaW5jbHVkZS5wYWRkaW5ncykge1xyXG4gICAgICAgIHJlc3VsdCArPSBib3hQYXJhbXMucGFkZGluZ1xyXG4gICAgfVxyXG4gICAgaWYgKGluY2x1ZGUuYm9yZGVycykge1xyXG4gICAgICAgIHJlc3VsdCArPSBib3hQYXJhbXMuYm9yZGVyXHJcbiAgICB9XHJcbiAgICBpZiAoaW5jbHVkZS5tYXJnaW5zKSB7XHJcbiAgICAgICAgcmVzdWx0ICs9IGJveFBhcmFtcy5tYXJnaW5cclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHRcclxufTtcclxudmFyIGdldENvbnRhaW5lckhlaWdodCA9IGZ1bmN0aW9uKGNvbnRhaW5lcikge1xyXG4gICAgcmV0dXJuIGlzV2luZG93KGNvbnRhaW5lcikgPyBjb250YWluZXIuaW5uZXJIZWlnaHQgOiBjb250YWluZXIub2Zmc2V0SGVpZ2h0XHJcbn07XHJcbnZhciBwYXJzZUhlaWdodCA9IGZ1bmN0aW9uKHZhbHVlLCBjb250YWluZXIpIHtcclxuICAgIGlmICh2YWx1ZS5pbmRleE9mKFwicHhcIikgPiAwKSB7XHJcbiAgICAgICAgdmFsdWUgPSBwYXJzZUludCh2YWx1ZS5yZXBsYWNlKFwicHhcIiwgXCJcIikpXHJcbiAgICB9IGVsc2UgaWYgKHZhbHVlLmluZGV4T2YoXCIlXCIpID4gMCkge1xyXG4gICAgICAgIHZhbHVlID0gcGFyc2VJbnQodmFsdWUucmVwbGFjZShcIiVcIiwgXCJcIikpICogZ2V0Q29udGFpbmVySGVpZ2h0KGNvbnRhaW5lcikgLyAxMDBcclxuICAgIH0gZWxzZSBpZiAoIWlzTmFOKHZhbHVlKSkge1xyXG4gICAgICAgIHZhbHVlID0gcGFyc2VJbnQodmFsdWUpXHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsdWVcclxufTtcclxudmFyIGdldEhlaWdodFdpdGhPZmZzZXQgPSBmdW5jdGlvbih2YWx1ZSwgb2Zmc2V0LCBjb250YWluZXIpIHtcclxuICAgIGlmICghdmFsdWUpIHtcclxuICAgICAgICByZXR1cm4gbnVsbFxyXG4gICAgfVxyXG4gICAgaWYgKFNQRUNJQUxfSEVJR0hUX1ZBTFVFUy5pbmRleE9mKHZhbHVlKSA+IC0xKSB7XHJcbiAgICAgICAgcmV0dXJuIG9mZnNldCA/IG51bGwgOiB2YWx1ZVxyXG4gICAgfVxyXG4gICAgaWYgKGlzU3RyaW5nKHZhbHVlKSkge1xyXG4gICAgICAgIHZhbHVlID0gcGFyc2VIZWlnaHQodmFsdWUsIGNvbnRhaW5lcilcclxuICAgIH1cclxuICAgIGlmIChpc051bWVyaWModmFsdWUpKSB7XHJcbiAgICAgICAgcmV0dXJuIE1hdGgubWF4KDAsIHZhbHVlICsgb2Zmc2V0KVxyXG4gICAgfVxyXG4gICAgdmFyIG9wZXJhdGlvblN0cmluZyA9IG9mZnNldCA8IDAgPyBcIiAtIFwiIDogXCIgXCI7XHJcbiAgICByZXR1cm4gXCJjYWxjKFwiICsgdmFsdWUgKyBvcGVyYXRpb25TdHJpbmcgKyBNYXRoLmFicyhvZmZzZXQpICsgXCJweClcIlxyXG59O1xyXG52YXIgYWRkT2Zmc2V0VG9NYXhIZWlnaHQgPSBmdW5jdGlvbih2YWx1ZSwgb2Zmc2V0LCBjb250YWluZXIpIHtcclxuICAgIHZhciBtYXhIZWlnaHQgPSBnZXRIZWlnaHRXaXRoT2Zmc2V0KHZhbHVlLCBvZmZzZXQsIGNvbnRhaW5lcik7XHJcbiAgICByZXR1cm4gbnVsbCAhPT0gbWF4SGVpZ2h0ID8gbWF4SGVpZ2h0IDogXCJub25lXCJcclxufTtcclxudmFyIGFkZE9mZnNldFRvTWluSGVpZ2h0ID0gZnVuY3Rpb24odmFsdWUsIG9mZnNldCwgY29udGFpbmVyKSB7XHJcbiAgICB2YXIgbWluSGVpZ2h0ID0gZ2V0SGVpZ2h0V2l0aE9mZnNldCh2YWx1ZSwgb2Zmc2V0LCBjb250YWluZXIpO1xyXG4gICAgcmV0dXJuIG51bGwgIT09IG1pbkhlaWdodCA/IG1pbkhlaWdodCA6IDBcclxufTtcclxudmFyIGdldFZlcnRpY2FsT2Zmc2V0cyA9IGZ1bmN0aW9uKGVsZW1lbnQsIHdpdGhNYXJnaW5zKSB7XHJcbiAgICBpZiAoIWVsZW1lbnQpIHtcclxuICAgICAgICByZXR1cm4gMFxyXG4gICAgfVxyXG4gICAgdmFyIGJveFBhcmFtcyA9IGdldEVsZW1lbnRCb3hQYXJhbXMoXCJoZWlnaHRcIiwgd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkpO1xyXG4gICAgcmV0dXJuIGJveFBhcmFtcy5wYWRkaW5nICsgYm94UGFyYW1zLmJvcmRlciArICh3aXRoTWFyZ2lucyA/IGJveFBhcmFtcy5tYXJnaW4gOiAwKVxyXG59O1xyXG52YXIgZ2V0VmlzaWJsZUhlaWdodCA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICAgIGlmIChlbGVtZW50KSB7XHJcbiAgICAgICAgdmFyIGJvdW5kaW5nQ2xpZW50UmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgICAgaWYgKGJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHRcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gMFxyXG59O1xyXG5leHBvcnQge1xyXG4gICAgZ2V0U2l6ZSxcclxuICAgIGdldEVsZW1lbnRCb3hQYXJhbXMsXHJcbiAgICBhZGRPZmZzZXRUb01heEhlaWdodCxcclxuICAgIGFkZE9mZnNldFRvTWluSGVpZ2h0LFxyXG4gICAgZ2V0VmVydGljYWxPZmZzZXRzLFxyXG4gICAgZ2V0VmlzaWJsZUhlaWdodCxcclxuICAgIHBhcnNlSGVpZ2h0XHJcbn07XHJcbiIsIi8qKlxyXG4gKiBEZXZFeHRyZW1lIChlc20vY29yZS91dGlscy9zdHJpbmcuanMpXHJcbiAqIFZlcnNpb246IDIxLjEuNFxyXG4gKiBCdWlsZCBkYXRlOiBNb24gSnVuIDIxIDIwMjFcclxuICpcclxuICogQ29weXJpZ2h0IChjKSAyMDEyIC0gMjAyMSBEZXZlbG9wZXIgRXhwcmVzcyBJbmMuIEFMTCBSSUdIVFMgUkVTRVJWRURcclxuICogUmVhZCBhYm91dCBEZXZFeHRyZW1lIGxpY2Vuc2luZyBoZXJlOiBodHRwczovL2pzLmRldmV4cHJlc3MuY29tL0xpY2Vuc2luZy9cclxuICovXHJcbmltcG9ydCB7XHJcbiAgICBpc0Z1bmN0aW9uLFxyXG4gICAgaXNTdHJpbmdcclxufSBmcm9tIFwiLi90eXBlXCI7XHJcbmV4cG9ydCB2YXIgZW5jb2RlSHRtbCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgdmFyIGVuY29kZVJlZ0V4cCA9IFtuZXcgUmVnRXhwKFwiJlwiLCBcImdcIiksIG5ldyBSZWdFeHAoJ1wiJywgXCJnXCIpLCBuZXcgUmVnRXhwKFwiJ1wiLCBcImdcIiksIG5ldyBSZWdFeHAoXCI8XCIsIFwiZ1wiKSwgbmV3IFJlZ0V4cChcIj5cIiwgXCJnXCIpXTtcclxuICAgIHJldHVybiBmdW5jdGlvbihzdHIpIHtcclxuICAgICAgICByZXR1cm4gU3RyaW5nKHN0cikucmVwbGFjZShlbmNvZGVSZWdFeHBbMF0sIFwiJmFtcDtcIikucmVwbGFjZShlbmNvZGVSZWdFeHBbMV0sIFwiJnF1b3Q7XCIpLnJlcGxhY2UoZW5jb2RlUmVnRXhwWzJdLCBcIiYjMzk7XCIpLnJlcGxhY2UoZW5jb2RlUmVnRXhwWzNdLCBcIiZsdDtcIikucmVwbGFjZShlbmNvZGVSZWdFeHBbNF0sIFwiJmd0O1wiKVxyXG4gICAgfVxyXG59KCk7XHJcbnZhciBzcGxpdFF1YWQgPSBmdW5jdGlvbihyYXcpIHtcclxuICAgIHN3aXRjaCAodHlwZW9mIHJhdykge1xyXG4gICAgICAgIGNhc2UgXCJzdHJpbmdcIjpcclxuICAgICAgICAgICAgcmV0dXJuIHJhdy5zcGxpdCgvXFxzKy8sIDQpO1xyXG4gICAgICAgIGNhc2UgXCJvYmplY3RcIjpcclxuICAgICAgICAgICAgcmV0dXJuIFtyYXcueCB8fCByYXcuaCB8fCByYXcubGVmdCwgcmF3LnkgfHwgcmF3LnYgfHwgcmF3LnRvcCwgcmF3LnggfHwgcmF3LmggfHwgcmF3LnJpZ2h0LCByYXcueSB8fCByYXcudiB8fCByYXcuYm90dG9tXTtcclxuICAgICAgICBjYXNlIFwibnVtYmVyXCI6XHJcbiAgICAgICAgICAgIHJldHVybiBbcmF3XTtcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICByZXR1cm4gcmF3XHJcbiAgICB9XHJcbn07XHJcbmV4cG9ydCB2YXIgcXVhZFRvT2JqZWN0ID0gZnVuY3Rpb24ocmF3KSB7XHJcbiAgICB2YXIgcXVhZCA9IHNwbGl0UXVhZChyYXcpO1xyXG4gICAgdmFyIGxlZnQgPSBwYXJzZUludChxdWFkICYmIHF1YWRbMF0sIDEwKTtcclxuICAgIHZhciB0b3AgPSBwYXJzZUludChxdWFkICYmIHF1YWRbMV0sIDEwKTtcclxuICAgIHZhciByaWdodCA9IHBhcnNlSW50KHF1YWQgJiYgcXVhZFsyXSwgMTApO1xyXG4gICAgdmFyIGJvdHRvbSA9IHBhcnNlSW50KHF1YWQgJiYgcXVhZFszXSwgMTApO1xyXG4gICAgaWYgKCFpc0Zpbml0ZShsZWZ0KSkge1xyXG4gICAgICAgIGxlZnQgPSAwXHJcbiAgICB9XHJcbiAgICBpZiAoIWlzRmluaXRlKHRvcCkpIHtcclxuICAgICAgICB0b3AgPSBsZWZ0XHJcbiAgICB9XHJcbiAgICBpZiAoIWlzRmluaXRlKHJpZ2h0KSkge1xyXG4gICAgICAgIHJpZ2h0ID0gbGVmdFxyXG4gICAgfVxyXG4gICAgaWYgKCFpc0Zpbml0ZShib3R0b20pKSB7XHJcbiAgICAgICAgYm90dG9tID0gdG9wXHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHRvcDogdG9wLFxyXG4gICAgICAgIHJpZ2h0OiByaWdodCxcclxuICAgICAgICBib3R0b206IGJvdHRvbSxcclxuICAgICAgICBsZWZ0OiBsZWZ0XHJcbiAgICB9XHJcbn07XHJcbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXQodGVtcGxhdGUpIHtcclxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCB2YWx1ZXMgPSBuZXcgQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xyXG4gICAgICAgIHZhbHVlc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV1cclxuICAgIH1cclxuICAgIGlmIChpc0Z1bmN0aW9uKHRlbXBsYXRlKSkge1xyXG4gICAgICAgIHJldHVybiB0ZW1wbGF0ZSguLi52YWx1ZXMpXHJcbiAgICB9XHJcbiAgICB2YWx1ZXMuZm9yRWFjaCgodmFsdWUsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgaWYgKGlzU3RyaW5nKHZhbHVlKSkge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoL1xcJC9nLCBcIiQkJCRcIilcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHBsYWNlaG9sZGVyUmVnID0gbmV3IFJlZ0V4cChcIlxcXFx7XCIgKyBpbmRleCArIFwiXFxcXH1cIiwgXCJnbVwiKTtcclxuICAgICAgICB0ZW1wbGF0ZSA9IHRlbXBsYXRlLnJlcGxhY2UocGxhY2Vob2xkZXJSZWcsIHZhbHVlKVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gdGVtcGxhdGVcclxufVxyXG5leHBvcnQgdmFyIHJlcGxhY2VBbGwgPSBmdW5jdGlvbih0ZXh0LCBzZWFyY2hUb2tlbiwgcmVwbGFjZW1lbnRUb2tlbikge1xyXG4gICAgcmV0dXJuIHRleHQucmVwbGFjZShuZXcgUmVnRXhwKFwiKFwiICsgKHN0ciA9IHNlYXJjaFRva2VuLCAoc3RyICsgXCJcIikucmVwbGFjZSgvKFsrKj8uW15cXF0kKCl7fT48fD0hOl0pL2csIFwiXFxcXCQxXCIpKSArIFwiKVwiLCBcImdpXCIpLCByZXBsYWNlbWVudFRva2VuKTtcclxuICAgIHZhciBzdHJcclxufTtcclxuZXhwb3J0IHZhciBpc0VtcHR5ID0gZnVuY3Rpb24oKSB7XHJcbiAgICB2YXIgU1BBQ0VfUkVHRVhQID0gL1xccy9nO1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKHRleHQpIHtcclxuICAgICAgICByZXR1cm4gIXRleHQgfHwgIXRleHQucmVwbGFjZShTUEFDRV9SRUdFWFAsIFwiXCIpXHJcbiAgICB9XHJcbn0oKTtcclxuIiwiLyoqXHJcbiAqIERldkV4dHJlbWUgKGVzbS9jb3JlL3V0aWxzL3N0eWxlLmpzKVxyXG4gKiBWZXJzaW9uOiAyMS4xLjRcclxuICogQnVpbGQgZGF0ZTogTW9uIEp1biAyMSAyMDIxXHJcbiAqXHJcbiAqIENvcHlyaWdodCAoYykgMjAxMiAtIDIwMjEgRGV2ZWxvcGVyIEV4cHJlc3MgSW5jLiBBTEwgUklHSFRTIFJFU0VSVkVEXHJcbiAqIFJlYWQgYWJvdXQgRGV2RXh0cmVtZSBsaWNlbnNpbmcgaGVyZTogaHR0cHM6Ly9qcy5kZXZleHByZXNzLmNvbS9MaWNlbnNpbmcvXHJcbiAqL1xyXG5pbXBvcnQge1xyXG4gICAgY2FtZWxpemVcclxufSBmcm9tIFwiLi9pbmZsZWN0b3JcIjtcclxuaW1wb3J0IGNhbGxPbmNlIGZyb20gXCIuL2NhbGxfb25jZVwiO1xyXG5pbXBvcnQge1xyXG4gICAgaXNOdW1lcmljXHJcbn0gZnJvbSBcIi4vdHlwZVwiO1xyXG5pbXBvcnQgZG9tQWRhcHRlciBmcm9tIFwiLi4vZG9tX2FkYXB0ZXJcIjtcclxudmFyIGpzUHJlZml4ZXMgPSBbXCJcIiwgXCJXZWJraXRcIiwgXCJNb3pcIiwgXCJPXCIsIFwiTXNcIl07XHJcbnZhciBjc3NQcmVmaXhlcyA9IHtcclxuICAgIFwiXCI6IFwiXCIsXHJcbiAgICBXZWJraXQ6IFwiLXdlYmtpdC1cIixcclxuICAgIE1vejogXCItbW96LVwiLFxyXG4gICAgTzogXCItby1cIixcclxuICAgIG1zOiBcIi1tcy1cIlxyXG59O1xyXG52YXIgZ2V0U3R5bGVzID0gY2FsbE9uY2UoKGZ1bmN0aW9uKCkge1xyXG4gICAgcmV0dXJuIGRvbUFkYXB0ZXIuY3JlYXRlRWxlbWVudChcImR4XCIpLnN0eWxlXHJcbn0pKTtcclxudmFyIGZvckVhY2hQcmVmaXhlcyA9IGZ1bmN0aW9uKHByb3AsIGNhbGxCYWNrKSB7XHJcbiAgICBwcm9wID0gY2FtZWxpemUocHJvcCwgdHJ1ZSk7XHJcbiAgICB2YXIgcmVzdWx0O1xyXG4gICAgZm9yICh2YXIgaSA9IDAsIGNzc1ByZWZpeGVzQ291bnQgPSBqc1ByZWZpeGVzLmxlbmd0aDsgaSA8IGNzc1ByZWZpeGVzQ291bnQ7IGkrKykge1xyXG4gICAgICAgIHZhciBqc1ByZWZpeCA9IGpzUHJlZml4ZXNbaV07XHJcbiAgICAgICAgdmFyIHByZWZpeGVkUHJvcCA9IGpzUHJlZml4ICsgcHJvcDtcclxuICAgICAgICB2YXIgbG93ZXJQcmVmaXhlZFByb3AgPSBjYW1lbGl6ZShwcmVmaXhlZFByb3ApO1xyXG4gICAgICAgIHJlc3VsdCA9IGNhbGxCYWNrKGxvd2VyUHJlZml4ZWRQcm9wLCBqc1ByZWZpeCk7XHJcbiAgICAgICAgaWYgKHZvaWQgMCA9PT0gcmVzdWx0KSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IGNhbGxCYWNrKHByZWZpeGVkUHJvcCwganNQcmVmaXgpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh2b2lkIDAgIT09IHJlc3VsdCkge1xyXG4gICAgICAgICAgICBicmVha1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQgfHwgXCJcIlxyXG59O1xyXG52YXIgc3R5bGVQcm9wID0gZnVuY3Rpb24obmFtZSkge1xyXG4gICAgaWYgKG5hbWUgaW4gZ2V0U3R5bGVzKCkpIHtcclxuICAgICAgICByZXR1cm4gbmFtZVxyXG4gICAgfVxyXG4gICAgdmFyIG9yaWdpbmFsTmFtZSA9IG5hbWU7XHJcbiAgICBuYW1lID0gbmFtZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIG5hbWUuc3Vic3RyKDEpO1xyXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBqc1ByZWZpeGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIHByZWZpeGVkUHJvcCA9IGpzUHJlZml4ZXNbaV0udG9Mb3dlckNhc2UoKSArIG5hbWU7XHJcbiAgICAgICAgaWYgKHByZWZpeGVkUHJvcCBpbiBnZXRTdHlsZXMoKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gcHJlZml4ZWRQcm9wXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG9yaWdpbmFsTmFtZVxyXG59O1xyXG52YXIgc3R5bGVQcm9wUHJlZml4ID0gZnVuY3Rpb24ocHJvcCkge1xyXG4gICAgcmV0dXJuIGZvckVhY2hQcmVmaXhlcyhwcm9wLCAoZnVuY3Rpb24oc3BlY2lmaWMsIGpzUHJlZml4KSB7XHJcbiAgICAgICAgaWYgKHNwZWNpZmljIGluIGdldFN0eWxlcygpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjc3NQcmVmaXhlc1tqc1ByZWZpeF1cclxuICAgICAgICB9XHJcbiAgICB9KSlcclxufTtcclxudmFyIHB4RXhjZXB0aW9ucyA9IFtcImZpbGxPcGFjaXR5XCIsIFwiY29sdW1uQ291bnRcIiwgXCJmbGV4R3Jvd1wiLCBcImZsZXhTaHJpbmtcIiwgXCJmb250V2VpZ2h0XCIsIFwibGluZUhlaWdodFwiLCBcIm9wYWNpdHlcIiwgXCJ6SW5kZXhcIiwgXCJ6b29tXCJdO1xyXG52YXIgbm9ybWFsaXplU3R5bGVQcm9wID0gZnVuY3Rpb24ocHJvcCwgdmFsdWUpIHtcclxuICAgIGlmIChpc051bWVyaWModmFsdWUpICYmIC0xID09PSBweEV4Y2VwdGlvbnMuaW5kZXhPZihwcm9wKSkge1xyXG4gICAgICAgIHZhbHVlICs9IFwicHhcIlxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZhbHVlXHJcbn07XHJcbnZhciBzZXREaW1lbnNpb25Qcm9wZXJ0eSA9IGZ1bmN0aW9uKGVsZW1lbnRzLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKSB7XHJcbiAgICBpZiAoZWxlbWVudHMpIHtcclxuICAgICAgICB2YWx1ZSA9IGlzTnVtZXJpYyh2YWx1ZSkgPyB2YWx1ZSArPSBcInB4XCIgOiB2YWx1ZTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgKytpKSB7XHJcbiAgICAgICAgICAgIGVsZW1lbnRzW2ldLnN0eWxlW3Byb3BlcnR5TmFtZV0gPSB2YWx1ZVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxudmFyIHNldFdpZHRoID0gZnVuY3Rpb24oZWxlbWVudHMsIHZhbHVlKSB7XHJcbiAgICBzZXREaW1lbnNpb25Qcm9wZXJ0eShlbGVtZW50cywgXCJ3aWR0aFwiLCB2YWx1ZSlcclxufTtcclxudmFyIHNldEhlaWdodCA9IGZ1bmN0aW9uKGVsZW1lbnRzLCB2YWx1ZSkge1xyXG4gICAgc2V0RGltZW5zaW9uUHJvcGVydHkoZWxlbWVudHMsIFwiaGVpZ2h0XCIsIHZhbHVlKVxyXG59O1xyXG5leHBvcnQge1xyXG4gICAgc3R5bGVQcm9wLFxyXG4gICAgc3R5bGVQcm9wUHJlZml4LFxyXG4gICAgbm9ybWFsaXplU3R5bGVQcm9wLFxyXG4gICAgc2V0V2lkdGgsXHJcbiAgICBzZXRIZWlnaHRcclxufTtcclxuIiwiLyoqXHJcbiAqIERldkV4dHJlbWUgKGVzbS9jb3JlL3V0aWxzL3R5cGUuanMpXHJcbiAqIFZlcnNpb246IDIxLjEuNFxyXG4gKiBCdWlsZCBkYXRlOiBNb24gSnVuIDIxIDIwMjFcclxuICpcclxuICogQ29weXJpZ2h0IChjKSAyMDEyIC0gMjAyMSBEZXZlbG9wZXIgRXhwcmVzcyBJbmMuIEFMTCBSSUdIVFMgUkVTRVJWRURcclxuICogUmVhZCBhYm91dCBEZXZFeHRyZW1lIGxpY2Vuc2luZyBoZXJlOiBodHRwczovL2pzLmRldmV4cHJlc3MuY29tL0xpY2Vuc2luZy9cclxuICovXHJcbnZhciB0eXBlcyA9IHtcclxuICAgIFwiW29iamVjdCBBcnJheV1cIjogXCJhcnJheVwiLFxyXG4gICAgXCJbb2JqZWN0IERhdGVdXCI6IFwiZGF0ZVwiLFxyXG4gICAgXCJbb2JqZWN0IE9iamVjdF1cIjogXCJvYmplY3RcIixcclxuICAgIFwiW29iamVjdCBTdHJpbmddXCI6IFwic3RyaW5nXCIsXHJcbiAgICBcIltvYmplY3QgTnVsbF1cIjogXCJudWxsXCJcclxufTtcclxudmFyIHR5cGUgPSBmdW5jdGlvbihvYmplY3QpIHtcclxuICAgIHZhciB0eXBlT2ZPYmplY3QgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqZWN0KTtcclxuICAgIHJldHVybiBcIm9iamVjdFwiID09PSB0eXBlb2Ygb2JqZWN0ID8gdHlwZXNbdHlwZU9mT2JqZWN0XSB8fCBcIm9iamVjdFwiIDogdHlwZW9mIG9iamVjdFxyXG59O1xyXG52YXIgaXNCb29sZWFuID0gZnVuY3Rpb24ob2JqZWN0KSB7XHJcbiAgICByZXR1cm4gXCJib29sZWFuXCIgPT09IHR5cGVvZiBvYmplY3RcclxufTtcclxudmFyIGlzRXhwb25lbnRpYWwgPSBmdW5jdGlvbih2YWx1ZSkge1xyXG4gICAgcmV0dXJuIGlzTnVtZXJpYyh2YWx1ZSkgJiYgLTEgIT09IHZhbHVlLnRvU3RyaW5nKCkuaW5kZXhPZihcImVcIilcclxufTtcclxudmFyIGlzRGF0ZSA9IGZ1bmN0aW9uKG9iamVjdCkge1xyXG4gICAgcmV0dXJuIFwiZGF0ZVwiID09PSB0eXBlKG9iamVjdClcclxufTtcclxudmFyIGlzRGVmaW5lZCA9IGZ1bmN0aW9uKG9iamVjdCkge1xyXG4gICAgcmV0dXJuIG51bGwgIT09IG9iamVjdCAmJiB2b2lkIDAgIT09IG9iamVjdFxyXG59O1xyXG52YXIgaXNGdW5jdGlvbiA9IGZ1bmN0aW9uKG9iamVjdCkge1xyXG4gICAgcmV0dXJuIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIG9iamVjdFxyXG59O1xyXG52YXIgaXNTdHJpbmcgPSBmdW5jdGlvbihvYmplY3QpIHtcclxuICAgIHJldHVybiBcInN0cmluZ1wiID09PSB0eXBlb2Ygb2JqZWN0XHJcbn07XHJcbnZhciBpc051bWVyaWMgPSBmdW5jdGlvbihvYmplY3QpIHtcclxuICAgIHJldHVybiBcIm51bWJlclwiID09PSB0eXBlb2Ygb2JqZWN0ICYmIGlzRmluaXRlKG9iamVjdCkgfHwgIWlzTmFOKG9iamVjdCAtIHBhcnNlRmxvYXQob2JqZWN0KSlcclxufTtcclxudmFyIGlzT2JqZWN0ID0gZnVuY3Rpb24ob2JqZWN0KSB7XHJcbiAgICByZXR1cm4gXCJvYmplY3RcIiA9PT0gdHlwZShvYmplY3QpXHJcbn07XHJcbnZhciBpc0VtcHR5T2JqZWN0ID0gZnVuY3Rpb24ob2JqZWN0KSB7XHJcbiAgICB2YXIgcHJvcGVydHk7XHJcbiAgICBmb3IgKHByb3BlcnR5IGluIG9iamVjdCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWVcclxufTtcclxudmFyIGlzUGxhaW5PYmplY3QgPSBmdW5jdGlvbihvYmplY3QpIHtcclxuICAgIGlmICghb2JqZWN0IHx8IFwiW29iamVjdCBPYmplY3RdXCIgIT09IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmplY3QpKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICB9XHJcbiAgICB2YXIgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqZWN0KTtcclxuICAgIHZhciBjdG9yID0gT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwocHJvdG8sIFwiY29uc3RydWN0b3JcIikgJiYgcHJvdG8uY29uc3RydWN0b3I7XHJcbiAgICByZXR1cm4gXCJmdW5jdGlvblwiID09PSB0eXBlb2YgY3RvciAmJiBPYmplY3QudG9TdHJpbmcuY2FsbChjdG9yKSA9PT0gT2JqZWN0LnRvU3RyaW5nLmNhbGwoT2JqZWN0KVxyXG59O1xyXG52YXIgaXNQcmltaXRpdmUgPSBmdW5jdGlvbih2YWx1ZSkge1xyXG4gICAgcmV0dXJuIC0xID09PSBbXCJvYmplY3RcIiwgXCJhcnJheVwiLCBcImZ1bmN0aW9uXCJdLmluZGV4T2YodHlwZSh2YWx1ZSkpXHJcbn07XHJcbnZhciBpc1dpbmRvdyA9IGZ1bmN0aW9uKG9iamVjdCkge1xyXG4gICAgcmV0dXJuIG51bGwgIT0gb2JqZWN0ICYmIG9iamVjdCA9PT0gb2JqZWN0LndpbmRvd1xyXG59O1xyXG52YXIgaXNSZW5kZXJlciA9IGZ1bmN0aW9uKG9iamVjdCkge1xyXG4gICAgcmV0dXJuICEhKG9iamVjdC5qcXVlcnkgfHwgb2JqZWN0LmR4UmVuZGVyZXIpXHJcbn07XHJcbnZhciBpc1Byb21pc2UgPSBmdW5jdGlvbihvYmplY3QpIHtcclxuICAgIHJldHVybiBvYmplY3QgJiYgaXNGdW5jdGlvbihvYmplY3QudGhlbilcclxufTtcclxudmFyIGlzRGVmZXJyZWQgPSBmdW5jdGlvbihvYmplY3QpIHtcclxuICAgIHJldHVybiBvYmplY3QgJiYgaXNGdW5jdGlvbihvYmplY3QuZG9uZSkgJiYgaXNGdW5jdGlvbihvYmplY3QuZmFpbClcclxufTtcclxudmFyIGlzRXZlbnQgPSBmdW5jdGlvbihvYmplY3QpIHtcclxuICAgIHJldHVybiAhIShvYmplY3QgJiYgb2JqZWN0LnByZXZlbnREZWZhdWx0KVxyXG59O1xyXG5leHBvcnQge1xyXG4gICAgaXNCb29sZWFuLFxyXG4gICAgaXNFeHBvbmVudGlhbCxcclxuICAgIGlzRGF0ZSxcclxuICAgIGlzRGVmaW5lZCxcclxuICAgIGlzRnVuY3Rpb24sXHJcbiAgICBpc1N0cmluZyxcclxuICAgIGlzTnVtZXJpYyxcclxuICAgIGlzT2JqZWN0LFxyXG4gICAgaXNFbXB0eU9iamVjdCxcclxuICAgIGlzUGxhaW5PYmplY3QsXHJcbiAgICBpc1ByaW1pdGl2ZSxcclxuICAgIGlzV2luZG93LFxyXG4gICAgaXNSZW5kZXJlcixcclxuICAgIGlzUHJvbWlzZSxcclxuICAgIGlzRGVmZXJyZWQsXHJcbiAgICB0eXBlLFxyXG4gICAgaXNFdmVudFxyXG59O1xyXG4iLCIvKipcclxuICogRGV2RXh0cmVtZSAoZXNtL2NvcmUvdXRpbHMvdmFyaWFibGVfd3JhcHBlci5qcylcclxuICogVmVyc2lvbjogMjEuMS40XHJcbiAqIEJ1aWxkIGRhdGU6IE1vbiBKdW4gMjEgMjAyMVxyXG4gKlxyXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTIgLSAyMDIxIERldmVsb3BlciBFeHByZXNzIEluYy4gQUxMIFJJR0hUUyBSRVNFUlZFRFxyXG4gKiBSZWFkIGFib3V0IERldkV4dHJlbWUgbGljZW5zaW5nIGhlcmU6IGh0dHBzOi8vanMuZGV2ZXhwcmVzcy5jb20vTGljZW5zaW5nL1xyXG4gKi9cclxuaW1wb3J0IHtcclxuICAgIGxvZ2dlclxyXG59IGZyb20gXCIuL2NvbnNvbGVcIjtcclxuaW1wb3J0IGRlcGVuZGVuY3lJbmplY3RvciBmcm9tIFwiLi9kZXBlbmRlbmN5X2luamVjdG9yXCI7XHJcbmV4cG9ydCBkZWZhdWx0IGRlcGVuZGVuY3lJbmplY3Rvcih7XHJcbiAgICBpc1dyYXBwZWQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgfSxcclxuICAgIGlzV3JpdGFibGVXcmFwcGVkOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2VcclxuICAgIH0sXHJcbiAgICB3cmFwOiBmdW5jdGlvbih2YWx1ZSkge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZVxyXG4gICAgfSxcclxuICAgIHVud3JhcDogZnVuY3Rpb24odmFsdWUpIHtcclxuICAgICAgICByZXR1cm4gdmFsdWVcclxuICAgIH0sXHJcbiAgICBhc3NpZ246IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGxvZ2dlci5lcnJvcihcIk1ldGhvZCAnYXNzaWduJyBzaG91bGQgbm90IGJlIHVzZWQgZm9yIG5vdCB3cmFwcGVkIHZhcmlhYmxlcy4gVXNlICdpc1dyYXBwZWQnIG1ldGhvZCBmb3IgZW5zdXJpbmcuXCIpXHJcbiAgICB9XHJcbn0pO1xyXG4iLCIvKipcclxuICogRGV2RXh0cmVtZSAoZXNtL2NvcmUvdXRpbHMvd2luZG93LmpzKVxyXG4gKiBWZXJzaW9uOiAyMS4xLjRcclxuICogQnVpbGQgZGF0ZTogTW9uIEp1biAyMSAyMDIxXHJcbiAqXHJcbiAqIENvcHlyaWdodCAoYykgMjAxMiAtIDIwMjEgRGV2ZWxvcGVyIEV4cHJlc3MgSW5jLiBBTEwgUklHSFRTIFJFU0VSVkVEXHJcbiAqIFJlYWQgYWJvdXQgRGV2RXh0cmVtZSBsaWNlbnNpbmcgaGVyZTogaHR0cHM6Ly9qcy5kZXZleHByZXNzLmNvbS9MaWNlbnNpbmcvXHJcbiAqL1xyXG5pbXBvcnQgZG9tQWRhcHRlciBmcm9tIFwiLi4vZG9tX2FkYXB0ZXJcIjtcclxudmFyIGhhc1dpbmRvd1ZhbHVlID0gXCJ1bmRlZmluZWRcIiAhPT0gdHlwZW9mIHdpbmRvdztcclxudmFyIGhhc1dpbmRvdyA9ICgpID0+IGhhc1dpbmRvd1ZhbHVlO1xyXG52YXIgd2luZG93T2JqZWN0ID0gaGFzV2luZG93KCkgPyB3aW5kb3cgOiB2b2lkIDA7XHJcbmlmICghd2luZG93T2JqZWN0KSB7XHJcbiAgICB3aW5kb3dPYmplY3QgPSB7fTtcclxuICAgIHdpbmRvd09iamVjdC53aW5kb3cgPSB3aW5kb3dPYmplY3RcclxufVxyXG52YXIgZ2V0V2luZG93ID0gKCkgPT4gd2luZG93T2JqZWN0O1xyXG52YXIgc2V0V2luZG93ID0gKG5ld1dpbmRvd09iamVjdCwgaGFzV2luZG93KSA9PiB7XHJcbiAgICBpZiAodm9pZCAwID09PSBoYXNXaW5kb3cpIHtcclxuICAgICAgICBoYXNXaW5kb3dWYWx1ZSA9IFwidW5kZWZpbmVkXCIgIT09IHR5cGVvZiB3aW5kb3cgJiYgd2luZG93ID09PSBuZXdXaW5kb3dPYmplY3RcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaGFzV2luZG93VmFsdWUgPSBoYXNXaW5kb3dcclxuICAgIH1cclxuICAgIHdpbmRvd09iamVjdCA9IG5ld1dpbmRvd09iamVjdFxyXG59O1xyXG52YXIgaGFzUHJvcGVydHkgPSBwcm9wID0+IGhhc1dpbmRvdygpICYmIHByb3AgaW4gd2luZG93T2JqZWN0O1xyXG52YXIgZGVmYXVsdFNjcmVlbkZhY3RvckZ1bmMgPSB3aWR0aCA9PiB7XHJcbiAgICBpZiAod2lkdGggPCA3NjgpIHtcclxuICAgICAgICByZXR1cm4gXCJ4c1wiXHJcbiAgICB9IGVsc2UgaWYgKHdpZHRoIDwgOTkyKSB7XHJcbiAgICAgICAgcmV0dXJuIFwic21cIlxyXG4gICAgfSBlbHNlIGlmICh3aWR0aCA8IDEyMDApIHtcclxuICAgICAgICByZXR1cm4gXCJtZFwiXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBcImxnXCJcclxuICAgIH1cclxufTtcclxudmFyIGdldEN1cnJlbnRTY3JlZW5GYWN0b3IgPSBzY3JlZW5GYWN0b3JDYWxsYmFjayA9PiB7XHJcbiAgICB2YXIgc2NyZWVuRmFjdG9yRnVuYyA9IHNjcmVlbkZhY3RvckNhbGxiYWNrIHx8IGRlZmF1bHRTY3JlZW5GYWN0b3JGdW5jO1xyXG4gICAgdmFyIHdpbmRvd1dpZHRoID0gZG9tQWRhcHRlci5nZXREb2N1bWVudEVsZW1lbnQoKS5jbGllbnRXaWR0aDtcclxuICAgIHJldHVybiBzY3JlZW5GYWN0b3JGdW5jKHdpbmRvd1dpZHRoKVxyXG59O1xyXG52YXIgZ2V0TmF2aWdhdG9yID0gKCkgPT4gaGFzV2luZG93KCkgPyB3aW5kb3dPYmplY3QubmF2aWdhdG9yIDoge1xyXG4gICAgdXNlckFnZW50OiBcIlwiXHJcbn07XHJcbmV4cG9ydCB7XHJcbiAgICBoYXNXaW5kb3csXHJcbiAgICBnZXRXaW5kb3csXHJcbiAgICBzZXRXaW5kb3csXHJcbiAgICBoYXNQcm9wZXJ0eSxcclxuICAgIGRlZmF1bHRTY3JlZW5GYWN0b3JGdW5jLFxyXG4gICAgZ2V0Q3VycmVudFNjcmVlbkZhY3RvcixcclxuICAgIGdldE5hdmlnYXRvclxyXG59O1xyXG4iLCIvKipcclxuICogRGV2RXh0cmVtZSAoZXNtL2NvcmUvdmVyc2lvbi5qcylcclxuICogVmVyc2lvbjogMjEuMS40XHJcbiAqIEJ1aWxkIGRhdGU6IE1vbiBKdW4gMjEgMjAyMVxyXG4gKlxyXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTIgLSAyMDIxIERldmVsb3BlciBFeHByZXNzIEluYy4gQUxMIFJJR0hUUyBSRVNFUlZFRFxyXG4gKiBSZWFkIGFib3V0IERldkV4dHJlbWUgbGljZW5zaW5nIGhlcmU6IGh0dHBzOi8vanMuZGV2ZXhwcmVzcy5jb20vTGljZW5zaW5nL1xyXG4gKi9cclxuZXhwb3J0IHZhciB2ZXJzaW9uID0gXCIyMS4xLjRcIjtcclxuIiwiLyoqXHJcbiAqIERldkV4dHJlbWUgKGVzbS9ldmVudHMvY29yZS9ldmVudF9yZWdpc3RyYXRvcl9jYWxsYmFja3MuanMpXHJcbiAqIFZlcnNpb246IDIxLjEuNFxyXG4gKiBCdWlsZCBkYXRlOiBNb24gSnVuIDIxIDIwMjFcclxuICpcclxuICogQ29weXJpZ2h0IChjKSAyMDEyIC0gMjAyMSBEZXZlbG9wZXIgRXhwcmVzcyBJbmMuIEFMTCBSSUdIVFMgUkVTRVJWRURcclxuICogUmVhZCBhYm91dCBEZXZFeHRyZW1lIGxpY2Vuc2luZyBoZXJlOiBodHRwczovL2pzLmRldmV4cHJlc3MuY29tL0xpY2Vuc2luZy9cclxuICovXHJcbmltcG9ydCBNZW1vcml6ZWRDYWxsYmFja3MgZnJvbSBcIi4uLy4uL2NvcmUvbWVtb3JpemVkX2NhbGxiYWNrc1wiO1xyXG5leHBvcnQgZGVmYXVsdCBuZXcgTWVtb3JpemVkQ2FsbGJhY2tzO1xyXG4iLCIvKipcclxuICogRGV2RXh0cmVtZSAoZXNtL2V2ZW50cy9jb3JlL2V2ZW50c19lbmdpbmUuanMpXHJcbiAqIFZlcnNpb246IDIxLjEuNFxyXG4gKiBCdWlsZCBkYXRlOiBNb24gSnVuIDIxIDIwMjFcclxuICpcclxuICogQ29weXJpZ2h0IChjKSAyMDEyIC0gMjAyMSBEZXZlbG9wZXIgRXhwcmVzcyBJbmMuIEFMTCBSSUdIVFMgUkVTRVJWRURcclxuICogUmVhZCBhYm91dCBEZXZFeHRyZW1lIGxpY2Vuc2luZyBoZXJlOiBodHRwczovL2pzLmRldmV4cHJlc3MuY29tL0xpY2Vuc2luZy9cclxuICovXHJcbmltcG9ydCByZWdpc3RlckV2ZW50Q2FsbGJhY2tzIGZyb20gXCIuL2V2ZW50X3JlZ2lzdHJhdG9yX2NhbGxiYWNrc1wiO1xyXG5pbXBvcnQge1xyXG4gICAgZXh0ZW5kXHJcbn0gZnJvbSBcIi4uLy4uL2NvcmUvdXRpbHMvZXh0ZW5kXCI7XHJcbmltcG9ydCBkb21BZGFwdGVyIGZyb20gXCIuLi8uLi9jb3JlL2RvbV9hZGFwdGVyXCI7XHJcbmltcG9ydCB7XHJcbiAgICBnZXRXaW5kb3csXHJcbiAgICBoYXNXaW5kb3dcclxufSBmcm9tIFwiLi4vLi4vY29yZS91dGlscy93aW5kb3dcIjtcclxudmFyIHdpbmRvdyA9IGdldFdpbmRvdygpO1xyXG5pbXBvcnQgaW5qZWN0b3IgZnJvbSBcIi4uLy4uL2NvcmUvdXRpbHMvZGVwZW5kZW5jeV9pbmplY3RvclwiO1xyXG5pbXBvcnQge1xyXG4gICAgaXNXaW5kb3csXHJcbiAgICBpc0Z1bmN0aW9uLFxyXG4gICAgaXNTdHJpbmdcclxufSBmcm9tIFwiLi4vLi4vY29yZS91dGlscy90eXBlXCI7XHJcbmltcG9ydCBDYWxsYmFja3MgZnJvbSBcIi4uLy4uL2NvcmUvdXRpbHMvY2FsbGJhY2tzXCI7XHJcbmltcG9ydCBlcnJvcnMgZnJvbSBcIi4uLy4uL2NvcmUvZXJyb3JzXCI7XHJcbmltcG9ydCBXZWFrTWFwIGZyb20gXCIuLi8uLi9jb3JlL3BvbHlmaWxscy93ZWFrX21hcFwiO1xyXG5pbXBvcnQgaG9va1RvdWNoUHJvcHMgZnJvbSBcIi4uLy4uL2V2ZW50cy9jb3JlL2hvb2tfdG91Y2hfcHJvcHNcIjtcclxuaW1wb3J0IGNhbGxPbmNlIGZyb20gXCIuLi8uLi9jb3JlL3V0aWxzL2NhbGxfb25jZVwiO1xyXG52YXIgRU1QVFlfRVZFTlRfTkFNRSA9IFwiZHhFbXB0eUV2ZW50VHlwZVwiO1xyXG52YXIgTkFUSVZFX0VWRU5UU19UT19TVUJTQ1JJQkUgPSB7XHJcbiAgICBtb3VzZWVudGVyOiBcIm1vdXNlb3ZlclwiLFxyXG4gICAgbW91c2VsZWF2ZTogXCJtb3VzZW91dFwiLFxyXG4gICAgcG9pbnRlcmVudGVyOiBcInBvaW50ZXJvdmVyXCIsXHJcbiAgICBwb2ludGVybGVhdmU6IFwicG9pbnRlcm91dFwiXHJcbn07XHJcbnZhciBOQVRJVkVfRVZFTlRTX1RPX1RSSUdHRVIgPSB7XHJcbiAgICBmb2N1c2luOiBcImZvY3VzXCIsXHJcbiAgICBmb2N1c291dDogXCJibHVyXCJcclxufTtcclxudmFyIE5PX0JVQkJMRV9FVkVOVFMgPSBbXCJibHVyXCIsIFwiZm9jdXNcIiwgXCJsb2FkXCJdO1xyXG52YXIgZm9yY2VQYXNzaXZlRmFsc2VFdmVudE5hbWVzID0gW1widG91Y2htb3ZlXCIsIFwid2hlZWxcIiwgXCJtb3VzZXdoZWVsXCIsIFwidG91Y2hzdGFydFwiXTtcclxuXHJcbmZ1bmN0aW9uIG1hdGNoZXNTYWZlKHRhcmdldCwgc2VsZWN0b3IpIHtcclxuICAgIHJldHVybiAhaXNXaW5kb3codGFyZ2V0KSAmJiBcIiNkb2N1bWVudFwiICE9PSB0YXJnZXQubm9kZU5hbWUgJiYgZG9tQWRhcHRlci5lbGVtZW50TWF0Y2hlcyh0YXJnZXQsIHNlbGVjdG9yKVxyXG59XHJcbnZhciBlbGVtZW50RGF0YU1hcCA9IG5ldyBXZWFrTWFwO1xyXG52YXIgZ3VpZCA9IDA7XHJcbnZhciBza2lwRXZlbnQ7XHJcbnZhciBzcGVjaWFsID0gZnVuY3Rpb24oKSB7XHJcbiAgICB2YXIgc3BlY2lhbERhdGEgPSB7fTtcclxuICAgIHJlZ2lzdGVyRXZlbnRDYWxsYmFja3MuYWRkKChmdW5jdGlvbihldmVudE5hbWUsIGV2ZW50T2JqZWN0KSB7XHJcbiAgICAgICAgc3BlY2lhbERhdGFbZXZlbnROYW1lXSA9IGV2ZW50T2JqZWN0XHJcbiAgICB9KSk7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGdldEZpZWxkOiBmdW5jdGlvbihldmVudE5hbWUsIGZpZWxkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBzcGVjaWFsRGF0YVtldmVudE5hbWVdICYmIHNwZWNpYWxEYXRhW2V2ZW50TmFtZV1bZmllbGRdXHJcbiAgICAgICAgfSxcclxuICAgICAgICBjYWxsTWV0aG9kOiBmdW5jdGlvbihldmVudE5hbWUsIG1ldGhvZE5hbWUsIGNvbnRleHQsIGFyZ3MpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHNwZWNpYWxEYXRhW2V2ZW50TmFtZV0gJiYgc3BlY2lhbERhdGFbZXZlbnROYW1lXVttZXRob2ROYW1lXSAmJiBzcGVjaWFsRGF0YVtldmVudE5hbWVdW21ldGhvZE5hbWVdLmFwcGx5KGNvbnRleHQsIGFyZ3MpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59KCk7XHJcbnZhciBldmVudHNFbmdpbmUgPSBpbmplY3Rvcih7XHJcbiAgICBvbjogZ2V0SGFuZGxlcihub3JtYWxpemVPbkFyZ3VtZW50cyhpdGVyYXRlKChmdW5jdGlvbihlbGVtZW50LCBldmVudE5hbWUsIHNlbGVjdG9yLCBkYXRhLCBoYW5kbGVyKSB7XHJcbiAgICAgICAgdmFyIGhhbmRsZXJzQ29udHJvbGxlciA9IGdldEhhbmRsZXJzQ29udHJvbGxlcihlbGVtZW50LCBldmVudE5hbWUpO1xyXG4gICAgICAgIGhhbmRsZXJzQ29udHJvbGxlci5hZGRIYW5kbGVyKGhhbmRsZXIsIHNlbGVjdG9yLCBkYXRhKVxyXG4gICAgfSkpKSksXHJcbiAgICBvbmU6IGdldEhhbmRsZXIobm9ybWFsaXplT25Bcmd1bWVudHMoKGZ1bmN0aW9uKGVsZW1lbnQsIGV2ZW50TmFtZSwgc2VsZWN0b3IsIGRhdGEsIGhhbmRsZXIpIHtcclxuICAgICAgICBldmVudHNFbmdpbmUub24oZWxlbWVudCwgZXZlbnROYW1lLCBzZWxlY3RvciwgZGF0YSwgKGZ1bmN0aW9uIG9uZVRpbWVIYW5kbGVyKCkge1xyXG4gICAgICAgICAgICBldmVudHNFbmdpbmUub2ZmKGVsZW1lbnQsIGV2ZW50TmFtZSwgc2VsZWN0b3IsIG9uZVRpbWVIYW5kbGVyKTtcclxuICAgICAgICAgICAgaGFuZGxlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpXHJcbiAgICAgICAgfSkpXHJcbiAgICB9KSkpLFxyXG4gICAgb2ZmOiBnZXRIYW5kbGVyKG5vcm1hbGl6ZU9mZkFyZ3VtZW50cyhpdGVyYXRlKChmdW5jdGlvbihlbGVtZW50LCBldmVudE5hbWUsIHNlbGVjdG9yLCBoYW5kbGVyKSB7XHJcbiAgICAgICAgdmFyIGhhbmRsZXJzQ29udHJvbGxlciA9IGdldEhhbmRsZXJzQ29udHJvbGxlcihlbGVtZW50LCBldmVudE5hbWUpO1xyXG4gICAgICAgIGhhbmRsZXJzQ29udHJvbGxlci5yZW1vdmVIYW5kbGVyKGhhbmRsZXIsIHNlbGVjdG9yKVxyXG4gICAgfSkpKSksXHJcbiAgICB0cmlnZ2VyOiBnZXRIYW5kbGVyKG5vcm1hbGl6ZVRyaWdnZXJBcmd1bWVudHMoKGZ1bmN0aW9uKGVsZW1lbnQsIGV2ZW50LCBleHRyYVBhcmFtZXRlcnMpIHtcclxuICAgICAgICB2YXIgZXZlbnROYW1lID0gZXZlbnQudHlwZTtcclxuICAgICAgICB2YXIgaGFuZGxlcnNDb250cm9sbGVyID0gZ2V0SGFuZGxlcnNDb250cm9sbGVyKGVsZW1lbnQsIGV2ZW50LnR5cGUpO1xyXG4gICAgICAgIHNwZWNpYWwuY2FsbE1ldGhvZChldmVudE5hbWUsIFwidHJpZ2dlclwiLCBlbGVtZW50LCBbZXZlbnQsIGV4dHJhUGFyYW1ldGVyc10pO1xyXG4gICAgICAgIGhhbmRsZXJzQ29udHJvbGxlci5jYWxsSGFuZGxlcnMoZXZlbnQsIGV4dHJhUGFyYW1ldGVycyk7XHJcbiAgICAgICAgdmFyIG5vQnViYmxlID0gc3BlY2lhbC5nZXRGaWVsZChldmVudE5hbWUsIFwibm9CdWJibGVcIikgfHwgZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSB8fCAtMSAhPT0gTk9fQlVCQkxFX0VWRU5UUy5pbmRleE9mKGV2ZW50TmFtZSk7XHJcbiAgICAgICAgaWYgKCFub0J1YmJsZSkge1xyXG4gICAgICAgICAgICB2YXIgcGFyZW50cyA9IFtdO1xyXG4gICAgICAgICAgICAhIGZ1bmN0aW9uIGdldFBhcmVudHMoZWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHBhcmVudCA9IGVsZW1lbnQucGFyZW50Tm9kZTtcclxuICAgICAgICAgICAgICAgIGlmIChwYXJlbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRzLnB1c2gocGFyZW50KTtcclxuICAgICAgICAgICAgICAgICAgICBnZXRQYXJlbnRzKHBhcmVudClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfShlbGVtZW50KTtcclxuICAgICAgICAgICAgcGFyZW50cy5wdXNoKHdpbmRvdyk7XHJcbiAgICAgICAgICAgIHZhciBpID0gMDtcclxuICAgICAgICAgICAgd2hpbGUgKHBhcmVudHNbaV0gJiYgIWV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpIHtcclxuICAgICAgICAgICAgICAgIHZhciBwYXJlbnREYXRhQnlFdmVudCA9IGdldEhhbmRsZXJzQ29udHJvbGxlcihwYXJlbnRzW2ldLCBldmVudC50eXBlKTtcclxuICAgICAgICAgICAgICAgIHBhcmVudERhdGFCeUV2ZW50LmNhbGxIYW5kbGVycyhleHRlbmQoZXZlbnQsIHtcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGFyZ2V0OiBwYXJlbnRzW2ldXHJcbiAgICAgICAgICAgICAgICB9KSwgZXh0cmFQYXJhbWV0ZXJzKTtcclxuICAgICAgICAgICAgICAgIGkrK1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlbGVtZW50Lm5vZGVUeXBlIHx8IGlzV2luZG93KGVsZW1lbnQpKSB7XHJcbiAgICAgICAgICAgIHNwZWNpYWwuY2FsbE1ldGhvZChldmVudE5hbWUsIFwiX2RlZmF1bHRcIiwgZWxlbWVudCwgW2V2ZW50LCBleHRyYVBhcmFtZXRlcnNdKTtcclxuICAgICAgICAgICAgY2FsbE5hdGl2ZU1ldGhvZChldmVudE5hbWUsIGVsZW1lbnQpXHJcbiAgICAgICAgfVxyXG4gICAgfSkpKSxcclxuICAgIHRyaWdnZXJIYW5kbGVyOiBnZXRIYW5kbGVyKG5vcm1hbGl6ZVRyaWdnZXJBcmd1bWVudHMoKGZ1bmN0aW9uKGVsZW1lbnQsIGV2ZW50LCBleHRyYVBhcmFtZXRlcnMpIHtcclxuICAgICAgICB2YXIgaGFuZGxlcnNDb250cm9sbGVyID0gZ2V0SGFuZGxlcnNDb250cm9sbGVyKGVsZW1lbnQsIGV2ZW50LnR5cGUpO1xyXG4gICAgICAgIGhhbmRsZXJzQ29udHJvbGxlci5jYWxsSGFuZGxlcnMoZXZlbnQsIGV4dHJhUGFyYW1ldGVycylcclxuICAgIH0pKSlcclxufSk7XHJcblxyXG5mdW5jdGlvbiBhcHBseUZvckVhY2goYXJncywgbWV0aG9kKSB7XHJcbiAgICB2YXIgZWxlbWVudCA9IGFyZ3NbMF07XHJcbiAgICBpZiAoIWVsZW1lbnQpIHtcclxuICAgICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIGlmIChkb21BZGFwdGVyLmlzTm9kZShlbGVtZW50KSB8fCBpc1dpbmRvdyhlbGVtZW50KSkge1xyXG4gICAgICAgIG1ldGhvZC5hcHBseShldmVudHNFbmdpbmUsIGFyZ3MpXHJcbiAgICB9IGVsc2UgaWYgKCFpc1N0cmluZyhlbGVtZW50KSAmJiBcImxlbmd0aFwiIGluIGVsZW1lbnQpIHtcclxuICAgICAgICB2YXIgaXRlbUFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmdzLCAwKTtcclxuICAgICAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKGVsZW1lbnQsIChmdW5jdGlvbihpdGVtRWxlbWVudCkge1xyXG4gICAgICAgICAgICBpdGVtQXJnc1swXSA9IGl0ZW1FbGVtZW50O1xyXG4gICAgICAgICAgICBhcHBseUZvckVhY2goaXRlbUFyZ3MsIG1ldGhvZClcclxuICAgICAgICB9KSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhyb3cgZXJyb3JzLkVycm9yKFwiRTAwMjVcIilcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0SGFuZGxlcihtZXRob2QpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbigpIHtcclxuICAgICAgICBhcHBseUZvckVhY2goYXJndW1lbnRzLCBtZXRob2QpXHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGRldGVjdFBhc3NpdmVFdmVudEhhbmRsZXJzU3VwcG9ydCgpIHtcclxuICAgIHZhciBpc1N1cHBvcnRlZCA9IGZhbHNlO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICB2YXIgb3B0aW9ucyA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgXCJwYXNzaXZlXCIsIHtcclxuICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgIGlzU3VwcG9ydGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInRlc3RcIiwgbnVsbCwgb3B0aW9ucylcclxuICAgIH0gY2F0Y2ggKGUpIHt9XHJcbiAgICByZXR1cm4gaXNTdXBwb3J0ZWRcclxufVxyXG52YXIgcGFzc2l2ZUV2ZW50SGFuZGxlcnNTdXBwb3J0ZWQgPSBjYWxsT25jZShkZXRlY3RQYXNzaXZlRXZlbnRIYW5kbGVyc1N1cHBvcnQpO1xyXG52YXIgY29udGFpbnMgPSAoY29udGFpbmVyLCBlbGVtZW50KSA9PiB7XHJcbiAgICBpZiAoaXNXaW5kb3coY29udGFpbmVyKSkge1xyXG4gICAgICAgIHJldHVybiBjb250YWlucyhjb250YWluZXIuZG9jdW1lbnQsIGVsZW1lbnQpXHJcbiAgICB9XHJcbiAgICByZXR1cm4gY29udGFpbmVyLmNvbnRhaW5zID8gY29udGFpbmVyLmNvbnRhaW5zKGVsZW1lbnQpIDogISEoZWxlbWVudC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihjb250YWluZXIpICYgZWxlbWVudC5ET0NVTUVOVF9QT1NJVElPTl9DT05UQUlOUylcclxufTtcclxuXHJcbmZ1bmN0aW9uIGdldEhhbmRsZXJzQ29udHJvbGxlcihlbGVtZW50LCBldmVudE5hbWUpIHtcclxuICAgIHZhciBlbGVtZW50RGF0YSA9IGVsZW1lbnREYXRhTWFwLmdldChlbGVtZW50KTtcclxuICAgIGV2ZW50TmFtZSA9IGV2ZW50TmFtZSB8fCBcIlwiO1xyXG4gICAgdmFyIGV2ZW50TmFtZVBhcnRzID0gZXZlbnROYW1lLnNwbGl0KFwiLlwiKTtcclxuICAgIHZhciBuYW1lc3BhY2VzID0gZXZlbnROYW1lUGFydHMuc2xpY2UoMSk7XHJcbiAgICB2YXIgZXZlbnROYW1lSXNEZWZpbmVkID0gISFldmVudE5hbWVQYXJ0c1swXTtcclxuICAgIGV2ZW50TmFtZSA9IGV2ZW50TmFtZVBhcnRzWzBdIHx8IEVNUFRZX0VWRU5UX05BTUU7XHJcbiAgICBpZiAoIWVsZW1lbnREYXRhKSB7XHJcbiAgICAgICAgZWxlbWVudERhdGEgPSB7fTtcclxuICAgICAgICBlbGVtZW50RGF0YU1hcC5zZXQoZWxlbWVudCwgZWxlbWVudERhdGEpXHJcbiAgICB9XHJcbiAgICBpZiAoIWVsZW1lbnREYXRhW2V2ZW50TmFtZV0pIHtcclxuICAgICAgICBlbGVtZW50RGF0YVtldmVudE5hbWVdID0ge1xyXG4gICAgICAgICAgICBoYW5kbGVPYmplY3RzOiBbXSxcclxuICAgICAgICAgICAgbmF0aXZlSGFuZGxlcjogbnVsbFxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHZhciBldmVudERhdGEgPSBlbGVtZW50RGF0YVtldmVudE5hbWVdO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBhZGRIYW5kbGVyOiBmdW5jdGlvbihoYW5kbGVyLCBzZWxlY3RvciwgZGF0YSkge1xyXG4gICAgICAgICAgICB2YXIgY2FsbEhhbmRsZXIgPSBmdW5jdGlvbihlLCBleHRyYVBhcmFtZXRlcnMpIHtcclxuICAgICAgICAgICAgICAgIHZhciBoYW5kbGVyQXJncyA9IFtlXTtcclxuICAgICAgICAgICAgICAgIHZhciB0YXJnZXQgPSBlLmN1cnJlbnRUYXJnZXQ7XHJcbiAgICAgICAgICAgICAgICB2YXIgcmVsYXRlZFRhcmdldCA9IGUucmVsYXRlZFRhcmdldDtcclxuICAgICAgICAgICAgICAgIHZhciBzZWNvbmRhcnlUYXJnZXRJc0luc2lkZTtcclxuICAgICAgICAgICAgICAgIHZhciByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnROYW1lIGluIE5BVElWRV9FVkVOVFNfVE9fU1VCU0NSSUJFKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2Vjb25kYXJ5VGFyZ2V0SXNJbnNpZGUgPSByZWxhdGVkVGFyZ2V0ICYmIHRhcmdldCAmJiAocmVsYXRlZFRhcmdldCA9PT0gdGFyZ2V0IHx8IGNvbnRhaW5zKHRhcmdldCwgcmVsYXRlZFRhcmdldCkpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAodm9pZCAwICE9PSBleHRyYVBhcmFtZXRlcnMpIHtcclxuICAgICAgICAgICAgICAgICAgICBoYW5kbGVyQXJncy5wdXNoKGV4dHJhUGFyYW1ldGVycylcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHNwZWNpYWwuY2FsbE1ldGhvZChldmVudE5hbWUsIFwiaGFuZGxlXCIsIGVsZW1lbnQsIFtlLCBkYXRhXSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXNlY29uZGFyeVRhcmdldElzSW5zaWRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gaGFuZGxlci5hcHBseSh0YXJnZXQsIGhhbmRsZXJBcmdzKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGZhbHNlID09PSByZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB2YXIgaGFuZGxlT2JqZWN0ID0ge1xyXG4gICAgICAgICAgICAgICAgaGFuZGxlcjogaGFuZGxlcixcclxuICAgICAgICAgICAgICAgIHdyYXBwZWRIYW5kbGVyOiBmdW5jdGlvbihlLCBleHRyYVBhcmFtZXRlcnMpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2tpcEV2ZW50ICYmIGUudHlwZSA9PT0gc2tpcEV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlLmRhdGEgPSBkYXRhO1xyXG4gICAgICAgICAgICAgICAgICAgIGUuZGVsZWdhdGVUYXJnZXQgPSBlbGVtZW50O1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3Rvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VycmVudFRhcmdldCA9IGUudGFyZ2V0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY3VycmVudFRhcmdldCAmJiBjdXJyZW50VGFyZ2V0ICE9PSBlbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2hlc1NhZmUoY3VycmVudFRhcmdldCwgc2VsZWN0b3IpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5jdXJyZW50VGFyZ2V0ID0gY3VycmVudFRhcmdldDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsSGFuZGxlcihlLCBleHRyYVBhcmFtZXRlcnMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGFyZ2V0ID0gY3VycmVudFRhcmdldC5wYXJlbnROb2RlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlLmN1cnJlbnRUYXJnZXQgPSBlLmRlbGVnYXRlVGFyZ2V0IHx8IGUudGFyZ2V0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsSGFuZGxlcihlLCBleHRyYVBhcmFtZXRlcnMpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiBzZWxlY3RvcixcclxuICAgICAgICAgICAgICAgIHR5cGU6IGV2ZW50TmFtZSxcclxuICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEsXHJcbiAgICAgICAgICAgICAgICBuYW1lc3BhY2U6IG5hbWVzcGFjZXMuam9pbihcIi5cIiksXHJcbiAgICAgICAgICAgICAgICBuYW1lc3BhY2VzOiBuYW1lc3BhY2VzLFxyXG4gICAgICAgICAgICAgICAgZ3VpZDogKytndWlkXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGV2ZW50RGF0YS5oYW5kbGVPYmplY3RzLnB1c2goaGFuZGxlT2JqZWN0KTtcclxuICAgICAgICAgICAgdmFyIGZpcnN0SGFuZGxlckZvclRoZVR5cGUgPSAxID09PSBldmVudERhdGEuaGFuZGxlT2JqZWN0cy5sZW5ndGg7XHJcbiAgICAgICAgICAgIHZhciBzaG91bGRBZGROYXRpdmVMaXN0ZW5lciA9IGZpcnN0SGFuZGxlckZvclRoZVR5cGUgJiYgZXZlbnROYW1lSXNEZWZpbmVkO1xyXG4gICAgICAgICAgICB2YXIgbmF0aXZlTGlzdGVuZXJPcHRpb25zO1xyXG4gICAgICAgICAgICBpZiAoc2hvdWxkQWRkTmF0aXZlTGlzdGVuZXIpIHtcclxuICAgICAgICAgICAgICAgIHNob3VsZEFkZE5hdGl2ZUxpc3RlbmVyID0gIXNwZWNpYWwuY2FsbE1ldGhvZChldmVudE5hbWUsIFwic2V0dXBcIiwgZWxlbWVudCwgW2RhdGEsIG5hbWVzcGFjZXMsIGhhbmRsZXJdKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChzaG91bGRBZGROYXRpdmVMaXN0ZW5lcikge1xyXG4gICAgICAgICAgICAgICAgZXZlbnREYXRhLm5hdGl2ZUhhbmRsZXIgPSBnZXROYXRpdmVIYW5kbGVyKGV2ZW50TmFtZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAocGFzc2l2ZUV2ZW50SGFuZGxlcnNTdXBwb3J0ZWQoKSAmJiBmb3JjZVBhc3NpdmVGYWxzZUV2ZW50TmFtZXMuaW5kZXhPZihldmVudE5hbWUpID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICBuYXRpdmVMaXN0ZW5lck9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhc3NpdmU6IGZhbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZXZlbnREYXRhLnJlbW92ZUxpc3RlbmVyID0gZG9tQWRhcHRlci5saXN0ZW4oZWxlbWVudCwgTkFUSVZFX0VWRU5UU19UT19TVUJTQ1JJQkVbZXZlbnROYW1lXSB8fCBldmVudE5hbWUsIGV2ZW50RGF0YS5uYXRpdmVIYW5kbGVyLCBuYXRpdmVMaXN0ZW5lck9wdGlvbnMpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc3BlY2lhbC5jYWxsTWV0aG9kKGV2ZW50TmFtZSwgXCJhZGRcIiwgZWxlbWVudCwgW2hhbmRsZU9iamVjdF0pXHJcbiAgICAgICAgfSxcclxuICAgICAgICByZW1vdmVIYW5kbGVyOiBmdW5jdGlvbihoYW5kbGVyLCBzZWxlY3Rvcikge1xyXG4gICAgICAgICAgICB2YXIgcmVtb3ZlQnlFdmVudE5hbWUgPSBmdW5jdGlvbihldmVudE5hbWUpIHtcclxuICAgICAgICAgICAgICAgIHZhciBldmVudERhdGEgPSBlbGVtZW50RGF0YVtldmVudE5hbWVdO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFldmVudERhdGEuaGFuZGxlT2JqZWN0cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgZWxlbWVudERhdGFbZXZlbnROYW1lXTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHZhciByZW1vdmVkSGFuZGxlcjtcclxuICAgICAgICAgICAgICAgIGV2ZW50RGF0YS5oYW5kbGVPYmplY3RzID0gZXZlbnREYXRhLmhhbmRsZU9iamVjdHMuZmlsdGVyKChmdW5jdGlvbihoYW5kbGVPYmplY3QpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgc2tpcCA9IG5hbWVzcGFjZXMubGVuZ3RoICYmICFpc1N1YnNldChoYW5kbGVPYmplY3QubmFtZXNwYWNlcywgbmFtZXNwYWNlcykgfHwgaGFuZGxlciAmJiBoYW5kbGVPYmplY3QuaGFuZGxlciAhPT0gaGFuZGxlciB8fCBzZWxlY3RvciAmJiBoYW5kbGVPYmplY3Quc2VsZWN0b3IgIT09IHNlbGVjdG9yO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghc2tpcCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVkSGFuZGxlciA9IGhhbmRsZU9iamVjdC5oYW5kbGVyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWFsLmNhbGxNZXRob2QoZXZlbnROYW1lLCBcInJlbW92ZVwiLCBlbGVtZW50LCBbaGFuZGxlT2JqZWN0XSlcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNraXBcclxuICAgICAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgICAgICAgIHZhciBsYXN0SGFuZGxlckZvclRoZVR5cGUgPSAhZXZlbnREYXRhLmhhbmRsZU9iamVjdHMubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgdmFyIHNob3VsZFJlbW92ZU5hdGl2ZUxpc3RlbmVyID0gbGFzdEhhbmRsZXJGb3JUaGVUeXBlICYmIGV2ZW50TmFtZSAhPT0gRU1QVFlfRVZFTlRfTkFNRTtcclxuICAgICAgICAgICAgICAgIGlmIChzaG91bGRSZW1vdmVOYXRpdmVMaXN0ZW5lcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHNwZWNpYWwuY2FsbE1ldGhvZChldmVudE5hbWUsIFwidGVhcmRvd25cIiwgZWxlbWVudCwgW25hbWVzcGFjZXMsIHJlbW92ZWRIYW5kbGVyXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50RGF0YS5uYXRpdmVIYW5kbGVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50RGF0YS5yZW1vdmVMaXN0ZW5lcigpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBlbGVtZW50RGF0YVtldmVudE5hbWVdXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGlmIChldmVudE5hbWVJc0RlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIHJlbW92ZUJ5RXZlbnROYW1lKGV2ZW50TmFtZSlcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIG5hbWUgaW4gZWxlbWVudERhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICByZW1vdmVCeUV2ZW50TmFtZShuYW1lKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBlbGVtZW50RGF0YUlzRW1wdHkgPSAwID09PSBPYmplY3Qua2V5cyhlbGVtZW50RGF0YSkubGVuZ3RoO1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudERhdGFJc0VtcHR5KSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50RGF0YU1hcC5kZWxldGUoZWxlbWVudClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY2FsbEhhbmRsZXJzOiBmdW5jdGlvbihldmVudCwgZXh0cmFQYXJhbWV0ZXJzKSB7XHJcbiAgICAgICAgICAgIHZhciBmb3JjZVN0b3AgPSBmYWxzZTtcclxuICAgICAgICAgICAgdmFyIGhhbmRsZUNhbGxiYWNrID0gZnVuY3Rpb24oaGFuZGxlT2JqZWN0KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZm9yY2VTdG9wKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoIW5hbWVzcGFjZXMubGVuZ3RoIHx8IGlzU3Vic2V0KGhhbmRsZU9iamVjdC5uYW1lc3BhY2VzLCBuYW1lc3BhY2VzKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZU9iamVjdC53cmFwcGVkSGFuZGxlcihldmVudCwgZXh0cmFQYXJhbWV0ZXJzKTtcclxuICAgICAgICAgICAgICAgICAgICBmb3JjZVN0b3AgPSBldmVudC5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGV2ZW50RGF0YS5oYW5kbGVPYmplY3RzLmZvckVhY2goaGFuZGxlQ2FsbGJhY2spO1xyXG4gICAgICAgICAgICBpZiAobmFtZXNwYWNlcy5sZW5ndGggJiYgZWxlbWVudERhdGFbRU1QVFlfRVZFTlRfTkFNRV0pIHtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnREYXRhW0VNUFRZX0VWRU5UX05BTUVdLmhhbmRsZU9iamVjdHMuZm9yRWFjaChoYW5kbGVDYWxsYmFjaylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0TmF0aXZlSGFuZGxlcihzdWJzY3JpYmVOYW1lKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24oZXZlbnQsIGV4dHJhUGFyYW1ldGVycykge1xyXG4gICAgICAgIHZhciBoYW5kbGVyc0NvbnRyb2xsZXIgPSBnZXRIYW5kbGVyc0NvbnRyb2xsZXIodGhpcywgc3Vic2NyaWJlTmFtZSk7XHJcbiAgICAgICAgZXZlbnQgPSBldmVudHNFbmdpbmUuRXZlbnQoZXZlbnQpO1xyXG4gICAgICAgIGhhbmRsZXJzQ29udHJvbGxlci5jYWxsSGFuZGxlcnMoZXZlbnQsIGV4dHJhUGFyYW1ldGVycylcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gaXNTdWJzZXQob3JpZ2luYWwsIGNoZWNrZWQpIHtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hlY2tlZC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGlmIChvcmlnaW5hbC5pbmRleE9mKGNoZWNrZWRbaV0pIDwgMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZVxyXG59XHJcblxyXG5mdW5jdGlvbiBub3JtYWxpemVPbkFyZ3VtZW50cyhjYWxsYmFjaykge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKGVsZW1lbnQsIGV2ZW50TmFtZSwgc2VsZWN0b3IsIGRhdGEsIGhhbmRsZXIpIHtcclxuICAgICAgICBpZiAoIWhhbmRsZXIpIHtcclxuICAgICAgICAgICAgaGFuZGxlciA9IGRhdGE7XHJcbiAgICAgICAgICAgIGRhdGEgPSB2b2lkIDBcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKFwic3RyaW5nXCIgIT09IHR5cGVvZiBzZWxlY3Rvcikge1xyXG4gICAgICAgICAgICBkYXRhID0gc2VsZWN0b3I7XHJcbiAgICAgICAgICAgIHNlbGVjdG9yID0gdm9pZCAwXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghaGFuZGxlciAmJiBcInN0cmluZ1wiID09PSB0eXBlb2YgZXZlbnROYW1lKSB7XHJcbiAgICAgICAgICAgIGhhbmRsZXIgPSBkYXRhIHx8IHNlbGVjdG9yO1xyXG4gICAgICAgICAgICBzZWxlY3RvciA9IHZvaWQgMDtcclxuICAgICAgICAgICAgZGF0YSA9IHZvaWQgMFxyXG4gICAgICAgIH1cclxuICAgICAgICBjYWxsYmFjayhlbGVtZW50LCBldmVudE5hbWUsIHNlbGVjdG9yLCBkYXRhLCBoYW5kbGVyKVxyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBub3JtYWxpemVPZmZBcmd1bWVudHMoY2FsbGJhY2spIHtcclxuICAgIHJldHVybiBmdW5jdGlvbihlbGVtZW50LCBldmVudE5hbWUsIHNlbGVjdG9yLCBoYW5kbGVyKSB7XHJcbiAgICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHNlbGVjdG9yKSB7XHJcbiAgICAgICAgICAgIGhhbmRsZXIgPSBzZWxlY3RvcjtcclxuICAgICAgICAgICAgc2VsZWN0b3IgPSB2b2lkIDBcclxuICAgICAgICB9XHJcbiAgICAgICAgY2FsbGJhY2soZWxlbWVudCwgZXZlbnROYW1lLCBzZWxlY3RvciwgaGFuZGxlcilcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gbm9ybWFsaXplVHJpZ2dlckFyZ3VtZW50cyhjYWxsYmFjaykge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKGVsZW1lbnQsIHNyYywgZXh0cmFQYXJhbWV0ZXJzKSB7XHJcbiAgICAgICAgaWYgKFwic3RyaW5nXCIgPT09IHR5cGVvZiBzcmMpIHtcclxuICAgICAgICAgICAgc3JjID0ge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogc3JjXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFzcmMudGFyZ2V0KSB7XHJcbiAgICAgICAgICAgIHNyYy50YXJnZXQgPSBlbGVtZW50XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNyYy5jdXJyZW50VGFyZ2V0ID0gZWxlbWVudDtcclxuICAgICAgICBpZiAoIXNyYy5kZWxlZ2F0ZVRhcmdldCkge1xyXG4gICAgICAgICAgICBzcmMuZGVsZWdhdGVUYXJnZXQgPSBlbGVtZW50XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghc3JjLnR5cGUgJiYgc3JjLm9yaWdpbmFsRXZlbnQpIHtcclxuICAgICAgICAgICAgc3JjLnR5cGUgPSBzcmMub3JpZ2luYWxFdmVudC50eXBlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhbGxiYWNrKGVsZW1lbnQsIHNyYyBpbnN0YW5jZW9mIGV2ZW50c0VuZ2luZS5FdmVudCA/IHNyYyA6IGV2ZW50c0VuZ2luZS5FdmVudChzcmMpLCBleHRyYVBhcmFtZXRlcnMpXHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIG5vcm1hbGl6ZUV2ZW50QXJndW1lbnRzKGNhbGxiYWNrKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24oc3JjLCBjb25maWcpIHtcclxuICAgICAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgZXZlbnRzRW5naW5lLkV2ZW50KSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IGV2ZW50c0VuZ2luZS5FdmVudChzcmMsIGNvbmZpZylcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFzcmMpIHtcclxuICAgICAgICAgICAgc3JjID0ge31cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKFwic3RyaW5nXCIgPT09IHR5cGVvZiBzcmMpIHtcclxuICAgICAgICAgICAgc3JjID0ge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogc3JjXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFjb25maWcpIHtcclxuICAgICAgICAgICAgY29uZmlnID0ge31cclxuICAgICAgICB9XHJcbiAgICAgICAgY2FsbGJhY2suY2FsbCh0aGlzLCBzcmMsIGNvbmZpZylcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gaXRlcmF0ZShjYWxsYmFjaykge1xyXG4gICAgdmFyIGl0ZXJhdGVFdmVudE5hbWVzID0gZnVuY3Rpb24oZWxlbWVudCwgZXZlbnROYW1lKSB7XHJcbiAgICAgICAgaWYgKGV2ZW50TmFtZSAmJiBldmVudE5hbWUuaW5kZXhPZihcIiBcIikgPiAtMSkge1xyXG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCk7XHJcbiAgICAgICAgICAgIGV2ZW50TmFtZS5zcGxpdChcIiBcIikuZm9yRWFjaCgoZnVuY3Rpb24oZXZlbnROYW1lKSB7XHJcbiAgICAgICAgICAgICAgICBhcmdzWzFdID0gZXZlbnROYW1lO1xyXG4gICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkodGhpcywgYXJncylcclxuICAgICAgICAgICAgfSkpXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkodGhpcywgYXJndW1lbnRzKVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICByZXR1cm4gZnVuY3Rpb24oZWxlbWVudCwgZXZlbnROYW1lKSB7XHJcbiAgICAgICAgaWYgKFwib2JqZWN0XCIgPT09IHR5cGVvZiBldmVudE5hbWUpIHtcclxuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDApO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBuYW1lIGluIGV2ZW50TmFtZSkge1xyXG4gICAgICAgICAgICAgICAgYXJnc1sxXSA9IG5hbWU7XHJcbiAgICAgICAgICAgICAgICBhcmdzW2FyZ3MubGVuZ3RoIC0gMV0gPSBldmVudE5hbWVbbmFtZV07XHJcbiAgICAgICAgICAgICAgICBpdGVyYXRlRXZlbnROYW1lcy5hcHBseSh0aGlzLCBhcmdzKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaXRlcmF0ZUV2ZW50TmFtZXMuYXBwbHkodGhpcywgYXJndW1lbnRzKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gY2FsbE5hdGl2ZU1ldGhvZChldmVudE5hbWUsIGVsZW1lbnQpIHtcclxuICAgIHZhciBuYXRpdmVNZXRob2ROYW1lID0gTkFUSVZFX0VWRU5UU19UT19UUklHR0VSW2V2ZW50TmFtZV0gfHwgZXZlbnROYW1lO1xyXG4gICAgaWYgKGZ1bmN0aW9uKGV2ZW50TmFtZSwgZWxlbWVudCkge1xyXG4gICAgICAgICAgICByZXR1cm4gXCJjbGlja1wiID09PSBldmVudE5hbWUgJiYgXCJhXCIgPT09IGVsZW1lbnQubG9jYWxOYW1lXHJcbiAgICAgICAgfShldmVudE5hbWUsIGVsZW1lbnQpKSB7XHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBpZiAoaXNGdW5jdGlvbihlbGVtZW50W25hdGl2ZU1ldGhvZE5hbWVdKSkge1xyXG4gICAgICAgIHNraXBFdmVudCA9IGV2ZW50TmFtZTtcclxuICAgICAgICBlbGVtZW50W25hdGl2ZU1ldGhvZE5hbWVdKCk7XHJcbiAgICAgICAgc2tpcEV2ZW50ID0gdm9pZCAwXHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNhbGN1bGF0ZVdoaWNoKGV2ZW50KSB7XHJcbiAgICBpZiAoZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGwgPT0gZXZlbnQud2hpY2ggJiYgMCA9PT0gZXZlbnQudHlwZS5pbmRleE9mKFwia2V5XCIpXHJcbiAgICAgICAgfShldmVudCkpIHtcclxuICAgICAgICByZXR1cm4gbnVsbCAhPSBldmVudC5jaGFyQ29kZSA/IGV2ZW50LmNoYXJDb2RlIDogZXZlbnQua2V5Q29kZVxyXG4gICAgfVxyXG4gICAgaWYgKGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybiAhZXZlbnQud2hpY2ggJiYgdm9pZCAwICE9PSBldmVudC5idXR0b24gJiYgL14oPzptb3VzZXxwb2ludGVyfGNvbnRleHRtZW51fGRyYWd8ZHJvcCl8Y2xpY2svLnRlc3QoZXZlbnQudHlwZSlcclxuICAgICAgICB9KGV2ZW50KSkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIDE6IDEsXHJcbiAgICAgICAgICAgIDI6IDMsXHJcbiAgICAgICAgICAgIDM6IDEsXHJcbiAgICAgICAgICAgIDQ6IDJcclxuICAgICAgICB9IFtldmVudC5idXR0b25dXHJcbiAgICB9XHJcbiAgICByZXR1cm4gZXZlbnQud2hpY2hcclxufVxyXG5cclxuZnVuY3Rpb24gaW5pdEV2ZW50KEV2ZW50Q2xhc3MpIHtcclxuICAgIGlmIChFdmVudENsYXNzKSB7XHJcbiAgICAgICAgZXZlbnRzRW5naW5lLkV2ZW50ID0gRXZlbnRDbGFzcztcclxuICAgICAgICBldmVudHNFbmdpbmUuRXZlbnQucHJvdG90eXBlID0gRXZlbnRDbGFzcy5wcm90b3R5cGVcclxuICAgIH1cclxufVxyXG5pbml0RXZlbnQobm9ybWFsaXplRXZlbnRBcmd1bWVudHMoKGZ1bmN0aW9uKHNyYywgY29uZmlnKSB7XHJcbiAgICB2YXIgdGhhdCA9IHRoaXM7XHJcbiAgICB2YXIgcHJvcGFnYXRpb25TdG9wcGVkID0gZmFsc2U7XHJcbiAgICB2YXIgaW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkID0gZmFsc2U7XHJcbiAgICB2YXIgZGVmYXVsdFByZXZlbnRlZCA9IGZhbHNlO1xyXG4gICAgZXh0ZW5kKHRoYXQsIHNyYyk7XHJcbiAgICBpZiAoc3JjIGluc3RhbmNlb2YgZXZlbnRzRW5naW5lLkV2ZW50IHx8IGhhc1dpbmRvdygpICYmIHNyYyBpbnN0YW5jZW9mIHdpbmRvdy5FdmVudCkge1xyXG4gICAgICAgIHRoYXQub3JpZ2luYWxFdmVudCA9IHNyYztcclxuICAgICAgICB0aGF0LmN1cnJlbnRUYXJnZXQgPSB2b2lkIDBcclxuICAgIH1cclxuICAgIGlmICghKHNyYyBpbnN0YW5jZW9mIGV2ZW50c0VuZ2luZS5FdmVudCkpIHtcclxuICAgICAgICBleHRlbmQodGhhdCwge1xyXG4gICAgICAgICAgICBpc1Byb3BhZ2F0aW9uU3RvcHBlZDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gISEocHJvcGFnYXRpb25TdG9wcGVkIHx8IHRoYXQub3JpZ2luYWxFdmVudCAmJiB0aGF0Lm9yaWdpbmFsRXZlbnQucHJvcGFnYXRpb25TdG9wcGVkKVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzdG9wUHJvcGFnYXRpb246IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgcHJvcGFnYXRpb25TdG9wcGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoYXQub3JpZ2luYWxFdmVudCAmJiB0aGF0Lm9yaWdpbmFsRXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb246IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgIGltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGF0Lm9yaWdpbmFsRXZlbnQgJiYgdGhhdC5vcmlnaW5hbEV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGlzRGVmYXVsdFByZXZlbnRlZDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gISEoZGVmYXVsdFByZXZlbnRlZCB8fCB0aGF0Lm9yaWdpbmFsRXZlbnQgJiYgdGhhdC5vcmlnaW5hbEV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHByZXZlbnREZWZhdWx0OiBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgIGRlZmF1bHRQcmV2ZW50ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhhdC5vcmlnaW5hbEV2ZW50ICYmIHRoYXQub3JpZ2luYWxFdmVudC5wcmV2ZW50RGVmYXVsdCgpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gICAgYWRkUHJvcGVydHkoXCJ3aGljaFwiLCBjYWxjdWxhdGVXaGljaCwgdGhhdCk7XHJcbiAgICBpZiAoMCA9PT0gc3JjLnR5cGUuaW5kZXhPZihcInRvdWNoXCIpKSB7XHJcbiAgICAgICAgZGVsZXRlIGNvbmZpZy5wYWdlWDtcclxuICAgICAgICBkZWxldGUgY29uZmlnLnBhZ2VZXHJcbiAgICB9XHJcbiAgICBleHRlbmQodGhhdCwgY29uZmlnKTtcclxuICAgIHRoYXQuZ3VpZCA9ICsrZ3VpZFxyXG59KSkpO1xyXG5cclxuZnVuY3Rpb24gYWRkUHJvcGVydHkocHJvcE5hbWUsIGhvb2ssIGV2ZW50SW5zdGFuY2UpIHtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShldmVudEluc3RhbmNlIHx8IGV2ZW50c0VuZ2luZS5FdmVudC5wcm90b3R5cGUsIHByb3BOYW1lLCB7XHJcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcclxuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxFdmVudCAmJiBob29rKHRoaXMub3JpZ2luYWxFdmVudClcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNldDogZnVuY3Rpb24odmFsdWUpIHtcclxuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIHByb3BOYW1lLCB7XHJcbiAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWVcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICB9KVxyXG59XHJcbmhvb2tUb3VjaFByb3BzKGFkZFByb3BlcnR5KTtcclxudmFyIGJlZm9yZVNldFN0cmF0ZWd5ID0gQ2FsbGJhY2tzKCk7XHJcbnZhciBhZnRlclNldFN0cmF0ZWd5ID0gQ2FsbGJhY2tzKCk7XHJcbmV2ZW50c0VuZ2luZS5zZXQgPSBmdW5jdGlvbihlbmdpbmUpIHtcclxuICAgIGJlZm9yZVNldFN0cmF0ZWd5LmZpcmUoKTtcclxuICAgIGV2ZW50c0VuZ2luZS5pbmplY3QoZW5naW5lKTtcclxuICAgIGluaXRFdmVudChlbmdpbmUuRXZlbnQpO1xyXG4gICAgYWZ0ZXJTZXRTdHJhdGVneS5maXJlKClcclxufTtcclxuZXZlbnRzRW5naW5lLnN1YnNjcmliZUdsb2JhbCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgYXBwbHlGb3JFYWNoKGFyZ3VtZW50cywgbm9ybWFsaXplT25Bcmd1bWVudHMoKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzO1xyXG4gICAgICAgIGV2ZW50c0VuZ2luZS5vbi5hcHBseSh0aGlzLCBhcmdzKTtcclxuICAgICAgICBiZWZvcmVTZXRTdHJhdGVneS5hZGQoKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICB2YXIgb2ZmQXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3MsIDApO1xyXG4gICAgICAgICAgICBvZmZBcmdzLnNwbGljZSgzLCAxKTtcclxuICAgICAgICAgICAgZXZlbnRzRW5naW5lLm9mZi5hcHBseSh0aGlzLCBvZmZBcmdzKVxyXG4gICAgICAgIH0pKTtcclxuICAgICAgICBhZnRlclNldFN0cmF0ZWd5LmFkZCgoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIGV2ZW50c0VuZ2luZS5vbi5hcHBseSh0aGlzLCBhcmdzKVxyXG4gICAgICAgIH0pKVxyXG4gICAgfSkpKVxyXG59O1xyXG5ldmVudHNFbmdpbmUuZm9yY2VQYXNzaXZlRmFsc2VFdmVudE5hbWVzID0gZm9yY2VQYXNzaXZlRmFsc2VFdmVudE5hbWVzO1xyXG5ldmVudHNFbmdpbmUucGFzc2l2ZUV2ZW50SGFuZGxlcnNTdXBwb3J0ZWQgPSBwYXNzaXZlRXZlbnRIYW5kbGVyc1N1cHBvcnRlZDtcclxuZXhwb3J0IGRlZmF1bHQgZXZlbnRzRW5naW5lO1xyXG4iLCIvKipcclxuICogRGV2RXh0cmVtZSAoZXNtL2V2ZW50cy9jb3JlL2hvb2tfdG91Y2hfcHJvcHMuanMpXHJcbiAqIFZlcnNpb246IDIxLjEuNFxyXG4gKiBCdWlsZCBkYXRlOiBNb24gSnVuIDIxIDIwMjFcclxuICpcclxuICogQ29weXJpZ2h0IChjKSAyMDEyIC0gMjAyMSBEZXZlbG9wZXIgRXhwcmVzcyBJbmMuIEFMTCBSSUdIVFMgUkVTRVJWRURcclxuICogUmVhZCBhYm91dCBEZXZFeHRyZW1lIGxpY2Vuc2luZyBoZXJlOiBodHRwczovL2pzLmRldmV4cHJlc3MuY29tL0xpY2Vuc2luZy9cclxuICovXHJcbnZhciB0b3VjaFByb3BzVG9Ib29rID0gW1wicGFnZVhcIiwgXCJwYWdlWVwiLCBcInNjcmVlblhcIiwgXCJzY3JlZW5ZXCIsIFwiY2xpZW50WFwiLCBcImNsaWVudFlcIl07XHJcbnZhciB0b3VjaFByb3BIb29rID0gZnVuY3Rpb24obmFtZSwgZXZlbnQpIHtcclxuICAgIGlmIChldmVudFtuYW1lXSAmJiAhZXZlbnQudG91Y2hlcyB8fCAhZXZlbnQudG91Y2hlcykge1xyXG4gICAgICAgIHJldHVybiBldmVudFtuYW1lXVxyXG4gICAgfVxyXG4gICAgdmFyIHRvdWNoZXMgPSBldmVudC50b3VjaGVzLmxlbmd0aCA/IGV2ZW50LnRvdWNoZXMgOiBldmVudC5jaGFuZ2VkVG91Y2hlcztcclxuICAgIGlmICghdG91Y2hlcy5sZW5ndGgpIHtcclxuICAgICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIHJldHVybiB0b3VjaGVzWzBdW25hbWVdXHJcbn07XHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XHJcbiAgICB0b3VjaFByb3BzVG9Ib29rLmZvckVhY2goKGZ1bmN0aW9uKG5hbWUpIHtcclxuICAgICAgICBjYWxsYmFjayhuYW1lLCAoZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRvdWNoUHJvcEhvb2sobmFtZSwgZXZlbnQpXHJcbiAgICAgICAgfSkpXHJcbiAgICB9KSwgdGhpcylcclxufVxyXG4iLCIvKipcclxuICogRGV2RXh0cmVtZSAoZXNtL2xvY2FsaXphdGlvbi9jbGRyLWRhdGEvYWNjb3VudGluZ19mb3JtYXRzLmpzKVxyXG4gKiBWZXJzaW9uOiAyMS4xLjRcclxuICogQnVpbGQgZGF0ZTogTW9uIEp1biAyMSAyMDIxXHJcbiAqXHJcbiAqIENvcHlyaWdodCAoYykgMjAxMiAtIDIwMjEgRGV2ZWxvcGVyIEV4cHJlc3MgSW5jLiBBTEwgUklHSFRTIFJFU0VSVkVEXHJcbiAqIFJlYWQgYWJvdXQgRGV2RXh0cmVtZSBsaWNlbnNpbmcgaGVyZTogaHR0cHM6Ly9qcy5kZXZleHByZXNzLmNvbS9MaWNlbnNpbmcvXHJcbiAqL1xyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgICBhZjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJhZi1OQVwiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBhZ3E6IFwiIywjIzAuMDBcXHhhNFwiLFxyXG4gICAgYWs6IFwiXFx4YTQjLCMjMC4wMFwiLFxyXG4gICAgYW06IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIGFyOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcImFyLUFFXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiYXItQkhcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJhci1ESlwiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcImFyLURaXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiYXItRUdcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJhci1FSFwiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcImFyLUVSXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiYXItSUxcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJhci1JUVwiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcImFyLUpPXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiYXItS01cIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJhci1LV1wiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcImFyLUxCXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiYXItTFlcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJhci1NQVwiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcImFyLU1SXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiYXItT01cIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJhci1QU1wiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcImFyLVFBXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiYXItU0FcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJhci1TRFwiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcImFyLVNPXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiYXItU1NcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJhci1TWVwiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcImFyLVREXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiYXItVE5cIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJhci1ZRVwiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBhczogXCJcXHhhNFxceGEwIywjIywjIzAuMDBcIixcclxuICAgIGFzYTogXCIjLCMjMC4wMFxceGEwXFx4YTRcIixcclxuICAgIGFzdDogXCIjLCMjMC4wMFxceGEwXFx4YTRcIixcclxuICAgIGF6OiBcIiMsIyMwLjAwXFx4YTBcXHhhNFwiLFxyXG4gICAgXCJhei1DeXJsXCI6IFwiIywjIzAuMDBcXHhhMFxceGE0XCIsXHJcbiAgICBcImF6LUxhdG5cIjogXCIjLCMjMC4wMFxceGEwXFx4YTRcIixcclxuICAgIGJhczogXCIjLCMjMC4wMFxceGEwXFx4YTRcIixcclxuICAgIGJlOiBcIiMsIyMwLjAwXFx4YTBcXHhhNFwiLFxyXG4gICAgYmVtOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBiZXo6IFwiIywjIzAuMDBcXHhhNFwiLFxyXG4gICAgYmc6IFwiMC4wMFxceGEwXFx4YTQ7KDAuMDBcXHhhMFxceGE0KVwiLFxyXG4gICAgYm06IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIGJuOiBcIiMsIyMsIyMwLjAwXFx4YTQ7KCMsIyMsIyMwLjAwXFx4YTQpXCIsXHJcbiAgICBcImJuLUlOXCI6IFwiIywjIywjIzAuMDBcXHhhNDsoIywjIywjIzAuMDBcXHhhNClcIixcclxuICAgIGJvOiBcIlxceGE0XFx4YTAjLCMjMC4wMFwiLFxyXG4gICAgXCJiby1JTlwiOiBcIlxceGE0XFx4YTAjLCMjMC4wMFwiLFxyXG4gICAgYnI6IFwiIywjIzAuMDBcXHhhMFxceGE0XCIsXHJcbiAgICBicng6IFwiXFx4YTRcXHhhMCMsIyMsIyMwLjAwXCIsXHJcbiAgICBiczogXCIjLCMjMC4wMFxceGEwXFx4YTRcIixcclxuICAgIFwiYnMtQ3lybFwiOiBcIiMsIyMwLjAwXFx4YTBcXHhhNFwiLFxyXG4gICAgXCJicy1MYXRuXCI6IFwiIywjIzAuMDBcXHhhMFxceGE0XCIsXHJcbiAgICBjYTogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiY2EtQURcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiY2EtRVMtVkFMRU5DSUFcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiY2EtRlJcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiY2EtSVRcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIGNjcDogXCIjLCMjLCMjMC4wMFxceGE0OygjLCMjLCMjMC4wMFxceGE0KVwiLFxyXG4gICAgXCJjY3AtSU5cIjogXCIjLCMjLCMjMC4wMFxceGE0OygjLCMjLCMjMC4wMFxceGE0KVwiLFxyXG4gICAgY2U6IFwiIywjIzAuMDBcXHhhMFxceGE0XCIsXHJcbiAgICBjZWI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIGNnZzogXCJcXHhhNCMsIyMwLjAwXCIsXHJcbiAgICBjaHI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIGNrYjogXCJcXHhhNFxceGEwIywjIzAuMDBcIixcclxuICAgIFwiY2tiLUlSXCI6IFwiXFx4YTRcXHhhMCMsIyMwLjAwXCIsXHJcbiAgICBjczogXCIjLCMjMC4wMFxceGEwXFx4YTRcIixcclxuICAgIGN5OiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBkYTogXCIjLCMjMC4wMFxceGEwXFx4YTRcIixcclxuICAgIFwiZGEtR0xcIjogXCIjLCMjMC4wMFxceGEwXFx4YTRcIixcclxuICAgIGRhdjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgZGU6IFwiIywjIzAuMDBcXHhhMFxceGE0XCIsXHJcbiAgICBcImRlLUFUXCI6IFwiIywjIzAuMDBcXHhhMFxceGE0XCIsXHJcbiAgICBcImRlLUJFXCI6IFwiIywjIzAuMDBcXHhhMFxceGE0XCIsXHJcbiAgICBcImRlLUNIXCI6IFwiIywjIzAuMDBcXHhhMFxceGE0XCIsXHJcbiAgICBcImRlLUlUXCI6IFwiIywjIzAuMDBcXHhhMFxceGE0XCIsXHJcbiAgICBcImRlLUxJXCI6IFwiIywjIzAuMDBcXHhhMFxceGE0XCIsXHJcbiAgICBcImRlLUxVXCI6IFwiIywjIzAuMDBcXHhhMFxceGE0XCIsXHJcbiAgICBkamU6IFwiIywjIzAuMDBcXHhhNFwiLFxyXG4gICAgZG9pOiBcIlxceGE0IywjIzAuMDBcIixcclxuICAgIGRzYjogXCIjLCMjMC4wMFxceGEwXFx4YTRcIixcclxuICAgIGR1YTogXCIjLCMjMC4wMFxceGEwXFx4YTRcIixcclxuICAgIGR5bzogXCIjLCMjMC4wMFxceGEwXFx4YTRcIixcclxuICAgIGR6OiBcIlxceGE0IywjIywjIzAuMDBcIixcclxuICAgIGVidTogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgZWU6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiZWUtVEdcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgZWw6IFwiIywjIzAuMDBcXHhhMFxceGE0XCIsXHJcbiAgICBcImVsLUNZXCI6IFwiIywjIzAuMDBcXHhhMFxceGE0XCIsXHJcbiAgICBlbjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJlbi0wMDFcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJlbi0xNTBcIjogXCIjLCMjMC4wMFxceGEwXFx4YTRcIixcclxuICAgIFwiZW4tQUVcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJlbi1BR1wiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcImVuLUFJXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiZW4tQVNcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJlbi1BVFwiOiBcIlxceGE0XFx4YTAjLCMjMC4wMFwiLFxyXG4gICAgXCJlbi1BVVwiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcImVuLUJCXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiZW4tQkVcIjogXCIjLCMjMC4wMFxceGEwXFx4YTRcIixcclxuICAgIFwiZW4tQklcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJlbi1CTVwiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcImVuLUJTXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiZW4tQldcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJlbi1CWlwiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcImVuLUNBXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiZW4tQ0NcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJlbi1DSFwiOiBcIlxceGE0XFx4YTAjLCMjMC4wMDtcXHhhNC0jLCMjMC4wMFwiLFxyXG4gICAgXCJlbi1DS1wiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcImVuLUNNXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiZW4tQ1hcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJlbi1DWVwiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcImVuLURFXCI6IFwiIywjIzAuMDBcXHhhMFxceGE0XCIsXHJcbiAgICBcImVuLURHXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiZW4tREtcIjogXCIjLCMjMC4wMFxceGEwXFx4YTRcIixcclxuICAgIFwiZW4tRE1cIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJlbi1FUlwiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcImVuLUZJXCI6IFwiIywjIzAuMDBcXHhhMFxceGE0XCIsXHJcbiAgICBcImVuLUZKXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiZW4tRktcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJlbi1GTVwiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcImVuLUdCXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiZW4tR0RcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJlbi1HR1wiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcImVuLUdIXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiZW4tR0lcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJlbi1HTVwiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcImVuLUdVXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiZW4tR1lcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJlbi1IS1wiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcImVuLUlFXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiZW4tSUxcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJlbi1JTVwiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcImVuLUlOXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiZW4tSU9cIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJlbi1KRVwiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcImVuLUpNXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiZW4tS0VcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJlbi1LSVwiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcImVuLUtOXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiZW4tS1lcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJlbi1MQ1wiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcImVuLUxSXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiZW4tTFNcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJlbi1NR1wiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcImVuLU1IXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiZW4tTU9cIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJlbi1NUFwiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcImVuLU1TXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiZW4tTVRcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJlbi1NVVwiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcImVuLU1XXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiZW4tTVlcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJlbi1OQVwiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcImVuLU5GXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiZW4tTkdcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJlbi1OTFwiOiBcIlxceGE0XFx4YTAjLCMjMC4wMDsoXFx4YTRcXHhhMCMsIyMwLjAwKVwiLFxyXG4gICAgXCJlbi1OUlwiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcImVuLU5VXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiZW4tTlpcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJlbi1QR1wiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcImVuLVBIXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiZW4tUEtcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJlbi1QTlwiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcImVuLVBSXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiZW4tUFdcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJlbi1SV1wiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcImVuLVNCXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiZW4tU0NcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJlbi1TRFwiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcImVuLVNFXCI6IFwiIywjIzAuMDBcXHhhMFxceGE0XCIsXHJcbiAgICBcImVuLVNHXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiZW4tU0hcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJlbi1TSVwiOiBcIiMsIyMwLjAwXFx4YTBcXHhhNDsoIywjIzAuMDBcXHhhMFxceGE0KVwiLFxyXG4gICAgXCJlbi1TTFwiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcImVuLVNTXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiZW4tU1hcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJlbi1TWlwiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcImVuLVRDXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiZW4tVEtcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJlbi1UT1wiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcImVuLVRUXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiZW4tVFZcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJlbi1UWlwiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcImVuLVVHXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiZW4tVU1cIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJlbi1VUy1QT1NJWFwiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcImVuLVZDXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiZW4tVkdcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJlbi1WSVwiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcImVuLVZVXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiZW4tV1NcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJlbi1aQVwiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcImVuLVpNXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiZW4tWldcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgZW86IFwiXFx4YTRcXHhhMCMsIyMwLjAwXCIsXHJcbiAgICBlczogXCIjLCMjMC4wMFxceGEwXFx4YTRcIixcclxuICAgIFwiZXMtNDE5XCI6IFwiXFx4YTQjLCMjMC4wMFwiLFxyXG4gICAgXCJlcy1BUlwiOiBcIlxceGE0XFx4YTAjLCMjMC4wMDsoXFx4YTRcXHhhMCMsIyMwLjAwKVwiLFxyXG4gICAgXCJlcy1CT1wiOiBcIlxceGE0IywjIzAuMDBcIixcclxuICAgIFwiZXMtQlJcIjogXCJcXHhhNCMsIyMwLjAwXCIsXHJcbiAgICBcImVzLUJaXCI6IFwiXFx4YTQjLCMjMC4wMFwiLFxyXG4gICAgXCJlcy1DTFwiOiBcIlxceGE0IywjIzAuMDBcIixcclxuICAgIFwiZXMtQ09cIjogXCJcXHhhNCMsIyMwLjAwXCIsXHJcbiAgICBcImVzLUNSXCI6IFwiXFx4YTQjLCMjMC4wMFwiLFxyXG4gICAgXCJlcy1DVVwiOiBcIlxceGE0IywjIzAuMDBcIixcclxuICAgIFwiZXMtRE9cIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJlcy1FQVwiOiBcIiMsIyMwLjAwXFx4YTBcXHhhNFwiLFxyXG4gICAgXCJlcy1FQ1wiOiBcIlxceGE0IywjIzAuMDBcIixcclxuICAgIFwiZXMtR1FcIjogXCIjLCMjMC4wMFxceGEwXFx4YTRcIixcclxuICAgIFwiZXMtR1RcIjogXCJcXHhhNCMsIyMwLjAwXCIsXHJcbiAgICBcImVzLUhOXCI6IFwiXFx4YTQjLCMjMC4wMFwiLFxyXG4gICAgXCJlcy1JQ1wiOiBcIiMsIyMwLjAwXFx4YTBcXHhhNFwiLFxyXG4gICAgXCJlcy1NWFwiOiBcIlxceGE0IywjIzAuMDBcIixcclxuICAgIFwiZXMtTklcIjogXCJcXHhhNCMsIyMwLjAwXCIsXHJcbiAgICBcImVzLVBBXCI6IFwiXFx4YTQjLCMjMC4wMFwiLFxyXG4gICAgXCJlcy1QRVwiOiBcIlxceGE0IywjIzAuMDBcIixcclxuICAgIFwiZXMtUEhcIjogXCIjLCMjMC4wMFxceGEwXFx4YTRcIixcclxuICAgIFwiZXMtUFJcIjogXCJcXHhhNCMsIyMwLjAwXCIsXHJcbiAgICBcImVzLVBZXCI6IFwiXFx4YTQjLCMjMC4wMFwiLFxyXG4gICAgXCJlcy1TVlwiOiBcIlxceGE0IywjIzAuMDBcIixcclxuICAgIFwiZXMtVVNcIjogXCJcXHhhNCMsIyMwLjAwXCIsXHJcbiAgICBcImVzLVVZXCI6IFwiXFx4YTRcXHhhMCMsIyMwLjAwOyhcXHhhNFxceGEwIywjIzAuMDApXCIsXHJcbiAgICBcImVzLVZFXCI6IFwiXFx4YTQjLCMjMC4wMFwiLFxyXG4gICAgZXQ6IFwiIywjIzAuMDBcXHhhMFxceGE0OygjLCMjMC4wMFxceGEwXFx4YTQpXCIsXHJcbiAgICBldTogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIGV3bzogXCIjLCMjMC4wMFxceGEwXFx4YTRcIixcclxuICAgIGZhOiBcIlxcdTIwMGVcXHhhNFxceGEwIywjIzAuMDA7XFx1MjAwZShcXHhhNFxceGEwIywjIzAuMDApXCIsXHJcbiAgICBcImZhLUFGXCI6IFwiXFx4YTRcXHhhMCMsIyMwLjAwO1xcdTIwMGUoXFx4YTRcXHhhMCMsIyMwLjAwKVwiLFxyXG4gICAgZmY6IFwiIywjIzAuMDBcXHhhMFxceGE0XCIsXHJcbiAgICBcImZmLUFkbG1cIjogXCJcXHhhNFxceGEwIywjIzAuMDBcIixcclxuICAgIFwiZmYtQWRsbS1CRlwiOiBcIlxceGE0XFx4YTAjLCMjMC4wMFwiLFxyXG4gICAgXCJmZi1BZGxtLUNNXCI6IFwiXFx4YTRcXHhhMCMsIyMwLjAwXCIsXHJcbiAgICBcImZmLUFkbG0tR0hcIjogXCJcXHhhNFxceGEwIywjIzAuMDBcIixcclxuICAgIFwiZmYtQWRsbS1HTVwiOiBcIlxceGE0XFx4YTAjLCMjMC4wMFwiLFxyXG4gICAgXCJmZi1BZGxtLUdXXCI6IFwiXFx4YTRcXHhhMCMsIyMwLjAwXCIsXHJcbiAgICBcImZmLUFkbG0tTFJcIjogXCJcXHhhNFxceGEwIywjIzAuMDBcIixcclxuICAgIFwiZmYtQWRsbS1NUlwiOiBcIlxceGE0XFx4YTAjLCMjMC4wMFwiLFxyXG4gICAgXCJmZi1BZGxtLU5FXCI6IFwiXFx4YTRcXHhhMCMsIyMwLjAwXCIsXHJcbiAgICBcImZmLUFkbG0tTkdcIjogXCJcXHhhNFxceGEwIywjIzAuMDBcIixcclxuICAgIFwiZmYtQWRsbS1TTFwiOiBcIlxceGE0XFx4YTAjLCMjMC4wMFwiLFxyXG4gICAgXCJmZi1BZGxtLVNOXCI6IFwiXFx4YTRcXHhhMCMsIyMwLjAwXCIsXHJcbiAgICBcImZmLUxhdG5cIjogXCIjLCMjMC4wMFxceGEwXFx4YTRcIixcclxuICAgIFwiZmYtTGF0bi1CRlwiOiBcIiMsIyMwLjAwXFx4YTBcXHhhNFwiLFxyXG4gICAgXCJmZi1MYXRuLUNNXCI6IFwiIywjIzAuMDBcXHhhMFxceGE0XCIsXHJcbiAgICBcImZmLUxhdG4tR0hcIjogXCIjLCMjMC4wMFxceGEwXFx4YTRcIixcclxuICAgIFwiZmYtTGF0bi1HTVwiOiBcIiMsIyMwLjAwXFx4YTBcXHhhNFwiLFxyXG4gICAgXCJmZi1MYXRuLUdOXCI6IFwiIywjIzAuMDBcXHhhMFxceGE0XCIsXHJcbiAgICBcImZmLUxhdG4tR1dcIjogXCIjLCMjMC4wMFxceGEwXFx4YTRcIixcclxuICAgIFwiZmYtTGF0bi1MUlwiOiBcIiMsIyMwLjAwXFx4YTBcXHhhNFwiLFxyXG4gICAgXCJmZi1MYXRuLU1SXCI6IFwiIywjIzAuMDBcXHhhMFxceGE0XCIsXHJcbiAgICBcImZmLUxhdG4tTkVcIjogXCIjLCMjMC4wMFxceGEwXFx4YTRcIixcclxuICAgIFwiZmYtTGF0bi1OR1wiOiBcIiMsIyMwLjAwXFx4YTBcXHhhNFwiLFxyXG4gICAgXCJmZi1MYXRuLVNMXCI6IFwiIywjIzAuMDBcXHhhMFxceGE0XCIsXHJcbiAgICBmaTogXCIjLCMjMC4wMFxceGEwXFx4YTRcIixcclxuICAgIGZpbDogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgZm86IFwiIywjIzAuMDBcXHhhMFxceGE0OygjLCMjMC4wMFxceGEwXFx4YTQpXCIsXHJcbiAgICBcImZvLURLXCI6IFwiIywjIzAuMDBcXHhhMFxceGE0OygjLCMjMC4wMFxceGEwXFx4YTQpXCIsXHJcbiAgICBmcjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItQkVcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItQkZcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItQklcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItQkpcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItQkxcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItQ0FcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItQ0RcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItQ0ZcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItQ0dcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItQ0hcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItQ0lcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItQ01cIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItREpcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItRFpcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItR0FcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItR0ZcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItR05cIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItR1BcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItR1FcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItSFRcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItS01cIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItTFVcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItTUFcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItTUNcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItTUZcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItTUdcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItTUxcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItTVFcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItTVJcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItTVVcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItTkNcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItTkVcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItUEZcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItUE1cIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItUkVcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItUldcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItU0NcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItU05cIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItU1lcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItVERcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItVEdcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItVE5cIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItVlVcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItV0ZcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItWVRcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIGZ1cjogXCJcXHhhNFxceGEwIywjIzAuMDBcIixcclxuICAgIGZ5OiBcIlxceGE0XFx4YTAjLCMjMC4wMDsoXFx4YTRcXHhhMCMsIyMwLjAwKVwiLFxyXG4gICAgZ2E6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiZ2EtR0JcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgZ2Q6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIGdsOiBcIiMsIyMwLjAwXFx4YTBcXHhhNFwiLFxyXG4gICAgZ3N3OiBcIiMsIyMwLjAwXFx4YTBcXHhhNFwiLFxyXG4gICAgXCJnc3ctRlJcIjogXCIjLCMjMC4wMFxceGEwXFx4YTRcIixcclxuICAgIFwiZ3N3LUxJXCI6IFwiIywjIzAuMDBcXHhhMFxceGE0XCIsXHJcbiAgICBndTogXCJcXHhhNCMsIyMsIyMwLjAwOyhcXHhhNCMsIyMsIyMwLjAwKVwiLFxyXG4gICAgZ3V6OiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBndjogXCJcXHhhNCMsIyMwLjAwXCIsXHJcbiAgICBoYTogXCJcXHhhNFxceGEwIywjIzAuMDBcIixcclxuICAgIFwiaGEtR0hcIjogXCJcXHhhNFxceGEwIywjIzAuMDBcIixcclxuICAgIFwiaGEtTkVcIjogXCJcXHhhNFxceGEwIywjIzAuMDBcIixcclxuICAgIGhhdzogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgaGU6IFwiIywjIzAuMDBcXHhhMFxceGE0XCIsXHJcbiAgICBoaTogXCJcXHhhNCMsIyMsIyMwLjAwXCIsXHJcbiAgICBocjogXCIjLCMjMC4wMFxceGEwXFx4YTRcIixcclxuICAgIFwiaHItQkFcIjogXCIjLCMjMC4wMFxceGEwXFx4YTRcIixcclxuICAgIGhzYjogXCIjLCMjMC4wMFxceGEwXFx4YTRcIixcclxuICAgIGh1OiBcIiMsIyMwLjAwXFx4YTBcXHhhNFwiLFxyXG4gICAgaHk6IFwiIywjIzAuMDBcXHhhMFxceGE0XCIsXHJcbiAgICBpYTogXCJcXHhhNFxceGEwIywjIzAuMDA7KFxceGE0XFx4YTAjLCMjMC4wMClcIixcclxuICAgIGlkOiBcIlxceGE0IywjIzAuMDBcIixcclxuICAgIGlnOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBpaTogXCJcXHhhNFxceGEwIywjIzAuMDBcIixcclxuICAgIGlzOiBcIiMsIyMwLjAwXFx4YTBcXHhhNFwiLFxyXG4gICAgaXQ6IFwiIywjIzAuMDBcXHhhMFxceGE0XCIsXHJcbiAgICBcIml0LUNIXCI6IFwiIywjIzAuMDBcXHhhMFxceGE0XCIsXHJcbiAgICBcIml0LVNNXCI6IFwiIywjIzAuMDBcXHhhMFxceGE0XCIsXHJcbiAgICBcIml0LVZBXCI6IFwiIywjIzAuMDBcXHhhMFxceGE0XCIsXHJcbiAgICBqYTogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgamdvOiBcIlxceGE0XFx4YTAjLCMjMC4wMFwiLFxyXG4gICAgam1jOiBcIlxceGE0IywjIzAuMDBcIixcclxuICAgIGp2OiBcIlxceGE0XFx4YTAjLCMjMC4wMFwiLFxyXG4gICAga2E6IFwiIywjIzAuMDBcXHhhMFxceGE0XCIsXHJcbiAgICBrYWI6IFwiIywjIzAuMDBcXHhhNFwiLFxyXG4gICAga2FtOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBrZGU6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIGtlYTogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIGtocTogXCIjLCMjMC4wMFxceGE0XCIsXHJcbiAgICBraTogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAga2s6IFwiIywjIzAuMDBcXHhhMFxceGE0XCIsXHJcbiAgICBra2o6IFwiXFx4YTRcXHhhMCMsIyMwLjAwXCIsXHJcbiAgICBrbDogXCJcXHhhNCMsIyMwLjAwO1xceGE0LSMsIyMwLjAwXCIsXHJcbiAgICBrbG46IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIGttOiBcIiMsIyMwLjAwXFx4YTQ7KCMsIyMwLjAwXFx4YTQpXCIsXHJcbiAgICBrbjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAga286IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwia28tS1BcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAga29rOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBrczogXCJcXHhhNFxceGEwIywjIywjIzAuMDBcIixcclxuICAgIFwia3MtQXJhYlwiOiBcIlxceGE0XFx4YTAjLCMjLCMjMC4wMFwiLFxyXG4gICAga3NiOiBcIiMsIyMwLjAwXFx4YTRcIixcclxuICAgIGtzZjogXCIjLCMjMC4wMFxceGEwXFx4YTRcIixcclxuICAgIGtzaDogXCIjLCMjMC4wMFxceGEwXFx4YTRcIixcclxuICAgIGt1OiBcIiMsIyMwLjAwXFx4YTBcXHhhNDsoIywjIzAuMDBcXHhhMFxceGE0KVwiLFxyXG4gICAga3c6IFwiXFx4YTQjLCMjMC4wMFwiLFxyXG4gICAga3k6IFwiIywjIzAuMDBcXHhhMFxceGE0XCIsXHJcbiAgICBsYWc6IFwiXFx4YTRcXHhhMCMsIyMwLjAwXCIsXHJcbiAgICBsYjogXCIjLCMjMC4wMFxceGEwXFx4YTRcIixcclxuICAgIGxnOiBcIiMsIyMwLjAwXFx4YTRcIixcclxuICAgIGxrdDogXCJcXHhhNFxceGEwIywjIzAuMDBcIixcclxuICAgIGxuOiBcIiMsIyMwLjAwXFx4YTBcXHhhNFwiLFxyXG4gICAgXCJsbi1BT1wiOiBcIiMsIyMwLjAwXFx4YTBcXHhhNFwiLFxyXG4gICAgXCJsbi1DRlwiOiBcIiMsIyMwLjAwXFx4YTBcXHhhNFwiLFxyXG4gICAgXCJsbi1DR1wiOiBcIiMsIyMwLjAwXFx4YTBcXHhhNFwiLFxyXG4gICAgbG86IFwiXFx4YTQjLCMjMC4wMDtcXHhhNC0jLCMjMC4wMFwiLFxyXG4gICAgbHJjOiBcIlxceGE0XFx4YTAjLCMjMC4wMFwiLFxyXG4gICAgXCJscmMtSVFcIjogXCJcXHhhNFxceGEwIywjIzAuMDBcIixcclxuICAgIGx0OiBcIiMsIyMwLjAwXFx4YTBcXHhhNFwiLFxyXG4gICAgbHU6IFwiIywjIzAuMDBcXHhhNFwiLFxyXG4gICAgbHVvOiBcIiMsIyMwLjAwXFx4YTRcIixcclxuICAgIGx1eTogXCJcXHhhNCMsIyMwLjAwO1xceGE0LVxceGEwIywjIzAuMDBcIixcclxuICAgIGx2OiBcIiMsIyMwLjAwXFx4YTBcXHhhNFwiLFxyXG4gICAgbWFpOiBcIlxceGE0XFx4YTAjLCMjMC4wMFwiLFxyXG4gICAgbWFzOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcIm1hcy1UWlwiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBtZXI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIG1mZTogXCJcXHhhNFxceGEwIywjIzAuMDBcIixcclxuICAgIG1nOiBcIlxceGE0IywjIzAuMDBcIixcclxuICAgIG1naDogXCJcXHhhNFxceGEwIywjIzAuMDBcIixcclxuICAgIG1nbzogXCJcXHhhNFxceGEwIywjIzAuMDBcIixcclxuICAgIG1pOiBcIlxceGE0XFx4YTAjLCMjMC4wMFwiLFxyXG4gICAgbWs6IFwiIywjIzAuMDBcXHhhMFxceGE0XCIsXHJcbiAgICBtbDogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgbW46IFwiXFx4YTRcXHhhMCMsIyMwLjAwXCIsXHJcbiAgICBtbmk6IFwiXFx4YTRcXHhhMCMsIyMwLjAwXCIsXHJcbiAgICBcIm1uaS1CZW5nXCI6IFwiXFx4YTRcXHhhMCMsIyMwLjAwXCIsXHJcbiAgICBtcjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgbXM6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwibXMtQk5cIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJtcy1JRFwiOiBcIlxceGE0IywjIzAuMDBcIixcclxuICAgIFwibXMtU0dcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgbXQ6IFwiXFx4YTQjLCMjMC4wMFwiLFxyXG4gICAgbXVhOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBteTogXCJcXHhhNFxceGEwIywjIzAuMDBcIixcclxuICAgIG16bjogXCJcXHhhNFxceGEwIywjIzAuMDBcIixcclxuICAgIG5hcTogXCJcXHhhNCMsIyMwLjAwXCIsXHJcbiAgICBuYjogXCJcXHhhNFxceGEwIywjIzAuMDBcIixcclxuICAgIFwibmItU0pcIjogXCJcXHhhNFxceGEwIywjIzAuMDBcIixcclxuICAgIG5kOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBuZHM6IFwiXFx4YTRcXHhhMCMsIyMwLjAwXCIsXHJcbiAgICBcIm5kcy1OTFwiOiBcIlxceGE0XFx4YTAjLCMjMC4wMFwiLFxyXG4gICAgbmU6IFwiXFx4YTRcXHhhMCMsIyMsIyMwLjAwXCIsXHJcbiAgICBcIm5lLUlOXCI6IFwiXFx4YTRcXHhhMCMsIyMsIyMwLjAwXCIsXHJcbiAgICBubDogXCJcXHhhNFxceGEwIywjIzAuMDA7KFxceGE0XFx4YTAjLCMjMC4wMClcIixcclxuICAgIFwibmwtQVdcIjogXCJcXHhhNFxceGEwIywjIzAuMDA7KFxceGE0XFx4YTAjLCMjMC4wMClcIixcclxuICAgIFwibmwtQkVcIjogXCJcXHhhNFxceGEwIywjIzAuMDA7KFxceGE0XFx4YTAjLCMjMC4wMClcIixcclxuICAgIFwibmwtQlFcIjogXCJcXHhhNFxceGEwIywjIzAuMDA7KFxceGE0XFx4YTAjLCMjMC4wMClcIixcclxuICAgIFwibmwtQ1dcIjogXCJcXHhhNFxceGEwIywjIzAuMDA7KFxceGE0XFx4YTAjLCMjMC4wMClcIixcclxuICAgIFwibmwtU1JcIjogXCJcXHhhNFxceGEwIywjIzAuMDA7KFxceGE0XFx4YTAjLCMjMC4wMClcIixcclxuICAgIFwibmwtU1hcIjogXCJcXHhhNFxceGEwIywjIzAuMDA7KFxceGE0XFx4YTAjLCMjMC4wMClcIixcclxuICAgIG5tZzogXCIjLCMjMC4wMFxceGEwXFx4YTRcIixcclxuICAgIG5uOiBcIiMsIyMwLjAwXFx4YTBcXHhhNFwiLFxyXG4gICAgbm5oOiBcIlxceGE0XFx4YTAjLCMjMC4wMFwiLFxyXG4gICAgbm86IFwiXFx4YTRcXHhhMCMsIyMwLjAwXCIsXHJcbiAgICBudXM6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIG55bjogXCJcXHhhNCMsIyMwLjAwXCIsXHJcbiAgICBvbTogXCJcXHhhNCMsIyMwLjAwXCIsXHJcbiAgICBcIm9tLUtFXCI6IFwiXFx4YTQjLCMjMC4wMFwiLFxyXG4gICAgb3I6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIG9zOiBcIlxceGE0XFx4YTAjLCMjMC4wMFwiLFxyXG4gICAgXCJvcy1SVVwiOiBcIlxceGE0XFx4YTAjLCMjMC4wMFwiLFxyXG4gICAgcGE6IFwiXFx4YTRcXHhhMCMsIyMwLjAwXCIsXHJcbiAgICBcInBhLUFyYWJcIjogXCJcXHhhNFxceGEwIywjIzAuMDBcIixcclxuICAgIFwicGEtR3VydVwiOiBcIlxceGE0XFx4YTAjLCMjMC4wMFwiLFxyXG4gICAgcGNtOiBcIlxceGE0IywjIzAuMDBcIixcclxuICAgIHBsOiBcIiMsIyMwLjAwXFx4YTBcXHhhNDsoIywjIzAuMDBcXHhhMFxceGE0KVwiLFxyXG4gICAgcHM6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwicHMtUEtcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgcHQ6IFwiXFx4YTRcXHhhMCMsIyMwLjAwXCIsXHJcbiAgICBcInB0LUFPXCI6IFwiIywjIzAuMDBcXHhhMFxceGE0OygjLCMjMC4wMFxceGEwXFx4YTQpXCIsXHJcbiAgICBcInB0LUNIXCI6IFwiIywjIzAuMDBcXHhhMFxceGE0OygjLCMjMC4wMFxceGEwXFx4YTQpXCIsXHJcbiAgICBcInB0LUNWXCI6IFwiIywjIzAuMDBcXHhhMFxceGE0OygjLCMjMC4wMFxceGEwXFx4YTQpXCIsXHJcbiAgICBcInB0LUdRXCI6IFwiIywjIzAuMDBcXHhhMFxceGE0OygjLCMjMC4wMFxceGEwXFx4YTQpXCIsXHJcbiAgICBcInB0LUdXXCI6IFwiIywjIzAuMDBcXHhhMFxceGE0OygjLCMjMC4wMFxceGEwXFx4YTQpXCIsXHJcbiAgICBcInB0LUxVXCI6IFwiIywjIzAuMDBcXHhhMFxceGE0OygjLCMjMC4wMFxceGEwXFx4YTQpXCIsXHJcbiAgICBcInB0LU1PXCI6IFwiIywjIzAuMDBcXHhhMFxceGE0OygjLCMjMC4wMFxceGEwXFx4YTQpXCIsXHJcbiAgICBcInB0LU1aXCI6IFwiIywjIzAuMDBcXHhhMFxceGE0OygjLCMjMC4wMFxceGEwXFx4YTQpXCIsXHJcbiAgICBcInB0LVBUXCI6IFwiIywjIzAuMDBcXHhhMFxceGE0OygjLCMjMC4wMFxceGEwXFx4YTQpXCIsXHJcbiAgICBcInB0LVNUXCI6IFwiIywjIzAuMDBcXHhhMFxceGE0OygjLCMjMC4wMFxceGEwXFx4YTQpXCIsXHJcbiAgICBcInB0LVRMXCI6IFwiIywjIzAuMDBcXHhhMFxceGE0OygjLCMjMC4wMFxceGEwXFx4YTQpXCIsXHJcbiAgICBxdTogXCJcXHhhNFxceGEwIywjIzAuMDBcIixcclxuICAgIFwicXUtQk9cIjogXCJcXHhhNFxceGEwIywjIzAuMDBcIixcclxuICAgIFwicXUtRUNcIjogXCJcXHhhNFxceGEwIywjIzAuMDBcIixcclxuICAgIHJtOiBcIiMsIyMwLjAwXFx4YTBcXHhhNFwiLFxyXG4gICAgcm46IFwiIywjIzAuMDBcXHhhNFwiLFxyXG4gICAgcm86IFwiIywjIzAuMDBcXHhhMFxceGE0OygjLCMjMC4wMFxceGEwXFx4YTQpXCIsXHJcbiAgICBcInJvLU1EXCI6IFwiIywjIzAuMDBcXHhhMFxceGE0OygjLCMjMC4wMFxceGEwXFx4YTQpXCIsXHJcbiAgICByb2Y6IFwiXFx4YTQjLCMjMC4wMFwiLFxyXG4gICAgcm9vdDogXCJcXHhhNFxceGEwIywjIzAuMDBcIixcclxuICAgIHJ1OiBcIiMsIyMwLjAwXFx4YTBcXHhhNFwiLFxyXG4gICAgXCJydS1CWVwiOiBcIiMsIyMwLjAwXFx4YTBcXHhhNFwiLFxyXG4gICAgXCJydS1LR1wiOiBcIiMsIyMwLjAwXFx4YTBcXHhhNFwiLFxyXG4gICAgXCJydS1LWlwiOiBcIiMsIyMwLjAwXFx4YTBcXHhhNFwiLFxyXG4gICAgXCJydS1NRFwiOiBcIiMsIyMwLjAwXFx4YTBcXHhhNFwiLFxyXG4gICAgXCJydS1VQVwiOiBcIiMsIyMwLjAwXFx4YTBcXHhhNFwiLFxyXG4gICAgcnc6IFwiXFx4YTRcXHhhMCMsIyMwLjAwXCIsXHJcbiAgICByd2s6IFwiIywjIzAuMDBcXHhhNFwiLFxyXG4gICAgc2E6IFwiXFx4YTRcXHhhMCMsIyMwLjAwXCIsXHJcbiAgICBzYWg6IFwiIywjIzAuMDBcXHhhMFxceGE0XCIsXHJcbiAgICBzYXE6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIHNhdDogXCJcXHhhNFxceGEwIywjIzAuMDBcIixcclxuICAgIFwic2F0LU9sY2tcIjogXCJcXHhhNFxceGEwIywjIzAuMDBcIixcclxuICAgIHNicDogXCIjLCMjMC4wMFxceGE0XCIsXHJcbiAgICBzZDogXCJcXHhhNFxceGEwIywjIzAuMDBcIixcclxuICAgIFwic2QtQXJhYlwiOiBcIlxceGE0XFx4YTAjLCMjMC4wMFwiLFxyXG4gICAgXCJzZC1EZXZhXCI6IFwiXFx4YTRcXHhhMCMsIyMwLjAwXCIsXHJcbiAgICBzZTogXCIjLCMjMC4wMFxceGEwXFx4YTRcIixcclxuICAgIFwic2UtRklcIjogXCIjLCMjMC4wMFxceGEwXFx4YTRcIixcclxuICAgIFwic2UtU0VcIjogXCIjLCMjMC4wMFxceGEwXFx4YTRcIixcclxuICAgIHNlaDogXCIjLCMjMC4wMFxceGE0XCIsXHJcbiAgICBzZXM6IFwiIywjIzAuMDBcXHhhNFwiLFxyXG4gICAgc2c6IFwiXFx4YTQjLCMjMC4wMDtcXHhhNC0jLCMjMC4wMFwiLFxyXG4gICAgc2hpOiBcIiMsIyMwLjAwXFx4YTRcIixcclxuICAgIFwic2hpLUxhdG5cIjogXCIjLCMjMC4wMFxceGE0XCIsXHJcbiAgICBcInNoaS1UZm5nXCI6IFwiIywjIzAuMDBcXHhhNFwiLFxyXG4gICAgc2k6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIHNrOiBcIiMsIyMwLjAwXFx4YTBcXHhhNDsoIywjIzAuMDBcXHhhMFxceGE0KVwiLFxyXG4gICAgc2w6IFwiIywjIzAuMDBcXHhhMFxceGE0OygjLCMjMC4wMFxceGEwXFx4YTQpXCIsXHJcbiAgICBzbW46IFwiIywjIzAuMDBcXHhhMFxceGE0XCIsXHJcbiAgICBzbjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgc286IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwic28tREpcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJzby1FVFwiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcInNvLUtFXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIHNxOiBcIiMsIyMwLjAwXFx4YTBcXHhhNDsoIywjIzAuMDBcXHhhMFxceGE0KVwiLFxyXG4gICAgXCJzcS1NS1wiOiBcIiMsIyMwLjAwXFx4YTBcXHhhNDsoIywjIzAuMDBcXHhhMFxceGE0KVwiLFxyXG4gICAgXCJzcS1YS1wiOiBcIiMsIyMwLjAwXFx4YTBcXHhhNDsoIywjIzAuMDBcXHhhMFxceGE0KVwiLFxyXG4gICAgc3I6IFwiIywjIzAuMDBcXHhhMFxceGE0OygjLCMjMC4wMFxceGEwXFx4YTQpXCIsXHJcbiAgICBcInNyLUN5cmxcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwic3ItQ3lybC1CQVwiOiBcIiMsIyMwLjAwXFx4YTBcXHhhNDsoIywjIzAuMDBcXHhhMFxceGE0KVwiLFxyXG4gICAgXCJzci1DeXJsLU1FXCI6IFwiIywjIzAuMDBcXHhhMFxceGE0OygjLCMjMC4wMFxceGEwXFx4YTQpXCIsXHJcbiAgICBcInNyLUN5cmwtWEtcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwic3ItTGF0blwiOiBcIiMsIyMwLjAwXFx4YTBcXHhhNDsoIywjIzAuMDBcXHhhMFxceGE0KVwiLFxyXG4gICAgXCJzci1MYXRuLUJBXCI6IFwiIywjIzAuMDBcXHhhMFxceGE0OygjLCMjMC4wMFxceGEwXFx4YTQpXCIsXHJcbiAgICBcInNyLUxhdG4tTUVcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwic3ItTGF0bi1YS1wiOiBcIiMsIyMwLjAwXFx4YTBcXHhhNDsoIywjIzAuMDBcXHhhMFxceGE0KVwiLFxyXG4gICAgc3U6IFwiXFx4YTQjLCMjMC4wMFwiLFxyXG4gICAgXCJzdS1MYXRuXCI6IFwiXFx4YTQjLCMjMC4wMFwiLFxyXG4gICAgc3Y6IFwiIywjIzAuMDBcXHhhMFxceGE0XCIsXHJcbiAgICBcInN2LUFYXCI6IFwiIywjIzAuMDBcXHhhMFxceGE0XCIsXHJcbiAgICBcInN2LUZJXCI6IFwiIywjIzAuMDBcXHhhMFxceGE0XCIsXHJcbiAgICBzdzogXCJcXHhhNFxceGEwIywjIzAuMDBcIixcclxuICAgIFwic3ctQ0RcIjogXCJcXHhhNFxceGEwIywjIzAuMDBcIixcclxuICAgIFwic3ctS0VcIjogXCJcXHhhNFxceGEwIywjIzAuMDBcIixcclxuICAgIFwic3ctVUdcIjogXCJcXHhhNFxceGEwIywjIzAuMDBcIixcclxuICAgIHRhOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcInRhLUxLXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwidGEtTVlcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJ0YS1TR1wiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICB0ZTogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgdGVvOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcInRlby1LRVwiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICB0ZzogXCIjLCMjMC4wMFxceGEwXFx4YTRcIixcclxuICAgIHRoOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICB0aTogXCJcXHhhNCMsIyMwLjAwXCIsXHJcbiAgICBcInRpLUVSXCI6IFwiXFx4YTQjLCMjMC4wMFwiLFxyXG4gICAgdGs6IFwiIywjIzAuMDBcXHhhMFxceGE0XCIsXHJcbiAgICB0bzogXCJcXHhhNFxceGEwIywjIzAuMDBcIixcclxuICAgIHRyOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcInRyLUNZXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIHR0OiBcIiMsIyMwLjAwXFx4YTBcXHhhNFwiLFxyXG4gICAgdHdxOiBcIiMsIyMwLjAwXFx4YTRcIixcclxuICAgIHR6bTogXCIjLCMjMC4wMFxceGEwXFx4YTRcIixcclxuICAgIHVnOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICB1azogXCIjLCMjMC4wMFxceGEwXFx4YTRcIixcclxuICAgIHVyOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcInVyLUlOXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIHV6OiBcIiMsIyMwLjAwXFx4YTBcXHhhNFwiLFxyXG4gICAgXCJ1ei1BcmFiXCI6IFwiXFx4YTRcXHhhMCMsIyMwLjAwXCIsXHJcbiAgICBcInV6LUN5cmxcIjogXCIjLCMjMC4wMFxceGEwXFx4YTRcIixcclxuICAgIFwidXotTGF0blwiOiBcIiMsIyMwLjAwXFx4YTBcXHhhNFwiLFxyXG4gICAgdmFpOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcInZhaS1MYXRuXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwidmFpLVZhaWlcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgdmk6IFwiIywjIzAuMDBcXHhhMFxceGE0XCIsXHJcbiAgICB2dW46IFwiXFx4YTQjLCMjMC4wMFwiLFxyXG4gICAgd2FlOiBcIlxceGE0XFx4YTAjLCMjMC4wMFwiLFxyXG4gICAgd286IFwiXFx4YTRcXHhhMCMsIyMwLjAwXCIsXHJcbiAgICB4aDogXCJcXHhhNCMsIyMwLjAwXCIsXHJcbiAgICB4b2c6IFwiIywjIzAuMDBcXHhhMFxceGE0XCIsXHJcbiAgICB5YXY6IFwiIywjIzAuMDBcXHhhMFxceGE0OygjLCMjMC4wMFxceGEwXFx4YTQpXCIsXHJcbiAgICB5aTogXCJcXHhhNFxceGEwIywjIzAuMDBcIixcclxuICAgIHlvOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcInlvLUJKXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIHl1ZTogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJ5dWUtSGFuc1wiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcInl1ZS1IYW50XCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIHpnaDogXCIjLCMjMC4wMFxceGE0XCIsXHJcbiAgICB6aDogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJ6aC1IYW5zXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiemgtSGFucy1IS1wiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcInpoLUhhbnMtTU9cIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJ6aC1IYW5zLVNHXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiemgtSGFudFwiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcInpoLUhhbnQtSEtcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJ6aC1IYW50LU1PXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIHp1OiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCJcclxufTtcclxuIiwiLyoqXHJcbiAqIERldkV4dHJlbWUgKGVzbS9sb2NhbGl6YXRpb24vY2xkci1kYXRhL3BhcmVudF9sb2NhbGVzLmpzKVxyXG4gKiBWZXJzaW9uOiAyMS4xLjRcclxuICogQnVpbGQgZGF0ZTogTW9uIEp1biAyMSAyMDIxXHJcbiAqXHJcbiAqIENvcHlyaWdodCAoYykgMjAxMiAtIDIwMjEgRGV2ZWxvcGVyIEV4cHJlc3MgSW5jLiBBTEwgUklHSFRTIFJFU0VSVkVEXHJcbiAqIFJlYWQgYWJvdXQgRGV2RXh0cmVtZSBsaWNlbnNpbmcgaGVyZTogaHR0cHM6Ly9qcy5kZXZleHByZXNzLmNvbS9MaWNlbnNpbmcvXHJcbiAqL1xyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgICBcImVuLTE1MFwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1BR1wiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1BSVwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1BVVwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1CQlwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1CTVwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1CU1wiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1CV1wiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1CWlwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1DQVwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1DQ1wiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1DS1wiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1DTVwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1DWFwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1DWVwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1ER1wiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1ETVwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1FUlwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1GSlwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1GS1wiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1GTVwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1HQlwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1HRFwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1HR1wiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1HSFwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1HSVwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1HTVwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1HWVwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1IS1wiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1JRVwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1JTFwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1JTVwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1JTlwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1JT1wiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1KRVwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1KTVwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1LRVwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1LSVwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1LTlwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1LWVwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1MQ1wiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1MUlwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1MU1wiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1NR1wiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1NT1wiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1NU1wiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1NVFwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1NVVwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1NV1wiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1NWVwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1OQVwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1ORlwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1OR1wiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1OUlwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1OVVwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1OWlwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1QR1wiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1QSFwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1QS1wiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1QTlwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1QV1wiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1SV1wiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1TQlwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1TQ1wiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1TRFwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1TR1wiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1TSFwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1TTFwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1TU1wiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1TWFwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1TWlwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1UQ1wiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1US1wiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1UT1wiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1UVFwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1UVlwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1UWlwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1VR1wiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1WQ1wiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1WR1wiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1WVVwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1XU1wiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1aQVwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1aTVwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1aV1wiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1BVFwiOiBcImVuLTE1MFwiLFxyXG4gICAgXCJlbi1CRVwiOiBcImVuLTE1MFwiLFxyXG4gICAgXCJlbi1DSFwiOiBcImVuLTE1MFwiLFxyXG4gICAgXCJlbi1ERVwiOiBcImVuLTE1MFwiLFxyXG4gICAgXCJlbi1ES1wiOiBcImVuLTE1MFwiLFxyXG4gICAgXCJlbi1GSVwiOiBcImVuLTE1MFwiLFxyXG4gICAgXCJlbi1OTFwiOiBcImVuLTE1MFwiLFxyXG4gICAgXCJlbi1TRVwiOiBcImVuLTE1MFwiLFxyXG4gICAgXCJlbi1TSVwiOiBcImVuLTE1MFwiLFxyXG4gICAgXCJlcy1BUlwiOiBcImVzLTQxOVwiLFxyXG4gICAgXCJlcy1CT1wiOiBcImVzLTQxOVwiLFxyXG4gICAgXCJlcy1CUlwiOiBcImVzLTQxOVwiLFxyXG4gICAgXCJlcy1CWlwiOiBcImVzLTQxOVwiLFxyXG4gICAgXCJlcy1DTFwiOiBcImVzLTQxOVwiLFxyXG4gICAgXCJlcy1DT1wiOiBcImVzLTQxOVwiLFxyXG4gICAgXCJlcy1DUlwiOiBcImVzLTQxOVwiLFxyXG4gICAgXCJlcy1DVVwiOiBcImVzLTQxOVwiLFxyXG4gICAgXCJlcy1ET1wiOiBcImVzLTQxOVwiLFxyXG4gICAgXCJlcy1FQ1wiOiBcImVzLTQxOVwiLFxyXG4gICAgXCJlcy1HVFwiOiBcImVzLTQxOVwiLFxyXG4gICAgXCJlcy1ITlwiOiBcImVzLTQxOVwiLFxyXG4gICAgXCJlcy1NWFwiOiBcImVzLTQxOVwiLFxyXG4gICAgXCJlcy1OSVwiOiBcImVzLTQxOVwiLFxyXG4gICAgXCJlcy1QQVwiOiBcImVzLTQxOVwiLFxyXG4gICAgXCJlcy1QRVwiOiBcImVzLTQxOVwiLFxyXG4gICAgXCJlcy1QUlwiOiBcImVzLTQxOVwiLFxyXG4gICAgXCJlcy1QWVwiOiBcImVzLTQxOVwiLFxyXG4gICAgXCJlcy1TVlwiOiBcImVzLTQxOVwiLFxyXG4gICAgXCJlcy1VU1wiOiBcImVzLTQxOVwiLFxyXG4gICAgXCJlcy1VWVwiOiBcImVzLTQxOVwiLFxyXG4gICAgXCJlcy1WRVwiOiBcImVzLTQxOVwiLFxyXG4gICAgbmI6IFwibm9cIixcclxuICAgIG5uOiBcIm5vXCIsXHJcbiAgICBcInB0LUFPXCI6IFwicHQtUFRcIixcclxuICAgIFwicHQtQ0hcIjogXCJwdC1QVFwiLFxyXG4gICAgXCJwdC1DVlwiOiBcInB0LVBUXCIsXHJcbiAgICBcInB0LUZSXCI6IFwicHQtUFRcIixcclxuICAgIFwicHQtR1FcIjogXCJwdC1QVFwiLFxyXG4gICAgXCJwdC1HV1wiOiBcInB0LVBUXCIsXHJcbiAgICBcInB0LUxVXCI6IFwicHQtUFRcIixcclxuICAgIFwicHQtTU9cIjogXCJwdC1QVFwiLFxyXG4gICAgXCJwdC1NWlwiOiBcInB0LVBUXCIsXHJcbiAgICBcInB0LVNUXCI6IFwicHQtUFRcIixcclxuICAgIFwicHQtVExcIjogXCJwdC1QVFwiLFxyXG4gICAgXCJhei1BcmFiXCI6IFwicm9vdFwiLFxyXG4gICAgXCJhei1DeXJsXCI6IFwicm9vdFwiLFxyXG4gICAgXCJibHQtTGF0blwiOiBcInJvb3RcIixcclxuICAgIFwiYm0tTmtvb1wiOiBcInJvb3RcIixcclxuICAgIFwiYnMtQ3lybFwiOiBcInJvb3RcIixcclxuICAgIFwiYnluLUxhdG5cIjogXCJyb290XCIsXHJcbiAgICBcImN1LUdsYWdcIjogXCJyb290XCIsXHJcbiAgICBcImRqZS1BcmFiXCI6IFwicm9vdFwiLFxyXG4gICAgXCJkeW8tQXJhYlwiOiBcInJvb3RcIixcclxuICAgIFwiZW4tRHNydFwiOiBcInJvb3RcIixcclxuICAgIFwiZW4tU2hhd1wiOiBcInJvb3RcIixcclxuICAgIFwiZmYtQWRsbVwiOiBcInJvb3RcIixcclxuICAgIFwiZmYtQXJhYlwiOiBcInJvb3RcIixcclxuICAgIFwiaGEtQXJhYlwiOiBcInJvb3RcIixcclxuICAgIFwiaGktTGF0blwiOiBcInJvb3RcIixcclxuICAgIFwiaXUtTGF0blwiOiBcInJvb3RcIixcclxuICAgIFwia2stQXJhYlwiOiBcInJvb3RcIixcclxuICAgIFwia3MtRGV2YVwiOiBcInJvb3RcIixcclxuICAgIFwia3UtQXJhYlwiOiBcInJvb3RcIixcclxuICAgIFwia3ktQXJhYlwiOiBcInJvb3RcIixcclxuICAgIFwia3ktTGF0blwiOiBcInJvb3RcIixcclxuICAgIFwibWwtQXJhYlwiOiBcInJvb3RcIixcclxuICAgIFwibW4tTW9uZ1wiOiBcInJvb3RcIixcclxuICAgIFwibW5pLU10ZWlcIjogXCJyb290XCIsXHJcbiAgICBcIm1zLUFyYWJcIjogXCJyb290XCIsXHJcbiAgICBcInBhLUFyYWJcIjogXCJyb290XCIsXHJcbiAgICBcInNhdC1EZXZhXCI6IFwicm9vdFwiLFxyXG4gICAgXCJzZC1EZXZhXCI6IFwicm9vdFwiLFxyXG4gICAgXCJzZC1LaG9qXCI6IFwicm9vdFwiLFxyXG4gICAgXCJzZC1TaW5kXCI6IFwicm9vdFwiLFxyXG4gICAgXCJzaGktTGF0blwiOiBcInJvb3RcIixcclxuICAgIFwic28tQXJhYlwiOiBcInJvb3RcIixcclxuICAgIFwic3ItTGF0blwiOiBcInJvb3RcIixcclxuICAgIFwic3ctQXJhYlwiOiBcInJvb3RcIixcclxuICAgIFwidGctQXJhYlwiOiBcInJvb3RcIixcclxuICAgIFwidWctQ3lybFwiOiBcInJvb3RcIixcclxuICAgIFwidXotQXJhYlwiOiBcInJvb3RcIixcclxuICAgIFwidXotQ3lybFwiOiBcInJvb3RcIixcclxuICAgIFwidmFpLUxhdG5cIjogXCJyb290XCIsXHJcbiAgICBcIndvLUFyYWJcIjogXCJyb290XCIsXHJcbiAgICBcInlvLUFyYWJcIjogXCJyb290XCIsXHJcbiAgICBcInl1ZS1IYW5zXCI6IFwicm9vdFwiLFxyXG4gICAgXCJ6aC1IYW50XCI6IFwicm9vdFwiLFxyXG4gICAgXCJ6aC1IYW50LU1PXCI6IFwiemgtSGFudC1IS1wiXHJcbn07XHJcbiIsIi8qKlxyXG4gKiBEZXZFeHRyZW1lIChlc20vbG9jYWxpemF0aW9uL2NvcmUuanMpXHJcbiAqIFZlcnNpb246IDIxLjEuNFxyXG4gKiBCdWlsZCBkYXRlOiBNb24gSnVuIDIxIDIwMjFcclxuICpcclxuICogQ29weXJpZ2h0IChjKSAyMDEyIC0gMjAyMSBEZXZlbG9wZXIgRXhwcmVzcyBJbmMuIEFMTCBSSUdIVFMgUkVTRVJWRURcclxuICogUmVhZCBhYm91dCBEZXZFeHRyZW1lIGxpY2Vuc2luZyBoZXJlOiBodHRwczovL2pzLmRldmV4cHJlc3MuY29tL0xpY2Vuc2luZy9cclxuICovXHJcbmltcG9ydCBkZXBlbmRlbmN5SW5qZWN0b3IgZnJvbSBcIi4uL2NvcmUvdXRpbHMvZGVwZW5kZW5jeV9pbmplY3RvclwiO1xyXG5pbXBvcnQgcGFyZW50TG9jYWxlcyBmcm9tIFwiLi9jbGRyLWRhdGEvcGFyZW50X2xvY2FsZXNcIjtcclxuaW1wb3J0IGdldFBhcmVudExvY2FsZSBmcm9tIFwiLi9wYXJlbnRMb2NhbGVcIjtcclxudmFyIERFRkFVTFRfTE9DQUxFID0gXCJlblwiO1xyXG5leHBvcnQgZGVmYXVsdCBkZXBlbmRlbmN5SW5qZWN0b3Ioe1xyXG4gICAgbG9jYWxlOiAoKCkgPT4ge1xyXG4gICAgICAgIHZhciBjdXJyZW50TG9jYWxlID0gREVGQVVMVF9MT0NBTEU7XHJcbiAgICAgICAgcmV0dXJuIGxvY2FsZSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghbG9jYWxlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudExvY2FsZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGN1cnJlbnRMb2NhbGUgPSBsb2NhbGVcclxuICAgICAgICB9XHJcbiAgICB9KSgpLFxyXG4gICAgZ2V0VmFsdWVCeUNsb3Nlc3RMb2NhbGU6IGZ1bmN0aW9uKGdldHRlcikge1xyXG4gICAgICAgIHZhciBsb2NhbGUgPSB0aGlzLmxvY2FsZSgpO1xyXG4gICAgICAgIHZhciB2YWx1ZSA9IGdldHRlcihsb2NhbGUpO1xyXG4gICAgICAgIHZhciBpc1Jvb3RMb2NhbGU7XHJcbiAgICAgICAgd2hpbGUgKCF2YWx1ZSAmJiAhaXNSb290TG9jYWxlKSB7XHJcbiAgICAgICAgICAgIGxvY2FsZSA9IGdldFBhcmVudExvY2FsZShwYXJlbnRMb2NhbGVzLCBsb2NhbGUpO1xyXG4gICAgICAgICAgICBpZiAobG9jYWxlKSB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGdldHRlcihsb2NhbGUpXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpc1Jvb3RMb2NhbGUgPSB0cnVlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHZvaWQgMCA9PT0gdmFsdWUgJiYgbG9jYWxlICE9PSBERUZBVUxUX0xPQ0FMRSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZ2V0dGVyKERFRkFVTFRfTE9DQUxFKVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdmFsdWVcclxuICAgIH1cclxufSk7XHJcbiIsIi8qKlxyXG4gKiBEZXZFeHRyZW1lIChlc20vbG9jYWxpemF0aW9uL2N1cnJlbmN5LmpzKVxyXG4gKiBWZXJzaW9uOiAyMS4xLjRcclxuICogQnVpbGQgZGF0ZTogTW9uIEp1biAyMSAyMDIxXHJcbiAqXHJcbiAqIENvcHlyaWdodCAoYykgMjAxMiAtIDIwMjEgRGV2ZWxvcGVyIEV4cHJlc3MgSW5jLiBBTEwgUklHSFRTIFJFU0VSVkVEXHJcbiAqIFJlYWQgYWJvdXQgRGV2RXh0cmVtZSBsaWNlbnNpbmcgaGVyZTogaHR0cHM6Ly9qcy5kZXZleHByZXNzLmNvbS9MaWNlbnNpbmcvXHJcbiAqL1xyXG5pbXBvcnQge1xyXG4gICAgZXh0ZW5kXHJcbn0gZnJvbSBcIi4uL2NvcmUvdXRpbHMvZXh0ZW5kXCI7XHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICAgIF9mb3JtYXROdW1iZXJDb3JlOiBmdW5jdGlvbih2YWx1ZSwgZm9ybWF0LCBmb3JtYXRDb25maWcpIHtcclxuICAgICAgICBpZiAoXCJjdXJyZW5jeVwiID09PSBmb3JtYXQpIHtcclxuICAgICAgICAgICAgZm9ybWF0Q29uZmlnLnByZWNpc2lvbiA9IGZvcm1hdENvbmZpZy5wcmVjaXNpb24gfHwgMDtcclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHRoaXMuZm9ybWF0KHZhbHVlLCBleHRlbmQoe30sIGZvcm1hdENvbmZpZywge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogXCJmaXhlZHBvaW50XCJcclxuICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgICB2YXIgY3VycmVuY3lQYXJ0ID0gdGhpcy5nZXRDdXJyZW5jeVN5bWJvbCgpLnN5bWJvbC5yZXBsYWNlKC9cXCQvZywgXCIkJCQkXCIpO1xyXG4gICAgICAgICAgICByZXN1bHQgPSByZXN1bHQucmVwbGFjZSgvXihcXEQqKShcXGQuKikvLCBcIiQxXCIgKyBjdXJyZW5jeVBhcnQgKyBcIiQyXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLmNhbGxCYXNlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcclxuICAgIH0sXHJcbiAgICBnZXRDdXJyZW5jeVN5bWJvbDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgc3ltYm9sOiBcIiRcIlxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICBnZXRPcGVuWG1sQ3VycmVuY3lGb3JtYXQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBcIiQjLCMjMHswfV8pO1xcXFwoJCMsIyMwezB9XFxcXClcIlxyXG4gICAgfVxyXG59O1xyXG4iLCIvKipcclxuICogRGV2RXh0cmVtZSAoZXNtL2xvY2FsaXphdGlvbi9kZWZhdWx0X21lc3NhZ2VzLmpzKVxyXG4gKiBWZXJzaW9uOiAyMS4xLjRcclxuICogQnVpbGQgZGF0ZTogTW9uIEp1biAyMSAyMDIxXHJcbiAqXHJcbiAqIENvcHlyaWdodCAoYykgMjAxMiAtIDIwMjEgRGV2ZWxvcGVyIEV4cHJlc3MgSW5jLiBBTEwgUklHSFRTIFJFU0VSVkVEXHJcbiAqIFJlYWQgYWJvdXQgRGV2RXh0cmVtZSBsaWNlbnNpbmcgaGVyZTogaHR0cHM6Ly9qcy5kZXZleHByZXNzLmNvbS9MaWNlbnNpbmcvXHJcbiAqL1xyXG5leHBvcnQgdmFyIGRlZmF1bHRNZXNzYWdlcyA9IHtcclxuICAgIGVuOiB7XHJcbiAgICAgICAgWWVzOiBcIlllc1wiLFxyXG4gICAgICAgIE5vOiBcIk5vXCIsXHJcbiAgICAgICAgQ2FuY2VsOiBcIkNhbmNlbFwiLFxyXG4gICAgICAgIENsZWFyOiBcIkNsZWFyXCIsXHJcbiAgICAgICAgRG9uZTogXCJEb25lXCIsXHJcbiAgICAgICAgTG9hZGluZzogXCJMb2FkaW5nLi4uXCIsXHJcbiAgICAgICAgU2VsZWN0OiBcIlNlbGVjdC4uLlwiLFxyXG4gICAgICAgIFNlYXJjaDogXCJTZWFyY2hcIixcclxuICAgICAgICBCYWNrOiBcIkJhY2tcIixcclxuICAgICAgICBPSzogXCJPS1wiLFxyXG4gICAgICAgIFwiZHhDb2xsZWN0aW9uV2lkZ2V0LW5vRGF0YVRleHRcIjogXCJObyBkYXRhIHRvIGRpc3BsYXlcIixcclxuICAgICAgICBcImR4RHJvcERvd25FZGl0b3Itc2VsZWN0TGFiZWxcIjogXCJTZWxlY3RcIixcclxuICAgICAgICBcInZhbGlkYXRpb24tcmVxdWlyZWRcIjogXCJSZXF1aXJlZFwiLFxyXG4gICAgICAgIFwidmFsaWRhdGlvbi1yZXF1aXJlZC1mb3JtYXR0ZWRcIjogXCJ7MH0gaXMgcmVxdWlyZWRcIixcclxuICAgICAgICBcInZhbGlkYXRpb24tbnVtZXJpY1wiOiBcIlZhbHVlIG11c3QgYmUgYSBudW1iZXJcIixcclxuICAgICAgICBcInZhbGlkYXRpb24tbnVtZXJpYy1mb3JtYXR0ZWRcIjogXCJ7MH0gbXVzdCBiZSBhIG51bWJlclwiLFxyXG4gICAgICAgIFwidmFsaWRhdGlvbi1yYW5nZVwiOiBcIlZhbHVlIGlzIG91dCBvZiByYW5nZVwiLFxyXG4gICAgICAgIFwidmFsaWRhdGlvbi1yYW5nZS1mb3JtYXR0ZWRcIjogXCJ7MH0gaXMgb3V0IG9mIHJhbmdlXCIsXHJcbiAgICAgICAgXCJ2YWxpZGF0aW9uLXN0cmluZ0xlbmd0aFwiOiBcIlRoZSBsZW5ndGggb2YgdGhlIHZhbHVlIGlzIG5vdCBjb3JyZWN0XCIsXHJcbiAgICAgICAgXCJ2YWxpZGF0aW9uLXN0cmluZ0xlbmd0aC1mb3JtYXR0ZWRcIjogXCJUaGUgbGVuZ3RoIG9mIHswfSBpcyBub3QgY29ycmVjdFwiLFxyXG4gICAgICAgIFwidmFsaWRhdGlvbi1jdXN0b21cIjogXCJWYWx1ZSBpcyBpbnZhbGlkXCIsXHJcbiAgICAgICAgXCJ2YWxpZGF0aW9uLWN1c3RvbS1mb3JtYXR0ZWRcIjogXCJ7MH0gaXMgaW52YWxpZFwiLFxyXG4gICAgICAgIFwidmFsaWRhdGlvbi1hc3luY1wiOiBcIlZhbHVlIGlzIGludmFsaWRcIixcclxuICAgICAgICBcInZhbGlkYXRpb24tYXN5bmMtZm9ybWF0dGVkXCI6IFwiezB9IGlzIGludmFsaWRcIixcclxuICAgICAgICBcInZhbGlkYXRpb24tY29tcGFyZVwiOiBcIlZhbHVlcyBkbyBub3QgbWF0Y2hcIixcclxuICAgICAgICBcInZhbGlkYXRpb24tY29tcGFyZS1mb3JtYXR0ZWRcIjogXCJ7MH0gZG9lcyBub3QgbWF0Y2hcIixcclxuICAgICAgICBcInZhbGlkYXRpb24tcGF0dGVyblwiOiBcIlZhbHVlIGRvZXMgbm90IG1hdGNoIHBhdHRlcm5cIixcclxuICAgICAgICBcInZhbGlkYXRpb24tcGF0dGVybi1mb3JtYXR0ZWRcIjogXCJ7MH0gZG9lcyBub3QgbWF0Y2ggcGF0dGVyblwiLFxyXG4gICAgICAgIFwidmFsaWRhdGlvbi1lbWFpbFwiOiBcIkVtYWlsIGlzIGludmFsaWRcIixcclxuICAgICAgICBcInZhbGlkYXRpb24tZW1haWwtZm9ybWF0dGVkXCI6IFwiezB9IGlzIGludmFsaWRcIixcclxuICAgICAgICBcInZhbGlkYXRpb24tbWFza1wiOiBcIlZhbHVlIGlzIGludmFsaWRcIixcclxuICAgICAgICBcImR4TG9va3VwLXNlYXJjaFBsYWNlaG9sZGVyXCI6IFwiTWluaW11bSBjaGFyYWN0ZXIgbnVtYmVyOiB7MH1cIixcclxuICAgICAgICBcImR4TGlzdC1wdWxsaW5nRG93blRleHRcIjogXCJQdWxsIGRvd24gdG8gcmVmcmVzaC4uLlwiLFxyXG4gICAgICAgIFwiZHhMaXN0LXB1bGxlZERvd25UZXh0XCI6IFwiUmVsZWFzZSB0byByZWZyZXNoLi4uXCIsXHJcbiAgICAgICAgXCJkeExpc3QtcmVmcmVzaGluZ1RleHRcIjogXCJSZWZyZXNoaW5nLi4uXCIsXHJcbiAgICAgICAgXCJkeExpc3QtcGFnZUxvYWRpbmdUZXh0XCI6IFwiTG9hZGluZy4uLlwiLFxyXG4gICAgICAgIFwiZHhMaXN0LW5leHRCdXR0b25UZXh0XCI6IFwiTW9yZVwiLFxyXG4gICAgICAgIFwiZHhMaXN0LXNlbGVjdEFsbFwiOiBcIlNlbGVjdCBBbGxcIixcclxuICAgICAgICBcImR4TGlzdEVkaXREZWNvcmF0b3ItZGVsZXRlXCI6IFwiRGVsZXRlXCIsXHJcbiAgICAgICAgXCJkeExpc3RFZGl0RGVjb3JhdG9yLW1vcmVcIjogXCJNb3JlXCIsXHJcbiAgICAgICAgXCJkeFNjcm9sbFZpZXctcHVsbGluZ0Rvd25UZXh0XCI6IFwiUHVsbCBkb3duIHRvIHJlZnJlc2guLi5cIixcclxuICAgICAgICBcImR4U2Nyb2xsVmlldy1wdWxsZWREb3duVGV4dFwiOiBcIlJlbGVhc2UgdG8gcmVmcmVzaC4uLlwiLFxyXG4gICAgICAgIFwiZHhTY3JvbGxWaWV3LXJlZnJlc2hpbmdUZXh0XCI6IFwiUmVmcmVzaGluZy4uLlwiLFxyXG4gICAgICAgIFwiZHhTY3JvbGxWaWV3LXJlYWNoQm90dG9tVGV4dFwiOiBcIkxvYWRpbmcuLi5cIixcclxuICAgICAgICBcImR4RGF0ZUJveC1zaW11bGF0ZWREYXRhUGlja2VyVGl0bGVUaW1lXCI6IFwiU2VsZWN0IHRpbWVcIixcclxuICAgICAgICBcImR4RGF0ZUJveC1zaW11bGF0ZWREYXRhUGlja2VyVGl0bGVEYXRlXCI6IFwiU2VsZWN0IGRhdGVcIixcclxuICAgICAgICBcImR4RGF0ZUJveC1zaW11bGF0ZWREYXRhUGlja2VyVGl0bGVEYXRlVGltZVwiOiBcIlNlbGVjdCBkYXRlIGFuZCB0aW1lXCIsXHJcbiAgICAgICAgXCJkeERhdGVCb3gtdmFsaWRhdGlvbi1kYXRldGltZVwiOiBcIlZhbHVlIG11c3QgYmUgYSBkYXRlIG9yIHRpbWVcIixcclxuICAgICAgICBcImR4RmlsZVVwbG9hZGVyLXNlbGVjdEZpbGVcIjogXCJTZWxlY3QgZmlsZVwiLFxyXG4gICAgICAgIFwiZHhGaWxlVXBsb2FkZXItZHJvcEZpbGVcIjogXCJvciBEcm9wIGZpbGUgaGVyZVwiLFxyXG4gICAgICAgIFwiZHhGaWxlVXBsb2FkZXItYnl0ZXNcIjogXCJieXRlc1wiLFxyXG4gICAgICAgIFwiZHhGaWxlVXBsb2FkZXIta2JcIjogXCJrYlwiLFxyXG4gICAgICAgIFwiZHhGaWxlVXBsb2FkZXItTWJcIjogXCJNYlwiLFxyXG4gICAgICAgIFwiZHhGaWxlVXBsb2FkZXItR2JcIjogXCJHYlwiLFxyXG4gICAgICAgIFwiZHhGaWxlVXBsb2FkZXItdXBsb2FkXCI6IFwiVXBsb2FkXCIsXHJcbiAgICAgICAgXCJkeEZpbGVVcGxvYWRlci11cGxvYWRlZFwiOiBcIlVwbG9hZGVkXCIsXHJcbiAgICAgICAgXCJkeEZpbGVVcGxvYWRlci1yZWFkeVRvVXBsb2FkXCI6IFwiUmVhZHkgdG8gdXBsb2FkXCIsXHJcbiAgICAgICAgXCJkeEZpbGVVcGxvYWRlci11cGxvYWRBYm9ydGVkTWVzc2FnZVwiOiBcIlVwbG9hZCBjYW5jZWxsZWRcIixcclxuICAgICAgICBcImR4RmlsZVVwbG9hZGVyLXVwbG9hZEZhaWxlZE1lc3NhZ2VcIjogXCJVcGxvYWQgZmFpbGVkXCIsXHJcbiAgICAgICAgXCJkeEZpbGVVcGxvYWRlci1pbnZhbGlkRmlsZUV4dGVuc2lvblwiOiBcIkZpbGUgdHlwZSBpcyBub3QgYWxsb3dlZFwiLFxyXG4gICAgICAgIFwiZHhGaWxlVXBsb2FkZXItaW52YWxpZE1heEZpbGVTaXplXCI6IFwiRmlsZSBpcyB0b28gbGFyZ2VcIixcclxuICAgICAgICBcImR4RmlsZVVwbG9hZGVyLWludmFsaWRNaW5GaWxlU2l6ZVwiOiBcIkZpbGUgaXMgdG9vIHNtYWxsXCIsXHJcbiAgICAgICAgXCJkeFJhbmdlU2xpZGVyLWFyaWFGcm9tXCI6IFwiRnJvbVwiLFxyXG4gICAgICAgIFwiZHhSYW5nZVNsaWRlci1hcmlhVGlsbFwiOiBcIlRpbGxcIixcclxuICAgICAgICBcImR4U3dpdGNoLXN3aXRjaGVkT25UZXh0XCI6IFwiT05cIixcclxuICAgICAgICBcImR4U3dpdGNoLXN3aXRjaGVkT2ZmVGV4dFwiOiBcIk9GRlwiLFxyXG4gICAgICAgIFwiZHhGb3JtLW9wdGlvbmFsTWFya1wiOiBcIm9wdGlvbmFsXCIsXHJcbiAgICAgICAgXCJkeEZvcm0tcmVxdWlyZWRNZXNzYWdlXCI6IFwiezB9IGlzIHJlcXVpcmVkXCIsXHJcbiAgICAgICAgXCJkeE51bWJlckJveC1pbnZhbGlkVmFsdWVNZXNzYWdlXCI6IFwiVmFsdWUgbXVzdCBiZSBhIG51bWJlclwiLFxyXG4gICAgICAgIFwiZHhOdW1iZXJCb3gtbm9EYXRhVGV4dFwiOiBcIk5vIGRhdGFcIixcclxuICAgICAgICBcImR4RGF0YUdyaWQtY29sdW1uQ2hvb3NlclRpdGxlXCI6IFwiQ29sdW1uIENob29zZXJcIixcclxuICAgICAgICBcImR4RGF0YUdyaWQtY29sdW1uQ2hvb3NlckVtcHR5VGV4dFwiOiBcIkRyYWcgYSBjb2x1bW4gaGVyZSB0byBoaWRlIGl0XCIsXHJcbiAgICAgICAgXCJkeERhdGFHcmlkLWdyb3VwQ29udGludWVzTWVzc2FnZVwiOiBcIkNvbnRpbnVlcyBvbiB0aGUgbmV4dCBwYWdlXCIsXHJcbiAgICAgICAgXCJkeERhdGFHcmlkLWdyb3VwQ29udGludWVkTWVzc2FnZVwiOiBcIkNvbnRpbnVlZCBmcm9tIHRoZSBwcmV2aW91cyBwYWdlXCIsXHJcbiAgICAgICAgXCJkeERhdGFHcmlkLWdyb3VwSGVhZGVyVGV4dFwiOiBcIkdyb3VwIGJ5IFRoaXMgQ29sdW1uXCIsXHJcbiAgICAgICAgXCJkeERhdGFHcmlkLXVuZ3JvdXBIZWFkZXJUZXh0XCI6IFwiVW5ncm91cFwiLFxyXG4gICAgICAgIFwiZHhEYXRhR3JpZC11bmdyb3VwQWxsVGV4dFwiOiBcIlVuZ3JvdXAgQWxsXCIsXHJcbiAgICAgICAgXCJkeERhdGFHcmlkLWVkaXRpbmdFZGl0Um93XCI6IFwiRWRpdFwiLFxyXG4gICAgICAgIFwiZHhEYXRhR3JpZC1lZGl0aW5nU2F2ZVJvd0NoYW5nZXNcIjogXCJTYXZlXCIsXHJcbiAgICAgICAgXCJkeERhdGFHcmlkLWVkaXRpbmdDYW5jZWxSb3dDaGFuZ2VzXCI6IFwiQ2FuY2VsXCIsXHJcbiAgICAgICAgXCJkeERhdGFHcmlkLWVkaXRpbmdEZWxldGVSb3dcIjogXCJEZWxldGVcIixcclxuICAgICAgICBcImR4RGF0YUdyaWQtZWRpdGluZ1VuZGVsZXRlUm93XCI6IFwiVW5kZWxldGVcIixcclxuICAgICAgICBcImR4RGF0YUdyaWQtZWRpdGluZ0NvbmZpcm1EZWxldGVNZXNzYWdlXCI6IFwiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIHJlY29yZD9cIixcclxuICAgICAgICBcImR4RGF0YUdyaWQtdmFsaWRhdGlvbkNhbmNlbENoYW5nZXNcIjogXCJDYW5jZWwgY2hhbmdlc1wiLFxyXG4gICAgICAgIFwiZHhEYXRhR3JpZC1ncm91cFBhbmVsRW1wdHlUZXh0XCI6IFwiRHJhZyBhIGNvbHVtbiBoZWFkZXIgaGVyZSB0byBncm91cCBieSB0aGF0IGNvbHVtblwiLFxyXG4gICAgICAgIFwiZHhEYXRhR3JpZC1ub0RhdGFUZXh0XCI6IFwiTm8gZGF0YVwiLFxyXG4gICAgICAgIFwiZHhEYXRhR3JpZC1zZWFyY2hQYW5lbFBsYWNlaG9sZGVyXCI6IFwiU2VhcmNoLi4uXCIsXHJcbiAgICAgICAgXCJkeERhdGFHcmlkLWZpbHRlclJvd1Nob3dBbGxUZXh0XCI6IFwiKEFsbClcIixcclxuICAgICAgICBcImR4RGF0YUdyaWQtZmlsdGVyUm93UmVzZXRPcGVyYXRpb25UZXh0XCI6IFwiUmVzZXRcIixcclxuICAgICAgICBcImR4RGF0YUdyaWQtZmlsdGVyUm93T3BlcmF0aW9uRXF1YWxzXCI6IFwiRXF1YWxzXCIsXHJcbiAgICAgICAgXCJkeERhdGFHcmlkLWZpbHRlclJvd09wZXJhdGlvbk5vdEVxdWFsc1wiOiBcIkRvZXMgbm90IGVxdWFsXCIsXHJcbiAgICAgICAgXCJkeERhdGFHcmlkLWZpbHRlclJvd09wZXJhdGlvbkxlc3NcIjogXCJMZXNzIHRoYW5cIixcclxuICAgICAgICBcImR4RGF0YUdyaWQtZmlsdGVyUm93T3BlcmF0aW9uTGVzc09yRXF1YWxzXCI6IFwiTGVzcyB0aGFuIG9yIGVxdWFsIHRvXCIsXHJcbiAgICAgICAgXCJkeERhdGFHcmlkLWZpbHRlclJvd09wZXJhdGlvbkdyZWF0ZXJcIjogXCJHcmVhdGVyIHRoYW5cIixcclxuICAgICAgICBcImR4RGF0YUdyaWQtZmlsdGVyUm93T3BlcmF0aW9uR3JlYXRlck9yRXF1YWxzXCI6IFwiR3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvXCIsXHJcbiAgICAgICAgXCJkeERhdGFHcmlkLWZpbHRlclJvd09wZXJhdGlvblN0YXJ0c1dpdGhcIjogXCJTdGFydHMgd2l0aFwiLFxyXG4gICAgICAgIFwiZHhEYXRhR3JpZC1maWx0ZXJSb3dPcGVyYXRpb25Db250YWluc1wiOiBcIkNvbnRhaW5zXCIsXHJcbiAgICAgICAgXCJkeERhdGFHcmlkLWZpbHRlclJvd09wZXJhdGlvbk5vdENvbnRhaW5zXCI6IFwiRG9lcyBub3QgY29udGFpblwiLFxyXG4gICAgICAgIFwiZHhEYXRhR3JpZC1maWx0ZXJSb3dPcGVyYXRpb25FbmRzV2l0aFwiOiBcIkVuZHMgd2l0aFwiLFxyXG4gICAgICAgIFwiZHhEYXRhR3JpZC1maWx0ZXJSb3dPcGVyYXRpb25CZXR3ZWVuXCI6IFwiQmV0d2VlblwiLFxyXG4gICAgICAgIFwiZHhEYXRhR3JpZC1maWx0ZXJSb3dPcGVyYXRpb25CZXR3ZWVuU3RhcnRUZXh0XCI6IFwiU3RhcnRcIixcclxuICAgICAgICBcImR4RGF0YUdyaWQtZmlsdGVyUm93T3BlcmF0aW9uQmV0d2VlbkVuZFRleHRcIjogXCJFbmRcIixcclxuICAgICAgICBcImR4RGF0YUdyaWQtYXBwbHlGaWx0ZXJUZXh0XCI6IFwiQXBwbHkgZmlsdGVyXCIsXHJcbiAgICAgICAgXCJkeERhdGFHcmlkLXRydWVUZXh0XCI6IFwidHJ1ZVwiLFxyXG4gICAgICAgIFwiZHhEYXRhR3JpZC1mYWxzZVRleHRcIjogXCJmYWxzZVwiLFxyXG4gICAgICAgIFwiZHhEYXRhR3JpZC1zb3J0aW5nQXNjZW5kaW5nVGV4dFwiOiBcIlNvcnQgQXNjZW5kaW5nXCIsXHJcbiAgICAgICAgXCJkeERhdGFHcmlkLXNvcnRpbmdEZXNjZW5kaW5nVGV4dFwiOiBcIlNvcnQgRGVzY2VuZGluZ1wiLFxyXG4gICAgICAgIFwiZHhEYXRhR3JpZC1zb3J0aW5nQ2xlYXJUZXh0XCI6IFwiQ2xlYXIgU29ydGluZ1wiLFxyXG4gICAgICAgIFwiZHhEYXRhR3JpZC1lZGl0aW5nU2F2ZUFsbENoYW5nZXNcIjogXCJTYXZlIGNoYW5nZXNcIixcclxuICAgICAgICBcImR4RGF0YUdyaWQtZWRpdGluZ0NhbmNlbEFsbENoYW5nZXNcIjogXCJEaXNjYXJkIGNoYW5nZXNcIixcclxuICAgICAgICBcImR4RGF0YUdyaWQtZWRpdGluZ0FkZFJvd1wiOiBcIkFkZCBhIHJvd1wiLFxyXG4gICAgICAgIFwiZHhEYXRhR3JpZC1zdW1tYXJ5TWluXCI6IFwiTWluOiB7MH1cIixcclxuICAgICAgICBcImR4RGF0YUdyaWQtc3VtbWFyeU1pbk90aGVyQ29sdW1uXCI6IFwiTWluIG9mIHsxfSBpcyB7MH1cIixcclxuICAgICAgICBcImR4RGF0YUdyaWQtc3VtbWFyeU1heFwiOiBcIk1heDogezB9XCIsXHJcbiAgICAgICAgXCJkeERhdGFHcmlkLXN1bW1hcnlNYXhPdGhlckNvbHVtblwiOiBcIk1heCBvZiB7MX0gaXMgezB9XCIsXHJcbiAgICAgICAgXCJkeERhdGFHcmlkLXN1bW1hcnlBdmdcIjogXCJBdmc6IHswfVwiLFxyXG4gICAgICAgIFwiZHhEYXRhR3JpZC1zdW1tYXJ5QXZnT3RoZXJDb2x1bW5cIjogXCJBdmcgb2YgezF9IGlzIHswfVwiLFxyXG4gICAgICAgIFwiZHhEYXRhR3JpZC1zdW1tYXJ5U3VtXCI6IFwiU3VtOiB7MH1cIixcclxuICAgICAgICBcImR4RGF0YUdyaWQtc3VtbWFyeVN1bU90aGVyQ29sdW1uXCI6IFwiU3VtIG9mIHsxfSBpcyB7MH1cIixcclxuICAgICAgICBcImR4RGF0YUdyaWQtc3VtbWFyeUNvdW50XCI6IFwiQ291bnQ6IHswfVwiLFxyXG4gICAgICAgIFwiZHhEYXRhR3JpZC1jb2x1bW5GaXhpbmdGaXhcIjogXCJGaXhcIixcclxuICAgICAgICBcImR4RGF0YUdyaWQtY29sdW1uRml4aW5nVW5maXhcIjogXCJVbmZpeFwiLFxyXG4gICAgICAgIFwiZHhEYXRhR3JpZC1jb2x1bW5GaXhpbmdMZWZ0UG9zaXRpb25cIjogXCJUbyB0aGUgbGVmdFwiLFxyXG4gICAgICAgIFwiZHhEYXRhR3JpZC1jb2x1bW5GaXhpbmdSaWdodFBvc2l0aW9uXCI6IFwiVG8gdGhlIHJpZ2h0XCIsXHJcbiAgICAgICAgXCJkeERhdGFHcmlkLWV4cG9ydFRvXCI6IFwiRXhwb3J0XCIsXHJcbiAgICAgICAgXCJkeERhdGFHcmlkLWV4cG9ydFRvRXhjZWxcIjogXCJFeHBvcnQgdG8gRXhjZWwgZmlsZVwiLFxyXG4gICAgICAgIFwiZHhEYXRhR3JpZC1leHBvcnRpbmdcIjogXCJFeHBvcnRpbmcuLi5cIixcclxuICAgICAgICBcImR4RGF0YUdyaWQtZXhjZWxGb3JtYXRcIjogXCJFeGNlbCBmaWxlXCIsXHJcbiAgICAgICAgXCJkeERhdGFHcmlkLXNlbGVjdGVkUm93c1wiOiBcIlNlbGVjdGVkIHJvd3NcIixcclxuICAgICAgICBcImR4RGF0YUdyaWQtZXhwb3J0U2VsZWN0ZWRSb3dzXCI6IFwiRXhwb3J0IHNlbGVjdGVkIHJvd3NcIixcclxuICAgICAgICBcImR4RGF0YUdyaWQtZXhwb3J0QWxsXCI6IFwiRXhwb3J0IGFsbCBkYXRhXCIsXHJcbiAgICAgICAgXCJkeERhdGFHcmlkLWhlYWRlckZpbHRlckVtcHR5VmFsdWVcIjogXCIoQmxhbmtzKVwiLFxyXG4gICAgICAgIFwiZHhEYXRhR3JpZC1oZWFkZXJGaWx0ZXJPS1wiOiBcIk9LXCIsXHJcbiAgICAgICAgXCJkeERhdGFHcmlkLWhlYWRlckZpbHRlckNhbmNlbFwiOiBcIkNhbmNlbFwiLFxyXG4gICAgICAgIFwiZHhEYXRhR3JpZC1hcmlhQWRhcHRpdmVDb2xsYXBzZVwiOiBcIkhpZGUgYWRkaXRpb25hbCBkYXRhXCIsXHJcbiAgICAgICAgXCJkeERhdGFHcmlkLWFyaWFBZGFwdGl2ZUV4cGFuZFwiOiBcIkRpc3BsYXkgYWRkaXRpb25hbCBkYXRhXCIsXHJcbiAgICAgICAgXCJkeERhdGFHcmlkLWFyaWFDb2x1bW5cIjogXCJDb2x1bW5cIixcclxuICAgICAgICBcImR4RGF0YUdyaWQtYXJpYVZhbHVlXCI6IFwiVmFsdWVcIixcclxuICAgICAgICBcImR4RGF0YUdyaWQtYXJpYUZpbHRlckNlbGxcIjogXCJGaWx0ZXIgY2VsbFwiLFxyXG4gICAgICAgIFwiZHhEYXRhR3JpZC1hcmlhQ29sbGFwc2VcIjogXCJDb2xsYXBzZVwiLFxyXG4gICAgICAgIFwiZHhEYXRhR3JpZC1hcmlhRXhwYW5kXCI6IFwiRXhwYW5kXCIsXHJcbiAgICAgICAgXCJkeERhdGFHcmlkLWFyaWFEYXRhR3JpZFwiOiBcIkRhdGEgZ3JpZFwiLFxyXG4gICAgICAgIFwiZHhEYXRhR3JpZC1hcmlhU2VhcmNoSW5HcmlkXCI6IFwiU2VhcmNoIGluIHRoZSBkYXRhIGdyaWRcIixcclxuICAgICAgICBcImR4RGF0YUdyaWQtYXJpYVNlbGVjdEFsbFwiOiBcIlNlbGVjdCBhbGxcIixcclxuICAgICAgICBcImR4RGF0YUdyaWQtYXJpYVNlbGVjdFJvd1wiOiBcIlNlbGVjdCByb3dcIixcclxuICAgICAgICBcImR4RGF0YUdyaWQtYXJpYVRvb2xiYXJcIjogXCJEYXRhIGdyaWQgdG9vbGJhclwiLFxyXG4gICAgICAgIFwiZHhEYXRhR3JpZC1maWx0ZXJCdWlsZGVyUG9wdXBUaXRsZVwiOiBcIkZpbHRlciBCdWlsZGVyXCIsXHJcbiAgICAgICAgXCJkeERhdGFHcmlkLWZpbHRlclBhbmVsQ3JlYXRlRmlsdGVyXCI6IFwiQ3JlYXRlIEZpbHRlclwiLFxyXG4gICAgICAgIFwiZHhEYXRhR3JpZC1maWx0ZXJQYW5lbENsZWFyRmlsdGVyXCI6IFwiQ2xlYXJcIixcclxuICAgICAgICBcImR4RGF0YUdyaWQtZmlsdGVyUGFuZWxGaWx0ZXJFbmFibGVkSGludFwiOiBcIkVuYWJsZSB0aGUgZmlsdGVyXCIsXHJcbiAgICAgICAgXCJkeFRyZWVMaXN0LWFyaWFUcmVlTGlzdFwiOiBcIlRyZWUgbGlzdFwiLFxyXG4gICAgICAgIFwiZHhUcmVlTGlzdC1hcmlhU2VhcmNoSW5HcmlkXCI6IFwiU2VhcmNoIGluIHRoZSB0cmVlIGxpc3RcIixcclxuICAgICAgICBcImR4VHJlZUxpc3QtYXJpYVRvb2xiYXJcIjogXCJUcmVlIGxpc3QgdG9vbGJhclwiLFxyXG4gICAgICAgIFwiZHhUcmVlTGlzdC1lZGl0aW5nQWRkUm93VG9Ob2RlXCI6IFwiQWRkXCIsXHJcbiAgICAgICAgXCJkeFBhZ2VyLWluZm9UZXh0XCI6IFwiUGFnZSB7MH0gb2YgezF9ICh7Mn0gaXRlbXMpXCIsXHJcbiAgICAgICAgXCJkeFBhZ2VyLXBhZ2VzQ291bnRUZXh0XCI6IFwib2ZcIixcclxuICAgICAgICBcImR4UGFnZXItcGFnZVNpemVzQWxsVGV4dFwiOiBcIkFsbFwiLFxyXG4gICAgICAgIFwiZHhQaXZvdEdyaWQtZ3JhbmRUb3RhbFwiOiBcIkdyYW5kIFRvdGFsXCIsXHJcbiAgICAgICAgXCJkeFBpdm90R3JpZC10b3RhbFwiOiBcInswfSBUb3RhbFwiLFxyXG4gICAgICAgIFwiZHhQaXZvdEdyaWQtZmllbGRDaG9vc2VyVGl0bGVcIjogXCJGaWVsZCBDaG9vc2VyXCIsXHJcbiAgICAgICAgXCJkeFBpdm90R3JpZC1zaG93RmllbGRDaG9vc2VyXCI6IFwiU2hvdyBGaWVsZCBDaG9vc2VyXCIsXHJcbiAgICAgICAgXCJkeFBpdm90R3JpZC1leHBhbmRBbGxcIjogXCJFeHBhbmQgQWxsXCIsXHJcbiAgICAgICAgXCJkeFBpdm90R3JpZC1jb2xsYXBzZUFsbFwiOiBcIkNvbGxhcHNlIEFsbFwiLFxyXG4gICAgICAgIFwiZHhQaXZvdEdyaWQtc29ydENvbHVtbkJ5U3VtbWFyeVwiOiAnU29ydCBcInswfVwiIGJ5IFRoaXMgQ29sdW1uJyxcclxuICAgICAgICBcImR4UGl2b3RHcmlkLXNvcnRSb3dCeVN1bW1hcnlcIjogJ1NvcnQgXCJ7MH1cIiBieSBUaGlzIFJvdycsXHJcbiAgICAgICAgXCJkeFBpdm90R3JpZC1yZW1vdmVBbGxTb3J0aW5nXCI6IFwiUmVtb3ZlIEFsbCBTb3J0aW5nXCIsXHJcbiAgICAgICAgXCJkeFBpdm90R3JpZC1kYXRhTm90QXZhaWxhYmxlXCI6IFwiTi9BXCIsXHJcbiAgICAgICAgXCJkeFBpdm90R3JpZC1yb3dGaWVsZHNcIjogXCJSb3cgRmllbGRzXCIsXHJcbiAgICAgICAgXCJkeFBpdm90R3JpZC1jb2x1bW5GaWVsZHNcIjogXCJDb2x1bW4gRmllbGRzXCIsXHJcbiAgICAgICAgXCJkeFBpdm90R3JpZC1kYXRhRmllbGRzXCI6IFwiRGF0YSBGaWVsZHNcIixcclxuICAgICAgICBcImR4UGl2b3RHcmlkLWZpbHRlckZpZWxkc1wiOiBcIkZpbHRlciBGaWVsZHNcIixcclxuICAgICAgICBcImR4UGl2b3RHcmlkLWFsbEZpZWxkc1wiOiBcIkFsbCBGaWVsZHNcIixcclxuICAgICAgICBcImR4UGl2b3RHcmlkLWNvbHVtbkZpZWxkQXJlYVwiOiBcIkRyb3AgQ29sdW1uIEZpZWxkcyBIZXJlXCIsXHJcbiAgICAgICAgXCJkeFBpdm90R3JpZC1kYXRhRmllbGRBcmVhXCI6IFwiRHJvcCBEYXRhIEZpZWxkcyBIZXJlXCIsXHJcbiAgICAgICAgXCJkeFBpdm90R3JpZC1yb3dGaWVsZEFyZWFcIjogXCJEcm9wIFJvdyBGaWVsZHMgSGVyZVwiLFxyXG4gICAgICAgIFwiZHhQaXZvdEdyaWQtZmlsdGVyRmllbGRBcmVhXCI6IFwiRHJvcCBGaWx0ZXIgRmllbGRzIEhlcmVcIixcclxuICAgICAgICBcImR4U2NoZWR1bGVyLWVkaXRvckxhYmVsVGl0bGVcIjogXCJTdWJqZWN0XCIsXHJcbiAgICAgICAgXCJkeFNjaGVkdWxlci1lZGl0b3JMYWJlbFN0YXJ0RGF0ZVwiOiBcIlN0YXJ0IERhdGVcIixcclxuICAgICAgICBcImR4U2NoZWR1bGVyLWVkaXRvckxhYmVsRW5kRGF0ZVwiOiBcIkVuZCBEYXRlXCIsXHJcbiAgICAgICAgXCJkeFNjaGVkdWxlci1lZGl0b3JMYWJlbERlc2NyaXB0aW9uXCI6IFwiRGVzY3JpcHRpb25cIixcclxuICAgICAgICBcImR4U2NoZWR1bGVyLWVkaXRvckxhYmVsUmVjdXJyZW5jZVwiOiBcIlJlcGVhdFwiLFxyXG4gICAgICAgIFwiZHhTY2hlZHVsZXItb3BlbkFwcG9pbnRtZW50XCI6IFwiT3BlbiBhcHBvaW50bWVudFwiLFxyXG4gICAgICAgIFwiZHhTY2hlZHVsZXItcmVjdXJyZW5jZU5ldmVyXCI6IFwiTmV2ZXJcIixcclxuICAgICAgICBcImR4U2NoZWR1bGVyLXJlY3VycmVuY2VNaW51dGVseVwiOiBcIkV2ZXJ5IG1pbnV0ZVwiLFxyXG4gICAgICAgIFwiZHhTY2hlZHVsZXItcmVjdXJyZW5jZUhvdXJseVwiOiBcIkhvdXJseVwiLFxyXG4gICAgICAgIFwiZHhTY2hlZHVsZXItcmVjdXJyZW5jZURhaWx5XCI6IFwiRGFpbHlcIixcclxuICAgICAgICBcImR4U2NoZWR1bGVyLXJlY3VycmVuY2VXZWVrbHlcIjogXCJXZWVrbHlcIixcclxuICAgICAgICBcImR4U2NoZWR1bGVyLXJlY3VycmVuY2VNb250aGx5XCI6IFwiTW9udGhseVwiLFxyXG4gICAgICAgIFwiZHhTY2hlZHVsZXItcmVjdXJyZW5jZVllYXJseVwiOiBcIlllYXJseVwiLFxyXG4gICAgICAgIFwiZHhTY2hlZHVsZXItcmVjdXJyZW5jZVJlcGVhdEV2ZXJ5XCI6IFwiUmVwZWF0IEV2ZXJ5XCIsXHJcbiAgICAgICAgXCJkeFNjaGVkdWxlci1yZWN1cnJlbmNlUmVwZWF0T25cIjogXCJSZXBlYXQgT25cIixcclxuICAgICAgICBcImR4U2NoZWR1bGVyLXJlY3VycmVuY2VFbmRcIjogXCJFbmQgcmVwZWF0XCIsXHJcbiAgICAgICAgXCJkeFNjaGVkdWxlci1yZWN1cnJlbmNlQWZ0ZXJcIjogXCJBZnRlclwiLFxyXG4gICAgICAgIFwiZHhTY2hlZHVsZXItcmVjdXJyZW5jZU9uXCI6IFwiT25cIixcclxuICAgICAgICBcImR4U2NoZWR1bGVyLXJlY3VycmVuY2VSZXBlYXRNaW51dGVseVwiOiBcIm1pbnV0ZShzKVwiLFxyXG4gICAgICAgIFwiZHhTY2hlZHVsZXItcmVjdXJyZW5jZVJlcGVhdEhvdXJseVwiOiBcImhvdXIocylcIixcclxuICAgICAgICBcImR4U2NoZWR1bGVyLXJlY3VycmVuY2VSZXBlYXREYWlseVwiOiBcImRheShzKVwiLFxyXG4gICAgICAgIFwiZHhTY2hlZHVsZXItcmVjdXJyZW5jZVJlcGVhdFdlZWtseVwiOiBcIndlZWsocylcIixcclxuICAgICAgICBcImR4U2NoZWR1bGVyLXJlY3VycmVuY2VSZXBlYXRNb250aGx5XCI6IFwibW9udGgocylcIixcclxuICAgICAgICBcImR4U2NoZWR1bGVyLXJlY3VycmVuY2VSZXBlYXRZZWFybHlcIjogXCJ5ZWFyKHMpXCIsXHJcbiAgICAgICAgXCJkeFNjaGVkdWxlci1zd2l0Y2hlckRheVwiOiBcIkRheVwiLFxyXG4gICAgICAgIFwiZHhTY2hlZHVsZXItc3dpdGNoZXJXZWVrXCI6IFwiV2Vla1wiLFxyXG4gICAgICAgIFwiZHhTY2hlZHVsZXItc3dpdGNoZXJXb3JrV2Vla1wiOiBcIldvcmsgV2Vla1wiLFxyXG4gICAgICAgIFwiZHhTY2hlZHVsZXItc3dpdGNoZXJNb250aFwiOiBcIk1vbnRoXCIsXHJcbiAgICAgICAgXCJkeFNjaGVkdWxlci1zd2l0Y2hlckFnZW5kYVwiOiBcIkFnZW5kYVwiLFxyXG4gICAgICAgIFwiZHhTY2hlZHVsZXItc3dpdGNoZXJUaW1lbGluZURheVwiOiBcIlRpbWVsaW5lIERheVwiLFxyXG4gICAgICAgIFwiZHhTY2hlZHVsZXItc3dpdGNoZXJUaW1lbGluZVdlZWtcIjogXCJUaW1lbGluZSBXZWVrXCIsXHJcbiAgICAgICAgXCJkeFNjaGVkdWxlci1zd2l0Y2hlclRpbWVsaW5lV29ya1dlZWtcIjogXCJUaW1lbGluZSBXb3JrIFdlZWtcIixcclxuICAgICAgICBcImR4U2NoZWR1bGVyLXN3aXRjaGVyVGltZWxpbmVNb250aFwiOiBcIlRpbWVsaW5lIE1vbnRoXCIsXHJcbiAgICAgICAgXCJkeFNjaGVkdWxlci1yZWN1cnJlbmNlUmVwZWF0T25EYXRlXCI6IFwib24gZGF0ZVwiLFxyXG4gICAgICAgIFwiZHhTY2hlZHVsZXItcmVjdXJyZW5jZVJlcGVhdENvdW50XCI6IFwib2NjdXJyZW5jZShzKVwiLFxyXG4gICAgICAgIFwiZHhTY2hlZHVsZXItYWxsRGF5XCI6IFwiQWxsIGRheVwiLFxyXG4gICAgICAgIFwiZHhTY2hlZHVsZXItY29uZmlybVJlY3VycmVuY2VFZGl0TWVzc2FnZVwiOiBcIkRvIHlvdSB3YW50IHRvIGVkaXQgb25seSB0aGlzIGFwcG9pbnRtZW50IG9yIHRoZSB3aG9sZSBzZXJpZXM/XCIsXHJcbiAgICAgICAgXCJkeFNjaGVkdWxlci1jb25maXJtUmVjdXJyZW5jZURlbGV0ZU1lc3NhZ2VcIjogXCJEbyB5b3Ugd2FudCB0byBkZWxldGUgb25seSB0aGlzIGFwcG9pbnRtZW50IG9yIHRoZSB3aG9sZSBzZXJpZXM/XCIsXHJcbiAgICAgICAgXCJkeFNjaGVkdWxlci1jb25maXJtUmVjdXJyZW5jZUVkaXRTZXJpZXNcIjogXCJFZGl0IHNlcmllc1wiLFxyXG4gICAgICAgIFwiZHhTY2hlZHVsZXItY29uZmlybVJlY3VycmVuY2VEZWxldGVTZXJpZXNcIjogXCJEZWxldGUgc2VyaWVzXCIsXHJcbiAgICAgICAgXCJkeFNjaGVkdWxlci1jb25maXJtUmVjdXJyZW5jZUVkaXRPY2N1cnJlbmNlXCI6IFwiRWRpdCBhcHBvaW50bWVudFwiLFxyXG4gICAgICAgIFwiZHhTY2hlZHVsZXItY29uZmlybVJlY3VycmVuY2VEZWxldGVPY2N1cnJlbmNlXCI6IFwiRGVsZXRlIGFwcG9pbnRtZW50XCIsXHJcbiAgICAgICAgXCJkeFNjaGVkdWxlci1ub1RpbWV6b25lVGl0bGVcIjogXCJObyB0aW1lem9uZVwiLFxyXG4gICAgICAgIFwiZHhTY2hlZHVsZXItbW9yZUFwcG9pbnRtZW50c1wiOiBcInswfSBtb3JlXCIsXHJcbiAgICAgICAgXCJkeENhbGVuZGFyLXRvZGF5QnV0dG9uVGV4dFwiOiBcIlRvZGF5XCIsXHJcbiAgICAgICAgXCJkeENhbGVuZGFyLWFyaWFXaWRnZXROYW1lXCI6IFwiQ2FsZW5kYXJcIixcclxuICAgICAgICBcImR4Q29sb3JWaWV3LWFyaWFSZWRcIjogXCJSZWRcIixcclxuICAgICAgICBcImR4Q29sb3JWaWV3LWFyaWFHcmVlblwiOiBcIkdyZWVuXCIsXHJcbiAgICAgICAgXCJkeENvbG9yVmlldy1hcmlhQmx1ZVwiOiBcIkJsdWVcIixcclxuICAgICAgICBcImR4Q29sb3JWaWV3LWFyaWFBbHBoYVwiOiBcIlRyYW5zcGFyZW5jeVwiLFxyXG4gICAgICAgIFwiZHhDb2xvclZpZXctYXJpYUhleFwiOiBcIkNvbG9yIGNvZGVcIixcclxuICAgICAgICBcImR4VGFnQm94LXNlbGVjdGVkXCI6IFwiezB9IHNlbGVjdGVkXCIsXHJcbiAgICAgICAgXCJkeFRhZ0JveC1hbGxTZWxlY3RlZFwiOiBcIkFsbCBzZWxlY3RlZCAoezB9KVwiLFxyXG4gICAgICAgIFwiZHhUYWdCb3gtbW9yZVNlbGVjdGVkXCI6IFwiezB9IG1vcmVcIixcclxuICAgICAgICBcInZpekV4cG9ydC1wcmludGluZ0J1dHRvblRleHRcIjogXCJQcmludFwiLFxyXG4gICAgICAgIFwidml6RXhwb3J0LXRpdGxlTWVudVRleHRcIjogXCJFeHBvcnRpbmcvUHJpbnRpbmdcIixcclxuICAgICAgICBcInZpekV4cG9ydC1leHBvcnRCdXR0b25UZXh0XCI6IFwiezB9IGZpbGVcIixcclxuICAgICAgICBcImR4RmlsdGVyQnVpbGRlci1hbmRcIjogXCJBbmRcIixcclxuICAgICAgICBcImR4RmlsdGVyQnVpbGRlci1vclwiOiBcIk9yXCIsXHJcbiAgICAgICAgXCJkeEZpbHRlckJ1aWxkZXItbm90QW5kXCI6IFwiTm90IEFuZFwiLFxyXG4gICAgICAgIFwiZHhGaWx0ZXJCdWlsZGVyLW5vdE9yXCI6IFwiTm90IE9yXCIsXHJcbiAgICAgICAgXCJkeEZpbHRlckJ1aWxkZXItYWRkQ29uZGl0aW9uXCI6IFwiQWRkIENvbmRpdGlvblwiLFxyXG4gICAgICAgIFwiZHhGaWx0ZXJCdWlsZGVyLWFkZEdyb3VwXCI6IFwiQWRkIEdyb3VwXCIsXHJcbiAgICAgICAgXCJkeEZpbHRlckJ1aWxkZXItZW50ZXJWYWx1ZVRleHRcIjogXCI8ZW50ZXIgYSB2YWx1ZT5cIixcclxuICAgICAgICBcImR4RmlsdGVyQnVpbGRlci1maWx0ZXJPcGVyYXRpb25FcXVhbHNcIjogXCJFcXVhbHNcIixcclxuICAgICAgICBcImR4RmlsdGVyQnVpbGRlci1maWx0ZXJPcGVyYXRpb25Ob3RFcXVhbHNcIjogXCJEb2VzIG5vdCBlcXVhbFwiLFxyXG4gICAgICAgIFwiZHhGaWx0ZXJCdWlsZGVyLWZpbHRlck9wZXJhdGlvbkxlc3NcIjogXCJJcyBsZXNzIHRoYW5cIixcclxuICAgICAgICBcImR4RmlsdGVyQnVpbGRlci1maWx0ZXJPcGVyYXRpb25MZXNzT3JFcXVhbHNcIjogXCJJcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG9cIixcclxuICAgICAgICBcImR4RmlsdGVyQnVpbGRlci1maWx0ZXJPcGVyYXRpb25HcmVhdGVyXCI6IFwiSXMgZ3JlYXRlciB0aGFuXCIsXHJcbiAgICAgICAgXCJkeEZpbHRlckJ1aWxkZXItZmlsdGVyT3BlcmF0aW9uR3JlYXRlck9yRXF1YWxzXCI6IFwiSXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvXCIsXHJcbiAgICAgICAgXCJkeEZpbHRlckJ1aWxkZXItZmlsdGVyT3BlcmF0aW9uU3RhcnRzV2l0aFwiOiBcIlN0YXJ0cyB3aXRoXCIsXHJcbiAgICAgICAgXCJkeEZpbHRlckJ1aWxkZXItZmlsdGVyT3BlcmF0aW9uQ29udGFpbnNcIjogXCJDb250YWluc1wiLFxyXG4gICAgICAgIFwiZHhGaWx0ZXJCdWlsZGVyLWZpbHRlck9wZXJhdGlvbk5vdENvbnRhaW5zXCI6IFwiRG9lcyBub3QgY29udGFpblwiLFxyXG4gICAgICAgIFwiZHhGaWx0ZXJCdWlsZGVyLWZpbHRlck9wZXJhdGlvbkVuZHNXaXRoXCI6IFwiRW5kcyB3aXRoXCIsXHJcbiAgICAgICAgXCJkeEZpbHRlckJ1aWxkZXItZmlsdGVyT3BlcmF0aW9uSXNCbGFua1wiOiBcIklzIGJsYW5rXCIsXHJcbiAgICAgICAgXCJkeEZpbHRlckJ1aWxkZXItZmlsdGVyT3BlcmF0aW9uSXNOb3RCbGFua1wiOiBcIklzIG5vdCBibGFua1wiLFxyXG4gICAgICAgIFwiZHhGaWx0ZXJCdWlsZGVyLWZpbHRlck9wZXJhdGlvbkJldHdlZW5cIjogXCJJcyBiZXR3ZWVuXCIsXHJcbiAgICAgICAgXCJkeEZpbHRlckJ1aWxkZXItZmlsdGVyT3BlcmF0aW9uQW55T2ZcIjogXCJJcyBhbnkgb2ZcIixcclxuICAgICAgICBcImR4RmlsdGVyQnVpbGRlci1maWx0ZXJPcGVyYXRpb25Ob25lT2ZcIjogXCJJcyBub25lIG9mXCIsXHJcbiAgICAgICAgXCJkeEh0bWxFZGl0b3ItZGlhbG9nQ29sb3JDYXB0aW9uXCI6IFwiQ2hhbmdlIEZvbnQgQ29sb3JcIixcclxuICAgICAgICBcImR4SHRtbEVkaXRvci1kaWFsb2dCYWNrZ3JvdW5kQ2FwdGlvblwiOiBcIkNoYW5nZSBCYWNrZ3JvdW5kIENvbG9yXCIsXHJcbiAgICAgICAgXCJkeEh0bWxFZGl0b3ItZGlhbG9nTGlua0NhcHRpb25cIjogXCJBZGQgTGlua1wiLFxyXG4gICAgICAgIFwiZHhIdG1sRWRpdG9yLWRpYWxvZ0xpbmtVcmxGaWVsZFwiOiBcIlVSTFwiLFxyXG4gICAgICAgIFwiZHhIdG1sRWRpdG9yLWRpYWxvZ0xpbmtUZXh0RmllbGRcIjogXCJUZXh0XCIsXHJcbiAgICAgICAgXCJkeEh0bWxFZGl0b3ItZGlhbG9nTGlua1RhcmdldEZpZWxkXCI6IFwiT3BlbiBsaW5rIGluIG5ldyB3aW5kb3dcIixcclxuICAgICAgICBcImR4SHRtbEVkaXRvci1kaWFsb2dJbWFnZUNhcHRpb25cIjogXCJBZGQgSW1hZ2VcIixcclxuICAgICAgICBcImR4SHRtbEVkaXRvci1kaWFsb2dJbWFnZVVybEZpZWxkXCI6IFwiVVJMXCIsXHJcbiAgICAgICAgXCJkeEh0bWxFZGl0b3ItZGlhbG9nSW1hZ2VBbHRGaWVsZFwiOiBcIkFsdGVybmF0ZSB0ZXh0XCIsXHJcbiAgICAgICAgXCJkeEh0bWxFZGl0b3ItZGlhbG9nSW1hZ2VXaWR0aEZpZWxkXCI6IFwiV2lkdGggKHB4KVwiLFxyXG4gICAgICAgIFwiZHhIdG1sRWRpdG9yLWRpYWxvZ0ltYWdlSGVpZ2h0RmllbGRcIjogXCJIZWlnaHQgKHB4KVwiLFxyXG4gICAgICAgIFwiZHhIdG1sRWRpdG9yLWRpYWxvZ0luc2VydFRhYmxlUm93c0ZpZWxkXCI6IFwiUm93c1wiLFxyXG4gICAgICAgIFwiZHhIdG1sRWRpdG9yLWRpYWxvZ0luc2VydFRhYmxlQ29sdW1uc0ZpZWxkXCI6IFwiQ29sdW1uc1wiLFxyXG4gICAgICAgIFwiZHhIdG1sRWRpdG9yLWRpYWxvZ0luc2VydFRhYmxlQ2FwdGlvblwiOiBcIkluc2VydCBUYWJsZVwiLFxyXG4gICAgICAgIFwiZHhIdG1sRWRpdG9yLWhlYWRpbmdcIjogXCJIZWFkaW5nXCIsXHJcbiAgICAgICAgXCJkeEh0bWxFZGl0b3Itbm9ybWFsVGV4dFwiOiBcIk5vcm1hbCB0ZXh0XCIsXHJcbiAgICAgICAgXCJkeEh0bWxFZGl0b3ItYmFja2dyb3VuZFwiOiBcIkJhY2tncm91bmQgQ29sb3JcIixcclxuICAgICAgICBcImR4SHRtbEVkaXRvci1ib2xkXCI6IFwiQm9sZFwiLFxyXG4gICAgICAgIFwiZHhIdG1sRWRpdG9yLWNvbG9yXCI6IFwiRm9udCBDb2xvclwiLFxyXG4gICAgICAgIFwiZHhIdG1sRWRpdG9yLWZvbnRcIjogXCJGb250XCIsXHJcbiAgICAgICAgXCJkeEh0bWxFZGl0b3ItaXRhbGljXCI6IFwiSXRhbGljXCIsXHJcbiAgICAgICAgXCJkeEh0bWxFZGl0b3ItbGlua1wiOiBcIkFkZCBMaW5rXCIsXHJcbiAgICAgICAgXCJkeEh0bWxFZGl0b3ItaW1hZ2VcIjogXCJBZGQgSW1hZ2VcIixcclxuICAgICAgICBcImR4SHRtbEVkaXRvci1zaXplXCI6IFwiU2l6ZVwiLFxyXG4gICAgICAgIFwiZHhIdG1sRWRpdG9yLXN0cmlrZVwiOiBcIlN0cmlrZXRocm91Z2hcIixcclxuICAgICAgICBcImR4SHRtbEVkaXRvci1zdWJzY3JpcHRcIjogXCJTdWJzY3JpcHRcIixcclxuICAgICAgICBcImR4SHRtbEVkaXRvci1zdXBlcnNjcmlwdFwiOiBcIlN1cGVyc2NyaXB0XCIsXHJcbiAgICAgICAgXCJkeEh0bWxFZGl0b3ItdW5kZXJsaW5lXCI6IFwiVW5kZXJsaW5lXCIsXHJcbiAgICAgICAgXCJkeEh0bWxFZGl0b3ItYmxvY2txdW90ZVwiOiBcIkJsb2NrcXVvdGVcIixcclxuICAgICAgICBcImR4SHRtbEVkaXRvci1oZWFkZXJcIjogXCJIZWFkZXJcIixcclxuICAgICAgICBcImR4SHRtbEVkaXRvci1pbmNyZWFzZUluZGVudFwiOiBcIkluY3JlYXNlIEluZGVudFwiLFxyXG4gICAgICAgIFwiZHhIdG1sRWRpdG9yLWRlY3JlYXNlSW5kZW50XCI6IFwiRGVjcmVhc2UgSW5kZW50XCIsXHJcbiAgICAgICAgXCJkeEh0bWxFZGl0b3Itb3JkZXJlZExpc3RcIjogXCJPcmRlcmVkIExpc3RcIixcclxuICAgICAgICBcImR4SHRtbEVkaXRvci1idWxsZXRMaXN0XCI6IFwiQnVsbGV0IExpc3RcIixcclxuICAgICAgICBcImR4SHRtbEVkaXRvci1hbGlnbkxlZnRcIjogXCJBbGlnbiBMZWZ0XCIsXHJcbiAgICAgICAgXCJkeEh0bWxFZGl0b3ItYWxpZ25DZW50ZXJcIjogXCJBbGlnbiBDZW50ZXJcIixcclxuICAgICAgICBcImR4SHRtbEVkaXRvci1hbGlnblJpZ2h0XCI6IFwiQWxpZ24gUmlnaHRcIixcclxuICAgICAgICBcImR4SHRtbEVkaXRvci1hbGlnbkp1c3RpZnlcIjogXCJBbGlnbiBKdXN0aWZ5XCIsXHJcbiAgICAgICAgXCJkeEh0bWxFZGl0b3ItY29kZUJsb2NrXCI6IFwiQ29kZSBCbG9ja1wiLFxyXG4gICAgICAgIFwiZHhIdG1sRWRpdG9yLXZhcmlhYmxlXCI6IFwiQWRkIFZhcmlhYmxlXCIsXHJcbiAgICAgICAgXCJkeEh0bWxFZGl0b3ItdW5kb1wiOiBcIlVuZG9cIixcclxuICAgICAgICBcImR4SHRtbEVkaXRvci1yZWRvXCI6IFwiUmVkb1wiLFxyXG4gICAgICAgIFwiZHhIdG1sRWRpdG9yLWNsZWFyXCI6IFwiQ2xlYXIgRm9ybWF0dGluZ1wiLFxyXG4gICAgICAgIFwiZHhIdG1sRWRpdG9yLWluc2VydFRhYmxlXCI6IFwiSW5zZXJ0IFRhYmxlXCIsXHJcbiAgICAgICAgXCJkeEh0bWxFZGl0b3ItaW5zZXJ0Um93QWJvdmVcIjogXCJJbnNlcnQgUm93IEFib3ZlXCIsXHJcbiAgICAgICAgXCJkeEh0bWxFZGl0b3ItaW5zZXJ0Um93QmVsb3dcIjogXCJJbnNlcnQgUm93IEJlbG93XCIsXHJcbiAgICAgICAgXCJkeEh0bWxFZGl0b3ItaW5zZXJ0Q29sdW1uTGVmdFwiOiBcIkluc2VydCBDb2x1bW4gTGVmdFwiLFxyXG4gICAgICAgIFwiZHhIdG1sRWRpdG9yLWluc2VydENvbHVtblJpZ2h0XCI6IFwiSW5zZXJ0IENvbHVtbiBSaWdodFwiLFxyXG4gICAgICAgIFwiZHhIdG1sRWRpdG9yLWRlbGV0ZUNvbHVtblwiOiBcIkRlbGV0ZSBDb2x1bW5cIixcclxuICAgICAgICBcImR4SHRtbEVkaXRvci1kZWxldGVSb3dcIjogXCJEZWxldGUgUm93XCIsXHJcbiAgICAgICAgXCJkeEh0bWxFZGl0b3ItZGVsZXRlVGFibGVcIjogXCJEZWxldGUgVGFibGVcIixcclxuICAgICAgICBcImR4SHRtbEVkaXRvci1saXN0XCI6IFwiTGlzdFwiLFxyXG4gICAgICAgIFwiZHhIdG1sRWRpdG9yLW9yZGVyZWRcIjogXCJPcmRlcmVkXCIsXHJcbiAgICAgICAgXCJkeEh0bWxFZGl0b3ItYnVsbGV0XCI6IFwiQnVsbGV0XCIsXHJcbiAgICAgICAgXCJkeEh0bWxFZGl0b3ItYWxpZ25cIjogXCJBbGlnblwiLFxyXG4gICAgICAgIFwiZHhIdG1sRWRpdG9yLWNlbnRlclwiOiBcIkNlbnRlclwiLFxyXG4gICAgICAgIFwiZHhIdG1sRWRpdG9yLWxlZnRcIjogXCJMZWZ0XCIsXHJcbiAgICAgICAgXCJkeEh0bWxFZGl0b3ItcmlnaHRcIjogXCJSaWdodFwiLFxyXG4gICAgICAgIFwiZHhIdG1sRWRpdG9yLWluZGVudFwiOiBcIkluZGVudFwiLFxyXG4gICAgICAgIFwiZHhIdG1sRWRpdG9yLWp1c3RpZnlcIjogXCJKdXN0aWZ5XCIsXHJcbiAgICAgICAgXCJkeEZpbGVNYW5hZ2VyLW5ld0RpcmVjdG9yeU5hbWVcIjogXCJVbnRpdGxlZCBkaXJlY3RvcnlcIixcclxuICAgICAgICBcImR4RmlsZU1hbmFnZXItcm9vdERpcmVjdG9yeU5hbWVcIjogXCJGaWxlc1wiLFxyXG4gICAgICAgIFwiZHhGaWxlTWFuYWdlci1lcnJvck5vQWNjZXNzXCI6IFwiQWNjZXNzIERlbmllZC4gT3BlcmF0aW9uIGNvdWxkIG5vdCBiZSBjb21wbGV0ZWQuXCIsXHJcbiAgICAgICAgXCJkeEZpbGVNYW5hZ2VyLWVycm9yRGlyZWN0b3J5RXhpc3RzRm9ybWF0XCI6IFwiRGlyZWN0b3J5ICd7MH0nIGFscmVhZHkgZXhpc3RzLlwiLFxyXG4gICAgICAgIFwiZHhGaWxlTWFuYWdlci1lcnJvckZpbGVFeGlzdHNGb3JtYXRcIjogXCJGaWxlICd7MH0nIGFscmVhZHkgZXhpc3RzLlwiLFxyXG4gICAgICAgIFwiZHhGaWxlTWFuYWdlci1lcnJvckZpbGVOb3RGb3VuZEZvcm1hdFwiOiBcIkZpbGUgJ3swfScgbm90IGZvdW5kLlwiLFxyXG4gICAgICAgIFwiZHhGaWxlTWFuYWdlci1lcnJvckRpcmVjdG9yeU5vdEZvdW5kRm9ybWF0XCI6IFwiRGlyZWN0b3J5ICd7MH0nIG5vdCBmb3VuZC5cIixcclxuICAgICAgICBcImR4RmlsZU1hbmFnZXItZXJyb3JXcm9uZ0ZpbGVFeHRlbnNpb25cIjogXCJGaWxlIGV4dGVuc2lvbiBpcyBub3QgYWxsb3dlZC5cIixcclxuICAgICAgICBcImR4RmlsZU1hbmFnZXItZXJyb3JNYXhGaWxlU2l6ZUV4Y2VlZGVkXCI6IFwiRmlsZSBzaXplIGV4Y2VlZHMgdGhlIG1heGltdW0gYWxsb3dlZCBzaXplLlwiLFxyXG4gICAgICAgIFwiZHhGaWxlTWFuYWdlci1lcnJvckludmFsaWRTeW1ib2xzXCI6IFwiVGhpcyBuYW1lIGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVycy5cIixcclxuICAgICAgICBcImR4RmlsZU1hbmFnZXItZXJyb3JEZWZhdWx0XCI6IFwiVW5zcGVjaWZpZWQgZXJyb3IuXCIsXHJcbiAgICAgICAgXCJkeEZpbGVNYW5hZ2VyLWVycm9yRGlyZWN0b3J5T3BlbkZhaWxlZFwiOiBcIlRoZSBkaXJlY3RvcnkgY2Fubm90IGJlIG9wZW5lZFwiLFxyXG4gICAgICAgIFwiZHhGaWxlTWFuYWdlci1jb21tYW5kQ3JlYXRlXCI6IFwiTmV3IGRpcmVjdG9yeVwiLFxyXG4gICAgICAgIFwiZHhGaWxlTWFuYWdlci1jb21tYW5kUmVuYW1lXCI6IFwiUmVuYW1lXCIsXHJcbiAgICAgICAgXCJkeEZpbGVNYW5hZ2VyLWNvbW1hbmRNb3ZlXCI6IFwiTW92ZSB0b1wiLFxyXG4gICAgICAgIFwiZHhGaWxlTWFuYWdlci1jb21tYW5kQ29weVwiOiBcIkNvcHkgdG9cIixcclxuICAgICAgICBcImR4RmlsZU1hbmFnZXItY29tbWFuZERlbGV0ZVwiOiBcIkRlbGV0ZVwiLFxyXG4gICAgICAgIFwiZHhGaWxlTWFuYWdlci1jb21tYW5kRG93bmxvYWRcIjogXCJEb3dubG9hZFwiLFxyXG4gICAgICAgIFwiZHhGaWxlTWFuYWdlci1jb21tYW5kVXBsb2FkXCI6IFwiVXBsb2FkIGZpbGVzXCIsXHJcbiAgICAgICAgXCJkeEZpbGVNYW5hZ2VyLWNvbW1hbmRSZWZyZXNoXCI6IFwiUmVmcmVzaFwiLFxyXG4gICAgICAgIFwiZHhGaWxlTWFuYWdlci1jb21tYW5kVGh1bWJuYWlsc1wiOiBcIlRodW1ibmFpbHMgVmlld1wiLFxyXG4gICAgICAgIFwiZHhGaWxlTWFuYWdlci1jb21tYW5kRGV0YWlsc1wiOiBcIkRldGFpbHMgVmlld1wiLFxyXG4gICAgICAgIFwiZHhGaWxlTWFuYWdlci1jb21tYW5kQ2xlYXJTZWxlY3Rpb25cIjogXCJDbGVhciBzZWxlY3Rpb25cIixcclxuICAgICAgICBcImR4RmlsZU1hbmFnZXItY29tbWFuZFNob3dOYXZQYW5lXCI6IFwiVG9nZ2xlIG5hdmlnYXRpb24gcGFuZVwiLFxyXG4gICAgICAgIFwiZHhGaWxlTWFuYWdlci1kaWFsb2dEaXJlY3RvcnlDaG9vc2VyTW92ZVRpdGxlXCI6IFwiTW92ZSB0b1wiLFxyXG4gICAgICAgIFwiZHhGaWxlTWFuYWdlci1kaWFsb2dEaXJlY3RvcnlDaG9vc2VyTW92ZUJ1dHRvblRleHRcIjogXCJNb3ZlXCIsXHJcbiAgICAgICAgXCJkeEZpbGVNYW5hZ2VyLWRpYWxvZ0RpcmVjdG9yeUNob29zZXJDb3B5VGl0bGVcIjogXCJDb3B5IHRvXCIsXHJcbiAgICAgICAgXCJkeEZpbGVNYW5hZ2VyLWRpYWxvZ0RpcmVjdG9yeUNob29zZXJDb3B5QnV0dG9uVGV4dFwiOiBcIkNvcHlcIixcclxuICAgICAgICBcImR4RmlsZU1hbmFnZXItZGlhbG9nUmVuYW1lSXRlbVRpdGxlXCI6IFwiUmVuYW1lXCIsXHJcbiAgICAgICAgXCJkeEZpbGVNYW5hZ2VyLWRpYWxvZ1JlbmFtZUl0ZW1CdXR0b25UZXh0XCI6IFwiU2F2ZVwiLFxyXG4gICAgICAgIFwiZHhGaWxlTWFuYWdlci1kaWFsb2dDcmVhdGVEaXJlY3RvcnlUaXRsZVwiOiBcIk5ldyBkaXJlY3RvcnlcIixcclxuICAgICAgICBcImR4RmlsZU1hbmFnZXItZGlhbG9nQ3JlYXRlRGlyZWN0b3J5QnV0dG9uVGV4dFwiOiBcIkNyZWF0ZVwiLFxyXG4gICAgICAgIFwiZHhGaWxlTWFuYWdlci1kaWFsb2dEZWxldGVJdGVtVGl0bGVcIjogXCJEZWxldGVcIixcclxuICAgICAgICBcImR4RmlsZU1hbmFnZXItZGlhbG9nRGVsZXRlSXRlbUJ1dHRvblRleHRcIjogXCJEZWxldGVcIixcclxuICAgICAgICBcImR4RmlsZU1hbmFnZXItZGlhbG9nRGVsZXRlSXRlbVNpbmdsZUl0ZW1Db25maXJtYXRpb25cIjogXCJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHswfT9cIixcclxuICAgICAgICBcImR4RmlsZU1hbmFnZXItZGlhbG9nRGVsZXRlSXRlbU11bHRpcGxlSXRlbXNDb25maXJtYXRpb25cIjogXCJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHswfSBpdGVtcz9cIixcclxuICAgICAgICBcImR4RmlsZU1hbmFnZXItZGlhbG9nQnV0dG9uQ2FuY2VsXCI6IFwiQ2FuY2VsXCIsXHJcbiAgICAgICAgXCJkeEZpbGVNYW5hZ2VyLWVkaXRpbmdDcmVhdGVTaW5nbGVJdGVtUHJvY2Vzc2luZ01lc3NhZ2VcIjogXCJDcmVhdGluZyBhIGRpcmVjdG9yeSBpbnNpZGUgezB9XCIsXHJcbiAgICAgICAgXCJkeEZpbGVNYW5hZ2VyLWVkaXRpbmdDcmVhdGVTaW5nbGVJdGVtU3VjY2Vzc01lc3NhZ2VcIjogXCJDcmVhdGVkIGEgZGlyZWN0b3J5IGluc2lkZSB7MH1cIixcclxuICAgICAgICBcImR4RmlsZU1hbmFnZXItZWRpdGluZ0NyZWF0ZVNpbmdsZUl0ZW1FcnJvck1lc3NhZ2VcIjogXCJEaXJlY3Rvcnkgd2FzIG5vdCBjcmVhdGVkXCIsXHJcbiAgICAgICAgXCJkeEZpbGVNYW5hZ2VyLWVkaXRpbmdDcmVhdGVDb21tb25FcnJvck1lc3NhZ2VcIjogXCJEaXJlY3Rvcnkgd2FzIG5vdCBjcmVhdGVkXCIsXHJcbiAgICAgICAgXCJkeEZpbGVNYW5hZ2VyLWVkaXRpbmdSZW5hbWVTaW5nbGVJdGVtUHJvY2Vzc2luZ01lc3NhZ2VcIjogXCJSZW5hbWluZyBhbiBpdGVtIGluc2lkZSB7MH1cIixcclxuICAgICAgICBcImR4RmlsZU1hbmFnZXItZWRpdGluZ1JlbmFtZVNpbmdsZUl0ZW1TdWNjZXNzTWVzc2FnZVwiOiBcIlJlbmFtZWQgYW4gaXRlbSBpbnNpZGUgezB9XCIsXHJcbiAgICAgICAgXCJkeEZpbGVNYW5hZ2VyLWVkaXRpbmdSZW5hbWVTaW5nbGVJdGVtRXJyb3JNZXNzYWdlXCI6IFwiSXRlbSB3YXMgbm90IHJlbmFtZWRcIixcclxuICAgICAgICBcImR4RmlsZU1hbmFnZXItZWRpdGluZ1JlbmFtZUNvbW1vbkVycm9yTWVzc2FnZVwiOiBcIkl0ZW0gd2FzIG5vdCByZW5hbWVkXCIsXHJcbiAgICAgICAgXCJkeEZpbGVNYW5hZ2VyLWVkaXRpbmdEZWxldGVTaW5nbGVJdGVtUHJvY2Vzc2luZ01lc3NhZ2VcIjogXCJEZWxldGluZyBhbiBpdGVtIGZyb20gezB9XCIsXHJcbiAgICAgICAgXCJkeEZpbGVNYW5hZ2VyLWVkaXRpbmdEZWxldGVNdWx0aXBsZUl0ZW1zUHJvY2Vzc2luZ01lc3NhZ2VcIjogXCJEZWxldGluZyB7MH0gaXRlbXMgZnJvbSB7MX1cIixcclxuICAgICAgICBcImR4RmlsZU1hbmFnZXItZWRpdGluZ0RlbGV0ZVNpbmdsZUl0ZW1TdWNjZXNzTWVzc2FnZVwiOiBcIkRlbGV0ZWQgYW4gaXRlbSBmcm9tIHswfVwiLFxyXG4gICAgICAgIFwiZHhGaWxlTWFuYWdlci1lZGl0aW5nRGVsZXRlTXVsdGlwbGVJdGVtc1N1Y2Nlc3NNZXNzYWdlXCI6IFwiRGVsZXRlZCB7MH0gaXRlbXMgZnJvbSB7MX1cIixcclxuICAgICAgICBcImR4RmlsZU1hbmFnZXItZWRpdGluZ0RlbGV0ZVNpbmdsZUl0ZW1FcnJvck1lc3NhZ2VcIjogXCJJdGVtIHdhcyBub3QgZGVsZXRlZFwiLFxyXG4gICAgICAgIFwiZHhGaWxlTWFuYWdlci1lZGl0aW5nRGVsZXRlTXVsdGlwbGVJdGVtc0Vycm9yTWVzc2FnZVwiOiBcInswfSBpdGVtcyB3ZXJlIG5vdCBkZWxldGVkXCIsXHJcbiAgICAgICAgXCJkeEZpbGVNYW5hZ2VyLWVkaXRpbmdEZWxldGVDb21tb25FcnJvck1lc3NhZ2VcIjogXCJTb21lIGl0ZW1zIHdlcmUgbm90IGRlbGV0ZWRcIixcclxuICAgICAgICBcImR4RmlsZU1hbmFnZXItZWRpdGluZ01vdmVTaW5nbGVJdGVtUHJvY2Vzc2luZ01lc3NhZ2VcIjogXCJNb3ZpbmcgYW4gaXRlbSB0byB7MH1cIixcclxuICAgICAgICBcImR4RmlsZU1hbmFnZXItZWRpdGluZ01vdmVNdWx0aXBsZUl0ZW1zUHJvY2Vzc2luZ01lc3NhZ2VcIjogXCJNb3ZpbmcgezB9IGl0ZW1zIHRvIHsxfVwiLFxyXG4gICAgICAgIFwiZHhGaWxlTWFuYWdlci1lZGl0aW5nTW92ZVNpbmdsZUl0ZW1TdWNjZXNzTWVzc2FnZVwiOiBcIk1vdmVkIGFuIGl0ZW0gdG8gezB9XCIsXHJcbiAgICAgICAgXCJkeEZpbGVNYW5hZ2VyLWVkaXRpbmdNb3ZlTXVsdGlwbGVJdGVtc1N1Y2Nlc3NNZXNzYWdlXCI6IFwiTW92ZWQgezB9IGl0ZW1zIHRvIHsxfVwiLFxyXG4gICAgICAgIFwiZHhGaWxlTWFuYWdlci1lZGl0aW5nTW92ZVNpbmdsZUl0ZW1FcnJvck1lc3NhZ2VcIjogXCJJdGVtIHdhcyBub3QgbW92ZWRcIixcclxuICAgICAgICBcImR4RmlsZU1hbmFnZXItZWRpdGluZ01vdmVNdWx0aXBsZUl0ZW1zRXJyb3JNZXNzYWdlXCI6IFwiezB9IGl0ZW1zIHdlcmUgbm90IG1vdmVkXCIsXHJcbiAgICAgICAgXCJkeEZpbGVNYW5hZ2VyLWVkaXRpbmdNb3ZlQ29tbW9uRXJyb3JNZXNzYWdlXCI6IFwiU29tZSBpdGVtcyB3ZXJlIG5vdCBtb3ZlZFwiLFxyXG4gICAgICAgIFwiZHhGaWxlTWFuYWdlci1lZGl0aW5nQ29weVNpbmdsZUl0ZW1Qcm9jZXNzaW5nTWVzc2FnZVwiOiBcIkNvcHlpbmcgYW4gaXRlbSB0byB7MH1cIixcclxuICAgICAgICBcImR4RmlsZU1hbmFnZXItZWRpdGluZ0NvcHlNdWx0aXBsZUl0ZW1zUHJvY2Vzc2luZ01lc3NhZ2VcIjogXCJDb3B5aW5nIHswfSBpdGVtcyB0byB7MX1cIixcclxuICAgICAgICBcImR4RmlsZU1hbmFnZXItZWRpdGluZ0NvcHlTaW5nbGVJdGVtU3VjY2Vzc01lc3NhZ2VcIjogXCJDb3BpZWQgYW4gaXRlbSB0byB7MH1cIixcclxuICAgICAgICBcImR4RmlsZU1hbmFnZXItZWRpdGluZ0NvcHlNdWx0aXBsZUl0ZW1zU3VjY2Vzc01lc3NhZ2VcIjogXCJDb3BpZWQgezB9IGl0ZW1zIHRvIHsxfVwiLFxyXG4gICAgICAgIFwiZHhGaWxlTWFuYWdlci1lZGl0aW5nQ29weVNpbmdsZUl0ZW1FcnJvck1lc3NhZ2VcIjogXCJJdGVtIHdhcyBub3QgY29waWVkXCIsXHJcbiAgICAgICAgXCJkeEZpbGVNYW5hZ2VyLWVkaXRpbmdDb3B5TXVsdGlwbGVJdGVtc0Vycm9yTWVzc2FnZVwiOiBcInswfSBpdGVtcyB3ZXJlIG5vdCBjb3BpZWRcIixcclxuICAgICAgICBcImR4RmlsZU1hbmFnZXItZWRpdGluZ0NvcHlDb21tb25FcnJvck1lc3NhZ2VcIjogXCJTb21lIGl0ZW1zIHdlcmUgbm90IGNvcGllZFwiLFxyXG4gICAgICAgIFwiZHhGaWxlTWFuYWdlci1lZGl0aW5nVXBsb2FkU2luZ2xlSXRlbVByb2Nlc3NpbmdNZXNzYWdlXCI6IFwiVXBsb2FkaW5nIGFuIGl0ZW0gdG8gezB9XCIsXHJcbiAgICAgICAgXCJkeEZpbGVNYW5hZ2VyLWVkaXRpbmdVcGxvYWRNdWx0aXBsZUl0ZW1zUHJvY2Vzc2luZ01lc3NhZ2VcIjogXCJVcGxvYWRpbmcgezB9IGl0ZW1zIHRvIHsxfVwiLFxyXG4gICAgICAgIFwiZHhGaWxlTWFuYWdlci1lZGl0aW5nVXBsb2FkU2luZ2xlSXRlbVN1Y2Nlc3NNZXNzYWdlXCI6IFwiVXBsb2FkZWQgYW4gaXRlbSB0byB7MH1cIixcclxuICAgICAgICBcImR4RmlsZU1hbmFnZXItZWRpdGluZ1VwbG9hZE11bHRpcGxlSXRlbXNTdWNjZXNzTWVzc2FnZVwiOiBcIlVwbG9hZGVkIHswfSBpdGVtcyB0byB7MX1cIixcclxuICAgICAgICBcImR4RmlsZU1hbmFnZXItZWRpdGluZ1VwbG9hZFNpbmdsZUl0ZW1FcnJvck1lc3NhZ2VcIjogXCJJdGVtIHdhcyBub3QgdXBsb2FkZWRcIixcclxuICAgICAgICBcImR4RmlsZU1hbmFnZXItZWRpdGluZ1VwbG9hZE11bHRpcGxlSXRlbXNFcnJvck1lc3NhZ2VcIjogXCJ7MH0gaXRlbXMgd2VyZSBub3QgdXBsb2FkZWRcIixcclxuICAgICAgICBcImR4RmlsZU1hbmFnZXItZWRpdGluZ1VwbG9hZENhbmNlbGVkTWVzc2FnZVwiOiBcIkNhbmNlbGVkXCIsXHJcbiAgICAgICAgXCJkeEZpbGVNYW5hZ2VyLWxpc3REZXRhaWxzQ29sdW1uQ2FwdGlvbk5hbWVcIjogXCJOYW1lXCIsXHJcbiAgICAgICAgXCJkeEZpbGVNYW5hZ2VyLWxpc3REZXRhaWxzQ29sdW1uQ2FwdGlvbkRhdGVNb2RpZmllZFwiOiBcIkRhdGUgTW9kaWZpZWRcIixcclxuICAgICAgICBcImR4RmlsZU1hbmFnZXItbGlzdERldGFpbHNDb2x1bW5DYXB0aW9uRmlsZVNpemVcIjogXCJGaWxlIFNpemVcIixcclxuICAgICAgICBcImR4RmlsZU1hbmFnZXItbGlzdFRodW1ibmFpbHNUb29sdGlwVGV4dFNpemVcIjogXCJTaXplXCIsXHJcbiAgICAgICAgXCJkeEZpbGVNYW5hZ2VyLWxpc3RUaHVtYm5haWxzVG9vbHRpcFRleHREYXRlTW9kaWZpZWRcIjogXCJEYXRlIE1vZGlmaWVkXCIsXHJcbiAgICAgICAgXCJkeEZpbGVNYW5hZ2VyLW5vdGlmaWNhdGlvblByb2dyZXNzUGFuZWxUaXRsZVwiOiBcIlByb2dyZXNzXCIsXHJcbiAgICAgICAgXCJkeEZpbGVNYW5hZ2VyLW5vdGlmaWNhdGlvblByb2dyZXNzUGFuZWxFbXB0eUxpc3RUZXh0XCI6IFwiTm8gb3BlcmF0aW9uc1wiLFxyXG4gICAgICAgIFwiZHhGaWxlTWFuYWdlci1ub3RpZmljYXRpb25Qcm9ncmVzc1BhbmVsT3BlcmF0aW9uQ2FuY2VsZWRcIjogXCJDYW5jZWxlZFwiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLWNhdGVnb3J5R2VuZXJhbFwiOiBcIkdlbmVyYWxcIixcclxuICAgICAgICBcImR4RGlhZ3JhbS1jYXRlZ29yeUZsb3djaGFydFwiOiBcIkZsb3djaGFydFwiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLWNhdGVnb3J5T3JnQ2hhcnRcIjogXCJPcmcgQ2hhcnRcIixcclxuICAgICAgICBcImR4RGlhZ3JhbS1jYXRlZ29yeUNvbnRhaW5lcnNcIjogXCJDb250YWluZXJzXCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tY2F0ZWdvcnlDdXN0b21cIjogXCJDdXN0b21cIixcclxuICAgICAgICBcImR4RGlhZ3JhbS1jb21tYW5kRXhwb3J0VG9TdmdcIjogXCJFeHBvcnQgdG8gU1ZHXCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tY29tbWFuZEV4cG9ydFRvUG5nXCI6IFwiRXhwb3J0IHRvIFBOR1wiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLWNvbW1hbmRFeHBvcnRUb0pwZ1wiOiBcIkV4cG9ydCB0byBKUEVHXCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tY29tbWFuZFVuZG9cIjogXCJVbmRvXCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tY29tbWFuZFJlZG9cIjogXCJSZWRvXCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tY29tbWFuZEZvbnROYW1lXCI6IFwiRm9udCBOYW1lXCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tY29tbWFuZEZvbnRTaXplXCI6IFwiRm9udCBTaXplXCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tY29tbWFuZEJvbGRcIjogXCJCb2xkXCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tY29tbWFuZEl0YWxpY1wiOiBcIkl0YWxpY1wiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLWNvbW1hbmRVbmRlcmxpbmVcIjogXCJVbmRlcmxpbmVcIixcclxuICAgICAgICBcImR4RGlhZ3JhbS1jb21tYW5kVGV4dENvbG9yXCI6IFwiRm9udCBDb2xvclwiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLWNvbW1hbmRMaW5lQ29sb3JcIjogXCJMaW5lIENvbG9yXCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tY29tbWFuZExpbmVXaWR0aFwiOiBcIkxpbmUgV2lkdGhcIixcclxuICAgICAgICBcImR4RGlhZ3JhbS1jb21tYW5kTGluZVN0eWxlXCI6IFwiTGluZSBTdHlsZVwiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLWNvbW1hbmRMaW5lU3R5bGVTb2xpZFwiOiBcIlNvbGlkXCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tY29tbWFuZExpbmVTdHlsZURvdHRlZFwiOiBcIkRvdHRlZFwiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLWNvbW1hbmRMaW5lU3R5bGVEYXNoZWRcIjogXCJEYXNoZWRcIixcclxuICAgICAgICBcImR4RGlhZ3JhbS1jb21tYW5kRmlsbENvbG9yXCI6IFwiRmlsbCBDb2xvclwiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLWNvbW1hbmRBbGlnbkxlZnRcIjogXCJBbGlnbiBMZWZ0XCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tY29tbWFuZEFsaWduQ2VudGVyXCI6IFwiQWxpZ24gQ2VudGVyXCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tY29tbWFuZEFsaWduUmlnaHRcIjogXCJBbGlnbiBSaWdodFwiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLWNvbW1hbmRDb25uZWN0b3JMaW5lVHlwZVwiOiBcIkNvbm5lY3RvciBMaW5lIFR5cGVcIixcclxuICAgICAgICBcImR4RGlhZ3JhbS1jb21tYW5kQ29ubmVjdG9yTGluZVN0cmFpZ2h0XCI6IFwiU3RyYWlnaHRcIixcclxuICAgICAgICBcImR4RGlhZ3JhbS1jb21tYW5kQ29ubmVjdG9yTGluZU9ydGhvZ29uYWxcIjogXCJPcnRob2dvbmFsXCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tY29tbWFuZENvbm5lY3RvckxpbmVTdGFydFwiOiBcIkNvbm5lY3RvciBMaW5lIFN0YXJ0XCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tY29tbWFuZENvbm5lY3RvckxpbmVFbmRcIjogXCJDb25uZWN0b3IgTGluZSBFbmRcIixcclxuICAgICAgICBcImR4RGlhZ3JhbS1jb21tYW5kQ29ubmVjdG9yTGluZU5vbmVcIjogXCJOb25lXCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tY29tbWFuZENvbm5lY3RvckxpbmVBcnJvd1wiOiBcIkFycm93XCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tY29tbWFuZEZ1bGxzY3JlZW5cIjogXCJGdWxsIFNjcmVlblwiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLWNvbW1hbmRVbml0c1wiOiBcIlVuaXRzXCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tY29tbWFuZFBhZ2VTaXplXCI6IFwiUGFnZSBTaXplXCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tY29tbWFuZFBhZ2VPcmllbnRhdGlvblwiOiBcIlBhZ2UgT3JpZW50YXRpb25cIixcclxuICAgICAgICBcImR4RGlhZ3JhbS1jb21tYW5kUGFnZU9yaWVudGF0aW9uTGFuZHNjYXBlXCI6IFwiTGFuZHNjYXBlXCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tY29tbWFuZFBhZ2VPcmllbnRhdGlvblBvcnRyYWl0XCI6IFwiUG9ydHJhaXRcIixcclxuICAgICAgICBcImR4RGlhZ3JhbS1jb21tYW5kUGFnZUNvbG9yXCI6IFwiUGFnZSBDb2xvclwiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLWNvbW1hbmRTaG93R3JpZFwiOiBcIlNob3cgR3JpZFwiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLWNvbW1hbmRTbmFwVG9HcmlkXCI6IFwiU25hcCB0byBHcmlkXCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tY29tbWFuZEdyaWRTaXplXCI6IFwiR3JpZCBTaXplXCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tY29tbWFuZFpvb21MZXZlbFwiOiBcIlpvb20gTGV2ZWxcIixcclxuICAgICAgICBcImR4RGlhZ3JhbS1jb21tYW5kQXV0b1pvb21cIjogXCJBdXRvIFpvb21cIixcclxuICAgICAgICBcImR4RGlhZ3JhbS1jb21tYW5kRml0VG9Db250ZW50XCI6IFwiRml0IHRvIENvbnRlbnRcIixcclxuICAgICAgICBcImR4RGlhZ3JhbS1jb21tYW5kRml0VG9XaWR0aFwiOiBcIkZpdCB0byBXaWR0aFwiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLWNvbW1hbmRBdXRvWm9vbUJ5Q29udGVudFwiOiBcIkF1dG8gWm9vbSBieSBDb250ZW50XCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tY29tbWFuZEF1dG9ab29tQnlXaWR0aFwiOiBcIkF1dG8gWm9vbSBieSBXaWR0aFwiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLWNvbW1hbmRTaW1wbGVWaWV3XCI6IFwiU2ltcGxlIFZpZXdcIixcclxuICAgICAgICBcImR4RGlhZ3JhbS1jb21tYW5kQ3V0XCI6IFwiQ3V0XCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tY29tbWFuZENvcHlcIjogXCJDb3B5XCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tY29tbWFuZFBhc3RlXCI6IFwiUGFzdGVcIixcclxuICAgICAgICBcImR4RGlhZ3JhbS1jb21tYW5kU2VsZWN0QWxsXCI6IFwiU2VsZWN0IEFsbFwiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLWNvbW1hbmREZWxldGVcIjogXCJEZWxldGVcIixcclxuICAgICAgICBcImR4RGlhZ3JhbS1jb21tYW5kQnJpbmdUb0Zyb250XCI6IFwiQnJpbmcgdG8gRnJvbnRcIixcclxuICAgICAgICBcImR4RGlhZ3JhbS1jb21tYW5kU2VuZFRvQmFja1wiOiBcIlNlbmQgdG8gQmFja1wiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLWNvbW1hbmRMb2NrXCI6IFwiTG9ja1wiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLWNvbW1hbmRVbmxvY2tcIjogXCJVbmxvY2tcIixcclxuICAgICAgICBcImR4RGlhZ3JhbS1jb21tYW5kSW5zZXJ0U2hhcGVJbWFnZVwiOiBcIkluc2VydCBJbWFnZS4uLlwiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLWNvbW1hbmRFZGl0U2hhcGVJbWFnZVwiOiBcIkNoYW5nZSBJbWFnZS4uLlwiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLWNvbW1hbmREZWxldGVTaGFwZUltYWdlXCI6IFwiRGVsZXRlIEltYWdlXCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tY29tbWFuZExheW91dExlZnRUb1JpZ2h0XCI6IFwiTGVmdC10by1yaWdodFwiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLWNvbW1hbmRMYXlvdXRSaWdodFRvTGVmdFwiOiBcIlJpZ2h0LXRvLWxlZnRcIixcclxuICAgICAgICBcImR4RGlhZ3JhbS1jb21tYW5kTGF5b3V0VG9wVG9Cb3R0b21cIjogXCJUb3AtdG8tYm90dG9tXCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tY29tbWFuZExheW91dEJvdHRvbVRvVG9wXCI6IFwiQm90dG9tLXRvLXRvcFwiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLXVuaXRJblwiOiBcImluXCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tdW5pdENtXCI6IFwiY21cIixcclxuICAgICAgICBcImR4RGlhZ3JhbS11bml0UHhcIjogXCJweFwiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLWRpYWxvZ0J1dHRvbk9LXCI6IFwiT0tcIixcclxuICAgICAgICBcImR4RGlhZ3JhbS1kaWFsb2dCdXR0b25DYW5jZWxcIjogXCJDYW5jZWxcIixcclxuICAgICAgICBcImR4RGlhZ3JhbS1kaWFsb2dJbnNlcnRTaGFwZUltYWdlVGl0bGVcIjogXCJJbnNlcnQgSW1hZ2VcIixcclxuICAgICAgICBcImR4RGlhZ3JhbS1kaWFsb2dFZGl0U2hhcGVJbWFnZVRpdGxlXCI6IFwiQ2hhbmdlIEltYWdlXCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tZGlhbG9nRWRpdFNoYXBlSW1hZ2VTZWxlY3RCdXR0b25cIjogXCJTZWxlY3QgaW1hZ2VcIixcclxuICAgICAgICBcImR4RGlhZ3JhbS1kaWFsb2dFZGl0U2hhcGVJbWFnZUxhYmVsVGV4dFwiOiBcIm9yIGRyb3AgZmlsZSBoZXJlXCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tdWlFeHBvcnRcIjogXCJFeHBvcnRcIixcclxuICAgICAgICBcImR4RGlhZ3JhbS11aVByb3BlcnRpZXNcIjogXCJQcm9wZXJ0aWVzXCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tdWlTZXR0aW5nc1wiOiBcIlNldHRpbmdzXCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tdWlTaG93VG9vbGJveFwiOiBcIlNob3cgVG9vbGJveFwiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLXVpU2VhcmNoXCI6IFwiU2VhcmNoXCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tdWlTdHlsZVwiOiBcIlN0eWxlXCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tdWlMYXlvdXRcIjogXCJMYXlvdXRcIixcclxuICAgICAgICBcImR4RGlhZ3JhbS11aUxheW91dFRyZWVcIjogXCJUcmVlXCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tdWlMYXlvdXRMYXllcmVkXCI6IFwiTGF5ZXJlZFwiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLXVpRGlhZ3JhbVwiOiBcIkRpYWdyYW1cIixcclxuICAgICAgICBcImR4RGlhZ3JhbS11aVRleHRcIjogXCJUZXh0XCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tdWlPYmplY3RcIjogXCJPYmplY3RcIixcclxuICAgICAgICBcImR4RGlhZ3JhbS11aUNvbm5lY3RvclwiOiBcIkNvbm5lY3RvclwiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLXVpUGFnZVwiOiBcIlBhZ2VcIixcclxuICAgICAgICBcImR4RGlhZ3JhbS1zaGFwZVRleHRcIjogXCJUZXh0XCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tc2hhcGVSZWN0YW5nbGVcIjogXCJSZWN0YW5nbGVcIixcclxuICAgICAgICBcImR4RGlhZ3JhbS1zaGFwZUVsbGlwc2VcIjogXCJFbGxpcHNlXCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tc2hhcGVDcm9zc1wiOiBcIkNyb3NzXCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tc2hhcGVUcmlhbmdsZVwiOiBcIlRyaWFuZ2xlXCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tc2hhcGVEaWFtb25kXCI6IFwiRGlhbW9uZFwiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLXNoYXBlSGVhcnRcIjogXCJIZWFydFwiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLXNoYXBlUGVudGFnb25cIjogXCJQZW50YWdvblwiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLXNoYXBlSGV4YWdvblwiOiBcIkhleGFnb25cIixcclxuICAgICAgICBcImR4RGlhZ3JhbS1zaGFwZU9jdGFnb25cIjogXCJPY3RhZ29uXCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tc2hhcGVTdGFyXCI6IFwiU3RhclwiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLXNoYXBlQXJyb3dMZWZ0XCI6IFwiTGVmdCBBcnJvd1wiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLXNoYXBlQXJyb3dVcFwiOiBcIlVwIEFycm93XCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tc2hhcGVBcnJvd1JpZ2h0XCI6IFwiUmlnaHQgQXJyb3dcIixcclxuICAgICAgICBcImR4RGlhZ3JhbS1zaGFwZUFycm93RG93blwiOiBcIkRvd24gQXJyb3dcIixcclxuICAgICAgICBcImR4RGlhZ3JhbS1zaGFwZUFycm93VXBEb3duXCI6IFwiVXAgRG93biBBcnJvd1wiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLXNoYXBlQXJyb3dMZWZ0UmlnaHRcIjogXCJMZWZ0IFJpZ2h0IEFycm93XCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tc2hhcGVQcm9jZXNzXCI6IFwiUHJvY2Vzc1wiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLXNoYXBlRGVjaXNpb25cIjogXCJEZWNpc2lvblwiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLXNoYXBlVGVybWluYXRvclwiOiBcIlRlcm1pbmF0b3JcIixcclxuICAgICAgICBcImR4RGlhZ3JhbS1zaGFwZVByZWRlZmluZWRQcm9jZXNzXCI6IFwiUHJlZGVmaW5lZCBQcm9jZXNzXCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tc2hhcGVEb2N1bWVudFwiOiBcIkRvY3VtZW50XCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tc2hhcGVNdWx0aXBsZURvY3VtZW50c1wiOiBcIk11bHRpcGxlIERvY3VtZW50c1wiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLXNoYXBlTWFudWFsSW5wdXRcIjogXCJNYW51YWwgSW5wdXRcIixcclxuICAgICAgICBcImR4RGlhZ3JhbS1zaGFwZVByZXBhcmF0aW9uXCI6IFwiUHJlcGFyYXRpb25cIixcclxuICAgICAgICBcImR4RGlhZ3JhbS1zaGFwZURhdGFcIjogXCJEYXRhXCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tc2hhcGVEYXRhYmFzZVwiOiBcIkRhdGFiYXNlXCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tc2hhcGVIYXJkRGlza1wiOiBcIkhhcmQgRGlza1wiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLXNoYXBlSW50ZXJuYWxTdG9yYWdlXCI6IFwiSW50ZXJuYWwgU3RvcmFnZVwiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLXNoYXBlUGFwZXJUYXBlXCI6IFwiUGFwZXIgVGFwZVwiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLXNoYXBlTWFudWFsT3BlcmF0aW9uXCI6IFwiTWFudWFsIE9wZXJhdGlvblwiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLXNoYXBlRGVsYXlcIjogXCJEZWxheVwiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLXNoYXBlU3RvcmVkRGF0YVwiOiBcIlN0b3JlZCBEYXRhXCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tc2hhcGVEaXNwbGF5XCI6IFwiRGlzcGxheVwiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLXNoYXBlTWVyZ2VcIjogXCJNZXJnZVwiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLXNoYXBlQ29ubmVjdG9yXCI6IFwiQ29ubmVjdG9yXCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tc2hhcGVPclwiOiBcIk9yXCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tc2hhcGVTdW1taW5nSnVuY3Rpb25cIjogXCJTdW1taW5nIEp1bmN0aW9uXCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tc2hhcGVDb250YWluZXJEZWZhdWx0VGV4dFwiOiBcIkNvbnRhaW5lclwiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLXNoYXBlVmVydGljYWxDb250YWluZXJcIjogXCJWZXJ0aWNhbCBDb250YWluZXJcIixcclxuICAgICAgICBcImR4RGlhZ3JhbS1zaGFwZUhvcml6b250YWxDb250YWluZXJcIjogXCJIb3Jpem9udGFsIENvbnRhaW5lclwiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLXNoYXBlQ2FyZERlZmF1bHRUZXh0XCI6IFwiUGVyc29uJ3MgTmFtZVwiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLXNoYXBlQ2FyZFdpdGhJbWFnZU9uTGVmdFwiOiBcIkNhcmQgd2l0aCBJbWFnZSBvbiB0aGUgTGVmdFwiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLXNoYXBlQ2FyZFdpdGhJbWFnZU9uVG9wXCI6IFwiQ2FyZCB3aXRoIEltYWdlIG9uIHRoZSBUb3BcIixcclxuICAgICAgICBcImR4RGlhZ3JhbS1zaGFwZUNhcmRXaXRoSW1hZ2VPblJpZ2h0XCI6IFwiQ2FyZCB3aXRoIEltYWdlIG9uIHRoZSBSaWdodFwiLFxyXG4gICAgICAgIFwiZHhHYW50dC1kaWFsb2dUaXRsZVwiOiBcIlRpdGxlXCIsXHJcbiAgICAgICAgXCJkeEdhbnR0LWRpYWxvZ1N0YXJ0VGl0bGVcIjogXCJTdGFydFwiLFxyXG4gICAgICAgIFwiZHhHYW50dC1kaWFsb2dFbmRUaXRsZVwiOiBcIkVuZFwiLFxyXG4gICAgICAgIFwiZHhHYW50dC1kaWFsb2dQcm9ncmVzc1RpdGxlXCI6IFwiUHJvZ3Jlc3NcIixcclxuICAgICAgICBcImR4R2FudHQtZGlhbG9nUmVzb3VyY2VzVGl0bGVcIjogXCJSZXNvdXJjZXNcIixcclxuICAgICAgICBcImR4R2FudHQtZGlhbG9nUmVzb3VyY2VNYW5hZ2VyVGl0bGVcIjogXCJSZXNvdXJjZSBNYW5hZ2VyXCIsXHJcbiAgICAgICAgXCJkeEdhbnR0LWRpYWxvZ1Rhc2tEZXRhaWxzVGl0bGVcIjogXCJUYXNrIERldGFpbHNcIixcclxuICAgICAgICBcImR4R2FudHQtZGlhbG9nRWRpdFJlc291cmNlTGlzdEhpbnRcIjogXCJFZGl0IFJlc291cmNlIExpc3RcIixcclxuICAgICAgICBcImR4R2FudHQtZGlhbG9nRWRpdE5vUmVzb3VyY2VzXCI6IFwiTm8gcmVzb3VyY2VzXCIsXHJcbiAgICAgICAgXCJkeEdhbnR0LWRpYWxvZ0J1dHRvbkFkZFwiOiBcIkFkZFwiLFxyXG4gICAgICAgIFwiZHhHYW50dC1jb250ZXh0TWVudU5ld1Rhc2tcIjogXCJOZXcgVGFza1wiLFxyXG4gICAgICAgIFwiZHhHYW50dC1jb250ZXh0TWVudU5ld1N1YnRhc2tcIjogXCJOZXcgU3VidGFza1wiLFxyXG4gICAgICAgIFwiZHhHYW50dC1jb250ZXh0TWVudURlbGV0ZVRhc2tcIjogXCJEZWxldGUgVGFza1wiLFxyXG4gICAgICAgIFwiZHhHYW50dC1jb250ZXh0TWVudURlbGV0ZURlcGVuZGVuY3lcIjogXCJEZWxldGUgRGVwZW5kZW5jeVwiLFxyXG4gICAgICAgIFwiZHhHYW50dC1kaWFsb2dUYXNrRGVsZXRlQ29uZmlybWF0aW9uXCI6IFwiRGVsZXRpbmcgYSB0YXNrIGFsc28gZGVsZXRlcyBhbGwgaXRzIGRlcGVuZGVuY2llcyBhbmQgc3VidGFza3MuIEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyB0YXNrP1wiLFxyXG4gICAgICAgIFwiZHhHYW50dC1kaWFsb2dEZXBlbmRlbmN5RGVsZXRlQ29uZmlybWF0aW9uXCI6IFwiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGUgZGVwZW5kZW5jeSBmcm9tIHRoZSB0YXNrP1wiLFxyXG4gICAgICAgIFwiZHhHYW50dC1kaWFsb2dSZXNvdXJjZXNEZWxldGVDb25maXJtYXRpb25cIjogXCJEZWxldGluZyBhIHJlc291cmNlIGFsc28gZGVsZXRlcyBpdCBmcm9tIHRhc2tzIHRvIHdoaWNoIHRoaXMgcmVzb3VyY2UgaXMgYXNzaWduZWQuIEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhlc2UgcmVzb3VyY2VzPyBSZXNvdXJjZXM6IHswfVwiLFxyXG4gICAgICAgIFwiZHhHYW50dC1kaWFsb2dDb25zdHJhaW50Q3JpdGljYWxWaW9sYXRpb25NZXNzYWdlXCI6IFwiVGhlIHRhc2sgeW91IGFyZSBhdHRlbXB0aW5nIHRvIG1vdmUgaXMgbGlua2VkIHRvIGEgc2Vjb25kIHRhc2sgYnkgYSBkZXBlbmRlbmN5IHJlbGF0aW9uLiBUaGlzIGNoYW5nZSB3b3VsZCBjb25mbGljdCB3aXRoIGRlcGVuZGVuY3kgcnVsZXMuIEhvdyB3b3VsZCB5b3UgbGlrZSB0byBwcm9jZWVkP1wiLFxyXG4gICAgICAgIFwiZHhHYW50dC1kaWFsb2dDb25zdHJhaW50VmlvbGF0aW9uTWVzc2FnZVwiOiBcIlRoZSB0YXNrIHlvdSBhcmUgYXR0ZW1wdGluZyB0byBtb3ZlIGlzIGxpbmtlZCB0byBhIHNlY29uZCB0YXNrIGJ5IGEgZGVwZW5kZW5jeSByZWxhdGlvbi4gSG93IHdvdWxkIHlvdSBsaWtlIHRvIHByb2NlZWQ/XCIsXHJcbiAgICAgICAgXCJkeEdhbnR0LWRpYWxvZ0NhbmNlbE9wZXJhdGlvbk1lc3NhZ2VcIjogXCJDYW5jZWwgdGhlIG9wZXJhdGlvblwiLFxyXG4gICAgICAgIFwiZHhHYW50dC1kaWFsb2dEZWxldGVEZXBlbmRlbmN5TWVzc2FnZVwiOiBcIkRlbGV0ZSB0aGUgZGVwZW5kZW5jeVwiLFxyXG4gICAgICAgIFwiZHhHYW50dC1kaWFsb2dNb3ZlVGFza0FuZEtlZXBEZXBlbmRlbmN5TWVzc2FnZVwiOiBcIk1vdmUgdGhlIHRhc2sgYW5kIGtlZXAgdGhlIGRlcGVuZGVuY3lcIixcclxuICAgICAgICBcImR4R2FudHQtdW5kb1wiOiBcIlVuZG9cIixcclxuICAgICAgICBcImR4R2FudHQtcmVkb1wiOiBcIlJlZG9cIixcclxuICAgICAgICBcImR4R2FudHQtZXhwYW5kQWxsXCI6IFwiRXhwYW5kIEFsbFwiLFxyXG4gICAgICAgIFwiZHhHYW50dC1jb2xsYXBzZUFsbFwiOiBcIkNvbGxhcHNlIEFsbFwiLFxyXG4gICAgICAgIFwiZHhHYW50dC1hZGROZXdUYXNrXCI6IFwiQWRkIE5ldyBUYXNrXCIsXHJcbiAgICAgICAgXCJkeEdhbnR0LWRlbGV0ZVNlbGVjdGVkVGFza1wiOiBcIkRlbGV0ZSBTZWxlY3RlZCBUYXNrXCIsXHJcbiAgICAgICAgXCJkeEdhbnR0LXpvb21JblwiOiBcIlpvb20gSW5cIixcclxuICAgICAgICBcImR4R2FudHQtem9vbU91dFwiOiBcIlpvb20gT3V0XCIsXHJcbiAgICAgICAgXCJkeEdhbnR0LWZ1bGxTY3JlZW5cIjogXCJGdWxsIFNjcmVlblwiLFxyXG4gICAgICAgIFwiZHhHYW50dC1xdWFydGVyXCI6IFwiUXswfVwiXHJcbiAgICB9XHJcbn07XHJcbiIsIi8qKlxyXG4gKiBEZXZFeHRyZW1lIChlc20vbG9jYWxpemF0aW9uL2ludGwvbnVtYmVyLmpzKVxyXG4gKiBWZXJzaW9uOiAyMS4xLjRcclxuICogQnVpbGQgZGF0ZTogTW9uIEp1biAyMSAyMDIxXHJcbiAqXHJcbiAqIENvcHlyaWdodCAoYykgMjAxMiAtIDIwMjEgRGV2ZWxvcGVyIEV4cHJlc3MgSW5jLiBBTEwgUklHSFRTIFJFU0VSVkVEXHJcbiAqIFJlYWQgYWJvdXQgRGV2RXh0cmVtZSBsaWNlbnNpbmcgaGVyZTogaHR0cHM6Ly9qcy5kZXZleHByZXNzLmNvbS9MaWNlbnNpbmcvXHJcbiAqL1xyXG5pbXBvcnQgZHhDb25maWcgZnJvbSBcIi4uLy4uL2NvcmUvY29uZmlnXCI7XHJcbmltcG9ydCBsb2NhbGl6YXRpb25Db3JlVXRpbHMgZnJvbSBcIi4uL2NvcmVcIjtcclxuaW1wb3J0IG9wZW5YbWxDdXJyZW5jeUZvcm1hdCBmcm9tIFwiLi4vb3Blbl94bWxfY3VycmVuY3lfZm9ybWF0XCI7XHJcbmltcG9ydCBhY2NvdW50aW5nRm9ybWF0cyBmcm9tIFwiLi4vY2xkci1kYXRhL2FjY291bnRpbmdfZm9ybWF0c1wiO1xyXG52YXIgZGV0ZWN0Q3VycmVuY3lTeW1ib2xSZWdleCA9IC8oW15cXHMwXSspPyhcXHMqKTAqWy4sXSowKihcXHMqKShbXlxcczBdKyk/LztcclxudmFyIGZvcm1hdHRlcnNDYWNoZSA9IHt9O1xyXG52YXIgZ2V0Rm9ybWF0dGVyID0gZm9ybWF0ID0+IHtcclxuICAgIHZhciBrZXkgPSBsb2NhbGl6YXRpb25Db3JlVXRpbHMubG9jYWxlKCkgKyBcIi9cIiArIEpTT04uc3RyaW5naWZ5KGZvcm1hdCk7XHJcbiAgICBpZiAoIWZvcm1hdHRlcnNDYWNoZVtrZXldKSB7XHJcbiAgICAgICAgZm9ybWF0dGVyc0NhY2hlW2tleV0gPSBuZXcgSW50bC5OdW1iZXJGb3JtYXQobG9jYWxpemF0aW9uQ29yZVV0aWxzLmxvY2FsZSgpLCBmb3JtYXQpLmZvcm1hdFxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZvcm1hdHRlcnNDYWNoZVtrZXldXHJcbn07XHJcbnZhciBnZXRDdXJyZW5jeUZvcm1hdHRlciA9IGN1cnJlbmN5ID0+IG5ldyBJbnRsLk51bWJlckZvcm1hdChsb2NhbGl6YXRpb25Db3JlVXRpbHMubG9jYWxlKCksIHtcclxuICAgIHN0eWxlOiBcImN1cnJlbmN5XCIsXHJcbiAgICBjdXJyZW5jeTogY3VycmVuY3lcclxufSk7XHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICAgIGVuZ2luZTogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIFwiaW50bFwiXHJcbiAgICB9LFxyXG4gICAgX2Zvcm1hdE51bWJlckNvcmU6IGZ1bmN0aW9uKHZhbHVlLCBmb3JtYXQsIGZvcm1hdENvbmZpZykge1xyXG4gICAgICAgIGlmIChcImV4cG9uZW50aWFsXCIgPT09IGZvcm1hdCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYWxsQmFzZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBnZXRGb3JtYXR0ZXIodGhpcy5fbm9ybWFsaXplRm9ybWF0Q29uZmlnKGZvcm1hdCwgZm9ybWF0Q29uZmlnLCB2YWx1ZSkpKHZhbHVlKVxyXG4gICAgfSxcclxuICAgIF9ub3JtYWxpemVGb3JtYXRDb25maWc6IGZ1bmN0aW9uKGZvcm1hdCwgZm9ybWF0Q29uZmlnLCB2YWx1ZSkge1xyXG4gICAgICAgIHZhciBjb25maWc7XHJcbiAgICAgICAgaWYgKFwiZGVjaW1hbFwiID09PSBmb3JtYXQpIHtcclxuICAgICAgICAgICAgY29uZmlnID0ge1xyXG4gICAgICAgICAgICAgICAgbWluaW11bUludGVnZXJEaWdpdHM6IGZvcm1hdENvbmZpZy5wcmVjaXNpb24gfHwgdm9pZCAwLFxyXG4gICAgICAgICAgICAgICAgdXNlR3JvdXBpbmc6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgbWF4aW11bUZyYWN0aW9uRGlnaXRzOiBTdHJpbmcodmFsdWUpLmxlbmd0aCxcclxuICAgICAgICAgICAgICAgIHJvdW5kOiB2YWx1ZSA8IDAgPyBcImNlaWxcIiA6IFwiZmxvb3JcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uZmlnID0gdGhpcy5fZ2V0UHJlY2lzaW9uQ29uZmlnKGZvcm1hdENvbmZpZy5wcmVjaXNpb24pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChcInBlcmNlbnRcIiA9PT0gZm9ybWF0KSB7XHJcbiAgICAgICAgICAgIGNvbmZpZy5zdHlsZSA9IFwicGVyY2VudFwiXHJcbiAgICAgICAgfSBlbHNlIGlmIChcImN1cnJlbmN5XCIgPT09IGZvcm1hdCkge1xyXG4gICAgICAgICAgICBjb25maWcuc3R5bGUgPSBcImN1cnJlbmN5XCI7XHJcbiAgICAgICAgICAgIGNvbmZpZy5jdXJyZW5jeSA9IGZvcm1hdENvbmZpZy5jdXJyZW5jeSB8fCBkeENvbmZpZygpLmRlZmF1bHRDdXJyZW5jeVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY29uZmlnXHJcbiAgICB9LFxyXG4gICAgX2dldFByZWNpc2lvbkNvbmZpZzogZnVuY3Rpb24ocHJlY2lzaW9uKSB7XHJcbiAgICAgICAgdmFyIGNvbmZpZztcclxuICAgICAgICBpZiAobnVsbCA9PT0gcHJlY2lzaW9uKSB7XHJcbiAgICAgICAgICAgIGNvbmZpZyA9IHtcclxuICAgICAgICAgICAgICAgIG1pbmltdW1GcmFjdGlvbkRpZ2l0czogMCxcclxuICAgICAgICAgICAgICAgIG1heGltdW1GcmFjdGlvbkRpZ2l0czogMjBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbmZpZyA9IHtcclxuICAgICAgICAgICAgICAgIG1pbmltdW1GcmFjdGlvbkRpZ2l0czogcHJlY2lzaW9uIHx8IDAsXHJcbiAgICAgICAgICAgICAgICBtYXhpbXVtRnJhY3Rpb25EaWdpdHM6IHByZWNpc2lvbiB8fCAwXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNvbmZpZ1xyXG4gICAgfSxcclxuICAgIGZvcm1hdDogZnVuY3Rpb24odmFsdWUsIF9mb3JtYXQpIHtcclxuICAgICAgICBpZiAoXCJudW1iZXJcIiAhPT0gdHlwZW9mIHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZVxyXG4gICAgICAgIH1cclxuICAgICAgICBfZm9ybWF0ID0gdGhpcy5fbm9ybWFsaXplRm9ybWF0KF9mb3JtYXQpO1xyXG4gICAgICAgIGlmIChcImRlZmF1bHRcIiA9PT0gX2Zvcm1hdC5jdXJyZW5jeSkge1xyXG4gICAgICAgICAgICBfZm9ybWF0LmN1cnJlbmN5ID0gZHhDb25maWcoKS5kZWZhdWx0Q3VycmVuY3lcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFfZm9ybWF0IHx8IFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIF9mb3JtYXQgJiYgIV9mb3JtYXQudHlwZSAmJiAhX2Zvcm1hdC5mb3JtYXR0ZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGdldEZvcm1hdHRlcihfZm9ybWF0KSh2YWx1ZSlcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsbEJhc2UuYXBwbHkodGhpcywgYXJndW1lbnRzKVxyXG4gICAgfSxcclxuICAgIF9nZXRDdXJyZW5jeVN5bWJvbEluZm86IGZ1bmN0aW9uKGN1cnJlbmN5KSB7XHJcbiAgICAgICAgdmFyIGZvcm1hdHRlciA9IGdldEN1cnJlbmN5Rm9ybWF0dGVyKGN1cnJlbmN5KTtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZXh0cmFjdEN1cnJlbmN5U3ltYm9sSW5mbyhmb3JtYXR0ZXIuZm9ybWF0KDApKVxyXG4gICAgfSxcclxuICAgIF9leHRyYWN0Q3VycmVuY3lTeW1ib2xJbmZvOiBmdW5jdGlvbihjdXJyZW5jeVZhbHVlU3RyaW5nKSB7XHJcbiAgICAgICAgdmFyIG1hdGNoID0gZGV0ZWN0Q3VycmVuY3lTeW1ib2xSZWdleC5leGVjKGN1cnJlbmN5VmFsdWVTdHJpbmcpIHx8IFtdO1xyXG4gICAgICAgIHZhciBwb3NpdGlvbiA9IG1hdGNoWzFdID8gXCJiZWZvcmVcIiA6IFwiYWZ0ZXJcIjtcclxuICAgICAgICB2YXIgc3ltYm9sID0gbWF0Y2hbMV0gfHwgbWF0Y2hbNF0gfHwgXCJcIjtcclxuICAgICAgICB2YXIgZGVsaW1pdGVyID0gbWF0Y2hbMl0gfHwgbWF0Y2hbM10gfHwgXCJcIjtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBwb3NpdGlvbjogcG9zaXRpb24sXHJcbiAgICAgICAgICAgIHN5bWJvbDogc3ltYm9sLFxyXG4gICAgICAgICAgICBkZWxpbWl0ZXI6IGRlbGltaXRlclxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICBnZXRDdXJyZW5jeVN5bWJvbDogZnVuY3Rpb24oY3VycmVuY3kpIHtcclxuICAgICAgICBpZiAoIWN1cnJlbmN5KSB7XHJcbiAgICAgICAgICAgIGN1cnJlbmN5ID0gZHhDb25maWcoKS5kZWZhdWx0Q3VycmVuY3lcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHN5bWJvbEluZm8gPSB0aGlzLl9nZXRDdXJyZW5jeVN5bWJvbEluZm8oY3VycmVuY3kpO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHN5bWJvbDogc3ltYm9sSW5mby5zeW1ib2xcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgZ2V0T3BlblhtbEN1cnJlbmN5Rm9ybWF0OiBmdW5jdGlvbihjdXJyZW5jeSkge1xyXG4gICAgICAgIHZhciB0YXJnZXRDdXJyZW5jeSA9IGN1cnJlbmN5IHx8IGR4Q29uZmlnKCkuZGVmYXVsdEN1cnJlbmN5O1xyXG4gICAgICAgIHZhciBjdXJyZW5jeVN5bWJvbCA9IHRoaXMuX2dldEN1cnJlbmN5U3ltYm9sSW5mbyh0YXJnZXRDdXJyZW5jeSkuc3ltYm9sO1xyXG4gICAgICAgIHZhciBjbG9zZXN0QWNjb3VudGluZ0Zvcm1hdCA9IGxvY2FsaXphdGlvbkNvcmVVdGlscy5nZXRWYWx1ZUJ5Q2xvc2VzdExvY2FsZShsb2NhbGUgPT4gYWNjb3VudGluZ0Zvcm1hdHNbbG9jYWxlXSk7XHJcbiAgICAgICAgcmV0dXJuIG9wZW5YbWxDdXJyZW5jeUZvcm1hdChjdXJyZW5jeVN5bWJvbCwgY2xvc2VzdEFjY291bnRpbmdGb3JtYXQpXHJcbiAgICB9XHJcbn07XHJcbiIsIi8qKlxyXG4gKiBEZXZFeHRyZW1lIChlc20vbG9jYWxpemF0aW9uL2xkbWwvbnVtYmVyLmpzKVxyXG4gKiBWZXJzaW9uOiAyMS4xLjRcclxuICogQnVpbGQgZGF0ZTogTW9uIEp1biAyMSAyMDIxXHJcbiAqXHJcbiAqIENvcHlyaWdodCAoYykgMjAxMiAtIDIwMjEgRGV2ZWxvcGVyIEV4cHJlc3MgSW5jLiBBTEwgUklHSFRTIFJFU0VSVkVEXHJcbiAqIFJlYWQgYWJvdXQgRGV2RXh0cmVtZSBsaWNlbnNpbmcgaGVyZTogaHR0cHM6Ly9qcy5kZXZleHByZXNzLmNvbS9MaWNlbnNpbmcvXHJcbiAqL1xyXG5pbXBvcnQge1xyXG4gICAgZml0SW50b1JhbmdlXHJcbn0gZnJvbSBcIi4uLy4uL2NvcmUvdXRpbHMvbWF0aFwiO1xyXG5pbXBvcnQge1xyXG4gICAgdG9GaXhlZFxyXG59IGZyb20gXCIuLi91dGlsc1wiO1xyXG52YXIgREVGQVVMVF9DT05GSUcgPSB7XHJcbiAgICB0aG91c2FuZHNTZXBhcmF0b3I6IFwiLFwiLFxyXG4gICAgZGVjaW1hbFNlcGFyYXRvcjogXCIuXCJcclxufTtcclxudmFyIEVTQ0FQSU5HX0NIQVIgPSBcIidcIjtcclxudmFyIE1BWElNVU1fTlVNQkVSX0xFTkdUSCA9IDE1O1xyXG5cclxuZnVuY3Rpb24gZ2V0R3JvdXBTaXplcyhmb3JtYXRTdHJpbmcpIHtcclxuICAgIHJldHVybiBmb3JtYXRTdHJpbmcuc3BsaXQoXCIsXCIpLnNsaWNlKDEpLm1hcCgoZnVuY3Rpb24oc3RyKSB7XHJcbiAgICAgICAgcmV0dXJuIHN0ci5zcGxpdChcIlwiKS5maWx0ZXIoKGZ1bmN0aW9uKGNoYXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwiI1wiID09PSBjaGFyIHx8IFwiMFwiID09PSBjaGFyXHJcbiAgICAgICAgfSkpLmxlbmd0aFxyXG4gICAgfSkpXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldFNpZ25QYXJ0cyhmb3JtYXQpIHtcclxuICAgIHZhciBzaWduUGFydHMgPSBmb3JtYXQuc3BsaXQoXCI7XCIpO1xyXG4gICAgaWYgKDEgPT09IHNpZ25QYXJ0cy5sZW5ndGgpIHtcclxuICAgICAgICBzaWduUGFydHMucHVzaChcIi1cIiArIHNpZ25QYXJ0c1swXSlcclxuICAgIH1cclxuICAgIHJldHVybiBzaWduUGFydHNcclxufVxyXG5cclxuZnVuY3Rpb24gcmV2ZXJzZVN0cmluZyhzdHIpIHtcclxuICAgIHJldHVybiBzdHIudG9TdHJpbmcoKS5zcGxpdChcIlwiKS5yZXZlcnNlKCkuam9pbihcIlwiKVxyXG59XHJcblxyXG5mdW5jdGlvbiBpc1BlcmNlbnRGb3JtYXQoZm9ybWF0KSB7XHJcbiAgICByZXR1cm4gLTEgIT09IGZvcm1hdC5pbmRleE9mKFwiJVwiKSAmJiAhZm9ybWF0Lm1hdGNoKC8nW14nXSolW14nXSonL2cpXHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlbW92ZVN0dWJzKHN0cikge1xyXG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlKC8nLisnL2csIFwiXCIpXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldE5vblJlcXVpcmVkRGlnaXRDb3VudChmbG9hdEZvcm1hdCkge1xyXG4gICAgaWYgKCFmbG9hdEZvcm1hdCkge1xyXG4gICAgICAgIHJldHVybiAwXHJcbiAgICB9XHJcbiAgICB2YXIgZm9ybWF0ID0gcmVtb3ZlU3R1YnMoZmxvYXRGb3JtYXQpO1xyXG4gICAgcmV0dXJuIGZvcm1hdC5sZW5ndGggLSBmb3JtYXQucmVwbGFjZSgvWyNdL2csIFwiXCIpLmxlbmd0aFxyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRSZXF1aXJlZERpZ2l0Q291bnQoZmxvYXRGb3JtYXQpIHtcclxuICAgIGlmICghZmxvYXRGb3JtYXQpIHtcclxuICAgICAgICByZXR1cm4gMFxyXG4gICAgfVxyXG4gICAgdmFyIGZvcm1hdCA9IHJlbW92ZVN0dWJzKGZsb2F0Rm9ybWF0KTtcclxuICAgIHJldHVybiBmb3JtYXQubGVuZ3RoIC0gZm9ybWF0LnJlcGxhY2UoL1swXS9nLCBcIlwiKS5sZW5ndGhcclxufVxyXG5cclxuZnVuY3Rpb24gbm9ybWFsaXplVmFsdWVTdHJpbmcodmFsdWVQYXJ0LCBtaW5EaWdpdENvdW50LCBtYXhEaWdpdENvdW50KSB7XHJcbiAgICBpZiAoIXZhbHVlUGFydCkge1xyXG4gICAgICAgIHJldHVybiBcIlwiXHJcbiAgICB9XHJcbiAgICBpZiAodmFsdWVQYXJ0Lmxlbmd0aCA+IG1heERpZ2l0Q291bnQpIHtcclxuICAgICAgICB2YWx1ZVBhcnQgPSB2YWx1ZVBhcnQuc3Vic3RyKDAsIG1heERpZ2l0Q291bnQpXHJcbiAgICB9XHJcbiAgICB3aGlsZSAodmFsdWVQYXJ0Lmxlbmd0aCA+IG1pbkRpZ2l0Q291bnQgJiYgXCIwXCIgPT09IHZhbHVlUGFydC5zbGljZSgtMSkpIHtcclxuICAgICAgICB2YWx1ZVBhcnQgPSB2YWx1ZVBhcnQuc3Vic3RyKDAsIHZhbHVlUGFydC5sZW5ndGggLSAxKVxyXG4gICAgfVxyXG4gICAgd2hpbGUgKHZhbHVlUGFydC5sZW5ndGggPCBtaW5EaWdpdENvdW50KSB7XHJcbiAgICAgICAgdmFsdWVQYXJ0ICs9IFwiMFwiXHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsdWVQYXJ0XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGFwcGx5R3JvdXBzKHZhbHVlU3RyaW5nLCBncm91cFNpemVzLCB0aG91c2FuZHNTZXBhcmF0b3IpIHtcclxuICAgIGlmICghZ3JvdXBTaXplcy5sZW5ndGgpIHtcclxuICAgICAgICByZXR1cm4gdmFsdWVTdHJpbmdcclxuICAgIH1cclxuICAgIHZhciBncm91cHMgPSBbXTtcclxuICAgIHZhciBpbmRleCA9IDA7XHJcbiAgICB3aGlsZSAodmFsdWVTdHJpbmcpIHtcclxuICAgICAgICB2YXIgZ3JvdXBTaXplID0gZ3JvdXBTaXplc1tpbmRleF07XHJcbiAgICAgICAgaWYgKCFncm91cFNpemUpIHtcclxuICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICB9XHJcbiAgICAgICAgZ3JvdXBzLnB1c2godmFsdWVTdHJpbmcuc2xpY2UoMCwgZ3JvdXBTaXplKSk7XHJcbiAgICAgICAgdmFsdWVTdHJpbmcgPSB2YWx1ZVN0cmluZy5zbGljZShncm91cFNpemUpO1xyXG4gICAgICAgIGlmIChpbmRleCA8IGdyb3VwU2l6ZXMubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgICBpbmRleCsrXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGdyb3Vwcy5qb2luKHRob3VzYW5kc1NlcGFyYXRvcilcclxufVxyXG5cclxuZnVuY3Rpb24gZm9ybWF0TnVtYmVyUGFydChmb3JtYXQsIHZhbHVlU3RyaW5nKSB7XHJcbiAgICByZXR1cm4gZm9ybWF0LnNwbGl0KEVTQ0FQSU5HX0NIQVIpLm1hcCgoZnVuY3Rpb24oZm9ybWF0UGFydCwgZXNjYXBlSW5kZXgpIHtcclxuICAgICAgICB2YXIgaXNFc2NhcGUgPSBlc2NhcGVJbmRleCAlIDI7XHJcbiAgICAgICAgaWYgKCFmb3JtYXRQYXJ0ICYmIGlzRXNjYXBlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBFU0NBUElOR19DSEFSXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBpc0VzY2FwZSA/IGZvcm1hdFBhcnQgOiBmb3JtYXRQYXJ0LnJlcGxhY2UoL1ssIzBdKy8sIHZhbHVlU3RyaW5nKVxyXG4gICAgfSkpLmpvaW4oXCJcIilcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0RmxvYXRQb2ludEluZGV4KGZvcm1hdCkge1xyXG4gICAgdmFyIGlzRXNjYXBlID0gZmFsc2U7XHJcbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgZm9ybWF0Lmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgIGlmIChcIidcIiA9PT0gZm9ybWF0W2luZGV4XSkge1xyXG4gICAgICAgICAgICBpc0VzY2FwZSA9ICFpc0VzY2FwZVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoXCIuXCIgPT09IGZvcm1hdFtpbmRleF0gJiYgIWlzRXNjYXBlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBpbmRleFxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmb3JtYXQubGVuZ3RoXHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEZvcm1hdHRlcihmb3JtYXQsIGNvbmZpZykge1xyXG4gICAgY29uZmlnID0gY29uZmlnIHx8IERFRkFVTFRfQ09ORklHO1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKFwibnVtYmVyXCIgIT09IHR5cGVvZiB2YWx1ZSB8fCBpc05hTih2YWx1ZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwiXCJcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHNpZ25Gb3JtYXRQYXJ0cyA9IGdldFNpZ25QYXJ0cyhmb3JtYXQpO1xyXG4gICAgICAgIHZhciBpc1Bvc2l0aXZlWmVybyA9IDEgLyB2YWx1ZSA9PT0gMSAvIDA7XHJcbiAgICAgICAgdmFyIGlzUG9zaXRpdmUgPSB2YWx1ZSA+IDAgfHwgaXNQb3NpdGl2ZVplcm87XHJcbiAgICAgICAgdmFyIG51bWJlckZvcm1hdCA9IHNpZ25Gb3JtYXRQYXJ0c1tpc1Bvc2l0aXZlID8gMCA6IDFdO1xyXG4gICAgICAgIGlmIChpc1BlcmNlbnRGb3JtYXQobnVtYmVyRm9ybWF0KSkge1xyXG4gICAgICAgICAgICB2YWx1ZSAqPSAxMDBcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFpc1Bvc2l0aXZlKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gLXZhbHVlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBmbG9hdFBvaW50SW5kZXggPSBnZXRGbG9hdFBvaW50SW5kZXgobnVtYmVyRm9ybWF0KTtcclxuICAgICAgICB2YXIgZmxvYXRGb3JtYXRQYXJ0cyA9IFtudW1iZXJGb3JtYXQuc3Vic3RyKDAsIGZsb2F0UG9pbnRJbmRleCksIG51bWJlckZvcm1hdC5zdWJzdHIoZmxvYXRQb2ludEluZGV4ICsgMSldO1xyXG4gICAgICAgIHZhciBtaW5GbG9hdFByZWNpc2lvbiA9IGdldFJlcXVpcmVkRGlnaXRDb3VudChmbG9hdEZvcm1hdFBhcnRzWzFdKTtcclxuICAgICAgICB2YXIgbWF4RmxvYXRQcmVjaXNpb24gPSBtaW5GbG9hdFByZWNpc2lvbiArIGdldE5vblJlcXVpcmVkRGlnaXRDb3VudChmbG9hdEZvcm1hdFBhcnRzWzFdKTtcclxuICAgICAgICB2YXIgbWluSW50ZWdlclByZWNpc2lvbiA9IGdldFJlcXVpcmVkRGlnaXRDb3VudChmbG9hdEZvcm1hdFBhcnRzWzBdKTtcclxuICAgICAgICB2YXIgbWF4SW50ZWdlclByZWNpc2lvbiA9IGdldE5vblJlcXVpcmVkRGlnaXRDb3VudChmbG9hdEZvcm1hdFBhcnRzWzBdKSB8fCBjb25maWcudW5saW1pdGVkSW50ZWdlckRpZ2l0cyA/IHZvaWQgMCA6IG1pbkludGVnZXJQcmVjaXNpb247XHJcbiAgICAgICAgdmFyIGludGVnZXJMZW5ndGggPSBNYXRoLmZsb29yKHZhbHVlKS50b1N0cmluZygpLmxlbmd0aDtcclxuICAgICAgICB2YXIgZmxvYXRQcmVjaXNpb24gPSBmaXRJbnRvUmFuZ2UobWF4RmxvYXRQcmVjaXNpb24sIDAsIE1BWElNVU1fTlVNQkVSX0xFTkdUSCAtIGludGVnZXJMZW5ndGgpO1xyXG4gICAgICAgIHZhciBncm91cFNpemVzID0gZ2V0R3JvdXBTaXplcyhmbG9hdEZvcm1hdFBhcnRzWzBdKS5yZXZlcnNlKCk7XHJcbiAgICAgICAgdmFyIHZhbHVlUGFydHMgPSB0b0ZpeGVkKHZhbHVlLCBmbG9hdFByZWNpc2lvbiA8IDAgPyAwIDogZmxvYXRQcmVjaXNpb24pLnNwbGl0KFwiLlwiKTtcclxuICAgICAgICB2YXIgdmFsdWVJbnRlZ2VyUGFydCA9IG5vcm1hbGl6ZVZhbHVlU3RyaW5nKHJldmVyc2VTdHJpbmcodmFsdWVQYXJ0c1swXSksIG1pbkludGVnZXJQcmVjaXNpb24sIG1heEludGVnZXJQcmVjaXNpb24pO1xyXG4gICAgICAgIHZhciB2YWx1ZUZsb2F0UGFydCA9IG5vcm1hbGl6ZVZhbHVlU3RyaW5nKHZhbHVlUGFydHNbMV0sIG1pbkZsb2F0UHJlY2lzaW9uLCBtYXhGbG9hdFByZWNpc2lvbik7XHJcbiAgICAgICAgdmFsdWVJbnRlZ2VyUGFydCA9IGFwcGx5R3JvdXBzKHZhbHVlSW50ZWdlclBhcnQsIGdyb3VwU2l6ZXMsIGNvbmZpZy50aG91c2FuZHNTZXBhcmF0b3IpO1xyXG4gICAgICAgIHZhciBpbnRlZ2VyU3RyaW5nID0gcmV2ZXJzZVN0cmluZyhmb3JtYXROdW1iZXJQYXJ0KHJldmVyc2VTdHJpbmcoZmxvYXRGb3JtYXRQYXJ0c1swXSksIHZhbHVlSW50ZWdlclBhcnQpKTtcclxuICAgICAgICB2YXIgZmxvYXRTdHJpbmcgPSBtYXhGbG9hdFByZWNpc2lvbiA/IGZvcm1hdE51bWJlclBhcnQoZmxvYXRGb3JtYXRQYXJ0c1sxXSwgdmFsdWVGbG9hdFBhcnQpIDogXCJcIjtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gaW50ZWdlclN0cmluZyArIChmbG9hdFN0cmluZy5tYXRjaCgvXFxkLykgPyBjb25maWcuZGVjaW1hbFNlcGFyYXRvciA6IFwiXCIpICsgZmxvYXRTdHJpbmc7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdFxyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBwYXJzZVZhbHVlKHRleHQsIGlzUGVyY2VudCwgaXNOZWdhdGl2ZSkge1xyXG4gICAgdmFyIHZhbHVlID0gKGlzUGVyY2VudCA/IC4wMSA6IDEpICogcGFyc2VGbG9hdCh0ZXh0KSB8fCAwO1xyXG4gICAgcmV0dXJuIGlzTmVnYXRpdmUgPyAtdmFsdWUgOiB2YWx1ZVxyXG59XHJcblxyXG5mdW5jdGlvbiBwcmVwYXJlVmFsdWVUZXh0KHZhbHVlVGV4dCwgZm9ybWF0dGVyLCBpc1BlcmNlbnQsIGlzSW50ZWdlclBhcnQpIHtcclxuICAgIHZhciBuZXh0VmFsdWVUZXh0ID0gdmFsdWVUZXh0O1xyXG4gICAgdmFyIGNoYXI7XHJcbiAgICB2YXIgdGV4dDtcclxuICAgIHZhciBuZXh0VGV4dDtcclxuICAgIGRvIHtcclxuICAgICAgICBpZiAobmV4dFRleHQpIHtcclxuICAgICAgICAgICAgY2hhciA9IHRleHQubGVuZ3RoID09PSBuZXh0VGV4dC5sZW5ndGggPyBcIjBcIiA6IFwiMVwiO1xyXG4gICAgICAgICAgICB2YWx1ZVRleHQgPSBpc0ludGVnZXJQYXJ0ID8gY2hhciArIHZhbHVlVGV4dCA6IHZhbHVlVGV4dCArIGNoYXJcclxuICAgICAgICB9XHJcbiAgICAgICAgdGV4dCA9IG5leHRUZXh0IHx8IGZvcm1hdHRlcihwYXJzZVZhbHVlKG5leHRWYWx1ZVRleHQsIGlzUGVyY2VudCkpO1xyXG4gICAgICAgIG5leHRWYWx1ZVRleHQgPSBpc0ludGVnZXJQYXJ0ID8gXCIxXCIgKyBuZXh0VmFsdWVUZXh0IDogbmV4dFZhbHVlVGV4dCArIFwiMVwiO1xyXG4gICAgICAgIG5leHRUZXh0ID0gZm9ybWF0dGVyKHBhcnNlVmFsdWUobmV4dFZhbHVlVGV4dCwgaXNQZXJjZW50KSlcclxuICAgIH0gd2hpbGUgKHRleHQgIT09IG5leHRUZXh0ICYmIChpc0ludGVnZXJQYXJ0ID8gdGV4dC5sZW5ndGggPT09IG5leHRUZXh0Lmxlbmd0aCA6IHRleHQubGVuZ3RoIDw9IG5leHRUZXh0Lmxlbmd0aCkpO1xyXG4gICAgaWYgKGlzSW50ZWdlclBhcnQgJiYgbmV4dFRleHQubGVuZ3RoID4gdGV4dC5sZW5ndGgpIHtcclxuICAgICAgICB2YXIgaGFzR3JvdXBzID0gLTEgPT09IGZvcm1hdHRlcigxMjM0NSkuaW5kZXhPZihcIjEyMzQ1XCIpO1xyXG4gICAgICAgIGRvIHtcclxuICAgICAgICAgICAgdmFsdWVUZXh0ID0gXCIxXCIgKyB2YWx1ZVRleHRcclxuICAgICAgICB9IHdoaWxlIChoYXNHcm91cHMgJiYgcGFyc2VWYWx1ZSh2YWx1ZVRleHQsIGlzUGVyY2VudCkgPCAxZTUpXHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsdWVUZXh0XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldEZvcm1hdEJ5VmFsdWVUZXh0KHZhbHVlVGV4dCwgZm9ybWF0dGVyLCBpc1BlcmNlbnQsIGlzTmVnYXRpdmUpIHtcclxuICAgIHZhciBmb3JtYXQgPSBmb3JtYXR0ZXIocGFyc2VWYWx1ZSh2YWx1ZVRleHQsIGlzUGVyY2VudCwgaXNOZWdhdGl2ZSkpO1xyXG4gICAgdmFyIHZhbHVlVGV4dFBhcnRzID0gdmFsdWVUZXh0LnNwbGl0KFwiLlwiKTtcclxuICAgIHZhciB2YWx1ZVRleHRXaXRoTW9kaWZpZWRGbG9hdCA9IHZhbHVlVGV4dFBhcnRzWzBdICsgXCIuM1wiICsgdmFsdWVUZXh0UGFydHNbMV0uc2xpY2UoMSk7XHJcbiAgICB2YXIgdmFsdWVXaXRoTW9kaWZpZWRGbG9hdCA9IHBhcnNlVmFsdWUodmFsdWVUZXh0V2l0aE1vZGlmaWVkRmxvYXQsIGlzUGVyY2VudCwgaXNOZWdhdGl2ZSk7XHJcbiAgICB2YXIgZGVjaW1hbFNlcGFyYXRvckluZGV4ID0gZm9ybWF0dGVyKHZhbHVlV2l0aE1vZGlmaWVkRmxvYXQpLmluZGV4T2YoXCIzXCIpIC0gMTtcclxuICAgIGZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlKC8oXFxkKVxcRChcXGQpL2csIFwiJDEsJDJcIik7XHJcbiAgICBpZiAoZGVjaW1hbFNlcGFyYXRvckluZGV4ID49IDApIHtcclxuICAgICAgICBmb3JtYXQgPSBmb3JtYXQuc2xpY2UoMCwgZGVjaW1hbFNlcGFyYXRvckluZGV4KSArIFwiLlwiICsgZm9ybWF0LnNsaWNlKGRlY2ltYWxTZXBhcmF0b3JJbmRleCArIDEpXHJcbiAgICB9XHJcbiAgICBmb3JtYXQgPSBmb3JtYXQucmVwbGFjZSgvMSsvLCBcIjFcIikucmVwbGFjZSgvMS9nLCBcIiNcIik7XHJcbiAgICBpZiAoIWlzUGVyY2VudCkge1xyXG4gICAgICAgIGZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlKFwiJVwiLCBcIiclJ1wiKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZvcm1hdFxyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JtYXQoZm9ybWF0dGVyKSB7XHJcbiAgICB2YXIgdmFsdWVUZXh0ID0gXCIuXCI7XHJcbiAgICB2YXIgaXNQZXJjZW50ID0gZm9ybWF0dGVyKDEpLmluZGV4T2YoXCIxMDBcIikgPj0gMDtcclxuICAgIHZhbHVlVGV4dCA9IHByZXBhcmVWYWx1ZVRleHQodmFsdWVUZXh0LCBmb3JtYXR0ZXIsIGlzUGVyY2VudCwgdHJ1ZSk7XHJcbiAgICB2YWx1ZVRleHQgPSBwcmVwYXJlVmFsdWVUZXh0KHZhbHVlVGV4dCwgZm9ybWF0dGVyLCBpc1BlcmNlbnQsIGZhbHNlKTtcclxuICAgIHZhciBwb3NpdGl2ZUZvcm1hdCA9IGdldEZvcm1hdEJ5VmFsdWVUZXh0KHZhbHVlVGV4dCwgZm9ybWF0dGVyLCBpc1BlcmNlbnQsIGZhbHNlKTtcclxuICAgIHZhciBuZWdhdGl2ZUZvcm1hdCA9IGdldEZvcm1hdEJ5VmFsdWVUZXh0KHZhbHVlVGV4dCwgZm9ybWF0dGVyLCBpc1BlcmNlbnQsIHRydWUpO1xyXG4gICAgcmV0dXJuIG5lZ2F0aXZlRm9ybWF0ID09PSBcIi1cIiArIHBvc2l0aXZlRm9ybWF0ID8gcG9zaXRpdmVGb3JtYXQgOiBwb3NpdGl2ZUZvcm1hdCArIFwiO1wiICsgbmVnYXRpdmVGb3JtYXRcclxufVxyXG4iLCIvKipcclxuICogRGV2RXh0cmVtZSAoZXNtL2xvY2FsaXphdGlvbi9tZXNzYWdlLmpzKVxyXG4gKiBWZXJzaW9uOiAyMS4xLjRcclxuICogQnVpbGQgZGF0ZTogTW9uIEp1biAyMSAyMDIxXHJcbiAqXHJcbiAqIENvcHlyaWdodCAoYykgMjAxMiAtIDIwMjEgRGV2ZWxvcGVyIEV4cHJlc3MgSW5jLiBBTEwgUklHSFRTIFJFU0VSVkVEXHJcbiAqIFJlYWQgYWJvdXQgRGV2RXh0cmVtZSBsaWNlbnNpbmcgaGVyZTogaHR0cHM6Ly9qcy5kZXZleHByZXNzLmNvbS9MaWNlbnNpbmcvXHJcbiAqL1xyXG5pbXBvcnQgJCBmcm9tIFwiLi4vY29yZS9yZW5kZXJlclwiO1xyXG5pbXBvcnQgZGVwZW5kZW5jeUluamVjdG9yIGZyb20gXCIuLi9jb3JlL3V0aWxzL2RlcGVuZGVuY3lfaW5qZWN0b3JcIjtcclxuaW1wb3J0IHtcclxuICAgIGV4dGVuZFxyXG59IGZyb20gXCIuLi9jb3JlL3V0aWxzL2V4dGVuZFwiO1xyXG5pbXBvcnQge1xyXG4gICAgZWFjaFxyXG59IGZyb20gXCIuLi9jb3JlL3V0aWxzL2l0ZXJhdG9yXCI7XHJcbmltcG9ydCB7XHJcbiAgICBmb3JtYXQgYXMgc3RyaW5nRm9ybWF0XHJcbn0gZnJvbSBcIi4uL2NvcmUvdXRpbHMvc3RyaW5nXCI7XHJcbmltcG9ydCB7XHJcbiAgICBodW1hbml6ZVxyXG59IGZyb20gXCIuLi9jb3JlL3V0aWxzL2luZmxlY3RvclwiO1xyXG5pbXBvcnQgY29yZUxvY2FsaXphdGlvbiBmcm9tIFwiLi9jb3JlXCI7XHJcbmltcG9ydCB7XHJcbiAgICBkZWZhdWx0TWVzc2FnZXNcclxufSBmcm9tIFwiLi9kZWZhdWx0X21lc3NhZ2VzXCI7XHJcbnZhciBiYXNlRGljdGlvbmFyeSA9IGV4dGVuZCh0cnVlLCB7fSwgZGVmYXVsdE1lc3NhZ2VzKTtcclxudmFyIGdldERhdGFCeUxvY2FsZSA9IChsb2NhbGVEYXRhLCBsb2NhbGUpID0+IGxvY2FsZURhdGFbbG9jYWxlXSB8fCB7fTtcclxudmFyIG5ld01lc3NhZ2VzID0ge307XHJcbnZhciBtZXNzYWdlTG9jYWxpemF0aW9uID0gZGVwZW5kZW5jeUluamVjdG9yKHtcclxuICAgIGVuZ2luZTogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIFwiYmFzZVwiXHJcbiAgICB9LFxyXG4gICAgX2RpY3Rpb25hcnk6IGJhc2VEaWN0aW9uYXJ5LFxyXG4gICAgbG9hZDogZnVuY3Rpb24obWVzc2FnZXMpIHtcclxuICAgICAgICBleHRlbmQodHJ1ZSwgdGhpcy5fZGljdGlvbmFyeSwgbWVzc2FnZXMpXHJcbiAgICB9LFxyXG4gICAgX2xvY2FsaXphYmxlUHJlZml4OiBcIkBcIixcclxuICAgIHNldHVwOiBmdW5jdGlvbihsb2NhbGl6YWJsZVByZWZpeCkge1xyXG4gICAgICAgIHRoaXMuX2xvY2FsaXphYmxlUHJlZml4ID0gbG9jYWxpemFibGVQcmVmaXhcclxuICAgIH0sXHJcbiAgICBsb2NhbGl6ZVN0cmluZzogZnVuY3Rpb24odGV4dCkge1xyXG4gICAgICAgIHZhciB0aGF0ID0gdGhpcztcclxuICAgICAgICB2YXIgcmVnZXggPSBuZXcgUmVnRXhwKFwiKF58W15hLXpBLVpfMC05XCIgKyB0aGF0Ll9sb2NhbGl6YWJsZVByZWZpeCArIFwiLV0rKShcIiArIHRoYXQuX2xvY2FsaXphYmxlUHJlZml4ICsgXCJ7MSwyfSkoW2EtekEtWl8wLTktXSspXCIsIFwiZ1wiKTtcclxuICAgICAgICB2YXIgZXNjYXBlU3RyaW5nID0gdGhhdC5fbG9jYWxpemFibGVQcmVmaXggKyB0aGF0Ll9sb2NhbGl6YWJsZVByZWZpeDtcclxuICAgICAgICByZXR1cm4gdGV4dC5yZXBsYWNlKHJlZ2V4LCAoc3RyLCBwcmVmaXgsIGVzY2FwZSwgbG9jYWxpemF0aW9uS2V5KSA9PiB7XHJcbiAgICAgICAgICAgIHZhciBkZWZhdWx0UmVzdWx0ID0gdGhhdC5fbG9jYWxpemFibGVQcmVmaXggKyBsb2NhbGl6YXRpb25LZXk7XHJcbiAgICAgICAgICAgIHZhciByZXN1bHQ7XHJcbiAgICAgICAgICAgIGlmIChlc2NhcGUgIT09IGVzY2FwZVN0cmluZykge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gdGhhdC5mb3JtYXQobG9jYWxpemF0aW9uS2V5KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghcmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICBuZXdNZXNzYWdlc1tsb2NhbGl6YXRpb25LZXldID0gaHVtYW5pemUobG9jYWxpemF0aW9uS2V5KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBwcmVmaXggKyAocmVzdWx0IHx8IGRlZmF1bHRSZXN1bHQpXHJcbiAgICAgICAgfSlcclxuICAgIH0sXHJcbiAgICBsb2NhbGl6ZU5vZGU6IGZ1bmN0aW9uKG5vZGUpIHtcclxuICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XHJcbiAgICAgICAgJChub2RlKS5lYWNoKChpbmRleCwgbm9kZUl0ZW0pID0+IHtcclxuICAgICAgICAgICAgaWYgKCFub2RlSXRlbS5ub2RlVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKDMgPT09IG5vZGVJdGVtLm5vZGVUeXBlKSB7XHJcbiAgICAgICAgICAgICAgICBub2RlSXRlbS5ub2RlVmFsdWUgPSB0aGF0LmxvY2FsaXplU3RyaW5nKG5vZGVJdGVtLm5vZGVWYWx1ZSlcclxuICAgICAgICAgICAgfSBlbHNlIGlmICghJChub2RlSXRlbSkuaXMoXCJpZnJhbWVcIikpIHtcclxuICAgICAgICAgICAgICAgIGVhY2gobm9kZUl0ZW0uYXR0cmlidXRlcyB8fCBbXSwgKGluZGV4LCBhdHRyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKFwic3RyaW5nXCIgPT09IHR5cGVvZiBhdHRyLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsb2NhbGl6ZWRWYWx1ZSA9IHRoYXQubG9jYWxpemVTdHJpbmcoYXR0ci52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhdHRyLnZhbHVlICE9PSBsb2NhbGl6ZWRWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0ci52YWx1ZSA9IGxvY2FsaXplZFZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICQobm9kZUl0ZW0pLmNvbnRlbnRzKCkuZWFjaCgoaW5kZXgsIG5vZGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGF0LmxvY2FsaXplTm9kZShub2RlKVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICB9LFxyXG4gICAgZ2V0TWVzc2FnZXNCeUxvY2FsZXM6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9kaWN0aW9uYXJ5XHJcbiAgICB9LFxyXG4gICAgZ2V0RGljdGlvbmFyeTogZnVuY3Rpb24ob25seU5ldykge1xyXG4gICAgICAgIGlmIChvbmx5TmV3KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXdNZXNzYWdlc1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZXh0ZW5kKHt9LCBuZXdNZXNzYWdlcywgdGhpcy5nZXRNZXNzYWdlc0J5TG9jYWxlcygpW2NvcmVMb2NhbGl6YXRpb24ubG9jYWxlKCldKVxyXG4gICAgfSxcclxuICAgIGdldEZvcm1hdHRlcjogZnVuY3Rpb24oa2V5KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldEZvcm1hdHRlckJhc2Uoa2V5KSB8fCB0aGlzLl9nZXRGb3JtYXR0ZXJCYXNlKGtleSwgXCJlblwiKVxyXG4gICAgfSxcclxuICAgIF9nZXRGb3JtYXR0ZXJCYXNlOiBmdW5jdGlvbihrZXksIGxvY2FsZSkge1xyXG4gICAgICAgIHZhciBtZXNzYWdlID0gY29yZUxvY2FsaXphdGlvbi5nZXRWYWx1ZUJ5Q2xvc2VzdExvY2FsZShsb2NhbGUgPT4gZ2V0RGF0YUJ5TG9jYWxlKHRoaXMuX2RpY3Rpb25hcnksIGxvY2FsZSlba2V5XSk7XHJcbiAgICAgICAgaWYgKG1lc3NhZ2UpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSAxID09PSBhcmd1bWVudHMubGVuZ3RoICYmIEFycmF5LmlzQXJyYXkoYXJndW1lbnRzWzBdKSA/IGFyZ3VtZW50c1swXS5zbGljZSgwKSA6IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCk7XHJcbiAgICAgICAgICAgICAgICBhcmdzLnVuc2hpZnQobWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RyaW5nRm9ybWF0LmFwcGx5KHRoaXMsIGFyZ3MpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgZm9ybWF0OiBmdW5jdGlvbihrZXkpIHtcclxuICAgICAgICB2YXIgZm9ybWF0dGVyID0gdGhpcy5nZXRGb3JtYXR0ZXIoa2V5KTtcclxuICAgICAgICB2YXIgdmFsdWVzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcclxuICAgICAgICByZXR1cm4gZm9ybWF0dGVyICYmIGZvcm1hdHRlci5hcHBseSh0aGlzLCB2YWx1ZXMpIHx8IFwiXCJcclxuICAgIH1cclxufSk7XHJcbmV4cG9ydCBkZWZhdWx0IG1lc3NhZ2VMb2NhbGl6YXRpb247XHJcbiIsIi8qKlxyXG4gKiBEZXZFeHRyZW1lIChlc20vbG9jYWxpemF0aW9uL251bWJlci5qcylcclxuICogVmVyc2lvbjogMjEuMS40XHJcbiAqIEJ1aWxkIGRhdGU6IE1vbiBKdW4gMjEgMjAyMVxyXG4gKlxyXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTIgLSAyMDIxIERldmVsb3BlciBFeHByZXNzIEluYy4gQUxMIFJJR0hUUyBSRVNFUlZFRFxyXG4gKiBSZWFkIGFib3V0IERldkV4dHJlbWUgbGljZW5zaW5nIGhlcmU6IGh0dHBzOi8vanMuZGV2ZXhwcmVzcy5jb20vTGljZW5zaW5nL1xyXG4gKi9cclxuaW1wb3J0IGRlcGVuZGVuY3lJbmplY3RvciBmcm9tIFwiLi4vY29yZS91dGlscy9kZXBlbmRlbmN5X2luamVjdG9yXCI7XHJcbmltcG9ydCB7XHJcbiAgICBpbkFycmF5LFxyXG4gICAgZmluZFxyXG59IGZyb20gXCIuLi9jb3JlL3V0aWxzL2FycmF5XCI7XHJcbmltcG9ydCB7XHJcbiAgICBlc2NhcGVSZWdFeHBcclxufSBmcm9tIFwiLi4vY29yZS91dGlscy9jb21tb25cIjtcclxuaW1wb3J0IHtcclxuICAgIGVhY2hcclxufSBmcm9tIFwiLi4vY29yZS91dGlscy9pdGVyYXRvclwiO1xyXG5pbXBvcnQge1xyXG4gICAgaXNQbGFpbk9iamVjdFxyXG59IGZyb20gXCIuLi9jb3JlL3V0aWxzL3R5cGVcIjtcclxuaW1wb3J0IHtcclxuICAgIGdldEZvcm1hdHRlclxyXG59IGZyb20gXCIuL2xkbWwvbnVtYmVyXCI7XHJcbmltcG9ydCBjb25maWcgZnJvbSBcIi4uL2NvcmUvY29uZmlnXCI7XHJcbmltcG9ydCBlcnJvcnMgZnJvbSBcIi4uL2NvcmUvZXJyb3JzXCI7XHJcbmltcG9ydCB7XHJcbiAgICB0b0ZpeGVkXHJcbn0gZnJvbSBcIi4vdXRpbHNcIjtcclxuaW1wb3J0IGN1cnJlbmN5TG9jYWxpemF0aW9uIGZyb20gXCIuL2N1cnJlbmN5XCI7XHJcbmltcG9ydCBpbnRsTnVtYmVyTG9jYWxpemF0aW9uIGZyb20gXCIuL2ludGwvbnVtYmVyXCI7XHJcbnZhciBoYXNJbnRsID0gXCJ1bmRlZmluZWRcIiAhPT0gdHlwZW9mIEludGw7XHJcbnZhciBNQVhfTEFSR0VfTlVNQkVSX1BPV0VSID0gNDtcclxudmFyIERFQ0lNQUxfQkFTRSA9IDEwO1xyXG52YXIgTlVNRVJJQ19GT1JNQVRTID0gW1wiY3VycmVuY3lcIiwgXCJmaXhlZHBvaW50XCIsIFwiZXhwb25lbnRpYWxcIiwgXCJwZXJjZW50XCIsIFwiZGVjaW1hbFwiXTtcclxudmFyIExhcmdlTnVtYmVyRm9ybWF0UG9zdGZpeGVzID0ge1xyXG4gICAgMTogXCJLXCIsXHJcbiAgICAyOiBcIk1cIixcclxuICAgIDM6IFwiQlwiLFxyXG4gICAgNDogXCJUXCJcclxufTtcclxudmFyIExhcmdlTnVtYmVyRm9ybWF0UG93ZXJzID0ge1xyXG4gICAgbGFyZ2VudW1iZXI6IFwiYXV0b1wiLFxyXG4gICAgdGhvdXNhbmRzOiAxLFxyXG4gICAgbWlsbGlvbnM6IDIsXHJcbiAgICBiaWxsaW9uczogMyxcclxuICAgIHRyaWxsaW9uczogNFxyXG59O1xyXG52YXIgbnVtYmVyTG9jYWxpemF0aW9uID0gZGVwZW5kZW5jeUluamVjdG9yKHtcclxuICAgIGVuZ2luZTogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIFwiYmFzZVwiXHJcbiAgICB9LFxyXG4gICAgbnVtZXJpY0Zvcm1hdHM6IE5VTUVSSUNfRk9STUFUUyxcclxuICAgIGRlZmF1bHRMYXJnZU51bWJlckZvcm1hdFBvc3RmaXhlczogTGFyZ2VOdW1iZXJGb3JtYXRQb3N0Zml4ZXMsXHJcbiAgICBfcGFyc2VOdW1iZXJGb3JtYXRTdHJpbmc6IGZ1bmN0aW9uKGZvcm1hdFR5cGUpIHtcclxuICAgICAgICB2YXIgZm9ybWF0T2JqZWN0ID0ge307XHJcbiAgICAgICAgaWYgKCFmb3JtYXRUeXBlIHx8IFwic3RyaW5nXCIgIT09IHR5cGVvZiBmb3JtYXRUeXBlKSB7XHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgZm9ybWF0TGlzdCA9IGZvcm1hdFR5cGUudG9Mb3dlckNhc2UoKS5zcGxpdChcIiBcIik7XHJcbiAgICAgICAgZWFjaChmb3JtYXRMaXN0LCAoaW5kZXgsIHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChpbkFycmF5KHZhbHVlLCBOVU1FUklDX0ZPUk1BVFMpID4gLTEpIHtcclxuICAgICAgICAgICAgICAgIGZvcm1hdE9iamVjdC5mb3JtYXRUeXBlID0gdmFsdWVcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSBpbiBMYXJnZU51bWJlckZvcm1hdFBvd2Vycykge1xyXG4gICAgICAgICAgICAgICAgZm9ybWF0T2JqZWN0LnBvd2VyID0gTGFyZ2VOdW1iZXJGb3JtYXRQb3dlcnNbdmFsdWVdXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoZm9ybWF0T2JqZWN0LnBvd2VyICYmICFmb3JtYXRPYmplY3QuZm9ybWF0VHlwZSkge1xyXG4gICAgICAgICAgICBmb3JtYXRPYmplY3QuZm9ybWF0VHlwZSA9IFwiZml4ZWRwb2ludFwiXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChmb3JtYXRPYmplY3QuZm9ybWF0VHlwZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZm9ybWF0T2JqZWN0XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIF9jYWxjdWxhdGVOdW1iZXJQb3dlcjogZnVuY3Rpb24odmFsdWUsIGJhc2UsIG1pblBvd2VyLCBtYXhQb3dlcikge1xyXG4gICAgICAgIHZhciBudW1iZXIgPSBNYXRoLmFicyh2YWx1ZSk7XHJcbiAgICAgICAgdmFyIHBvd2VyID0gMDtcclxuICAgICAgICBpZiAobnVtYmVyID4gMSkge1xyXG4gICAgICAgICAgICB3aGlsZSAobnVtYmVyICYmIG51bWJlciA+PSBiYXNlICYmICh2b2lkIDAgPT09IG1heFBvd2VyIHx8IHBvd2VyIDwgbWF4UG93ZXIpKSB7XHJcbiAgICAgICAgICAgICAgICBwb3dlcisrO1xyXG4gICAgICAgICAgICAgICAgbnVtYmVyIC89IGJhc2VcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAobnVtYmVyID4gMCAmJiBudW1iZXIgPCAxKSB7XHJcbiAgICAgICAgICAgIHdoaWxlIChudW1iZXIgPCAxICYmICh2b2lkIDAgPT09IG1pblBvd2VyIHx8IHBvd2VyID4gbWluUG93ZXIpKSB7XHJcbiAgICAgICAgICAgICAgICBwb3dlci0tO1xyXG4gICAgICAgICAgICAgICAgbnVtYmVyICo9IGJhc2VcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcG93ZXJcclxuICAgIH0sXHJcbiAgICBfZ2V0TnVtYmVyQnlQb3dlcjogZnVuY3Rpb24obnVtYmVyLCBwb3dlciwgYmFzZSkge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBudW1iZXI7XHJcbiAgICAgICAgd2hpbGUgKHBvd2VyID4gMCkge1xyXG4gICAgICAgICAgICByZXN1bHQgLz0gYmFzZTtcclxuICAgICAgICAgICAgcG93ZXItLVxyXG4gICAgICAgIH1cclxuICAgICAgICB3aGlsZSAocG93ZXIgPCAwKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCAqPSBiYXNlO1xyXG4gICAgICAgICAgICBwb3dlcisrXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHRcclxuICAgIH0sXHJcbiAgICBfZm9ybWF0TnVtYmVyOiBmdW5jdGlvbih2YWx1ZSwgZm9ybWF0T2JqZWN0LCBmb3JtYXRDb25maWcpIHtcclxuICAgICAgICBpZiAoXCJhdXRvXCIgPT09IGZvcm1hdE9iamVjdC5wb3dlcikge1xyXG4gICAgICAgICAgICBmb3JtYXRPYmplY3QucG93ZXIgPSB0aGlzLl9jYWxjdWxhdGVOdW1iZXJQb3dlcih2YWx1ZSwgMWUzLCAwLCBNQVhfTEFSR0VfTlVNQkVSX1BPV0VSKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZm9ybWF0T2JqZWN0LnBvd2VyKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gdGhpcy5fZ2V0TnVtYmVyQnlQb3dlcih2YWx1ZSwgZm9ybWF0T2JqZWN0LnBvd2VyLCAxZTMpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBwb3dlclBvc3RmaXggPSB0aGlzLmRlZmF1bHRMYXJnZU51bWJlckZvcm1hdFBvc3RmaXhlc1tmb3JtYXRPYmplY3QucG93ZXJdIHx8IFwiXCI7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IHRoaXMuX2Zvcm1hdE51bWJlckNvcmUodmFsdWUsIGZvcm1hdE9iamVjdC5mb3JtYXRUeXBlLCBmb3JtYXRDb25maWcpO1xyXG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKC8oXFxkfC4kKShcXEQqKSQvLCBcIiQxXCIgKyBwb3dlclBvc3RmaXggKyBcIiQyXCIpO1xyXG4gICAgICAgIHJldHVybiByZXN1bHRcclxuICAgIH0sXHJcbiAgICBfZm9ybWF0TnVtYmVyRXhwb25lbnRpYWw6IGZ1bmN0aW9uKHZhbHVlLCBmb3JtYXRDb25maWcpIHtcclxuICAgICAgICB2YXIgcG93ZXIgPSB0aGlzLl9jYWxjdWxhdGVOdW1iZXJQb3dlcih2YWx1ZSwgREVDSU1BTF9CQVNFKTtcclxuICAgICAgICB2YXIgbnVtYmVyID0gdGhpcy5fZ2V0TnVtYmVyQnlQb3dlcih2YWx1ZSwgcG93ZXIsIERFQ0lNQUxfQkFTRSk7XHJcbiAgICAgICAgaWYgKHZvaWQgMCA9PT0gZm9ybWF0Q29uZmlnLnByZWNpc2lvbikge1xyXG4gICAgICAgICAgICBmb3JtYXRDb25maWcucHJlY2lzaW9uID0gMVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobnVtYmVyLnRvRml4ZWQoZm9ybWF0Q29uZmlnLnByZWNpc2lvbiB8fCAwKSA+PSBERUNJTUFMX0JBU0UpIHtcclxuICAgICAgICAgICAgcG93ZXIrKztcclxuICAgICAgICAgICAgbnVtYmVyIC89IERFQ0lNQUxfQkFTRVxyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgcG93U3RyaW5nID0gKHBvd2VyID49IDAgPyBcIitcIiA6IFwiXCIpICsgcG93ZXIudG9TdHJpbmcoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZm9ybWF0TnVtYmVyQ29yZShudW1iZXIsIFwiZml4ZWRwb2ludFwiLCBmb3JtYXRDb25maWcpICsgXCJFXCIgKyBwb3dTdHJpbmdcclxuICAgIH0sXHJcbiAgICBfYWRkWmVyb2VzOiBmdW5jdGlvbih2YWx1ZSwgcHJlY2lzaW9uKSB7XHJcbiAgICAgICAgdmFyIG11bHRpcGxpZXIgPSBNYXRoLnBvdygxMCwgcHJlY2lzaW9uKTtcclxuICAgICAgICB2YXIgc2lnbiA9IHZhbHVlIDwgMCA/IFwiLVwiIDogXCJcIjtcclxuICAgICAgICB2YWx1ZSA9IChNYXRoLmFicyh2YWx1ZSkgKiBtdWx0aXBsaWVyID4+PiAwKSAvIG11bHRpcGxpZXI7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IHZhbHVlLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgd2hpbGUgKHJlc3VsdC5sZW5ndGggPCBwcmVjaXNpb24pIHtcclxuICAgICAgICAgICAgcmVzdWx0ID0gXCIwXCIgKyByZXN1bHRcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHNpZ24gKyByZXN1bHRcclxuICAgIH0sXHJcbiAgICBfYWRkR3JvdXBTZXBhcmF0b3JzOiBmdW5jdGlvbih2YWx1ZSkge1xyXG4gICAgICAgIHZhciBwYXJ0cyA9IHZhbHVlLnRvU3RyaW5nKCkuc3BsaXQoXCIuXCIpO1xyXG4gICAgICAgIHJldHVybiBwYXJ0c1swXS5yZXBsYWNlKC9cXEIoPz0oXFxkezN9KSsoPyFcXGQpKS9nLCBjb25maWcoKS50aG91c2FuZHNTZXBhcmF0b3IpICsgKHBhcnRzWzFdID8gY29uZmlnKCkuZGVjaW1hbFNlcGFyYXRvciArIHBhcnRzWzFdIDogXCJcIilcclxuICAgIH0sXHJcbiAgICBfZm9ybWF0TnVtYmVyQ29yZTogZnVuY3Rpb24odmFsdWUsIGZvcm1hdCwgZm9ybWF0Q29uZmlnKSB7XHJcbiAgICAgICAgaWYgKFwiZXhwb25lbnRpYWxcIiA9PT0gZm9ybWF0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9mb3JtYXROdW1iZXJFeHBvbmVudGlhbCh2YWx1ZSwgZm9ybWF0Q29uZmlnKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoXCJkZWNpbWFsXCIgIT09IGZvcm1hdCAmJiBudWxsICE9PSBmb3JtYXRDb25maWcucHJlY2lzaW9uKSB7XHJcbiAgICAgICAgICAgIGZvcm1hdENvbmZpZy5wcmVjaXNpb24gPSBmb3JtYXRDb25maWcucHJlY2lzaW9uIHx8IDBcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKFwicGVyY2VudFwiID09PSBmb3JtYXQpIHtcclxuICAgICAgICAgICAgdmFsdWUgKj0gMTAwXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh2b2lkIDAgIT09IGZvcm1hdENvbmZpZy5wcmVjaXNpb24pIHtcclxuICAgICAgICAgICAgaWYgKFwiZGVjaW1hbFwiID09PSBmb3JtYXQpIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlID0gdGhpcy5fYWRkWmVyb2VzKHZhbHVlLCBmb3JtYXRDb25maWcucHJlY2lzaW9uKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdmFsdWUgPSBudWxsID09PSBmb3JtYXRDb25maWcucHJlY2lzaW9uID8gdmFsdWUudG9QcmVjaXNpb24oKSA6IHRvRml4ZWQodmFsdWUsIGZvcm1hdENvbmZpZy5wcmVjaXNpb24pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKFwiZGVjaW1hbFwiICE9PSBmb3JtYXQpIHtcclxuICAgICAgICAgICAgdmFsdWUgPSB0aGlzLl9hZGRHcm91cFNlcGFyYXRvcnModmFsdWUpXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS50b1N0cmluZygpLnJlcGxhY2UoXCIuXCIsIGNvbmZpZygpLmRlY2ltYWxTZXBhcmF0b3IpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChcInBlcmNlbnRcIiA9PT0gZm9ybWF0KSB7XHJcbiAgICAgICAgICAgIHZhbHVlICs9IFwiJVwiXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB2YWx1ZVxyXG4gICAgfSxcclxuICAgIF9ub3JtYWxpemVGb3JtYXQ6IGZ1bmN0aW9uKGZvcm1hdCkge1xyXG4gICAgICAgIGlmICghZm9ybWF0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7fVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgZm9ybWF0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXRcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFpc1BsYWluT2JqZWN0KGZvcm1hdCkpIHtcclxuICAgICAgICAgICAgZm9ybWF0ID0ge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogZm9ybWF0XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZvcm1hdFxyXG4gICAgfSxcclxuICAgIF9nZXRTZXBhcmF0b3JzOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBkZWNpbWFsU2VwYXJhdG9yOiB0aGlzLmdldERlY2ltYWxTZXBhcmF0b3IoKSxcclxuICAgICAgICAgICAgdGhvdXNhbmRzU2VwYXJhdG9yOiB0aGlzLmdldFRob3VzYW5kc1NlcGFyYXRvcigpXHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIGdldFRob3VzYW5kc1NlcGFyYXRvcjogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0KDFlNCwgXCJmaXhlZFBvaW50XCIpWzJdXHJcbiAgICB9LFxyXG4gICAgZ2V0RGVjaW1hbFNlcGFyYXRvcjogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0KDEuMiwge1xyXG4gICAgICAgICAgICB0eXBlOiBcImZpeGVkUG9pbnRcIixcclxuICAgICAgICAgICAgcHJlY2lzaW9uOiAxXHJcbiAgICAgICAgfSlbMV1cclxuICAgIH0sXHJcbiAgICBjb252ZXJ0RGlnaXRzOiBmdW5jdGlvbih2YWx1ZSwgdG9TdGFuZGFyZCkge1xyXG4gICAgICAgIHZhciBkaWdpdHMgPSB0aGlzLmZvcm1hdCg5MCwgXCJkZWNpbWFsXCIpO1xyXG4gICAgICAgIGlmIChcInN0cmluZ1wiICE9PSB0eXBlb2YgdmFsdWUgfHwgXCIwXCIgPT09IGRpZ2l0c1sxXSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWVcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGZyb21GaXJzdERpZ2l0ID0gdG9TdGFuZGFyZCA/IGRpZ2l0c1sxXSA6IFwiMFwiO1xyXG4gICAgICAgIHZhciB0b0ZpcnN0RGlnaXQgPSB0b1N0YW5kYXJkID8gXCIwXCIgOiBkaWdpdHNbMV07XHJcbiAgICAgICAgdmFyIGZyb21MYXN0RGlnaXQgPSB0b1N0YW5kYXJkID8gZGlnaXRzWzBdIDogXCI5XCI7XHJcbiAgICAgICAgdmFyIHJlZ0V4cCA9IG5ldyBSZWdFeHAoXCJbXCIgKyBmcm9tRmlyc3REaWdpdCArIFwiLVwiICsgZnJvbUxhc3REaWdpdCArIFwiXVwiLCBcImdcIik7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlLnJlcGxhY2UocmVnRXhwLCBjaGFyID0+IFN0cmluZy5mcm9tQ2hhckNvZGUoY2hhci5jaGFyQ29kZUF0KDApICsgKHRvRmlyc3REaWdpdC5jaGFyQ29kZUF0KDApIC0gZnJvbUZpcnN0RGlnaXQuY2hhckNvZGVBdCgwKSkpKVxyXG4gICAgfSxcclxuICAgIGdldE5lZ2F0aXZlRXRhbG9uUmVnRXhwOiBmdW5jdGlvbihmb3JtYXQpIHtcclxuICAgICAgICB2YXIgc2VwYXJhdG9ycyA9IHRoaXMuX2dldFNlcGFyYXRvcnMoKTtcclxuICAgICAgICB2YXIgZGlnaXRhbFJlZ0V4cCA9IG5ldyBSZWdFeHAoXCJbMC05XCIgKyBlc2NhcGVSZWdFeHAoc2VwYXJhdG9ycy5kZWNpbWFsU2VwYXJhdG9yICsgc2VwYXJhdG9ycy50aG91c2FuZHNTZXBhcmF0b3IpICsgXCJdK1wiLCBcImdcIik7XHJcbiAgICAgICAgdmFyIG5lZ2F0aXZlRXRhbG9uID0gdGhpcy5mb3JtYXQoLTEsIGZvcm1hdCkucmVwbGFjZShkaWdpdGFsUmVnRXhwLCBcIjFcIik7XHJcbiAgICAgICAgW1wiXFxcXFwiLCBcIihcIiwgXCIpXCIsIFwiW1wiLCBcIl1cIiwgXCIqXCIsIFwiK1wiLCBcIiRcIiwgXCJeXCIsIFwiP1wiLCBcInxcIiwgXCJ7XCIsIFwifVwiXS5mb3JFYWNoKGNoYXIgPT4ge1xyXG4gICAgICAgICAgICBuZWdhdGl2ZUV0YWxvbiA9IG5lZ2F0aXZlRXRhbG9uLnJlcGxhY2UoY2hhciwgXCJcXFxcXCIuY29uY2F0KGNoYXIpKVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIG5lZ2F0aXZlRXRhbG9uID0gbmVnYXRpdmVFdGFsb24ucmVwbGFjZShcIiBcIiwgXCJcXFxcc1wiKTtcclxuICAgICAgICBuZWdhdGl2ZUV0YWxvbiA9IG5lZ2F0aXZlRXRhbG9uLnJlcGxhY2UoXCIxXCIsIFwiLitcIik7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAobmVnYXRpdmVFdGFsb24sIFwiZ1wiKVxyXG4gICAgfSxcclxuICAgIGdldFNpZ246IGZ1bmN0aW9uKHRleHQsIGZvcm1hdCkge1xyXG4gICAgICAgIGlmIChcIi1cIiA9PT0gdGV4dC5yZXBsYWNlKC9bXjAtOS1dL2csIFwiXCIpLmNoYXJBdCgwKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gLTFcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFmb3JtYXQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIDFcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIG5lZ2F0aXZlRXRhbG9uID0gdGhpcy5nZXROZWdhdGl2ZUV0YWxvblJlZ0V4cChmb3JtYXQpO1xyXG4gICAgICAgIHJldHVybiB0ZXh0Lm1hdGNoKG5lZ2F0aXZlRXRhbG9uKSA/IC0xIDogMVxyXG4gICAgfSxcclxuICAgIGZvcm1hdDogZnVuY3Rpb24odmFsdWUsIF9mb3JtYXQpIHtcclxuICAgICAgICBpZiAoXCJudW1iZXJcIiAhPT0gdHlwZW9mIHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoXCJudW1iZXJcIiA9PT0gdHlwZW9mIF9mb3JtYXQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIF9mb3JtYXQgPSBfZm9ybWF0ICYmIF9mb3JtYXQuZm9ybWF0dGVyIHx8IF9mb3JtYXQ7XHJcbiAgICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIF9mb3JtYXQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIF9mb3JtYXQodmFsdWUpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIF9mb3JtYXQgPSB0aGlzLl9ub3JtYWxpemVGb3JtYXQoX2Zvcm1hdCk7XHJcbiAgICAgICAgaWYgKCFfZm9ybWF0LnR5cGUpIHtcclxuICAgICAgICAgICAgX2Zvcm1hdC50eXBlID0gXCJkZWNpbWFsXCJcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIG51bWJlckNvbmZpZyA9IHRoaXMuX3BhcnNlTnVtYmVyRm9ybWF0U3RyaW5nKF9mb3JtYXQudHlwZSk7XHJcbiAgICAgICAgaWYgKCFudW1iZXJDb25maWcpIHtcclxuICAgICAgICAgICAgdmFyIGZvcm1hdHRlckNvbmZpZyA9IHRoaXMuX2dldFNlcGFyYXRvcnMoKTtcclxuICAgICAgICAgICAgZm9ybWF0dGVyQ29uZmlnLnVubGltaXRlZEludGVnZXJEaWdpdHMgPSBfZm9ybWF0LnVubGltaXRlZEludGVnZXJEaWdpdHM7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnZlcnREaWdpdHMoZ2V0Rm9ybWF0dGVyKF9mb3JtYXQudHlwZSwgZm9ybWF0dGVyQ29uZmlnKSh2YWx1ZSkpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLl9mb3JtYXROdW1iZXIodmFsdWUsIG51bWJlckNvbmZpZywgX2Zvcm1hdClcclxuICAgIH0sXHJcbiAgICBwYXJzZTogZnVuY3Rpb24odGV4dCwgZm9ybWF0KSB7XHJcbiAgICAgICAgaWYgKCF0ZXh0KSB7XHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZm9ybWF0ICYmIGZvcm1hdC5wYXJzZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdC5wYXJzZXIodGV4dClcclxuICAgICAgICB9XHJcbiAgICAgICAgdGV4dCA9IHRoaXMuY29udmVydERpZ2l0cyh0ZXh0LCB0cnVlKTtcclxuICAgICAgICBpZiAoZm9ybWF0ICYmIFwic3RyaW5nXCIgIT09IHR5cGVvZiBmb3JtYXQpIHtcclxuICAgICAgICAgICAgZXJyb3JzLmxvZyhcIlcwMDExXCIpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBkZWNpbWFsU2VwYXJhdG9yID0gdGhpcy5nZXREZWNpbWFsU2VwYXJhdG9yKCk7XHJcbiAgICAgICAgdmFyIHJlZ0V4cCA9IG5ldyBSZWdFeHAoXCJbXjAtOVwiICsgZXNjYXBlUmVnRXhwKGRlY2ltYWxTZXBhcmF0b3IpICsgXCJdXCIsIFwiZ1wiKTtcclxuICAgICAgICB2YXIgY2xlYW5lZFRleHQgPSB0ZXh0LnJlcGxhY2UocmVnRXhwLCBcIlwiKS5yZXBsYWNlKGRlY2ltYWxTZXBhcmF0b3IsIFwiLlwiKS5yZXBsYWNlKC9cXC4kL2csIFwiXCIpO1xyXG4gICAgICAgIGlmIChcIi5cIiA9PT0gY2xlYW5lZFRleHQgfHwgXCJcIiA9PT0gY2xlYW5lZFRleHQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGxcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuX2NhbGNTaWduaWZpY2FudERpZ2l0cyhjbGVhbmVkVGV4dCkgPiAxNSkge1xyXG4gICAgICAgICAgICByZXR1cm4gTmFOXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBwYXJzZWQgPSArY2xlYW5lZFRleHQgKiB0aGlzLmdldFNpZ24odGV4dCwgZm9ybWF0KTtcclxuICAgICAgICBmb3JtYXQgPSB0aGlzLl9ub3JtYWxpemVGb3JtYXQoZm9ybWF0KTtcclxuICAgICAgICB2YXIgZm9ybWF0Q29uZmlnID0gdGhpcy5fcGFyc2VOdW1iZXJGb3JtYXRTdHJpbmcoZm9ybWF0LnR5cGUpO1xyXG4gICAgICAgIHZhciBwb3dlciA9IG51bGwgPT09IGZvcm1hdENvbmZpZyB8fCB2b2lkIDAgPT09IGZvcm1hdENvbmZpZyA/IHZvaWQgMCA6IGZvcm1hdENvbmZpZy5wb3dlcjtcclxuICAgICAgICBpZiAocG93ZXIpIHtcclxuICAgICAgICAgICAgaWYgKFwiYXV0b1wiID09PSBwb3dlcikge1xyXG4gICAgICAgICAgICAgICAgdmFyIG1hdGNoID0gdGV4dC5tYXRjaCgvXFxkKEt8TXxCfFQpLyk7XHJcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2gpIHtcclxuICAgICAgICAgICAgICAgICAgICBwb3dlciA9IGZpbmQoT2JqZWN0LmtleXMoTGFyZ2VOdW1iZXJGb3JtYXRQb3N0Zml4ZXMpLCBwb3dlciA9PiBMYXJnZU51bWJlckZvcm1hdFBvc3RmaXhlc1twb3dlcl0gPT09IG1hdGNoWzFdKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHBhcnNlZCAqPSBNYXRoLnBvdygxMCwgMyAqIHBvd2VyKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoXCJwZXJjZW50XCIgPT09IChudWxsID09PSBmb3JtYXRDb25maWcgfHwgdm9pZCAwID09PSBmb3JtYXRDb25maWcgPyB2b2lkIDAgOiBmb3JtYXRDb25maWcuZm9ybWF0VHlwZSkpIHtcclxuICAgICAgICAgICAgcGFyc2VkIC89IDEwMFxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcGFyc2VkXHJcbiAgICB9LFxyXG4gICAgX2NhbGNTaWduaWZpY2FudERpZ2l0czogZnVuY3Rpb24odGV4dCkge1xyXG4gICAgICAgIHZhciBbaW50ZWdlciwgZnJhY3Rpb25hbF0gPSB0ZXh0LnNwbGl0KFwiLlwiKTtcclxuICAgICAgICB2YXIgY2FsY0RpZ2l0c0FmdGVyTGVhZGluZ1plcm9zID0gZGlnaXRzID0+IHtcclxuICAgICAgICAgICAgdmFyIGluZGV4ID0gLTE7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGlnaXRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoXCIwXCIgIT09IGRpZ2l0c1tpXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGluZGV4ID0gaTtcclxuICAgICAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBpbmRleCA+IC0xID8gZGlnaXRzLmxlbmd0aCAtIGluZGV4IDogMFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IDA7XHJcbiAgICAgICAgaWYgKGludGVnZXIpIHtcclxuICAgICAgICAgICAgcmVzdWx0ICs9IGNhbGNEaWdpdHNBZnRlckxlYWRpbmdaZXJvcyhpbnRlZ2VyLnNwbGl0KFwiXCIpKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZnJhY3Rpb25hbCkge1xyXG4gICAgICAgICAgICByZXN1bHQgKz0gY2FsY0RpZ2l0c0FmdGVyTGVhZGluZ1plcm9zKGZyYWN0aW9uYWwuc3BsaXQoXCJcIikucmV2ZXJzZSgpKVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0XHJcbiAgICB9XHJcbn0pO1xyXG5udW1iZXJMb2NhbGl6YXRpb24uaW5qZWN0KGN1cnJlbmN5TG9jYWxpemF0aW9uKTtcclxuaWYgKGhhc0ludGwpIHtcclxuICAgIG51bWJlckxvY2FsaXphdGlvbi5pbmplY3QoaW50bE51bWJlckxvY2FsaXphdGlvbilcclxufVxyXG5leHBvcnQgZGVmYXVsdCBudW1iZXJMb2NhbGl6YXRpb247XHJcbiIsIi8qKlxyXG4gKiBEZXZFeHRyZW1lIChlc20vbG9jYWxpemF0aW9uL29wZW5feG1sX2N1cnJlbmN5X2Zvcm1hdC5qcylcclxuICogVmVyc2lvbjogMjEuMS40XHJcbiAqIEJ1aWxkIGRhdGU6IE1vbiBKdW4gMjEgMjAyMVxyXG4gKlxyXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTIgLSAyMDIxIERldmVsb3BlciBFeHByZXNzIEluYy4gQUxMIFJJR0hUUyBSRVNFUlZFRFxyXG4gKiBSZWFkIGFib3V0IERldkV4dHJlbWUgbGljZW5zaW5nIGhlcmU6IGh0dHBzOi8vanMuZGV2ZXhwcmVzcy5jb20vTGljZW5zaW5nL1xyXG4gKi9cclxuZXhwb3J0IGRlZmF1bHQgKGN1cnJlbmN5U3ltYm9sLCBhY2NvdW50aW5nRm9ybWF0KSA9PiB7XHJcbiAgICBpZiAoIWFjY291bnRpbmdGb3JtYXQpIHtcclxuICAgICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIHZhciBlbmNvZGVkQ3VycmVuY3lTeW1ib2wgPSBjdXJyZW5jeVN5bWJvbDtcclxuICAgIGlmIChcInN0cmluZ1wiID09PSB0eXBlb2YgY3VycmVuY3lTeW1ib2wpIHtcclxuICAgICAgICBlbmNvZGVkQ3VycmVuY3lTeW1ib2wgPSBcIlwiO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY3VycmVuY3lTeW1ib2wubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKFwiJFwiICE9PSBjdXJyZW5jeVN5bWJvbFtpXSkge1xyXG4gICAgICAgICAgICAgICAgZW5jb2RlZEN1cnJlbmN5U3ltYm9sICs9IFwiXFxcXFwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZW5jb2RlZEN1cnJlbmN5U3ltYm9sICs9IGN1cnJlbmN5U3ltYm9sW2ldXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgdmFyIGVuY29kZVN5bWJvbHMgPSB7XHJcbiAgICAgICAgXCIuMDBcIjogXCJ7MH1cIixcclxuICAgICAgICBcIidcIjogXCJcXFxcJ1wiLFxyXG4gICAgICAgIFwiXFxcXChcIjogXCJcXFxcKFwiLFxyXG4gICAgICAgIFwiXFxcXClcIjogXCJcXFxcKVwiLFxyXG4gICAgICAgIFwiIFwiOiBcIlxcXFwgXCIsXHJcbiAgICAgICAgJ1wiJzogXCImcXVvdDtcIixcclxuICAgICAgICBcIlxcXFxcXHhhNFwiOiBlbmNvZGVkQ3VycmVuY3lTeW1ib2xcclxuICAgIH07XHJcbiAgICB2YXIgcmVzdWx0ID0gYWNjb3VudGluZ0Zvcm1hdC5zcGxpdChcIjtcIik7XHJcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgcmVzdWx0Lmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgIGZvciAodmFyIHN5bWJvbCBpbiBlbmNvZGVTeW1ib2xzKSB7XHJcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZW5jb2RlU3ltYm9scywgc3ltYm9sKSkge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0W19pXSA9IHJlc3VsdFtfaV0ucmVwbGFjZShuZXcgUmVnRXhwKHN5bWJvbCwgXCJnXCIpLCBlbmNvZGVTeW1ib2xzW3N5bWJvbF0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gMiA9PT0gcmVzdWx0Lmxlbmd0aCA/IHJlc3VsdFswXSArIFwiXyk7XCIgKyByZXN1bHRbMV0gOiByZXN1bHRbMF1cclxufTtcclxuIiwiLyoqXHJcbiAqIERldkV4dHJlbWUgKGVzbS9sb2NhbGl6YXRpb24vcGFyZW50TG9jYWxlLmpzKVxyXG4gKiBWZXJzaW9uOiAyMS4xLjRcclxuICogQnVpbGQgZGF0ZTogTW9uIEp1biAyMSAyMDIxXHJcbiAqXHJcbiAqIENvcHlyaWdodCAoYykgMjAxMiAtIDIwMjEgRGV2ZWxvcGVyIEV4cHJlc3MgSW5jLiBBTEwgUklHSFRTIFJFU0VSVkVEXHJcbiAqIFJlYWQgYWJvdXQgRGV2RXh0cmVtZSBsaWNlbnNpbmcgaGVyZTogaHR0cHM6Ly9qcy5kZXZleHByZXNzLmNvbS9MaWNlbnNpbmcvXHJcbiAqL1xyXG52YXIgUEFSRU5UX0xPQ0FMRV9TRVBBUkFUT1IgPSBcIi1cIjtcclxuZXhwb3J0IGRlZmF1bHQgKHBhcmVudExvY2FsZXMsIGxvY2FsZSkgPT4ge1xyXG4gICAgdmFyIHBhcmVudExvY2FsZSA9IHBhcmVudExvY2FsZXNbbG9jYWxlXTtcclxuICAgIGlmIChwYXJlbnRMb2NhbGUpIHtcclxuICAgICAgICByZXR1cm4gXCJyb290XCIgIT09IHBhcmVudExvY2FsZSAmJiBwYXJlbnRMb2NhbGVcclxuICAgIH1cclxuICAgIHJldHVybiBsb2NhbGUuc3Vic3RyKDAsIGxvY2FsZS5sYXN0SW5kZXhPZihQQVJFTlRfTE9DQUxFX1NFUEFSQVRPUikpXHJcbn07XHJcbiIsIi8qKlxyXG4gKiBEZXZFeHRyZW1lIChlc20vbG9jYWxpemF0aW9uL3V0aWxzLmpzKVxyXG4gKiBWZXJzaW9uOiAyMS4xLjRcclxuICogQnVpbGQgZGF0ZTogTW9uIEp1biAyMSAyMDIxXHJcbiAqXHJcbiAqIENvcHlyaWdodCAoYykgMjAxMiAtIDIwMjEgRGV2ZWxvcGVyIEV4cHJlc3MgSW5jLiBBTEwgUklHSFRTIFJFU0VSVkVEXHJcbiAqIFJlYWQgYWJvdXQgRGV2RXh0cmVtZSBsaWNlbnNpbmcgaGVyZTogaHR0cHM6Ly9qcy5kZXZleHByZXNzLmNvbS9MaWNlbnNpbmcvXHJcbiAqL1xyXG5pbXBvcnQge1xyXG4gICAgc2lnblxyXG59IGZyb20gXCIuLi9jb3JlL3V0aWxzL21hdGhcIjtcclxudmFyIERFQ0lNQUxfQkFTRSA9IDEwO1xyXG5cclxuZnVuY3Rpb24gcm91bmRCeUFicyh2YWx1ZSkge1xyXG4gICAgdmFyIHZhbHVlU2lnbiA9IHNpZ24odmFsdWUpO1xyXG4gICAgcmV0dXJuIHZhbHVlU2lnbiAqIE1hdGgucm91bmQoTWF0aC5hYnModmFsdWUpKVxyXG59XHJcblxyXG5mdW5jdGlvbiBhZGp1c3RWYWx1ZSh2YWx1ZSwgcHJlY2lzaW9uKSB7XHJcbiAgICB2YXIgcHJlY2lzaW9uTXVsdGlwbGllciA9IE1hdGgucG93KERFQ0lNQUxfQkFTRSwgcHJlY2lzaW9uKTtcclxuICAgIHZhciByb3VuZE11bHRpcGxpZXIgPSBwcmVjaXNpb25NdWx0aXBsaWVyICogREVDSU1BTF9CQVNFO1xyXG4gICAgdmFyIGludGVybWVkaWF0ZVZhbHVlID0gdmFsdWUgKiByb3VuZE11bHRpcGxpZXIgLyBERUNJTUFMX0JBU0U7XHJcbiAgICByZXR1cm4gcm91bmRCeUFicyhpbnRlcm1lZGlhdGVWYWx1ZSkgLyBwcmVjaXNpb25NdWx0aXBsaWVyXHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIHRvRml4ZWQodmFsdWUsIHByZWNpc2lvbikge1xyXG4gICAgdmFyIHZhbHVlUHJlY2lzaW9uID0gcHJlY2lzaW9uIHx8IDA7XHJcbiAgICB2YXIgYWRqdXN0ZWRWYWx1ZSA9IHZhbHVlUHJlY2lzaW9uID4gMCA/IGFkanVzdFZhbHVlKC4uLmFyZ3VtZW50cykgOiB2YWx1ZTtcclxuICAgIHJldHVybiBhZGp1c3RlZFZhbHVlLnRvRml4ZWQodmFsdWVQcmVjaXNpb24pXHJcbn1cclxuIl0sInNvdXJjZVJvb3QiOiIifQ==";
        
        $__internal_085b0142806202599c7fe3b329164a92397d8978207a37e79d70b8c52599e33e->leave($__internal_085b0142806202599c7fe3b329164a92397d8978207a37e79d70b8c52599e33e_prof);

        
        $__internal_319393461309892924ff6e74d6d6e64287df64b63545b994e100d4ab223aed02->leave($__internal_319393461309892924ff6e74d6d6e64287df64b63545b994e100d4ab223aed02_prof);

        return; yield '';
    }

    /**
     * @codeCoverageIgnore
     */
    public function getTemplateName()
    {
        return "@public_path/build/vendors-node_modules_devextreme_esm_localization_message_js-node_modules_devextreme_esm_local-2a9609.js";
    }

    /**
     * @codeCoverageIgnore
     */
    public function getDebugInfo()
    {
        return array ();
    }

    public function getSourceContext()
    {
        return new Source("(self[\"webpackChunk\"] = self[\"webpackChunk\"] || []).push([[\"vendors-node_modules_devextreme_esm_localization_message_js-node_modules_devextreme_esm_local-2a9609\"],{

/***/ \"./node_modules/@babel/runtime/helpers/esm/extends.js\":
/*!************************************************************!*\\
  !*** ./node_modules/@babel/runtime/helpers/esm/extends.js ***!
  \\************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"default\": () => (/* binding */ _extends)
/* harmony export */ });
function _extends() {
  _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;
  };

  return _extends.apply(this, arguments);
}

/***/ }),

/***/ \"./node_modules/devextreme/esm/core/class.js\":
/*!***************************************************!*\\
  !*** ./node_modules/devextreme/esm/core/class.js ***!
  \\***************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _errors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./errors */ \"./node_modules/devextreme/esm/core/errors.js\");
/* harmony import */ var _utils_type__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils/type */ \"./node_modules/devextreme/esm/core/utils/type.js\");
/**
 * DevExtreme (esm/core/class.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */


var wrapOverridden = function(baseProto, methodName, method) {
    return function() {
        var prevCallBase = this.callBase;
        this.callBase = baseProto[methodName];
        try {
            return method.apply(this, arguments)
        } finally {
            this.callBase = prevCallBase
        }
    }
};
var clonePrototype = function(obj) {
    var func = function() {};
    func.prototype = obj.prototype;
    return new func
};
var redefine = function(members) {
    var overridden;
    var memberName;
    var member;
    if (!members) {
        return this
    }
    for (memberName in members) {
        member = members[memberName];
        overridden = \"function\" === typeof this.prototype[memberName] && \"function\" === typeof member;
        this.prototype[memberName] = overridden ? wrapOverridden(this.parent.prototype, memberName, member) : member
    }
    return this
};
var include = function() {
    var classObj = this;
    var argument;
    var name;
    var i;
    var hasClassObjOwnProperty = Object.prototype.hasOwnProperty.bind(classObj);
    var isES6Class = !hasClassObjOwnProperty(\"_includedCtors\") && !hasClassObjOwnProperty(\"_includedPostCtors\");
    if (isES6Class) {
        classObj._includedCtors = classObj._includedCtors.slice(0);
        classObj._includedPostCtors = classObj._includedPostCtors.slice(0)
    }
    for (i = 0; i < arguments.length; i++) {
        argument = arguments[i];
        if (argument.ctor) {
            classObj._includedCtors.push(argument.ctor)
        }
        if (argument.postCtor) {
            classObj._includedPostCtors.push(argument.postCtor)
        }
        for (name in argument) {
            if (\"ctor\" === name || \"postCtor\" === name || \"default\" === name) {
                continue
            }
            classObj.prototype[name] = argument[name]
        }
    }
    return classObj
};
var subclassOf = function(parentClass) {
    var hasParentProperty = Object.prototype.hasOwnProperty.bind(this)(\"parent\");
    var isES6Class = !hasParentProperty && this.parent;
    if (isES6Class) {
        var baseClass = Object.getPrototypeOf(this);
        return baseClass === parentClass || baseClass.subclassOf(parentClass)
    } else {
        if (this.parent === parentClass) {
            return true
        }
        if (!this.parent || !this.parent.subclassOf) {
            return false
        }
        return this.parent.subclassOf(parentClass)
    }
};
var abstract = function() {
    throw _errors__WEBPACK_IMPORTED_MODULE_0__.default.Error(\"E0001\")
};
var copyStatic = function() {
    var hasOwn = Object.prototype.hasOwnProperty;
    return function(source, destination) {
        for (var key in source) {
            if (!hasOwn.call(source, key)) {
                return
            }
            destination[key] = source[key]
        }
    }
}();
var classImpl = function() {};
classImpl.inherit = function(members) {
    var inheritor = function() {
        if (!this || (0,_utils_type__WEBPACK_IMPORTED_MODULE_1__.isWindow)(this) || \"function\" !== typeof this.constructor) {
            throw _errors__WEBPACK_IMPORTED_MODULE_0__.default.Error(\"E0003\")
        }
        var instance = this;
        var ctor = instance.ctor;
        var includedCtors = instance.constructor._includedCtors;
        var includedPostCtors = instance.constructor._includedPostCtors;
        var i;
        for (i = 0; i < includedCtors.length; i++) {
            includedCtors[i].call(instance)
        }
        if (ctor) {
            ctor.apply(instance, arguments)
        }
        for (i = 0; i < includedPostCtors.length; i++) {
            includedPostCtors[i].call(instance)
        }
    };
    inheritor.prototype = clonePrototype(this);
    copyStatic(this, inheritor);
    inheritor.inherit = this.inherit;
    inheritor.abstract = abstract;
    inheritor.redefine = redefine;
    inheritor.include = include;
    inheritor.subclassOf = subclassOf;
    inheritor.parent = this;
    inheritor._includedCtors = this._includedCtors ? this._includedCtors.slice(0) : [];
    inheritor._includedPostCtors = this._includedPostCtors ? this._includedPostCtors.slice(0) : [];
    inheritor.prototype.constructor = inheritor;
    inheritor.redefine(members);
    return inheritor
};
classImpl.abstract = abstract;
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (classImpl);


/***/ }),

/***/ \"./node_modules/devextreme/esm/core/config.js\":
/*!****************************************************!*\\
  !*** ./node_modules/devextreme/esm/core/config.js ***!
  \\****************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _utils_extend__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils/extend */ \"./node_modules/devextreme/esm/core/utils/extend.js\");
/* harmony import */ var _errors__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./errors */ \"./node_modules/devextreme/esm/core/errors.js\");
/**
 * DevExtreme (esm/core/config.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */


var config = {
    rtlEnabled: false,
    defaultCurrency: \"USD\",
    oDataFilterToLower: true,
    serverDecimalSeparator: \".\",
    decimalSeparator: \".\",
    thousandsSeparator: \",\",
    forceIsoDateParsing: true,
    wrapActionsBeforeExecute: true,
    useLegacyStoreResult: false,
    useJQuery: void 0,
    editorStylingMode: void 0,
    useLegacyVisibleIndex: false,
    floatingActionButtonConfig: {
        icon: \"add\",
        closeIcon: \"close\",
        label: \"\",
        position: {
            at: \"right bottom\",
            my: \"right bottom\",
            offset: {
                x: -16,
                y: -16
            }
        },
        maxSpeedDialActionCount: 5,
        shading: false,
        direction: \"auto\"
    },
    optionsParser: optionsString => {
        if (\"{\" !== optionsString.trim().charAt(0)) {
            optionsString = \"{\" + optionsString + \"}\"
        }
        try {
            return new Function(\"return \" + optionsString)()
        } catch (ex) {
            throw _errors__WEBPACK_IMPORTED_MODULE_1__.default.Error(\"E3018\", ex, optionsString)
        }
    }
};
var deprecatedFields = [\"decimalSeparator\", \"thousandsSeparator\"];
var configMethod = function() {
    if (!arguments.length) {
        return config
    }
    var newConfig = arguments.length <= 0 ? void 0 : arguments[0];
    deprecatedFields.forEach(deprecatedField => {
        if (newConfig[deprecatedField]) {
            var message = \"Now, the \".concat(deprecatedField, \" is selected based on the specified locale.\");
            _errors__WEBPACK_IMPORTED_MODULE_1__.default.log(\"W0003\", \"config\", deprecatedField, \"19.2\", message)
        }
    });
    (0,_utils_extend__WEBPACK_IMPORTED_MODULE_0__.extend)(config, newConfig)
};
if (\"undefined\" !== typeof DevExpress && DevExpress.config) {
    configMethod(DevExpress.config)
}
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (configMethod);


/***/ }),

/***/ \"./node_modules/devextreme/esm/core/dom_adapter.js\":
/*!*********************************************************!*\\
  !*** ./node_modules/devextreme/esm/core/dom_adapter.js ***!
  \\*********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _utils_dependency_injector__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils/dependency_injector */ \"./node_modules/devextreme/esm/core/utils/dependency_injector.js\");
/* harmony import */ var _utils_common__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils/common */ \"./node_modules/devextreme/esm/core/utils/common.js\");
/**
 * DevExtreme (esm/core/dom_adapter.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */


var ELEMENT_NODE = 1;
var TEXT_NODE = 3;
var DOCUMENT_NODE = 9;
var nativeDOMAdapterStrategy = {
    querySelectorAll: (element, selector) => element.querySelectorAll(selector),
    elementMatches(element, selector) {
        var matches = element.matches || element.matchesSelector || element.mozMatchesSelector || element.msMatchesSelector || element.oMatchesSelector || element.webkitMatchesSelector || (selector => {
            var doc = element.document || element.ownerDocument;
            if (!doc) {
                return false
            }
            var items = this.querySelectorAll(doc, selector);
            for (var i = 0; i < items.length; i++) {
                if (items[i] === element) {
                    return true
                }
            }
        });
        return matches.call(element, selector)
    },
    createElement(tagName, context) {
        context = context || this._document;
        return context.createElement(tagName)
    },
    createElementNS(ns, tagName, context) {
        context = context || this._document;
        return context.createElementNS(ns, tagName)
    },
    createTextNode(text, context) {
        context = context || this._document;
        return context.createTextNode(text)
    },
    isNode: element => element && \"object\" === typeof element && \"nodeType\" in element && \"nodeName\" in element,
    isElementNode: element => element && element.nodeType === ELEMENT_NODE,
    isTextNode: element => element && element.nodeType === TEXT_NODE,
    isDocument: element => element && element.nodeType === DOCUMENT_NODE,
    removeElement(element) {
        var parentNode = element && element.parentNode;
        if (parentNode) {
            parentNode.removeChild(element)
        }
    },
    insertElement(parentElement, newElement, nextSiblingElement) {
        if (parentElement && newElement && parentElement !== newElement) {
            if (nextSiblingElement) {
                parentElement.insertBefore(newElement, nextSiblingElement)
            } else {
                parentElement.appendChild(newElement)
            }
        }
    },
    getAttribute: (element, name) => element.getAttribute(name),
    setAttribute(element, name, value) {
        element.setAttribute(name, value)
    },
    removeAttribute(element, name) {
        element.removeAttribute(name)
    },
    setProperty(element, name, value) {
        element[name] = value
    },
    setText(element, text) {
        if (element) {
            element.textContent = text
        }
    },
    setClass(element, className, isAdd) {
        if (1 === element.nodeType && className) {
            if (element.classList) {
                if (isAdd) {
                    element.classList.add(className)
                } else {
                    element.classList.remove(className)
                }
            } else {
                var classNameSupported = \"string\" === typeof element.className;
                var elementClass = classNameSupported ? element.className : this.getAttribute(element, \"class\") || \"\";
                var classNames = elementClass.split(\" \");
                var classIndex = classNames.indexOf(className);
                var resultClassName;
                if (isAdd && classIndex < 0) {
                    resultClassName = elementClass ? elementClass + \" \" + className : className
                }
                if (!isAdd && classIndex >= 0) {
                    classNames.splice(classIndex, 1);
                    resultClassName = classNames.join(\" \")
                }
                if (void 0 !== resultClassName) {
                    if (classNameSupported) {
                        element.className = resultClassName
                    } else {
                        this.setAttribute(element, \"class\", resultClassName)
                    }
                }
            }
        }
    },
    setStyle(element, name, value) {
        element.style[name] = value || \"\"
    },
    _document: \"undefined\" === typeof document ? void 0 : document,
    getDocument() {
        return this._document
    },
    getActiveElement() {
        return this._document.activeElement
    },
    getBody() {
        return this._document.body
    },
    createDocumentFragment() {
        return this._document.createDocumentFragment()
    },
    getDocumentElement() {
        return this._document.documentElement
    },
    getLocation() {
        return this._document.location
    },
    getSelection() {
        return this._document.selection
    },
    getReadyState() {
        return this._document.readyState
    },
    getHead() {
        return this._document.head
    },
    hasDocumentProperty(property) {
        return property in this._document
    },
    listen(element, event, callback, options) {
        if (!element || !(\"addEventListener\" in element)) {
            return _utils_common__WEBPACK_IMPORTED_MODULE_1__.noop
        }
        element.addEventListener(event, callback, options);
        return () => {
            element.removeEventListener(event, callback)
        }
    }
};
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_utils_dependency_injector__WEBPACK_IMPORTED_MODULE_0__.default)(nativeDOMAdapterStrategy));


/***/ }),

/***/ \"./node_modules/devextreme/esm/core/element_data.js\":
/*!**********************************************************!*\\
  !*** ./node_modules/devextreme/esm/core/element_data.js ***!
  \\**********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"strategyChanging\": () => (/* binding */ strategyChanging),
/* harmony export */   \"setDataStrategy\": () => (/* binding */ setDataStrategy),
/* harmony export */   \"getDataStrategy\": () => (/* binding */ getDataStrategy),
/* harmony export */   \"data\": () => (/* binding */ data),
/* harmony export */   \"beforeCleanData\": () => (/* binding */ beforeCleanData),
/* harmony export */   \"afterCleanData\": () => (/* binding */ afterCleanData),
/* harmony export */   \"cleanData\": () => (/* binding */ cleanData),
/* harmony export */   \"removeData\": () => (/* binding */ removeData),
/* harmony export */   \"cleanDataRecursive\": () => (/* binding */ cleanDataRecursive)
/* harmony export */ });
/* harmony import */ var _polyfills_weak_map__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./polyfills/weak_map */ \"./node_modules/devextreme/esm/core/polyfills/weak_map.js\");
/* harmony import */ var _dom_adapter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./dom_adapter */ \"./node_modules/devextreme/esm/core/dom_adapter.js\");
/* harmony import */ var _events_core_events_engine__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../events/core/events_engine */ \"./node_modules/devextreme/esm/events/core/events_engine.js\");
/* harmony import */ var _memorized_callbacks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./memorized_callbacks */ \"./node_modules/devextreme/esm/core/memorized_callbacks.js\");
/**
 * DevExtreme (esm/core/element_data.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */




var dataMap = new _polyfills_weak_map__WEBPACK_IMPORTED_MODULE_0__.default;
var strategy;
var strategyChanging = new _memorized_callbacks__WEBPACK_IMPORTED_MODULE_3__.default;
var beforeCleanDataFunc = function() {};
var afterCleanDataFunc = function() {};
var setDataStrategy = function(value) {
    strategyChanging.fire(value);
    strategy = value;
    var cleanData = strategy.cleanData;
    strategy.cleanData = function(nodes) {
        beforeCleanDataFunc(nodes);
        var result = cleanData.call(this, nodes);
        afterCleanDataFunc(nodes);
        return result
    }
};
setDataStrategy({
    data: function() {
        var element = arguments[0];
        var key = arguments[1];
        var value = arguments[2];
        if (!element) {
            return
        }
        var elementData = dataMap.get(element);
        if (!elementData) {
            elementData = {};
            dataMap.set(element, elementData)
        }
        if (void 0 === key) {
            return elementData
        }
        if (2 === arguments.length) {
            return elementData[key]
        }
        elementData[key] = value;
        return value
    },
    removeData: function(element, key) {
        if (!element) {
            return
        }
        if (void 0 === key) {
            dataMap.delete(element)
        } else {
            var elementData = dataMap.get(element);
            if (elementData) {
                delete elementData[key]
            }
        }
    },
    cleanData: function(elements) {
        for (var i = 0; i < elements.length; i++) {
            _events_core_events_engine__WEBPACK_IMPORTED_MODULE_2__.default.off(elements[i]);
            dataMap.delete(elements[i])
        }
    }
});
function getDataStrategy() {
    return strategy
}
function data() {
    return strategy.data.apply(this, arguments)
}
function beforeCleanData(callback) {
    beforeCleanDataFunc = callback
}
function afterCleanData(callback) {
    afterCleanDataFunc = callback
}
function cleanData(nodes) {
    return strategy.cleanData.call(this, nodes)
}
function removeData(element, key) {
    return strategy.removeData.call(this, element, key)
}
function cleanDataRecursive(element, cleanSelf) {
    if (!_dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.isElementNode(element)) {
        return
    }
    var childElements = element.getElementsByTagName(\"*\");
    strategy.cleanData(childElements);
    if (cleanSelf) {
        strategy.cleanData([element])
    }
}


/***/ }),

/***/ \"./node_modules/devextreme/esm/core/errors.js\":
/*!****************************************************!*\\
  !*** ./node_modules/devextreme/esm/core/errors.js ***!
  \\****************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _utils_error__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils/error */ \"./node_modules/devextreme/esm/core/utils/error.js\");
/**
 * DevExtreme (esm/core/errors.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */

/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_utils_error__WEBPACK_IMPORTED_MODULE_0__.default)({
    E0001: \"Method is not implemented\",
    E0002: \"Member name collision: {0}\",
    E0003: \"A class must be instantiated using the 'new' keyword\",
    E0004: \"The NAME property of the component is not specified\",
    E0005: \"Unknown device\",
    E0006: \"Unknown endpoint key is requested\",
    E0007: \"'Invalidate' method is called outside the update transaction\",
    E0008: \"Type of the option name is not appropriate to create an action\",
    E0009: \"Component '{0}' has not been initialized for an element\",
    E0010: \"Animation configuration with the '{0}' type requires '{1}' configuration as {2}\",
    E0011: \"Unknown animation type '{0}'\",
    E0012: \"jQuery version is too old. Please upgrade jQuery to 1.10.0 or later\",
    E0013: \"KnockoutJS version is too old. Please upgrade KnockoutJS to 2.3.0 or later\",
    E0014: \"The 'release' method shouldn't be called for an unlocked Lock object\",
    E0015: \"Queued task returned an unexpected result\",
    E0017: \"Event namespace is not defined\",
    E0018: \"DevExpress.ui.DevExpressPopup widget is required\",
    E0020: \"Template engine '{0}' is not supported\",
    E0021: \"Unknown theme is set: {0}\",
    E0022: \"LINK[rel=DevExpress-theme] tags must go before DevExpress included scripts\",
    E0023: \"Template name is not specified\",
    E0024: \"DevExtreme bundle already included\",
    E0025: \"Unexpected argument type\",
    E0100: \"Unknown validation type is detected\",
    E0101: \"Misconfigured range validation rule is detected\",
    E0102: \"Misconfigured comparison validation rule is detected\",
    E0103: \"validationCallback of an asynchronous rule should return a jQuery or a native promise\",
    E0110: \"Unknown validation group is detected\",
    E0120: \"Adapter for a DevExpressValidator component cannot be configured\",
    E0121: \"The 'customItem' field of the 'onCustomItemCreating' function's parameter should contain a custom item or Promise that is resolved after the item is created.\",
    W0000: \"'{0}' is deprecated in {1}. {2}\",
    W0001: \"{0} - '{1}' option is deprecated in {2}. {3}\",
    W0002: \"{0} - '{1}' method is deprecated in {2}. {3}\",
    W0003: \"{0} - '{1}' property is deprecated in {2}. {3}\",
    W0004: \"Timeout for theme loading is over: {0}\",
    W0005: \"'{0}' event is deprecated in {1}. {2}\",
    W0006: \"Invalid recurrence rule: '{0}'\",
    W0007: \"'{0}' Globalize culture is not defined\",
    W0008: \"Invalid view name: '{0}'\",
    W0009: \"Invalid time zone name: '{0}'\",
    W0010: \"{0} is deprecated in {1}. {2}\",
    W0011: \"Number parsing is invoked while the parser is not defined\",
    W0012: \"Date parsing is invoked while the parser is not defined\",
    W0013: \"'{0}' file is deprecated in {1}. {2}\",
    W0014: \"{0} - '{1}' type is deprecated in {2}. {3}\",
    W0015: \"Instead of returning a value from the '{0}' function, write it into the '{1}' field of the function's parameter.\",
    W0016: 'The \"{0}\" option does not accept the \"{1}\" value since v.{2}. {3}.'
}));


/***/ }),

/***/ \"./node_modules/devextreme/esm/core/guid.js\":
/*!**************************************************!*\\
  !*** ./node_modules/devextreme/esm/core/guid.js ***!
  \\**************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _class__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./class */ \"./node_modules/devextreme/esm/core/class.js\");
/**
 * DevExtreme (esm/core/guid.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */

var Guid = _class__WEBPACK_IMPORTED_MODULE_0__.default.inherit({
    ctor: function(value) {
        if (value) {
            value = String(value)
        }
        this._value = this._normalize(value || this._generate())
    },
    _normalize: function(value) {
        value = value.replace(/[^a-f0-9]/gi, \"\").toLowerCase();
        while (value.length < 32) {
            value += \"0\"
        }
        return [value.substr(0, 8), value.substr(8, 4), value.substr(12, 4), value.substr(16, 4), value.substr(20, 12)].join(\"-\")
    },
    _generate: function() {
        var value = \"\";
        for (var i = 0; i < 32; i++) {
            value += Math.round(15 * Math.random()).toString(16)
        }
        return value
    },
    toString: function() {
        return this._value
    },
    valueOf: function() {
        return this._value
    },
    toJSON: function() {
        return this._value
    }
});
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Guid);


/***/ }),

/***/ \"./node_modules/devextreme/esm/core/memorized_callbacks.js\":
/*!*****************************************************************!*\\
  !*** ./node_modules/devextreme/esm/core/memorized_callbacks.js ***!
  \\*****************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"default\": () => (/* binding */ MemorizedCallbacks)
/* harmony export */ });
/* harmony import */ var _core_utils_iterator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core/utils/iterator */ \"./node_modules/devextreme/esm/core/utils/iterator.js\");
/* harmony import */ var _utils_callbacks__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils/callbacks */ \"./node_modules/devextreme/esm/core/utils/callbacks.js\");
/**
 * DevExtreme (esm/core/memorized_callbacks.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */


class MemorizedCallbacks {
    constructor() {
        this.memory = [];
        this.callbacks = (0,_utils_callbacks__WEBPACK_IMPORTED_MODULE_1__.default)()
    }
    add(fn) {
        (0,_core_utils_iterator__WEBPACK_IMPORTED_MODULE_0__.each)(this.memory, (_, item) => fn.apply(fn, item));
        this.callbacks.add(fn)
    }
    remove(fn) {
        this.callbacks.remove(fn)
    }
    fire() {
        for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
            args[_key] = arguments[_key]
        }
        this.memory.push(args);
        this.callbacks.fire.apply(this.callbacks, args)
    }
}


/***/ }),

/***/ \"./node_modules/devextreme/esm/core/polyfills/weak_map.js\":
/*!****************************************************************!*\\
  !*** ./node_modules/devextreme/esm/core/polyfills/weak_map.js ***!
  \\****************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _utils_array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/array */ \"./node_modules/devextreme/esm/core/utils/array.js\");
/* harmony import */ var _utils_window__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/window */ \"./node_modules/devextreme/esm/core/utils/window.js\");
/**
 * DevExtreme (esm/core/polyfills/weak_map.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */


var weakMap = (0,_utils_window__WEBPACK_IMPORTED_MODULE_1__.hasWindow)() ? (0,_utils_window__WEBPACK_IMPORTED_MODULE_1__.getWindow)().WeakMap : WeakMap;
if (!weakMap) {
    weakMap = function() {
        var keys = [];
        var values = [];
        this.set = function(key, value) {
            var index = (0,_utils_array__WEBPACK_IMPORTED_MODULE_0__.inArray)(key, keys);
            if (-1 === index) {
                keys.push(key);
                values.push(value)
            } else {
                values[index] = value
            }
        };
        this.get = function(key) {
            var index = (0,_utils_array__WEBPACK_IMPORTED_MODULE_0__.inArray)(key, keys);
            if (-1 === index) {
                return
            }
            return values[index]
        };
        this.has = function(key) {
            var index = (0,_utils_array__WEBPACK_IMPORTED_MODULE_0__.inArray)(key, keys);
            if (-1 === index) {
                return false
            }
            return true
        };
        this.delete = function(key) {
            var index = (0,_utils_array__WEBPACK_IMPORTED_MODULE_0__.inArray)(key, keys);
            if (-1 === index) {
                return
            }
            keys.splice(index, 1);
            values.splice(index, 1)
        }
    }
}
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (weakMap);


/***/ }),

/***/ \"./node_modules/devextreme/esm/core/renderer.js\":
/*!******************************************************!*\\
  !*** ./node_modules/devextreme/esm/core/renderer.js ***!
  \\******************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _renderer_base__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./renderer_base */ \"./node_modules/devextreme/esm/core/renderer_base.js\");
/**
 * DevExtreme (esm/core/renderer.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */

/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_renderer_base__WEBPACK_IMPORTED_MODULE_0__.default.get());


/***/ }),

/***/ \"./node_modules/devextreme/esm/core/renderer_base.js\":
/*!***********************************************************!*\\
  !*** ./node_modules/devextreme/esm/core/renderer_base.js ***!
  \\***********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _element_data__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element_data */ \"./node_modules/devextreme/esm/core/element_data.js\");
/* harmony import */ var _dom_adapter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./dom_adapter */ \"./node_modules/devextreme/esm/core/dom_adapter.js\");
/* harmony import */ var _utils_window__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utils/window */ \"./node_modules/devextreme/esm/core/utils/window.js\");
/* harmony import */ var _utils_type__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utils/type */ \"./node_modules/devextreme/esm/core/utils/type.js\");
/* harmony import */ var _utils_style__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./utils/style */ \"./node_modules/devextreme/esm/core/utils/style.js\");
/* harmony import */ var _utils_size__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./utils/size */ \"./node_modules/devextreme/esm/core/utils/size.js\");
/* harmony import */ var _utils_html_parser__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./utils/html_parser */ \"./node_modules/devextreme/esm/core/utils/html_parser.js\");
/**
 * DevExtreme (esm/core/renderer_base.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */







var window = (0,_utils_window__WEBPACK_IMPORTED_MODULE_2__.getWindow)();
var renderer;
var initRender = function(selector, context) {
    if (!selector) {
        this.length = 0;
        return this
    }
    if (\"string\" === typeof selector) {
        if (\"body\" === selector) {
            this[0] = context ? context.body : _dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.getBody();
            this.length = 1;
            return this
        }
        context = context || _dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.getDocument();
        if (\"<\" === selector[0]) {
            this[0] = _dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.createElement(selector.slice(1, -1), context);
            this.length = 1;
            return this
        } [].push.apply(this, _dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.querySelectorAll(context, selector));
        return this
    } else if (_dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.isNode(selector) || (0,_utils_type__WEBPACK_IMPORTED_MODULE_3__.isWindow)(selector)) {
        this[0] = selector;
        this.length = 1;
        return this
    } else if (Array.isArray(selector)) {
        [].push.apply(this, selector);
        return this
    }
    return renderer(selector.toArray ? selector.toArray() : [selector])
};
renderer = function(selector, context) {
    return new initRender(selector, context)
};
renderer.fn = {
    dxRenderer: true
};
initRender.prototype = renderer.fn;
var repeatMethod = function(methodName, args) {
    for (var i = 0; i < this.length; i++) {
        var item = renderer(this[i]);
        item[methodName].apply(item, args)
    }
    return this
};
var setAttributeValue = function(element, attrName, value) {
    if (void 0 !== value && null !== value) {
        _dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.setAttribute(element, attrName, value)
    } else {
        _dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.removeAttribute(element, attrName)
    }
};
initRender.prototype.show = function() {
    return this.toggle(true)
};
initRender.prototype.hide = function() {
    return this.toggle(false)
};
initRender.prototype.toggle = function(value) {
    if (this[0]) {
        this.toggleClass(\"dx-state-invisible\", !value)
    }
    return this
};
initRender.prototype.attr = function(attrName, value) {
    if (this.length > 1 && arguments.length > 1) {
        return repeatMethod.call(this, \"attr\", arguments)
    }
    if (!this[0]) {
        if ((0,_utils_type__WEBPACK_IMPORTED_MODULE_3__.isObject)(attrName) || void 0 !== value) {
            return this
        } else {
            return
        }
    }
    if (!this[0].getAttribute) {
        return this.prop(attrName, value)
    }
    if (\"string\" === typeof attrName && 1 === arguments.length) {
        var result = this[0].getAttribute(attrName);
        return null == result ? void 0 : result
    } else if ((0,_utils_type__WEBPACK_IMPORTED_MODULE_3__.isPlainObject)(attrName)) {
        for (var key in attrName) {
            this.attr(key, attrName[key])
        }
    } else {
        setAttributeValue(this[0], attrName, value)
    }
    return this
};
initRender.prototype.removeAttr = function(attrName) {
    this[0] && _dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.removeAttribute(this[0], attrName);
    return this
};
initRender.prototype.prop = function(propName, value) {
    if (!this[0]) {
        return this
    }
    if (\"string\" === typeof propName && 1 === arguments.length) {
        return this[0][propName]
    } else if ((0,_utils_type__WEBPACK_IMPORTED_MODULE_3__.isPlainObject)(propName)) {
        for (var key in propName) {
            this.prop(key, propName[key])
        }
    } else {
        _dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.setProperty(this[0], propName, value)
    }
    return this
};
initRender.prototype.addClass = function(className) {
    return this.toggleClass(className, true)
};
initRender.prototype.removeClass = function(className) {
    return this.toggleClass(className, false)
};
initRender.prototype.hasClass = function(className) {
    if (!this[0] || void 0 === this[0].className) {
        return false
    }
    var classNames = className.split(\" \");
    for (var i = 0; i < classNames.length; i++) {
        if (this[0].classList) {
            if (this[0].classList.contains(classNames[i])) {
                return true
            }
        } else {
            var _className = (0,_utils_type__WEBPACK_IMPORTED_MODULE_3__.isString)(this[0].className) ? this[0].className : _dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.getAttribute(this[0], \"class\");
            if ((_className || \"\").split(\" \").indexOf(classNames[i]) >= 0) {
                return true
            }
        }
    }
    return false
};
initRender.prototype.toggleClass = function(className, value) {
    if (this.length > 1) {
        return repeatMethod.call(this, \"toggleClass\", arguments)
    }
    if (!this[0] || !className) {
        return this
    }
    value = void 0 === value ? !this.hasClass(className) : value;
    var classNames = className.split(\" \");
    for (var i = 0; i < classNames.length; i++) {
        _dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.setClass(this[0], classNames[i], value)
    }
    return this
};
[\"width\", \"height\", \"outerWidth\", \"outerHeight\", \"innerWidth\", \"innerHeight\"].forEach((function(methodName) {
    var partialName = methodName.toLowerCase().indexOf(\"width\") >= 0 ? \"Width\" : \"Height\";
    var propName = partialName.toLowerCase();
    var isOuter = 0 === methodName.indexOf(\"outer\");
    var isInner = 0 === methodName.indexOf(\"inner\");
    initRender.prototype[methodName] = function(value) {
        if (this.length > 1 && arguments.length > 0) {
            return repeatMethod.call(this, methodName, arguments)
        }
        var element = this[0];
        if (!element) {
            return
        }
        if ((0,_utils_type__WEBPACK_IMPORTED_MODULE_3__.isWindow)(element)) {
            return isOuter ? element[\"inner\" + partialName] : _dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.getDocumentElement()[\"client\" + partialName]
        }
        if (_dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.isDocument(element)) {
            var documentElement = _dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.getDocumentElement();
            var body = _dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.getBody();
            return Math.max(body[\"scroll\" + partialName], body[\"offset\" + partialName], documentElement[\"scroll\" + partialName], documentElement[\"offset\" + partialName], documentElement[\"client\" + partialName])
        }
        if (0 === arguments.length || \"boolean\" === typeof value) {
            var include = {
                paddings: isInner || isOuter,
                borders: isOuter,
                margins: value
            };
            return (0,_utils_size__WEBPACK_IMPORTED_MODULE_5__.getSize)(element, propName, include)
        }
        if (void 0 === value || null === value) {
            return this
        }
        if ((0,_utils_type__WEBPACK_IMPORTED_MODULE_3__.isNumeric)(value)) {
            var elementStyles = window.getComputedStyle(element);
            var sizeAdjustment = (0,_utils_size__WEBPACK_IMPORTED_MODULE_5__.getElementBoxParams)(propName, elementStyles);
            var isBorderBox = \"border-box\" === elementStyles.boxSizing;
            value = Number(value);
            if (isOuter) {
                value -= isBorderBox ? 0 : sizeAdjustment.border + sizeAdjustment.padding
            } else if (isInner) {
                value += isBorderBox ? sizeAdjustment.border : -sizeAdjustment.padding
            } else if (isBorderBox) {
                value += sizeAdjustment.border + sizeAdjustment.padding
            }
        }
        value += (0,_utils_type__WEBPACK_IMPORTED_MODULE_3__.isNumeric)(value) ? \"px\" : \"\";
        _dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.setStyle(element, propName, value);
        return this
    }
}));
initRender.prototype.html = function(value) {
    if (!arguments.length) {
        return this[0].innerHTML
    }
    this.empty();
    if (\"string\" === typeof value && !(0,_utils_html_parser__WEBPACK_IMPORTED_MODULE_6__.isTablePart)(value) || \"number\" === typeof value) {
        this[0].innerHTML = value;
        return this
    }
    return this.append((0,_utils_html_parser__WEBPACK_IMPORTED_MODULE_6__.parseHTML)(value))
};
var appendElements = function(element, nextSibling) {
    if (!this[0] || !element) {
        return
    }
    if (\"string\" === typeof element) {
        element = (0,_utils_html_parser__WEBPACK_IMPORTED_MODULE_6__.parseHTML)(element)
    } else if (element.nodeType) {
        element = [element]
    } else if ((0,_utils_type__WEBPACK_IMPORTED_MODULE_3__.isNumeric)(element)) {
        element = [_dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.createTextNode(element)]
    }
    for (var i = 0; i < element.length; i++) {
        var item = element[i];
        var container = this[0];
        var wrapTR = \"TABLE\" === container.tagName && \"TR\" === item.tagName;
        if (wrapTR && container.tBodies && container.tBodies.length) {
            container = container.tBodies[0]
        }
        _dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.insertElement(container, item.nodeType ? item : item[0], nextSibling)
    }
};
var setCss = function(name, value) {
    if (!this[0] || !this[0].style) {
        return
    }
    if (null === value || \"number\" === typeof value && isNaN(value)) {
        return
    }
    name = (0,_utils_style__WEBPACK_IMPORTED_MODULE_4__.styleProp)(name);
    for (var i = 0; i < this.length; i++) {
        this[i].style[name] = (0,_utils_style__WEBPACK_IMPORTED_MODULE_4__.normalizeStyleProp)(name, value)
    }
};
initRender.prototype.css = function(name, value) {
    if ((0,_utils_type__WEBPACK_IMPORTED_MODULE_3__.isString)(name)) {
        if (2 === arguments.length) {
            setCss.call(this, name, value)
        } else {
            if (!this[0]) {
                return
            }
            name = (0,_utils_style__WEBPACK_IMPORTED_MODULE_4__.styleProp)(name);
            var result = window.getComputedStyle(this[0])[name] || this[0].style[name];
            return (0,_utils_type__WEBPACK_IMPORTED_MODULE_3__.isNumeric)(result) ? result.toString() : result
        }
    } else if ((0,_utils_type__WEBPACK_IMPORTED_MODULE_3__.isPlainObject)(name)) {
        for (var key in name) {
            setCss.call(this, key, name[key])
        }
    }
    return this
};
initRender.prototype.prepend = function(element) {
    if (arguments.length > 1) {
        for (var i = 0; i < arguments.length; i++) {
            this.prepend(arguments[i])
        }
        return this
    }
    appendElements.apply(this, [element, this[0].firstChild]);
    return this
};
initRender.prototype.append = function(element) {
    if (arguments.length > 1) {
        for (var i = 0; i < arguments.length; i++) {
            this.append(arguments[i])
        }
        return this
    }
    appendElements.apply(this, [element]);
    return this
};
initRender.prototype.prependTo = function(element) {
    if (this.length > 1) {
        for (var i = this.length - 1; i >= 0; i--) {
            renderer(this[i]).prependTo(element)
        }
        return this
    }
    element = renderer(element);
    if (element[0]) {
        _dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.insertElement(element[0], this[0], element[0].firstChild)
    }
    return this
};
initRender.prototype.appendTo = function(element) {
    if (this.length > 1) {
        return repeatMethod.call(this, \"appendTo\", arguments)
    }
    _dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.insertElement(renderer(element)[0], this[0]);
    return this
};
initRender.prototype.insertBefore = function(element) {
    if (element && element[0]) {
        _dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.insertElement(element[0].parentNode, this[0], element[0])
    }
    return this
};
initRender.prototype.insertAfter = function(element) {
    if (element && element[0]) {
        _dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.insertElement(element[0].parentNode, this[0], element[0].nextSibling)
    }
    return this
};
initRender.prototype.before = function(element) {
    if (this[0]) {
        _dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.insertElement(this[0].parentNode, element[0], this[0])
    }
    return this
};
initRender.prototype.after = function(element) {
    if (this[0]) {
        _dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.insertElement(this[0].parentNode, element[0], this[0].nextSibling)
    }
    return this
};
initRender.prototype.wrap = function(wrapper) {
    if (this[0]) {
        var wrap = renderer(wrapper);
        wrap.insertBefore(this);
        wrap.append(this)
    }
    return this
};
initRender.prototype.wrapInner = function(wrapper) {
    var contents = this.contents();
    if (contents.length) {
        contents.wrap(wrapper)
    } else {
        this.append(wrapper)
    }
    return this
};
initRender.prototype.replaceWith = function(element) {
    if (!(element && element[0])) {
        return
    }
    if (element.is(this)) {
        return this
    }
    element.insertBefore(this);
    this.remove();
    return element
};
initRender.prototype.remove = function() {
    if (this.length > 1) {
        return repeatMethod.call(this, \"remove\", arguments)
    }
    (0,_element_data__WEBPACK_IMPORTED_MODULE_0__.cleanDataRecursive)(this[0], true);
    _dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.removeElement(this[0]);
    return this
};
initRender.prototype.detach = function() {
    if (this.length > 1) {
        return repeatMethod.call(this, \"detach\", arguments)
    }
    _dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.removeElement(this[0]);
    return this
};
initRender.prototype.empty = function() {
    if (this.length > 1) {
        return repeatMethod.call(this, \"empty\", arguments)
    }
    (0,_element_data__WEBPACK_IMPORTED_MODULE_0__.cleanDataRecursive)(this[0]);
    _dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.setText(this[0], \"\");
    return this
};
initRender.prototype.clone = function() {
    var result = [];
    for (var i = 0; i < this.length; i++) {
        result.push(this[i].cloneNode(true))
    }
    return renderer(result)
};
initRender.prototype.text = function(value) {
    if (!arguments.length) {
        var result = \"\";
        for (var i = 0; i < this.length; i++) {
            result += this[i] && this[i].textContent || \"\"
        }
        return result
    }
    var text = (0,_utils_type__WEBPACK_IMPORTED_MODULE_3__.isFunction)(value) ? value() : value;
    (0,_element_data__WEBPACK_IMPORTED_MODULE_0__.cleanDataRecursive)(this[0], false);
    _dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.setText(this[0], (0,_utils_type__WEBPACK_IMPORTED_MODULE_3__.isDefined)(text) ? text : \"\");
    return this
};
initRender.prototype.val = function(value) {
    if (1 === arguments.length) {
        return this.prop(\"value\", (0,_utils_type__WEBPACK_IMPORTED_MODULE_3__.isDefined)(value) ? value : \"\")
    }
    return this.prop(\"value\")
};
initRender.prototype.contents = function() {
    if (!this[0]) {
        return renderer()
    }
    var result = [];
    result.push.apply(result, this[0].childNodes);
    return renderer(result)
};
initRender.prototype.find = function(selector) {
    var result = renderer();
    if (!selector) {
        return result
    }
    var nodes = [];
    var i;
    if (\"string\" === typeof selector) {
        selector = selector.trim();
        for (i = 0; i < this.length; i++) {
            var element = this[i];
            if (_dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.isElementNode(element)) {
                var elementId = element.getAttribute(\"id\");
                var queryId = elementId || \"dx-query-children\";
                if (!elementId) {
                    setAttributeValue(element, \"id\", queryId)
                }
                queryId = \"[id='\" + queryId + \"'] \";
                var querySelector = queryId + selector.replace(/([^\\\\])(,)/g, \"\$1, \" + queryId);
                nodes.push.apply(nodes, _dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.querySelectorAll(element, querySelector));
                setAttributeValue(element, \"id\", elementId)
            } else if (_dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.isDocument(element)) {
                nodes.push.apply(nodes, _dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.querySelectorAll(element, selector))
            }
        }
    } else {
        for (i = 0; i < this.length; i++) {
            selector = _dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.isNode(selector) ? selector : selector[0];
            if (this[i] !== selector && this[i].contains(selector)) {
                nodes.push(selector)
            }
        }
    }
    return result.add(nodes)
};
var isVisible = function(_, element) {
    if (!element.nodeType) {
        return true
    }
    return !!(element.offsetWidth || element.offsetHeight || element.getClientRects().length)
};
initRender.prototype.filter = function(selector) {
    if (!selector) {
        return renderer()
    }
    if (\":visible\" === selector) {
        return this.filter(isVisible)
    } else if (\":hidden\" === selector) {
        return this.filter((function(_, element) {
            return !isVisible(_, element)
        }))
    }
    var result = [];
    for (var i = 0; i < this.length; i++) {
        var item = this[i];
        if (_dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.isElementNode(item) && \"string\" === (0,_utils_type__WEBPACK_IMPORTED_MODULE_3__.type)(selector)) {
            _dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.elementMatches(item, selector) && result.push(item)
        } else if (_dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.isNode(selector) || (0,_utils_type__WEBPACK_IMPORTED_MODULE_3__.isWindow)(selector)) {
            selector === item && result.push(item)
        } else if ((0,_utils_type__WEBPACK_IMPORTED_MODULE_3__.isFunction)(selector)) {
            selector.call(item, i, item) && result.push(item)
        } else {
            for (var j = 0; j < selector.length; j++) {
                selector[j] === item && result.push(item)
            }
        }
    }
    return renderer(result)
};
initRender.prototype.not = function(selector) {
    var result = [];
    var nodes = this.filter(selector).toArray();
    for (var i = 0; i < this.length; i++) {
        if (-1 === nodes.indexOf(this[i])) {
            result.push(this[i])
        }
    }
    return renderer(result)
};
initRender.prototype.is = function(selector) {
    return !!this.filter(selector).length
};
initRender.prototype.children = function(selector) {
    var result = [];
    for (var i = 0; i < this.length; i++) {
        var nodes = this[i] ? this[i].childNodes : [];
        for (var j = 0; j < nodes.length; j++) {
            if (_dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.isElementNode(nodes[j])) {
                result.push(nodes[j])
            }
        }
    }
    result = renderer(result);
    return selector ? result.filter(selector) : result
};
initRender.prototype.siblings = function() {
    var element = this[0];
    if (!element || !element.parentNode) {
        return renderer()
    }
    var result = [];
    var parentChildNodes = element.parentNode.childNodes || [];
    for (var i = 0; i < parentChildNodes.length; i++) {
        var node = parentChildNodes[i];
        if (_dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.isElementNode(node) && node !== element) {
            result.push(node)
        }
    }
    return renderer(result)
};
initRender.prototype.each = function(callback) {
    for (var i = 0; i < this.length; i++) {
        if (false === callback.call(this[i], i, this[i])) {
            break
        }
    }
};
initRender.prototype.index = function(element) {
    if (!element) {
        return this.parent().children().index(this)
    }
    element = renderer(element);
    return this.toArray().indexOf(element[0])
};
initRender.prototype.get = function(index) {
    return this[index < 0 ? this.length + index : index]
};
initRender.prototype.eq = function(index) {
    index = index < 0 ? this.length + index : index;
    return renderer(this[index])
};
initRender.prototype.first = function() {
    return this.eq(0)
};
initRender.prototype.last = function() {
    return this.eq(-1)
};
initRender.prototype.parent = function(selector) {
    if (!this[0]) {
        return renderer()
    }
    var result = renderer(this[0].parentNode);
    return !selector || result.is(selector) ? result : renderer()
};
initRender.prototype.parents = function(selector) {
    var result = [];
    var parent = this.parent();
    while (parent && parent[0] && !_dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.isDocument(parent[0])) {
        if (_dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.isElementNode(parent[0])) {
            if (!selector || parent.is(selector)) {
                result.push(parent.get(0))
            }
        }
        parent = parent.parent()
    }
    return renderer(result)
};
initRender.prototype.closest = function(selector) {
    if (this.is(selector)) {
        return this
    }
    var parent = this.parent();
    while (parent && parent.length) {
        if (parent.is(selector)) {
            return parent
        }
        parent = parent.parent()
    }
    return renderer()
};
initRender.prototype.next = function(selector) {
    if (!this[0]) {
        return renderer()
    }
    var next = renderer(this[0].nextSibling);
    if (!arguments.length) {
        return next
    }
    while (next && next.length) {
        if (next.is(selector)) {
            return next
        }
        next = next.next()
    }
    return renderer()
};
initRender.prototype.prev = function() {
    if (!this[0]) {
        return renderer()
    }
    return renderer(this[0].previousSibling)
};
initRender.prototype.add = function(selector) {
    var targets = renderer(selector);
    var result = this.toArray();
    for (var i = 0; i < targets.length; i++) {
        var target = targets[i];
        if (-1 === result.indexOf(target)) {
            result.push(target)
        }
    }
    return renderer(result)
};
var emptyArray = [];
initRender.prototype.splice = function() {
    return renderer(emptyArray.splice.apply(this, arguments))
};
initRender.prototype.slice = function() {
    return renderer(emptyArray.slice.apply(this, arguments))
};
initRender.prototype.toArray = function() {
    return emptyArray.slice.call(this)
};
var getWindowByElement = function(element) {
    return (0,_utils_type__WEBPACK_IMPORTED_MODULE_3__.isWindow)(element) ? element : element.defaultView
};
initRender.prototype.offset = function() {
    if (!this[0]) {
        return
    }
    if (!this[0].getClientRects().length) {
        return {
            top: 0,
            left: 0
        }
    }
    var rect = this[0].getBoundingClientRect();
    var win = getWindowByElement(this[0].ownerDocument);
    var docElem = this[0].ownerDocument.documentElement;
    return {
        top: rect.top + win.pageYOffset - docElem.clientTop,
        left: rect.left + win.pageXOffset - docElem.clientLeft
    }
};
initRender.prototype.offsetParent = function() {
    if (!this[0]) {
        return renderer()
    }
    var offsetParent = renderer(this[0].offsetParent);
    while (offsetParent[0] && \"static\" === offsetParent.css(\"position\")) {
        offsetParent = renderer(offsetParent[0].offsetParent)
    }
    offsetParent = offsetParent[0] ? offsetParent : renderer(_dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.getDocumentElement());
    return offsetParent
};
initRender.prototype.position = function() {
    if (!this[0]) {
        return
    }
    var offset;
    var marginTop = parseFloat(this.css(\"marginTop\"));
    var marginLeft = parseFloat(this.css(\"marginLeft\"));
    if (\"fixed\" === this.css(\"position\")) {
        offset = this[0].getBoundingClientRect();
        return {
            top: offset.top - marginTop,
            left: offset.left - marginLeft
        }
    }
    offset = this.offset();
    var offsetParent = this.offsetParent();
    var parentOffset = {
        top: 0,
        left: 0
    };
    if (\"HTML\" !== offsetParent[0].nodeName) {
        parentOffset = offsetParent.offset()
    }
    parentOffset = {
        top: parentOffset.top + parseFloat(offsetParent.css(\"borderTopWidth\")),
        left: parentOffset.left + parseFloat(offsetParent.css(\"borderLeftWidth\"))
    };
    return {
        top: offset.top - parentOffset.top - marginTop,
        left: offset.left - parentOffset.left - marginLeft
    }
};
[{
    name: \"scrollLeft\",
    offsetProp: \"pageXOffset\",
    scrollWindow: function(win, value) {
        win.scrollTo(value, win.pageYOffset)
    }
}, {
    name: \"scrollTop\",
    offsetProp: \"pageYOffset\",
    scrollWindow: function(win, value) {
        win.scrollTo(win.pageXOffset, value)
    }
}].forEach((function(directionStrategy) {
    var propName = directionStrategy.name;
    initRender.prototype[propName] = function(value) {
        if (!this[0]) {
            return
        }
        var window = getWindowByElement(this[0]);
        if (void 0 === value) {
            return window ? window[directionStrategy.offsetProp] : this[0][propName]
        }
        if (window) {
            directionStrategy.scrollWindow(window, value)
        } else {
            this[0][propName] = value
        }
        return this
    }
}));
initRender.prototype.data = function(key, value) {
    if (!this[0]) {
        return
    }
    if (arguments.length < 2) {
        return _element_data__WEBPACK_IMPORTED_MODULE_0__.data.call(renderer, this[0], key)
    }
    _element_data__WEBPACK_IMPORTED_MODULE_0__.data.call(renderer, this[0], key, value);
    return this
};
initRender.prototype.removeData = function(key) {
    this[0] && (0,_element_data__WEBPACK_IMPORTED_MODULE_0__.removeData)(this[0], key);
    return this
};
var rendererWrapper = function() {
    return renderer.apply(this, arguments)
};
Object.defineProperty(rendererWrapper, \"fn\", {
    enumerable: true,
    configurable: true,
    get: function() {
        return renderer.fn
    },
    set: function(value) {
        renderer.fn = value
    }
});
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
    set: function(strategy) {
        renderer = strategy
    },
    get: function() {
        return rendererWrapper
    }
});


/***/ }),

/***/ \"./node_modules/devextreme/esm/core/utils/array.js\":
/*!*********************************************************!*\\
  !*** ./node_modules/devextreme/esm/core/utils/array.js ***!
  \\*********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"isEmpty\": () => (/* binding */ isEmpty),
/* harmony export */   \"wrapToArray\": () => (/* binding */ wrapToArray),
/* harmony export */   \"inArray\": () => (/* binding */ inArray),
/* harmony export */   \"intersection\": () => (/* binding */ intersection),
/* harmony export */   \"uniqueValues\": () => (/* binding */ uniqueValues),
/* harmony export */   \"removeDuplicates\": () => (/* binding */ removeDuplicates),
/* harmony export */   \"normalizeIndexes\": () => (/* binding */ normalizeIndexes),
/* harmony export */   \"merge\": () => (/* binding */ merge),
/* harmony export */   \"find\": () => (/* binding */ find),
/* harmony export */   \"groupBy\": () => (/* binding */ groupBy)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./node_modules/@babel/runtime/helpers/esm/extends.js\");
/* harmony import */ var _type__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./type */ \"./node_modules/devextreme/esm/core/utils/type.js\");
/* harmony import */ var _iterator__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./iterator */ \"./node_modules/devextreme/esm/core/utils/iterator.js\");
/* harmony import */ var _object__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./object */ \"./node_modules/devextreme/esm/core/utils/object.js\");
/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../config */ \"./node_modules/devextreme/esm/core/config.js\");
/**
 * DevExtreme (esm/core/utils/array.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */





var isEmpty = function(entity) {
    return Array.isArray(entity) && !entity.length
};
var wrapToArray = function(entity) {
    return Array.isArray(entity) ? entity : [entity]
};
var inArray = function(value, object) {
    if (!object) {
        return -1
    }
    var array = Array.isArray(object) ? object : object.toArray();
    return array.indexOf(value)
};
var intersection = function(a, b) {
    if (!Array.isArray(a) || 0 === a.length || !Array.isArray(b) || 0 === b.length) {
        return []
    }
    var result = [];
    (0,_iterator__WEBPACK_IMPORTED_MODULE_2__.each)(a, (function(_, value) {
        var index = inArray(value, b);
        if (-1 !== index) {
            result.push(value)
        }
    }));
    return result
};
var uniqueValues = function(data) {
    return data.filter((function(item, position) {
        return data.indexOf(item) === position
    }))
};
var removeDuplicates = function(from, what) {
    if (!Array.isArray(from) || 0 === from.length) {
        return []
    }
    if (!Array.isArray(what) || 0 === what.length) {
        return from.slice()
    }
    var result = [];
    (0,_iterator__WEBPACK_IMPORTED_MODULE_2__.each)(from, (function(_, value) {
        var index = inArray(value, what);
        if (-1 === index) {
            result.push(value)
        }
    }));
    return result
};
var normalizeIndexes = function(items, indexParameterName, currentItem, needIndexCallback) {
    var indexedItems = {};
    var parameterIndex = 0;
    var useLegacyVisibleIndex = (0,_config__WEBPACK_IMPORTED_MODULE_4__.default)().useLegacyVisibleIndex;
    (0,_iterator__WEBPACK_IMPORTED_MODULE_2__.each)(items, (function(index, item) {
        index = item[indexParameterName];
        if (index >= 0) {
            indexedItems[index] = indexedItems[index] || [];
            if (item === currentItem) {
                indexedItems[index].unshift(item)
            } else {
                indexedItems[index].push(item)
            }
        } else {
            item[indexParameterName] = void 0
        }
    }));
    if (!useLegacyVisibleIndex) {
        (0,_iterator__WEBPACK_IMPORTED_MODULE_2__.each)(items, (function() {
            if (!(0,_type__WEBPACK_IMPORTED_MODULE_1__.isDefined)(this[indexParameterName]) && (!needIndexCallback || needIndexCallback(this))) {
                while (indexedItems[parameterIndex]) {
                    parameterIndex++
                }
                indexedItems[parameterIndex] = [this];
                parameterIndex++
            }
        }))
    }
    parameterIndex = 0;
    (0,_object__WEBPACK_IMPORTED_MODULE_3__.orderEach)(indexedItems, (function(index, items) {
        (0,_iterator__WEBPACK_IMPORTED_MODULE_2__.each)(items, (function() {
            if (index >= 0) {
                this[indexParameterName] = parameterIndex++
            }
        }))
    }));
    if (useLegacyVisibleIndex) {
        (0,_iterator__WEBPACK_IMPORTED_MODULE_2__.each)(items, (function() {
            if (!(0,_type__WEBPACK_IMPORTED_MODULE_1__.isDefined)(this[indexParameterName]) && (!needIndexCallback || needIndexCallback(this))) {
                this[indexParameterName] = parameterIndex++
            }
        }))
    }
    return parameterIndex
};
var merge = function(array1, array2) {
    for (var i = 0; i < array2.length; i++) {
        array1[array1.length] = array2[i]
    }
    return array1
};
var find = function(array, condition) {
    for (var i = 0; i < array.length; i++) {
        if (condition(array[i])) {
            return array[i]
        }
    }
};
var groupBy = (array, cb) => array.reduce((result, item) => (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__.default)({}, result, {
    [cb(item)]: [...result[cb(item)] || [], item]
}), {});


/***/ }),

/***/ \"./node_modules/devextreme/esm/core/utils/call_once.js\":
/*!*************************************************************!*\\
  !*** ./node_modules/devextreme/esm/core/utils/call_once.js ***!
  \\*************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/**
 * DevExtreme (esm/core/utils/call_once.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */
var callOnce = function(handler) {
    var result;
    var _wrappedHandler = function() {
        result = handler.apply(this, arguments);
        _wrappedHandler = function() {
            return result
        };
        return result
    };
    return function() {
        return _wrappedHandler.apply(this, arguments)
    }
};
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (callOnce);


/***/ }),

/***/ \"./node_modules/devextreme/esm/core/utils/callbacks.js\":
/*!*************************************************************!*\\
  !*** ./node_modules/devextreme/esm/core/utils/callbacks.js ***!
  \\*************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/**
 * DevExtreme (esm/core/utils/callbacks.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */
var Callback = function(options) {
    this._options = options || {};
    this._list = [];
    this._queue = [];
    this._firing = false;
    this._fired = false;
    this._firingIndexes = []
};
Callback.prototype._fireCore = function(context, args) {
    var firingIndexes = this._firingIndexes;
    var list = this._list;
    var stopOnFalse = this._options.stopOnFalse;
    var step = firingIndexes.length;
    for (firingIndexes[step] = 0; firingIndexes[step] < list.length; firingIndexes[step]++) {
        var result = list[firingIndexes[step]].apply(context, args);
        if (false === result && stopOnFalse) {
            break
        }
    }
    firingIndexes.pop()
};
Callback.prototype.add = function(fn) {
    if (\"function\" === typeof fn && (!this._options.unique || !this.has(fn))) {
        this._list.push(fn)
    }
    return this
};
Callback.prototype.remove = function(fn) {
    var list = this._list;
    var firingIndexes = this._firingIndexes;
    var index = list.indexOf(fn);
    if (index > -1) {
        list.splice(index, 1);
        if (this._firing && firingIndexes.length) {
            for (var step = 0; step < firingIndexes.length; step++) {
                if (index <= firingIndexes[step]) {
                    firingIndexes[step]--
                }
            }
        }
    }
    return this
};
Callback.prototype.has = function(fn) {
    var list = this._list;
    return fn ? list.indexOf(fn) > -1 : !!list.length
};
Callback.prototype.empty = function(fn) {
    this._list = [];
    return this
};
Callback.prototype.fireWith = function(context, args) {
    var queue = this._queue;
    args = args || [];
    args = args.slice ? args.slice() : args;
    if (this._options.syncStrategy) {
        this._firing = true;
        this._fireCore(context, args)
    } else {
        queue.push([context, args]);
        if (this._firing) {
            return
        }
        this._firing = true;
        while (queue.length) {
            var memory = queue.shift();
            this._fireCore(memory[0], memory[1])
        }
    }
    this._firing = false;
    this._fired = true;
    return this
};
Callback.prototype.fire = function() {
    this.fireWith(this, arguments)
};
Callback.prototype.fired = function() {
    return this._fired
};
var Callbacks = function(options) {
    return new Callback(options)
};
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Callbacks);


/***/ }),

/***/ \"./node_modules/devextreme/esm/core/utils/common.js\":
/*!**********************************************************!*\\
  !*** ./node_modules/devextreme/esm/core/utils/common.js ***!
  \\**********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"ensureDefined\": () => (/* binding */ ensureDefined),
/* harmony export */   \"executeAsync\": () => (/* binding */ executeAsync),
/* harmony export */   \"deferRender\": () => (/* binding */ deferRender),
/* harmony export */   \"deferUpdate\": () => (/* binding */ deferUpdate),
/* harmony export */   \"deferRenderer\": () => (/* binding */ deferRenderer),
/* harmony export */   \"deferUpdater\": () => (/* binding */ deferUpdater),
/* harmony export */   \"findBestMatches\": () => (/* binding */ findBestMatches),
/* harmony export */   \"splitPair\": () => (/* binding */ splitPair),
/* harmony export */   \"normalizeKey\": () => (/* binding */ normalizeKey),
/* harmony export */   \"denormalizeKey\": () => (/* binding */ denormalizeKey),
/* harmony export */   \"pairToObject\": () => (/* binding */ pairToObject),
/* harmony export */   \"getKeyHash\": () => (/* binding */ getKeyHash),
/* harmony export */   \"escapeRegExp\": () => (/* binding */ escapeRegExp),
/* harmony export */   \"applyServerDecimalSeparator\": () => (/* binding */ applyServerDecimalSeparator),
/* harmony export */   \"noop\": () => (/* binding */ noop),
/* harmony export */   \"asyncNoop\": () => (/* binding */ asyncNoop),
/* harmony export */   \"grep\": () => (/* binding */ grep),
/* harmony export */   \"equalByValue\": () => (/* binding */ equalByValue)
/* harmony export */ });
/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../config */ \"./node_modules/devextreme/esm/core/config.js\");
/* harmony import */ var _guid__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../guid */ \"./node_modules/devextreme/esm/core/guid.js\");
/* harmony import */ var _utils_deferred__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/deferred */ \"./node_modules/devextreme/esm/core/utils/deferred.js\");
/* harmony import */ var _data__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./data */ \"./node_modules/devextreme/esm/core/utils/data.js\");
/* harmony import */ var _iterator__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./iterator */ \"./node_modules/devextreme/esm/core/utils/iterator.js\");
/* harmony import */ var _type__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./type */ \"./node_modules/devextreme/esm/core/utils/type.js\");
/**
 * DevExtreme (esm/core/utils/common.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */






var ensureDefined = function(value, defaultValue) {
    return (0,_type__WEBPACK_IMPORTED_MODULE_5__.isDefined)(value) ? value : defaultValue
};
var executeAsync = function(action, context) {
    var deferred = new _utils_deferred__WEBPACK_IMPORTED_MODULE_2__.Deferred;
    var normalizedContext = context || this;
    var task = {
        promise: deferred.promise(),
        abort: function() {
            clearTimeout(timerId);
            deferred.rejectWith(normalizedContext)
        }
    };
    var callback = function() {
        var result = action.call(normalizedContext);
        if (result && result.done && (0,_type__WEBPACK_IMPORTED_MODULE_5__.isFunction)(result.done)) {
            result.done((function() {
                deferred.resolveWith(normalizedContext)
            }))
        } else {
            deferred.resolveWith(normalizedContext)
        }
    };
    var timerId = (arguments[2] || setTimeout)(callback, \"number\" === typeof context ? context : 0);
    return task
};
var delayedFuncs = [];
var delayedNames = [];
var delayedDeferreds = [];
var executingName;
var deferExecute = function(name, func, deferred) {
    if (executingName && executingName !== name) {
        delayedFuncs.push(func);
        delayedNames.push(name);
        deferred = deferred || new _utils_deferred__WEBPACK_IMPORTED_MODULE_2__.Deferred;
        delayedDeferreds.push(deferred);
        return deferred
    } else {
        var oldExecutingName = executingName;
        var currentDelayedCount = delayedDeferreds.length;
        executingName = name;
        var result = func();
        if (!result) {
            if (delayedDeferreds.length > currentDelayedCount) {
                result = _utils_deferred__WEBPACK_IMPORTED_MODULE_2__.when.apply(this, delayedDeferreds.slice(currentDelayedCount))
            } else if (deferred) {
                deferred.resolve()
            }
        }
        executingName = oldExecutingName;
        if (deferred && result && result.done) {
            result.done(deferred.resolve).fail(deferred.reject)
        }
        if (!executingName && delayedFuncs.length) {
            (\"render\" === delayedNames.shift() ? deferRender : deferUpdate)(delayedFuncs.shift(), delayedDeferreds.shift())
        }
        return result || (0,_utils_deferred__WEBPACK_IMPORTED_MODULE_2__.when)()
    }
};
var deferRender = function(func, deferred) {
    return deferExecute(\"render\", func, deferred)
};
var deferUpdate = function(func, deferred) {
    return deferExecute(\"update\", func, deferred)
};
var deferRenderer = function(func) {
    return function() {
        var that = this;
        return deferExecute(\"render\", (function() {
            return func.call(that)
        }))
    }
};
var deferUpdater = function(func) {
    return function() {
        var that = this;
        return deferExecute(\"update\", (function() {
            return func.call(that)
        }))
    }
};
var findBestMatches = function(targetFilter, items, mapFn) {
    var bestMatches = [];
    var maxMatchCount = 0;
    (0,_iterator__WEBPACK_IMPORTED_MODULE_4__.each)(items, (index, itemSrc) => {
        var matchCount = 0;
        var item = mapFn ? mapFn(itemSrc) : itemSrc;
        (0,_iterator__WEBPACK_IMPORTED_MODULE_4__.each)(targetFilter, (paramName, targetValue) => {
            var value = item[paramName];
            if (void 0 === value) {
                return
            }
            if (match(value, targetValue)) {
                matchCount++;
                return
            }
            matchCount = -1;
            return false
        });
        if (matchCount < maxMatchCount) {
            return
        }
        if (matchCount > maxMatchCount) {
            bestMatches.length = 0;
            maxMatchCount = matchCount
        }
        bestMatches.push(itemSrc)
    });
    return bestMatches
};
var match = function(value, targetValue) {
    if (Array.isArray(value) && Array.isArray(targetValue)) {
        var mismatch = false;
        (0,_iterator__WEBPACK_IMPORTED_MODULE_4__.each)(value, (index, valueItem) => {
            if (valueItem !== targetValue[index]) {
                mismatch = true;
                return false
            }
        });
        if (mismatch) {
            return false
        }
        return true
    }
    if (value === targetValue) {
        return true
    }
    return false
};
var splitPair = function(raw) {
    var _raw\$x, _raw\$y;
    switch ((0,_type__WEBPACK_IMPORTED_MODULE_5__.type)(raw)) {
        case \"string\":
            return raw.split(/\\s+/, 2);
        case \"object\":
            return [null !== (_raw\$x = raw.x) && void 0 !== _raw\$x ? _raw\$x : raw.h, null !== (_raw\$y = raw.y) && void 0 !== _raw\$y ? _raw\$y : raw.v];
        case \"number\":
            return [raw];
        case \"array\":
            return raw;
        default:
            return null
    }
};
var normalizeKey = function(id) {
    var key = (0,_type__WEBPACK_IMPORTED_MODULE_5__.isString)(id) ? id : id.toString();
    var arr = key.match(/[^a-zA-Z0-9_]/g);
    arr && (0,_iterator__WEBPACK_IMPORTED_MODULE_4__.each)(arr, (_, sign) => {
        key = key.replace(sign, \"__\" + sign.charCodeAt() + \"__\")
    });
    return key
};
var denormalizeKey = function(key) {
    var arr = key.match(/__\\d+__/g);
    arr && arr.forEach(char => {
        var charCode = parseInt(char.replace(\"__\", \"\"));
        key = key.replace(char, String.fromCharCode(charCode))
    });
    return key
};
var pairToObject = function(raw, preventRound) {
    var pair = splitPair(raw);
    var h = preventRound ? parseFloat(pair && pair[0]) : parseInt(pair && pair[0], 10);
    var v = preventRound ? parseFloat(pair && pair[1]) : parseInt(pair && pair[1], 10);
    if (!isFinite(h)) {
        h = 0
    }
    if (!isFinite(v)) {
        v = h
    }
    return {
        h: h,
        v: v
    }
};
var getKeyHash = function(key) {
    if (key instanceof _guid__WEBPACK_IMPORTED_MODULE_1__.default) {
        return key.toString()
    } else if ((0,_type__WEBPACK_IMPORTED_MODULE_5__.isObject)(key) || Array.isArray(key)) {
        try {
            var keyHash = JSON.stringify(key);
            return \"{}\" === keyHash ? key : keyHash
        } catch (e) {
            return key
        }
    }
    return key
};
var escapeRegExp = function(string) {
    return string.replace(/[[\\]{}\\-()*+?.\\\\^\$|\\s]/g, \"\\\\\$&\")
};
var applyServerDecimalSeparator = function(value) {
    var separator = (0,_config__WEBPACK_IMPORTED_MODULE_0__.default)().serverDecimalSeparator;
    if ((0,_type__WEBPACK_IMPORTED_MODULE_5__.isDefined)(value)) {
        value = value.toString().replace(\".\", separator)
    }
    return value
};
var noop = function() {};
var asyncNoop = function() {
    return (new _utils_deferred__WEBPACK_IMPORTED_MODULE_2__.Deferred).resolve().promise()
};
var grep = function(elements, checkFunction, invert) {
    var result = [];
    var check;
    var expectedCheck = !invert;
    for (var i = 0; i < elements.length; i++) {
        check = !!checkFunction(elements[i], i);
        if (check === expectedCheck) {
            result.push(elements[i])
        }
    }
    return result
};
var arraysEqualByValue = function(array1, array2, depth) {
    if (array1.length !== array2.length) {
        return false
    }
    for (var i = 0; i < array1.length; i++) {
        if (!equalByValue(array1[i], array2[i], depth + 1)) {
            return false
        }
    }
    return true
};
var objectsEqualByValue = function(object1, object2, depth, strict) {
    for (var propertyName in object1) {
        if (Object.prototype.hasOwnProperty.call(object1, propertyName) && !equalByValue(object1[propertyName], object2[propertyName], depth + 1, strict)) {
            return false
        }
    }
    for (var _propertyName in object2) {
        if (!(_propertyName in object1)) {
            return false
        }
    }
    return true
};
var maxEqualityDepth = 3;
var equalByValue = function(object1, object2) {
    var depth = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : 0;
    var strict = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : true;
    object1 = (0,_data__WEBPACK_IMPORTED_MODULE_3__.toComparable)(object1, true);
    object2 = (0,_data__WEBPACK_IMPORTED_MODULE_3__.toComparable)(object2, true);
    var comparisonResult = strict ? object1 === object2 : object1 == object2;
    if (comparisonResult || depth >= maxEqualityDepth) {
        return true
    }
    if ((0,_type__WEBPACK_IMPORTED_MODULE_5__.isObject)(object1) && (0,_type__WEBPACK_IMPORTED_MODULE_5__.isObject)(object2)) {
        return objectsEqualByValue(object1, object2, depth, strict)
    } else if (Array.isArray(object1) && Array.isArray(object2)) {
        return arraysEqualByValue(object1, object2, depth)
    }
    return false
};


/***/ }),

/***/ \"./node_modules/devextreme/esm/core/utils/console.js\":
/*!***********************************************************!*\\
  !*** ./node_modules/devextreme/esm/core/utils/console.js ***!
  \\***********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"logger\": () => (/* binding */ logger),
/* harmony export */   \"debug\": () => (/* binding */ debug)
/* harmony export */ });
/* harmony import */ var _type__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./type */ \"./node_modules/devextreme/esm/core/utils/type.js\");
/**
 * DevExtreme (esm/core/utils/console.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */

var noop = function() {};
var getConsoleMethod = function(method) {
    if (\"undefined\" === typeof console || !(0,_type__WEBPACK_IMPORTED_MODULE_0__.isFunction)(console[method])) {
        return noop
    }
    return console[method].bind(console)
};
var logger = {
    info: getConsoleMethod(\"info\"),
    warn: getConsoleMethod(\"warn\"),
    error: getConsoleMethod(\"error\")
};
var debug = function() {
    function assert(condition, message) {
        if (!condition) {
            throw new Error(message)
        }
    }
    return {
        assert: assert,
        assertParam: function(parameter, message) {
            assert(null !== parameter && void 0 !== parameter, message)
        }
    }
}();


/***/ }),

/***/ \"./node_modules/devextreme/esm/core/utils/data.js\":
/*!********************************************************!*\\
  !*** ./node_modules/devextreme/esm/core/utils/data.js ***!
  \\********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"compileGetter\": () => (/* binding */ compileGetter),
/* harmony export */   \"compileSetter\": () => (/* binding */ compileSetter),
/* harmony export */   \"toComparable\": () => (/* binding */ toComparable)
/* harmony export */ });
/* harmony import */ var _errors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../errors */ \"./node_modules/devextreme/esm/core/errors.js\");
/* harmony import */ var _class__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../class */ \"./node_modules/devextreme/esm/core/class.js\");
/* harmony import */ var _object__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./object */ \"./node_modules/devextreme/esm/core/utils/object.js\");
/* harmony import */ var _type__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./type */ \"./node_modules/devextreme/esm/core/utils/type.js\");
/* harmony import */ var _iterator__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./iterator */ \"./node_modules/devextreme/esm/core/utils/iterator.js\");
/* harmony import */ var _variable_wrapper__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./variable_wrapper */ \"./node_modules/devextreme/esm/core/utils/variable_wrapper.js\");
/**
 * DevExtreme (esm/core/utils/data.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */






var unwrapVariable = _variable_wrapper__WEBPACK_IMPORTED_MODULE_5__.default.unwrap;
var isWrapped = _variable_wrapper__WEBPACK_IMPORTED_MODULE_5__.default.isWrapped;
var assign = _variable_wrapper__WEBPACK_IMPORTED_MODULE_5__.default.assign;
var bracketsToDots = function(expr) {
    return expr.replace(/\\[/g, \".\").replace(/\\]/g, \"\")
};
var readPropValue = function(obj, propName, options) {
    options = options || {};
    if (\"this\" === propName) {
        return unwrap(obj, options)
    }
    return unwrap(obj[propName], options)
};
var assignPropValue = function(obj, propName, value, options) {
    if (\"this\" === propName) {
        throw new _errors__WEBPACK_IMPORTED_MODULE_0__.default.Error(\"E4016\")
    }
    var propValue = obj[propName];
    if (options.unwrapObservables && isWrapped(propValue)) {
        assign(propValue, value)
    } else {
        obj[propName] = value
    }
};
var prepareOptions = function(options) {
    options = options || {};
    options.unwrapObservables = void 0 !== options.unwrapObservables ? options.unwrapObservables : true;
    return options
};

function unwrap(value, options) {
    return options.unwrapObservables ? unwrapVariable(value) : value
}
var compileGetter = function(expr) {
    if (arguments.length > 1) {
        expr = [].slice.call(arguments)
    }
    if (!expr || \"this\" === expr) {
        return function(obj) {
            return obj
        }
    }
    if (\"string\" === typeof expr) {
        expr = bracketsToDots(expr);
        var path = expr.split(\".\");
        return function(obj, options) {
            options = prepareOptions(options);
            var functionAsIs = options.functionsAsIs;
            var hasDefaultValue = \"defaultValue\" in options;
            var current = unwrap(obj, options);
            for (var i = 0; i < path.length; i++) {
                if (!current) {
                    if (null == current && hasDefaultValue) {
                        return options.defaultValue
                    }
                    break
                }
                var pathPart = path[i];
                if (hasDefaultValue && (0,_type__WEBPACK_IMPORTED_MODULE_3__.isObject)(current) && !(pathPart in current)) {
                    return options.defaultValue
                }
                var next = unwrap(current[pathPart], options);
                if (!functionAsIs && (0,_type__WEBPACK_IMPORTED_MODULE_3__.isFunction)(next)) {
                    next = next.call(current)
                }
                current = next
            }
            return current
        }
    }
    if (Array.isArray(expr)) {
        return combineGetters(expr)
    }
    if ((0,_type__WEBPACK_IMPORTED_MODULE_3__.isFunction)(expr)) {
        return expr
    }
};

function combineGetters(getters) {
    var compiledGetters = {};
    for (var i = 0, l = getters.length; i < l; i++) {
        var getter = getters[i];
        compiledGetters[getter] = compileGetter(getter)
    }
    return function(obj, options) {
        var result;
        (0,_iterator__WEBPACK_IMPORTED_MODULE_4__.each)(compiledGetters, (function(name) {
            var value = this(obj, options);
            if (void 0 === value) {
                return
            }
            var current = result || (result = {});
            var path = name.split(\".\");
            var last = path.length - 1;
            for (var _i = 0; _i < last; _i++) {
                var pathItem = path[_i];
                if (!(pathItem in current)) {
                    current[pathItem] = {}
                }
                current = current[pathItem]
            }
            current[path[last]] = value
        }));
        return result
    }
}
var ensurePropValueDefined = function(obj, propName, value, options) {
    if ((0,_type__WEBPACK_IMPORTED_MODULE_3__.isDefined)(value)) {
        return value
    }
    var newValue = {};
    assignPropValue(obj, propName, newValue, options);
    return newValue
};
var compileSetter = function(expr) {
    expr = bracketsToDots(expr || \"this\").split(\".\");
    var lastLevelIndex = expr.length - 1;
    return function(obj, value, options) {
        options = prepareOptions(options);
        var currentValue = unwrap(obj, options);
        expr.forEach((function(propertyName, levelIndex) {
            var propertyValue = readPropValue(currentValue, propertyName, options);
            var isPropertyFunc = !options.functionsAsIs && (0,_type__WEBPACK_IMPORTED_MODULE_3__.isFunction)(propertyValue) && !isWrapped(propertyValue);
            if (levelIndex === lastLevelIndex) {
                if (options.merge && (0,_type__WEBPACK_IMPORTED_MODULE_3__.isPlainObject)(value) && (!(0,_type__WEBPACK_IMPORTED_MODULE_3__.isDefined)(propertyValue) || (0,_type__WEBPACK_IMPORTED_MODULE_3__.isPlainObject)(propertyValue))) {
                    propertyValue = ensurePropValueDefined(currentValue, propertyName, propertyValue, options);
                    (0,_object__WEBPACK_IMPORTED_MODULE_2__.deepExtendArraySafe)(propertyValue, value, false, true)
                } else if (isPropertyFunc) {
                    currentValue[propertyName](value)
                } else {
                    assignPropValue(currentValue, propertyName, value, options)
                }
            } else {
                propertyValue = ensurePropValueDefined(currentValue, propertyName, propertyValue, options);
                if (isPropertyFunc) {
                    propertyValue = propertyValue.call(currentValue)
                }
                currentValue = propertyValue
            }
        }))
    }
};
var toComparable = function(value, caseSensitive) {
    if (value instanceof Date) {
        return value.getTime()
    }
    if (value && value instanceof _class__WEBPACK_IMPORTED_MODULE_1__.default && value.valueOf) {
        return value.valueOf()
    }
    if (!caseSensitive && \"string\" === typeof value) {
        return value.toLowerCase()
    }
    return value
};


/***/ }),

/***/ \"./node_modules/devextreme/esm/core/utils/deferred.js\":
/*!************************************************************!*\\
  !*** ./node_modules/devextreme/esm/core/utils/deferred.js ***!
  \\************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"fromPromise\": () => (/* binding */ fromPromise),
/* harmony export */   \"setStrategy\": () => (/* binding */ setStrategy),
/* harmony export */   \"Deferred\": () => (/* binding */ Deferred),
/* harmony export */   \"when\": () => (/* binding */ when)
/* harmony export */ });
/* harmony import */ var _utils_type__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/type */ \"./node_modules/devextreme/esm/core/utils/type.js\");
/* harmony import */ var _utils_extend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/extend */ \"./node_modules/devextreme/esm/core/utils/extend.js\");
/* harmony import */ var _utils_callbacks__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/callbacks */ \"./node_modules/devextreme/esm/core/utils/callbacks.js\");
/**
 * DevExtreme (esm/core/utils/deferred.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */



var deferredConfig = [{
    method: \"resolve\",
    handler: \"done\",
    state: \"resolved\"
}, {
    method: \"reject\",
    handler: \"fail\",
    state: \"rejected\"
}, {
    method: \"notify\",
    handler: \"progress\"
}];
var _DeferredObj = function() {
    var that = this;
    this._state = \"pending\";
    this._promise = {};
    deferredConfig.forEach(function(config) {
        var methodName = config.method;
        this[methodName + \"Callbacks\"] = new _utils_callbacks__WEBPACK_IMPORTED_MODULE_2__.default;
        this[methodName] = function() {
            return this[methodName + \"With\"](this._promise, arguments)
        }.bind(this);
        this._promise[config.handler] = function(handler) {
            if (!handler) {
                return this
            }
            var callbacks = that[methodName + \"Callbacks\"];
            if (callbacks.fired()) {
                handler.apply(that[methodName + \"Context\"], that[methodName + \"Args\"])
            } else {
                callbacks.add(function(context, args) {
                    handler.apply(context, args)
                }.bind(this))
            }
            return this
        }
    }.bind(this));
    this._promise.always = function(handler) {
        return this.done(handler).fail(handler)
    };
    this._promise.catch = function(handler) {
        return this.then(null, handler)
    };
    this._promise.then = function(resolve, reject) {
        var result = new _DeferredObj;
        [\"done\", \"fail\"].forEach(function(method) {
            var callback = \"done\" === method ? resolve : reject;
            this[method]((function() {
                if (!callback) {
                    result[\"done\" === method ? \"resolve\" : \"reject\"].apply(this, arguments);
                    return
                }
                var callbackResult = callback && callback.apply(this, arguments);
                if ((0,_utils_type__WEBPACK_IMPORTED_MODULE_0__.isDeferred)(callbackResult)) {
                    callbackResult.done(result.resolve).fail(result.reject)
                } else if ((0,_utils_type__WEBPACK_IMPORTED_MODULE_0__.isPromise)(callbackResult)) {
                    callbackResult.then(result.resolve, result.reject)
                } else {
                    result.resolve.apply(this, (0,_utils_type__WEBPACK_IMPORTED_MODULE_0__.isDefined)(callbackResult) ? [callbackResult] : arguments)
                }
            }))
        }.bind(this));
        return result.promise()
    };
    this._promise.state = function() {
        return that._state
    };
    this._promise.promise = function(args) {
        return args ? (0,_utils_extend__WEBPACK_IMPORTED_MODULE_1__.extend)(args, that._promise) : that._promise
    };
    this._promise.promise(this)
};
deferredConfig.forEach((function(config) {
    var methodName = config.method;
    var state = config.state;
    _DeferredObj.prototype[methodName + \"With\"] = function(context, args) {
        var callbacks = this[methodName + \"Callbacks\"];
        if (\"pending\" === this.state()) {
            this[methodName + \"Args\"] = args;
            this[methodName + \"Context\"] = context;
            if (state) {
                this._state = state
            }
            callbacks.fire(context, args)
        }
        return this
    }
}));
function fromPromise(promise, context) {
    if ((0,_utils_type__WEBPACK_IMPORTED_MODULE_0__.isDeferred)(promise)) {
        return promise
    } else if ((0,_utils_type__WEBPACK_IMPORTED_MODULE_0__.isPromise)(promise)) {
        var d = new _DeferredObj;
        promise.then((function() {
            d.resolveWith.apply(d, [context].concat([
                [].slice.call(arguments)
            ]))
        }), (function() {
            d.rejectWith.apply(d, [context].concat([
                [].slice.call(arguments)
            ]))
        }));
        return d
    }
    return (new _DeferredObj).resolveWith(context, [promise])
}
var whenFunc = function() {
    if (1 === arguments.length) {
        return fromPromise(arguments[0])
    }
    var values = [].slice.call(arguments);
    var contexts = [];
    var resolvedCount = 0;
    var deferred = new _DeferredObj;
    var updateState = function(i) {
        return function(value) {
            contexts[i] = this;
            values[i] = arguments.length > 1 ? [].slice.call(arguments) : value;
            resolvedCount++;
            if (resolvedCount === values.length) {
                deferred.resolveWith(contexts, values)
            }
        }
    };
    for (var i = 0; i < values.length; i++) {
        if ((0,_utils_type__WEBPACK_IMPORTED_MODULE_0__.isDeferred)(values[i])) {
            values[i].promise().done(updateState(i)).fail(deferred.reject)
        } else {
            resolvedCount++
        }
    }
    if (resolvedCount === values.length) {
        deferred.resolveWith(contexts, values)
    }
    return deferred.promise()
};
function setStrategy(value) {
    _DeferredObj = value.Deferred;
    whenFunc = value.when
}
function Deferred() {
    return new _DeferredObj
}
function when() {
    return whenFunc.apply(this, arguments)
}


/***/ }),

/***/ \"./node_modules/devextreme/esm/core/utils/dependency_injector.js\":
/*!***********************************************************************!*\\
  !*** ./node_modules/devextreme/esm/core/utils/dependency_injector.js ***!
  \\***********************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _extend__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./extend */ \"./node_modules/devextreme/esm/core/utils/extend.js\");
/* harmony import */ var _type__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./type */ \"./node_modules/devextreme/esm/core/utils/type.js\");
/* harmony import */ var _iterator__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./iterator */ \"./node_modules/devextreme/esm/core/utils/iterator.js\");
/* harmony import */ var _class__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../class */ \"./node_modules/devextreme/esm/core/class.js\");
/**
 * DevExtreme (esm/core/utils/dependency_injector.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */




/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(object) {
    var BaseClass = _class__WEBPACK_IMPORTED_MODULE_3__.default.inherit(object);
    var InjectedClass = BaseClass;
    var instance = new InjectedClass(object);
    var initialFields = {};
    var injectFields = function(injectionObject, initial) {
        (0,_iterator__WEBPACK_IMPORTED_MODULE_2__.each)(injectionObject, (function(key) {
            if ((0,_type__WEBPACK_IMPORTED_MODULE_1__.isFunction)(instance[key])) {
                if (initial || !object[key]) {
                    object[key] = function() {
                        return instance[key].apply(object, arguments)
                    }
                }
            } else {
                if (initial) {
                    initialFields[key] = object[key]
                }
                object[key] = instance[key]
            }
        }))
    };
    injectFields(object, true);
    object.inject = function(injectionObject) {
        InjectedClass = InjectedClass.inherit(injectionObject);
        instance = new InjectedClass;
        injectFields(injectionObject)
    };
    object.resetInjection = function() {
        (0,_extend__WEBPACK_IMPORTED_MODULE_0__.extend)(object, initialFields);
        InjectedClass = BaseClass;
        instance = new BaseClass
    };
    return object
}


/***/ }),

/***/ \"./node_modules/devextreme/esm/core/utils/error.js\":
/*!*********************************************************!*\\
  !*** ./node_modules/devextreme/esm/core/utils/error.js ***!
  \\*********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _extend__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./extend */ \"./node_modules/devextreme/esm/core/utils/extend.js\");
/* harmony import */ var _console__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./console */ \"./node_modules/devextreme/esm/core/utils/console.js\");
/* harmony import */ var _string__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./string */ \"./node_modules/devextreme/esm/core/utils/string.js\");
/* harmony import */ var _version__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../version */ \"./node_modules/devextreme/esm/core/version.js\");
/**
 * DevExtreme (esm/core/utils/error.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */




var ERROR_URL = \"http://js.devexpress.com/error/\" + _version__WEBPACK_IMPORTED_MODULE_3__.version.split(\".\").slice(0, 2).join(\"_\") + \"/\";
/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(baseErrors, errors) {
    var exports = {
        ERROR_MESSAGES: (0,_extend__WEBPACK_IMPORTED_MODULE_0__.extend)(errors, baseErrors),
        Error: function() {
            return makeError([].slice.call(arguments))
        },
        log: function(id) {
            var method = \"log\";
            if (/^E\\d+\$/.test(id)) {
                method = \"error\"
            } else if (/^W\\d+\$/.test(id)) {
                method = \"warn\"
            }
            _console__WEBPACK_IMPORTED_MODULE_1__.logger[method](\"log\" === method ? id : combineMessage([].slice.call(arguments)))
        }
    };

    function combineMessage(args) {
        var id = args[0];
        args = args.slice(1);
        return formatMessage(id, formatDetails(id, args))
    }

    function formatDetails(id, args) {
        args = [exports.ERROR_MESSAGES[id]].concat(args);
        return _string__WEBPACK_IMPORTED_MODULE_2__.format.apply(this, args).replace(/\\.*\\s*?\$/, \"\")
    }

    function formatMessage(id, details) {
        return _string__WEBPACK_IMPORTED_MODULE_2__.format.apply(this, [\"{0} - {1}. See:\\n{2}\", id, details, getErrorUrl(id)])
    }

    function makeError(args) {
        var id = args[0];
        args = args.slice(1);
        var details = formatDetails(id, args);
        var url = getErrorUrl(id);
        var message = formatMessage(id, details);
        return (0,_extend__WEBPACK_IMPORTED_MODULE_0__.extend)(new Error(message), {
            __id: id,
            __details: details,
            url: url
        })
    }

    function getErrorUrl(id) {
        return ERROR_URL + id
    }
    return exports
}


/***/ }),

/***/ \"./node_modules/devextreme/esm/core/utils/extend.js\":
/*!**********************************************************!*\\
  !*** ./node_modules/devextreme/esm/core/utils/extend.js ***!
  \\**********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"extendFromObject\": () => (/* binding */ extendFromObject),
/* harmony export */   \"extend\": () => (/* binding */ extend)
/* harmony export */ });
/* harmony import */ var _type__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./type */ \"./node_modules/devextreme/esm/core/utils/type.js\");
/**
 * DevExtreme (esm/core/utils/extend.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */

var extendFromObject = function(target, source, overrideExistingValues) {
    target = target || {};
    for (var prop in source) {
        if (Object.prototype.hasOwnProperty.call(source, prop)) {
            var value = source[prop];
            if (!(prop in target) || overrideExistingValues) {
                target[prop] = value
            }
        }
    }
    return target
};
var extend = function extend(target) {
    target = target || {};
    var i = 1;
    var deep = false;
    if (\"boolean\" === typeof target) {
        deep = target;
        target = arguments[1] || {};
        i++
    }
    for (; i < arguments.length; i++) {
        var source = arguments[i];
        if (null == source) {
            continue
        }
        for (var key in source) {
            var targetValue = target[key];
            var sourceValue = source[key];
            var sourceValueIsArray = false;
            var clone = void 0;
            if (\"__proto__\" === key || \"constructor\" === key || target === sourceValue) {
                continue
            }
            if (deep && sourceValue && ((0,_type__WEBPACK_IMPORTED_MODULE_0__.isPlainObject)(sourceValue) || (sourceValueIsArray = Array.isArray(sourceValue)))) {
                if (sourceValueIsArray) {
                    clone = targetValue && Array.isArray(targetValue) ? targetValue : []
                } else {
                    clone = targetValue && (0,_type__WEBPACK_IMPORTED_MODULE_0__.isPlainObject)(targetValue) ? targetValue : {}
                }
                target[key] = extend(deep, clone, sourceValue)
            } else if (void 0 !== sourceValue) {
                target[key] = sourceValue
            }
        }
    }
    return target
};


/***/ }),

/***/ \"./node_modules/devextreme/esm/core/utils/html_parser.js\":
/*!***************************************************************!*\\
  !*** ./node_modules/devextreme/esm/core/utils/html_parser.js ***!
  \\***************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"parseHTML\": () => (/* binding */ parseHTML),
/* harmony export */   \"isTablePart\": () => (/* binding */ isTablePart)
/* harmony export */ });
/* harmony import */ var _array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./array */ \"./node_modules/devextreme/esm/core/utils/array.js\");
/* harmony import */ var _dom_adapter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../dom_adapter */ \"./node_modules/devextreme/esm/core/dom_adapter.js\");
/**
 * DevExtreme (esm/core/utils/html_parser.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */


var isTagName = /<([a-z][^/\\0>\\x20\\t\\r\\n\\f]+)/i;
var tagWrappers = {
    default: {
        tagsCount: 0,
        startTags: \"\",
        endTags: \"\"
    },
    thead: {
        tagsCount: 1,
        startTags: \"<table>\",
        endTags: \"</table>\"
    },
    td: {
        tagsCount: 3,
        startTags: \"<table><tbody><tr>\",
        endTags: \"</tr></tbody></table>\"
    },
    col: {
        tagsCount: 2,
        startTags: \"<table><colgroup>\",
        endTags: \"</colgroup></table>\"
    },
    tr: {
        tagsCount: 2,
        startTags: \"<table><tbody>\",
        endTags: \"</tbody></table>\"
    }
};
tagWrappers.tbody = tagWrappers.colgroup = tagWrappers.caption = tagWrappers.tfoot = tagWrappers.thead;
tagWrappers.th = tagWrappers.td;
var parseHTML = function(html) {
    if (\"string\" !== typeof html) {
        return null
    }
    var fragment = _dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.createDocumentFragment();
    var container = fragment.appendChild(_dom_adapter__WEBPACK_IMPORTED_MODULE_1__.default.createElement(\"div\"));
    var tags = isTagName.exec(html);
    var firstRootTag = tags && tags[1].toLowerCase();
    var tagWrapper = tagWrappers[firstRootTag] || tagWrappers.default;
    container.innerHTML = tagWrapper.startTags + html + tagWrapper.endTags;
    for (var i = 0; i < tagWrapper.tagsCount; i++) {
        container = container.lastChild
    }
    return (0,_array__WEBPACK_IMPORTED_MODULE_0__.merge)([], container.childNodes)
};
var isTablePart = function(html) {
    var tags = isTagName.exec(html);
    return tags && tags[1] in tagWrappers
};


/***/ }),

/***/ \"./node_modules/devextreme/esm/core/utils/inflector.js\":
/*!*************************************************************!*\\
  !*** ./node_modules/devextreme/esm/core/utils/inflector.js ***!
  \\*************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"dasherize\": () => (/* binding */ dasherize),
/* harmony export */   \"underscore\": () => (/* binding */ underscore),
/* harmony export */   \"camelize\": () => (/* binding */ camelize),
/* harmony export */   \"humanize\": () => (/* binding */ humanize),
/* harmony export */   \"titleize\": () => (/* binding */ titleize),
/* harmony export */   \"captionize\": () => (/* binding */ captionize)
/* harmony export */ });
/* harmony import */ var _iterator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./iterator */ \"./node_modules/devextreme/esm/core/utils/iterator.js\");
/**
 * DevExtreme (esm/core/utils/inflector.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */

var _normalize = function(text) {
    if (void 0 === text || null === text) {
        return \"\"
    }
    return String(text)
};
var _upperCaseFirst = function(text) {
    return _normalize(text).charAt(0).toUpperCase() + text.substr(1)
};
var _chop = function(text) {
    return _normalize(text).replace(/([a-z\\d])([A-Z])/g, \"\$1 \$2\").split(/[\\s_-]+/)
};
var dasherize = function(text) {
    return (0,_iterator__WEBPACK_IMPORTED_MODULE_0__.map)(_chop(text), (function(p) {
        return p.toLowerCase()
    })).join(\"-\")
};
var underscore = function(text) {
    return dasherize(text).replace(/-/g, \"_\")
};
var camelize = function(text, upperFirst) {
    return (0,_iterator__WEBPACK_IMPORTED_MODULE_0__.map)(_chop(text), (function(p, i) {
        p = p.toLowerCase();
        if (upperFirst || i > 0) {
            p = _upperCaseFirst(p)
        }
        return p
    })).join(\"\")
};
var humanize = function(text) {
    return _upperCaseFirst(dasherize(text).replace(/-/g, \" \"))
};
var titleize = function(text) {
    return (0,_iterator__WEBPACK_IMPORTED_MODULE_0__.map)(_chop(text), (function(p) {
        return _upperCaseFirst(p.toLowerCase())
    })).join(\" \")
};
var DIGIT_CHARS = [\"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\"];
var captionize = function(name) {
    var captionList = [];
    var i;
    var char;
    var isPrevCharNewWord = false;
    var isNewWord = false;
    for (i = 0; i < name.length; i++) {
        char = name.charAt(i);
        isNewWord = char === char.toUpperCase() && \"-\" !== char && \")\" !== char && \"/\" !== char || char in DIGIT_CHARS;
        if (\"_\" === char || \".\" === char) {
            char = \" \";
            isNewWord = true
        } else if (0 === i) {
            char = char.toUpperCase();
            isNewWord = true
        } else if (!isPrevCharNewWord && isNewWord) {
            if (captionList.length > 0) {
                captionList.push(\" \")
            }
        }
        captionList.push(char);
        isPrevCharNewWord = isNewWord
    }
    return captionList.join(\"\")
};


/***/ }),

/***/ \"./node_modules/devextreme/esm/core/utils/iterator.js\":
/*!************************************************************!*\\
  !*** ./node_modules/devextreme/esm/core/utils/iterator.js ***!
  \\************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"map\": () => (/* binding */ map),
/* harmony export */   \"each\": () => (/* binding */ each),
/* harmony export */   \"reverseEach\": () => (/* binding */ reverseEach)
/* harmony export */ });
/**
 * DevExtreme (esm/core/utils/iterator.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */
var map = (values, callback) => {
    if (Array.isArray(values)) {
        return values.map(callback)
    }
    var result = [];
    for (var key in values) {
        result.push(callback(values[key], key))
    }
    return result
};
var each = (values, callback) => {
    if (!values) {
        return
    }
    if (\"length\" in values) {
        for (var i = 0; i < values.length; i++) {
            if (false === callback.call(values[i], i, values[i])) {
                break
            }
        }
    } else {
        for (var key in values) {
            if (false === callback.call(values[key], key, values[key])) {
                break
            }
        }
    }
    return values
};
var reverseEach = (array, callback) => {
    if (!array || !(\"length\" in array) || 0 === array.length) {
        return
    }
    for (var i = array.length - 1; i >= 0; i--) {
        if (false === callback.call(array[i], i, array[i])) {
            break
        }
    }
};



/***/ }),

/***/ \"./node_modules/devextreme/esm/core/utils/math.js\":
/*!********************************************************!*\\
  !*** ./node_modules/devextreme/esm/core/utils/math.js ***!
  \\********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"sign\": () => (/* binding */ sign),
/* harmony export */   \"fitIntoRange\": () => (/* binding */ fitIntoRange),
/* harmony export */   \"inRange\": () => (/* binding */ inRange),
/* harmony export */   \"adjust\": () => (/* binding */ adjust),
/* harmony export */   \"getPrecision\": () => (/* binding */ getPrecision),
/* harmony export */   \"getExponent\": () => (/* binding */ getExponent),
/* harmony export */   \"getRoot\": () => (/* binding */ getRoot),
/* harmony export */   \"solveCubicEquation\": () => (/* binding */ solveCubicEquation),
/* harmony export */   \"trunc\": () => (/* binding */ trunc),
/* harmony export */   \"roundFloatPart\": () => (/* binding */ roundFloatPart),
/* harmony export */   \"getExponentLength\": () => (/* binding */ getExponentLength),
/* harmony export */   \"getRemainderByDivision\": () => (/* binding */ getRemainderByDivision)
/* harmony export */ });
/* harmony import */ var _type__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./type */ \"./node_modules/devextreme/esm/core/utils/type.js\");
/**
 * DevExtreme (esm/core/utils/math.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */

var sign = function(value) {
    if (0 === value) {
        return 0
    }
    return value / Math.abs(value)
};
var fitIntoRange = function(value, minValue, maxValue) {
    var isMinValueUndefined = !minValue && 0 !== minValue;
    var isMaxValueUndefined = !maxValue && 0 !== maxValue;
    isMinValueUndefined && (minValue = !isMaxValueUndefined ? Math.min(value, maxValue) : value);
    isMaxValueUndefined && (maxValue = !isMinValueUndefined ? Math.max(value, minValue) : value);
    return Math.min(Math.max(value, minValue), maxValue)
};
var inRange = function(value, minValue, maxValue) {
    return value >= minValue && value <= maxValue
};

function getExponent(value) {
    return Math.abs(parseInt(value.toExponential().split(\"e\")[1]))
}

function _isEdgeBug() {
    return \"0.000300\" !== 3e-4.toPrecision(3)
}

function adjust(value, interval) {
    var precision = getPrecision(interval || 0) + 2;
    var separatedValue = value.toString().split(\".\");
    var sourceValue = value;
    var absValue = Math.abs(value);
    var separatedAdjustedValue;
    var isExponentValue = (0,_type__WEBPACK_IMPORTED_MODULE_0__.isExponential)(value);
    var integerPart = absValue > 1 ? 10 : 0;
    if (1 === separatedValue.length) {
        return value
    }
    if (!isExponentValue) {
        if ((0,_type__WEBPACK_IMPORTED_MODULE_0__.isExponential)(interval)) {
            precision = separatedValue[0].length + getExponent(interval)
        }
        value = absValue;
        value = value - Math.floor(value) + integerPart
    }
    precision = _isEdgeBug() && getExponent(value) > 6 || precision > 7 ? 15 : 7;
    if (!isExponentValue) {
        separatedAdjustedValue = parseFloat(value.toPrecision(precision)).toString().split(\".\");
        if (separatedAdjustedValue[0] === integerPart.toString()) {
            return parseFloat(separatedValue[0] + \".\" + separatedAdjustedValue[1])
        }
    }
    return parseFloat(sourceValue.toPrecision(precision))
}

function getPrecision(value) {
    var str = value.toString();
    if (str.indexOf(\".\") < 0) {
        return 0
    }
    var mantissa = str.split(\".\");
    var positionOfDelimiter = mantissa[1].indexOf(\"e\");
    return positionOfDelimiter >= 0 ? positionOfDelimiter : mantissa[1].length
}

function getRoot(x, n) {
    if (x < 0 && n % 2 !== 1) {
        return NaN
    }
    var y = Math.pow(Math.abs(x), 1 / n);
    return n % 2 === 1 && x < 0 ? -y : y
}

function solveCubicEquation(a, b, c, d) {
    if (Math.abs(a) < 1e-8) {
        a = b;
        b = c;
        c = d;
        if (Math.abs(a) < 1e-8) {
            a = b;
            b = c;
            if (Math.abs(a) < 1e-8) {
                return []
            }
            return [-b / a]
        }
        var D2 = b * b - 4 * a * c;
        if (Math.abs(D2) < 1e-8) {
            return [-b / (2 * a)]
        } else if (D2 > 0) {
            return [(-b + Math.sqrt(D2)) / (2 * a), (-b - Math.sqrt(D2)) / (2 * a)]
        }
        return []
    }
    var p = (3 * a * c - b * b) / (3 * a * a);
    var q = (2 * b * b * b - 9 * a * b * c + 27 * a * a * d) / (27 * a * a * a);
    var roots;
    var u;
    if (Math.abs(p) < 1e-8) {
        roots = [getRoot(-q, 3)]
    } else if (Math.abs(q) < 1e-8) {
        roots = [0].concat(p < 0 ? [Math.sqrt(-p), -Math.sqrt(-p)] : [])
    } else {
        var D3 = q * q / 4 + p * p * p / 27;
        if (Math.abs(D3) < 1e-8) {
            roots = [-1.5 * q / p, 3 * q / p]
        } else if (D3 > 0) {
            u = getRoot(-q / 2 - Math.sqrt(D3), 3);
            roots = [u - p / (3 * u)]
        } else {
            u = 2 * Math.sqrt(-p / 3);
            var t = Math.acos(3 * q / p / u) / 3;
            var k = 2 * Math.PI / 3;
            roots = [u * Math.cos(t), u * Math.cos(t - k), u * Math.cos(t - 2 * k)]
        }
    }
    for (var i = 0; i < roots.length; i++) {
        roots[i] -= b / (3 * a)
    }
    return roots
}

function trunc(value) {
    return Math.trunc ? Math.trunc(value) : value > 0 ? Math.floor(value) : Math.ceil(value)
}

function getRemainderByDivision(dividend, divider, digitsCount) {
    if (divider === parseInt(divider)) {
        return dividend % divider
    }
    var quotient = roundFloatPart(dividend / divider, digitsCount);
    return (quotient - parseInt(quotient)) * divider
}

function getExponentLength(value) {
    var _valueString\$split\$;
    var valueString = value.toString();
    return (null === (_valueString\$split\$ = valueString.split(\".\")[1]) || void 0 === _valueString\$split\$ ? void 0 : _valueString\$split\$.length) || parseInt(valueString.split(\"e-\")[1]) || 0
}

function roundFloatPart(value) {
    var digitsCount = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 0;
    return parseFloat(value.toFixed(digitsCount))
}



/***/ }),

/***/ \"./node_modules/devextreme/esm/core/utils/object.js\":
/*!**********************************************************!*\\
  !*** ./node_modules/devextreme/esm/core/utils/object.js ***!
  \\**********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"clone\": () => (/* binding */ clone),
/* harmony export */   \"orderEach\": () => (/* binding */ orderEach),
/* harmony export */   \"deepExtendArraySafe\": () => (/* binding */ deepExtendArraySafe)
/* harmony export */ });
/* harmony import */ var _type__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./type */ \"./node_modules/devextreme/esm/core/utils/type.js\");
/* harmony import */ var _variable_wrapper__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./variable_wrapper */ \"./node_modules/devextreme/esm/core/utils/variable_wrapper.js\");
/**
 * DevExtreme (esm/core/utils/object.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */


var clone = function() {
    function Clone() {}
    return function(obj) {
        Clone.prototype = obj;
        return new Clone
    }
}();
var orderEach = function(map, func) {
    var keys = [];
    var key;
    var i;
    for (key in map) {
        if (Object.prototype.hasOwnProperty.call(map, key)) {
            keys.push(key)
        }
    }
    keys.sort((function(x, y) {
        var isNumberX = (0,_type__WEBPACK_IMPORTED_MODULE_0__.isNumeric)(x);
        var isNumberY = (0,_type__WEBPACK_IMPORTED_MODULE_0__.isNumeric)(y);
        if (isNumberX && isNumberY) {
            return x - y
        }
        if (isNumberX && !isNumberY) {
            return -1
        }
        if (!isNumberX && isNumberY) {
            return 1
        }
        if (x < y) {
            return -1
        }
        if (x > y) {
            return 1
        }
        return 0
    }));
    for (i = 0; i < keys.length; i++) {
        key = keys[i];
        func(key, map[key])
    }
};
var assignValueToProperty = function(target, property, value, assignByReference) {
    if (!assignByReference && _variable_wrapper__WEBPACK_IMPORTED_MODULE_1__.default.isWrapped(target[property])) {
        _variable_wrapper__WEBPACK_IMPORTED_MODULE_1__.default.assign(target[property], value)
    } else {
        target[property] = value
    }
};
var deepExtendArraySafe = function deepExtendArraySafe(target, changes, extendComplexObject, assignByReference) {
    var prevValue;
    var newValue;
    for (var name in changes) {
        prevValue = target[name];
        newValue = changes[name];
        if (\"__proto__\" === name || \"constructor\" === name || target === newValue) {
            continue
        }
        if ((0,_type__WEBPACK_IMPORTED_MODULE_0__.isPlainObject)(newValue)) {
            var goDeeper = extendComplexObject ? (0,_type__WEBPACK_IMPORTED_MODULE_0__.isObject)(prevValue) : (0,_type__WEBPACK_IMPORTED_MODULE_0__.isPlainObject)(prevValue);
            newValue = deepExtendArraySafe(goDeeper ? prevValue : {}, newValue, extendComplexObject, assignByReference)
        }
        if (void 0 !== newValue && prevValue !== newValue) {
            assignValueToProperty(target, name, newValue, assignByReference)
        }
    }
    return target
};



/***/ }),

/***/ \"./node_modules/devextreme/esm/core/utils/size.js\":
/*!********************************************************!*\\
  !*** ./node_modules/devextreme/esm/core/utils/size.js ***!
  \\********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"getSize\": () => (/* binding */ getSize),
/* harmony export */   \"getElementBoxParams\": () => (/* binding */ getElementBoxParams),
/* harmony export */   \"addOffsetToMaxHeight\": () => (/* binding */ addOffsetToMaxHeight),
/* harmony export */   \"addOffsetToMinHeight\": () => (/* binding */ addOffsetToMinHeight),
/* harmony export */   \"getVerticalOffsets\": () => (/* binding */ getVerticalOffsets),
/* harmony export */   \"getVisibleHeight\": () => (/* binding */ getVisibleHeight),
/* harmony export */   \"parseHeight\": () => (/* binding */ parseHeight)
/* harmony export */ });
/* harmony import */ var _core_utils_window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../core/utils/window */ \"./node_modules/devextreme/esm/core/utils/window.js\");
/* harmony import */ var _utils_type__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/type */ \"./node_modules/devextreme/esm/core/utils/type.js\");
/**
 * DevExtreme (esm/core/utils/size.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */


var window = (0,_core_utils_window__WEBPACK_IMPORTED_MODULE_0__.getWindow)();
var SPECIAL_HEIGHT_VALUES = [\"auto\", \"none\", \"inherit\", \"initial\"];
var getSizeByStyles = function(elementStyles, styles) {
    var result = 0;
    styles.forEach((function(style) {
        result += parseFloat(elementStyles[style]) || 0
    }));
    return result
};
var getElementBoxParams = function(name, elementStyles) {
    var beforeName = \"width\" === name ? \"Left\" : \"Top\";
    var afterName = \"width\" === name ? \"Right\" : \"Bottom\";
    return {
        padding: getSizeByStyles(elementStyles, [\"padding\" + beforeName, \"padding\" + afterName]),
        border: getSizeByStyles(elementStyles, [\"border\" + beforeName + \"Width\", \"border\" + afterName + \"Width\"]),
        margin: getSizeByStyles(elementStyles, [\"margin\" + beforeName, \"margin\" + afterName])
    }
};
var getBoxSizingOffset = function(name, elementStyles, boxParams) {
    var size = elementStyles[name];
    if (\"border-box\" === elementStyles.boxSizing && size.length && \"%\" !== size[size.length - 1]) {
        return boxParams.border + boxParams.padding
    }
    return 0
};
var getSize = function(element, name, include) {
    var elementStyles = window.getComputedStyle(element);
    var boxParams = getElementBoxParams(name, elementStyles);
    var clientRect = element.getClientRects().length;
    var boundingClientRect = element.getBoundingClientRect()[name];
    var result = clientRect ? boundingClientRect : 0;
    if (result <= 0) {
        result = parseFloat(elementStyles[name] || element.style[name]) || 0;
        result -= getBoxSizingOffset(name, elementStyles, boxParams)
    } else {
        result -= boxParams.padding + boxParams.border
    }
    if (include.paddings) {
        result += boxParams.padding
    }
    if (include.borders) {
        result += boxParams.border
    }
    if (include.margins) {
        result += boxParams.margin
    }
    return result
};
var getContainerHeight = function(container) {
    return (0,_utils_type__WEBPACK_IMPORTED_MODULE_1__.isWindow)(container) ? container.innerHeight : container.offsetHeight
};
var parseHeight = function(value, container) {
    if (value.indexOf(\"px\") > 0) {
        value = parseInt(value.replace(\"px\", \"\"))
    } else if (value.indexOf(\"%\") > 0) {
        value = parseInt(value.replace(\"%\", \"\")) * getContainerHeight(container) / 100
    } else if (!isNaN(value)) {
        value = parseInt(value)
    }
    return value
};
var getHeightWithOffset = function(value, offset, container) {
    if (!value) {
        return null
    }
    if (SPECIAL_HEIGHT_VALUES.indexOf(value) > -1) {
        return offset ? null : value
    }
    if ((0,_utils_type__WEBPACK_IMPORTED_MODULE_1__.isString)(value)) {
        value = parseHeight(value, container)
    }
    if ((0,_utils_type__WEBPACK_IMPORTED_MODULE_1__.isNumeric)(value)) {
        return Math.max(0, value + offset)
    }
    var operationString = offset < 0 ? \" - \" : \" \";
    return \"calc(\" + value + operationString + Math.abs(offset) + \"px)\"
};
var addOffsetToMaxHeight = function(value, offset, container) {
    var maxHeight = getHeightWithOffset(value, offset, container);
    return null !== maxHeight ? maxHeight : \"none\"
};
var addOffsetToMinHeight = function(value, offset, container) {
    var minHeight = getHeightWithOffset(value, offset, container);
    return null !== minHeight ? minHeight : 0
};
var getVerticalOffsets = function(element, withMargins) {
    if (!element) {
        return 0
    }
    var boxParams = getElementBoxParams(\"height\", window.getComputedStyle(element));
    return boxParams.padding + boxParams.border + (withMargins ? boxParams.margin : 0)
};
var getVisibleHeight = function(element) {
    if (element) {
        var boundingClientRect = element.getBoundingClientRect();
        if (boundingClientRect.height) {
            return boundingClientRect.height
        }
    }
    return 0
};



/***/ }),

/***/ \"./node_modules/devextreme/esm/core/utils/string.js\":
/*!**********************************************************!*\\
  !*** ./node_modules/devextreme/esm/core/utils/string.js ***!
  \\**********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"encodeHtml\": () => (/* binding */ encodeHtml),
/* harmony export */   \"quadToObject\": () => (/* binding */ quadToObject),
/* harmony export */   \"format\": () => (/* binding */ format),
/* harmony export */   \"replaceAll\": () => (/* binding */ replaceAll),
/* harmony export */   \"isEmpty\": () => (/* binding */ isEmpty)
/* harmony export */ });
/* harmony import */ var _type__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./type */ \"./node_modules/devextreme/esm/core/utils/type.js\");
/**
 * DevExtreme (esm/core/utils/string.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */

var encodeHtml = function() {
    var encodeRegExp = [new RegExp(\"&\", \"g\"), new RegExp('\"', \"g\"), new RegExp(\"'\", \"g\"), new RegExp(\"<\", \"g\"), new RegExp(\">\", \"g\")];
    return function(str) {
        return String(str).replace(encodeRegExp[0], \"&amp;\").replace(encodeRegExp[1], \"&quot;\").replace(encodeRegExp[2], \"&#39;\").replace(encodeRegExp[3], \"&lt;\").replace(encodeRegExp[4], \"&gt;\")
    }
}();
var splitQuad = function(raw) {
    switch (typeof raw) {
        case \"string\":
            return raw.split(/\\s+/, 4);
        case \"object\":
            return [raw.x || raw.h || raw.left, raw.y || raw.v || raw.top, raw.x || raw.h || raw.right, raw.y || raw.v || raw.bottom];
        case \"number\":
            return [raw];
        default:
            return raw
    }
};
var quadToObject = function(raw) {
    var quad = splitQuad(raw);
    var left = parseInt(quad && quad[0], 10);
    var top = parseInt(quad && quad[1], 10);
    var right = parseInt(quad && quad[2], 10);
    var bottom = parseInt(quad && quad[3], 10);
    if (!isFinite(left)) {
        left = 0
    }
    if (!isFinite(top)) {
        top = left
    }
    if (!isFinite(right)) {
        right = left
    }
    if (!isFinite(bottom)) {
        bottom = top
    }
    return {
        top: top,
        right: right,
        bottom: bottom,
        left: left
    }
};
function format(template) {
    for (var _len = arguments.length, values = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
        values[_key - 1] = arguments[_key]
    }
    if ((0,_type__WEBPACK_IMPORTED_MODULE_0__.isFunction)(template)) {
        return template(...values)
    }
    values.forEach((value, index) => {
        if ((0,_type__WEBPACK_IMPORTED_MODULE_0__.isString)(value)) {
            value = value.replace(/\\\$/g, \"\$\$\$\$\")
        }
        var placeholderReg = new RegExp(\"\\\\{\" + index + \"\\\\}\", \"gm\");
        template = template.replace(placeholderReg, value)
    });
    return template
}
var replaceAll = function(text, searchToken, replacementToken) {
    return text.replace(new RegExp(\"(\" + (str = searchToken, (str + \"\").replace(/([+*?.[^\\]\$(){}><|=!:])/g, \"\\\\\$1\")) + \")\", \"gi\"), replacementToken);
    var str
};
var isEmpty = function() {
    var SPACE_REGEXP = /\\s/g;
    return function(text) {
        return !text || !text.replace(SPACE_REGEXP, \"\")
    }
}();


/***/ }),

/***/ \"./node_modules/devextreme/esm/core/utils/style.js\":
/*!*********************************************************!*\\
  !*** ./node_modules/devextreme/esm/core/utils/style.js ***!
  \\*********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"styleProp\": () => (/* binding */ styleProp),
/* harmony export */   \"stylePropPrefix\": () => (/* binding */ stylePropPrefix),
/* harmony export */   \"normalizeStyleProp\": () => (/* binding */ normalizeStyleProp),
/* harmony export */   \"setWidth\": () => (/* binding */ setWidth),
/* harmony export */   \"setHeight\": () => (/* binding */ setHeight)
/* harmony export */ });
/* harmony import */ var _inflector__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./inflector */ \"./node_modules/devextreme/esm/core/utils/inflector.js\");
/* harmony import */ var _call_once__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./call_once */ \"./node_modules/devextreme/esm/core/utils/call_once.js\");
/* harmony import */ var _type__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./type */ \"./node_modules/devextreme/esm/core/utils/type.js\");
/* harmony import */ var _dom_adapter__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../dom_adapter */ \"./node_modules/devextreme/esm/core/dom_adapter.js\");
/**
 * DevExtreme (esm/core/utils/style.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */




var jsPrefixes = [\"\", \"Webkit\", \"Moz\", \"O\", \"Ms\"];
var cssPrefixes = {
    \"\": \"\",
    Webkit: \"-webkit-\",
    Moz: \"-moz-\",
    O: \"-o-\",
    ms: \"-ms-\"
};
var getStyles = (0,_call_once__WEBPACK_IMPORTED_MODULE_1__.default)((function() {
    return _dom_adapter__WEBPACK_IMPORTED_MODULE_3__.default.createElement(\"dx\").style
}));
var forEachPrefixes = function(prop, callBack) {
    prop = (0,_inflector__WEBPACK_IMPORTED_MODULE_0__.camelize)(prop, true);
    var result;
    for (var i = 0, cssPrefixesCount = jsPrefixes.length; i < cssPrefixesCount; i++) {
        var jsPrefix = jsPrefixes[i];
        var prefixedProp = jsPrefix + prop;
        var lowerPrefixedProp = (0,_inflector__WEBPACK_IMPORTED_MODULE_0__.camelize)(prefixedProp);
        result = callBack(lowerPrefixedProp, jsPrefix);
        if (void 0 === result) {
            result = callBack(prefixedProp, jsPrefix)
        }
        if (void 0 !== result) {
            break
        }
    }
    return result || \"\"
};
var styleProp = function(name) {
    if (name in getStyles()) {
        return name
    }
    var originalName = name;
    name = name.charAt(0).toUpperCase() + name.substr(1);
    for (var i = 1; i < jsPrefixes.length; i++) {
        var prefixedProp = jsPrefixes[i].toLowerCase() + name;
        if (prefixedProp in getStyles()) {
            return prefixedProp
        }
    }
    return originalName
};
var stylePropPrefix = function(prop) {
    return forEachPrefixes(prop, (function(specific, jsPrefix) {
        if (specific in getStyles()) {
            return cssPrefixes[jsPrefix]
        }
    }))
};
var pxExceptions = [\"fillOpacity\", \"columnCount\", \"flexGrow\", \"flexShrink\", \"fontWeight\", \"lineHeight\", \"opacity\", \"zIndex\", \"zoom\"];
var normalizeStyleProp = function(prop, value) {
    if ((0,_type__WEBPACK_IMPORTED_MODULE_2__.isNumeric)(value) && -1 === pxExceptions.indexOf(prop)) {
        value += \"px\"
    }
    return value
};
var setDimensionProperty = function(elements, propertyName, value) {
    if (elements) {
        value = (0,_type__WEBPACK_IMPORTED_MODULE_2__.isNumeric)(value) ? value += \"px\" : value;
        for (var i = 0; i < elements.length; ++i) {
            elements[i].style[propertyName] = value
        }
    }
};
var setWidth = function(elements, value) {
    setDimensionProperty(elements, \"width\", value)
};
var setHeight = function(elements, value) {
    setDimensionProperty(elements, \"height\", value)
};



/***/ }),

/***/ \"./node_modules/devextreme/esm/core/utils/type.js\":
/*!********************************************************!*\\
  !*** ./node_modules/devextreme/esm/core/utils/type.js ***!
  \\********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"isBoolean\": () => (/* binding */ isBoolean),
/* harmony export */   \"isExponential\": () => (/* binding */ isExponential),
/* harmony export */   \"isDate\": () => (/* binding */ isDate),
/* harmony export */   \"isDefined\": () => (/* binding */ isDefined),
/* harmony export */   \"isFunction\": () => (/* binding */ isFunction),
/* harmony export */   \"isString\": () => (/* binding */ isString),
/* harmony export */   \"isNumeric\": () => (/* binding */ isNumeric),
/* harmony export */   \"isObject\": () => (/* binding */ isObject),
/* harmony export */   \"isEmptyObject\": () => (/* binding */ isEmptyObject),
/* harmony export */   \"isPlainObject\": () => (/* binding */ isPlainObject),
/* harmony export */   \"isPrimitive\": () => (/* binding */ isPrimitive),
/* harmony export */   \"isWindow\": () => (/* binding */ isWindow),
/* harmony export */   \"isRenderer\": () => (/* binding */ isRenderer),
/* harmony export */   \"isPromise\": () => (/* binding */ isPromise),
/* harmony export */   \"isDeferred\": () => (/* binding */ isDeferred),
/* harmony export */   \"type\": () => (/* binding */ type),
/* harmony export */   \"isEvent\": () => (/* binding */ isEvent)
/* harmony export */ });
/**
 * DevExtreme (esm/core/utils/type.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */
var types = {
    \"[object Array]\": \"array\",
    \"[object Date]\": \"date\",
    \"[object Object]\": \"object\",
    \"[object String]\": \"string\",
    \"[object Null]\": \"null\"
};
var type = function(object) {
    var typeOfObject = Object.prototype.toString.call(object);
    return \"object\" === typeof object ? types[typeOfObject] || \"object\" : typeof object
};
var isBoolean = function(object) {
    return \"boolean\" === typeof object
};
var isExponential = function(value) {
    return isNumeric(value) && -1 !== value.toString().indexOf(\"e\")
};
var isDate = function(object) {
    return \"date\" === type(object)
};
var isDefined = function(object) {
    return null !== object && void 0 !== object
};
var isFunction = function(object) {
    return \"function\" === typeof object
};
var isString = function(object) {
    return \"string\" === typeof object
};
var isNumeric = function(object) {
    return \"number\" === typeof object && isFinite(object) || !isNaN(object - parseFloat(object))
};
var isObject = function(object) {
    return \"object\" === type(object)
};
var isEmptyObject = function(object) {
    var property;
    for (property in object) {
        return false
    }
    return true
};
var isPlainObject = function(object) {
    if (!object || \"[object Object]\" !== Object.prototype.toString.call(object)) {
        return false
    }
    var proto = Object.getPrototypeOf(object);
    var ctor = Object.hasOwnProperty.call(proto, \"constructor\") && proto.constructor;
    return \"function\" === typeof ctor && Object.toString.call(ctor) === Object.toString.call(Object)
};
var isPrimitive = function(value) {
    return -1 === [\"object\", \"array\", \"function\"].indexOf(type(value))
};
var isWindow = function(object) {
    return null != object && object === object.window
};
var isRenderer = function(object) {
    return !!(object.jquery || object.dxRenderer)
};
var isPromise = function(object) {
    return object && isFunction(object.then)
};
var isDeferred = function(object) {
    return object && isFunction(object.done) && isFunction(object.fail)
};
var isEvent = function(object) {
    return !!(object && object.preventDefault)
};



/***/ }),

/***/ \"./node_modules/devextreme/esm/core/utils/variable_wrapper.js\":
/*!********************************************************************!*\\
  !*** ./node_modules/devextreme/esm/core/utils/variable_wrapper.js ***!
  \\********************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _console__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./console */ \"./node_modules/devextreme/esm/core/utils/console.js\");
/* harmony import */ var _dependency_injector__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./dependency_injector */ \"./node_modules/devextreme/esm/core/utils/dependency_injector.js\");
/**
 * DevExtreme (esm/core/utils/variable_wrapper.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */


/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_dependency_injector__WEBPACK_IMPORTED_MODULE_1__.default)({
    isWrapped: function() {
        return false
    },
    isWritableWrapped: function() {
        return false
    },
    wrap: function(value) {
        return value
    },
    unwrap: function(value) {
        return value
    },
    assign: function() {
        _console__WEBPACK_IMPORTED_MODULE_0__.logger.error(\"Method 'assign' should not be used for not wrapped variables. Use 'isWrapped' method for ensuring.\")
    }
}));


/***/ }),

/***/ \"./node_modules/devextreme/esm/core/utils/window.js\":
/*!**********************************************************!*\\
  !*** ./node_modules/devextreme/esm/core/utils/window.js ***!
  \\**********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"hasWindow\": () => (/* binding */ hasWindow),
/* harmony export */   \"getWindow\": () => (/* binding */ getWindow),
/* harmony export */   \"setWindow\": () => (/* binding */ setWindow),
/* harmony export */   \"hasProperty\": () => (/* binding */ hasProperty),
/* harmony export */   \"defaultScreenFactorFunc\": () => (/* binding */ defaultScreenFactorFunc),
/* harmony export */   \"getCurrentScreenFactor\": () => (/* binding */ getCurrentScreenFactor),
/* harmony export */   \"getNavigator\": () => (/* binding */ getNavigator)
/* harmony export */ });
/* harmony import */ var _dom_adapter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../dom_adapter */ \"./node_modules/devextreme/esm/core/dom_adapter.js\");
/**
 * DevExtreme (esm/core/utils/window.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */

var hasWindowValue = \"undefined\" !== typeof window;
var hasWindow = () => hasWindowValue;
var windowObject = hasWindow() ? window : void 0;
if (!windowObject) {
    windowObject = {};
    windowObject.window = windowObject
}
var getWindow = () => windowObject;
var setWindow = (newWindowObject, hasWindow) => {
    if (void 0 === hasWindow) {
        hasWindowValue = \"undefined\" !== typeof window && window === newWindowObject
    } else {
        hasWindowValue = hasWindow
    }
    windowObject = newWindowObject
};
var hasProperty = prop => hasWindow() && prop in windowObject;
var defaultScreenFactorFunc = width => {
    if (width < 768) {
        return \"xs\"
    } else if (width < 992) {
        return \"sm\"
    } else if (width < 1200) {
        return \"md\"
    } else {
        return \"lg\"
    }
};
var getCurrentScreenFactor = screenFactorCallback => {
    var screenFactorFunc = screenFactorCallback || defaultScreenFactorFunc;
    var windowWidth = _dom_adapter__WEBPACK_IMPORTED_MODULE_0__.default.getDocumentElement().clientWidth;
    return screenFactorFunc(windowWidth)
};
var getNavigator = () => hasWindow() ? windowObject.navigator : {
    userAgent: \"\"
};



/***/ }),

/***/ \"./node_modules/devextreme/esm/core/version.js\":
/*!*****************************************************!*\\
  !*** ./node_modules/devextreme/esm/core/version.js ***!
  \\*****************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"version\": () => (/* binding */ version)
/* harmony export */ });
/**
 * DevExtreme (esm/core/version.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */
var version = \"21.1.4\";


/***/ }),

/***/ \"./node_modules/devextreme/esm/events/core/event_registrator_callbacks.js\":
/*!********************************************************************************!*\\
  !*** ./node_modules/devextreme/esm/events/core/event_registrator_callbacks.js ***!
  \\********************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _core_memorized_callbacks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../core/memorized_callbacks */ \"./node_modules/devextreme/esm/core/memorized_callbacks.js\");
/**
 * DevExtreme (esm/events/core/event_registrator_callbacks.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */

/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (new _core_memorized_callbacks__WEBPACK_IMPORTED_MODULE_0__.default);


/***/ }),

/***/ \"./node_modules/devextreme/esm/events/core/events_engine.js\":
/*!******************************************************************!*\\
  !*** ./node_modules/devextreme/esm/events/core/events_engine.js ***!
  \\******************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _event_registrator_callbacks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./event_registrator_callbacks */ \"./node_modules/devextreme/esm/events/core/event_registrator_callbacks.js\");
/* harmony import */ var _core_utils_extend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../core/utils/extend */ \"./node_modules/devextreme/esm/core/utils/extend.js\");
/* harmony import */ var _core_dom_adapter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../core/dom_adapter */ \"./node_modules/devextreme/esm/core/dom_adapter.js\");
/* harmony import */ var _core_utils_window__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../core/utils/window */ \"./node_modules/devextreme/esm/core/utils/window.js\");
/* harmony import */ var _core_utils_dependency_injector__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../core/utils/dependency_injector */ \"./node_modules/devextreme/esm/core/utils/dependency_injector.js\");
/* harmony import */ var _core_utils_type__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../core/utils/type */ \"./node_modules/devextreme/esm/core/utils/type.js\");
/* harmony import */ var _core_utils_callbacks__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../core/utils/callbacks */ \"./node_modules/devextreme/esm/core/utils/callbacks.js\");
/* harmony import */ var _core_errors__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../core/errors */ \"./node_modules/devextreme/esm/core/errors.js\");
/* harmony import */ var _core_polyfills_weak_map__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../core/polyfills/weak_map */ \"./node_modules/devextreme/esm/core/polyfills/weak_map.js\");
/* harmony import */ var _events_core_hook_touch_props__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../events/core/hook_touch_props */ \"./node_modules/devextreme/esm/events/core/hook_touch_props.js\");
/* harmony import */ var _core_utils_call_once__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../core/utils/call_once */ \"./node_modules/devextreme/esm/core/utils/call_once.js\");
/**
 * DevExtreme (esm/events/core/events_engine.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */




var window = (0,_core_utils_window__WEBPACK_IMPORTED_MODULE_3__.getWindow)();







var EMPTY_EVENT_NAME = \"dxEmptyEventType\";
var NATIVE_EVENTS_TO_SUBSCRIBE = {
    mouseenter: \"mouseover\",
    mouseleave: \"mouseout\",
    pointerenter: \"pointerover\",
    pointerleave: \"pointerout\"
};
var NATIVE_EVENTS_TO_TRIGGER = {
    focusin: \"focus\",
    focusout: \"blur\"
};
var NO_BUBBLE_EVENTS = [\"blur\", \"focus\", \"load\"];
var forcePassiveFalseEventNames = [\"touchmove\", \"wheel\", \"mousewheel\", \"touchstart\"];

function matchesSafe(target, selector) {
    return !(0,_core_utils_type__WEBPACK_IMPORTED_MODULE_5__.isWindow)(target) && \"#document\" !== target.nodeName && _core_dom_adapter__WEBPACK_IMPORTED_MODULE_2__.default.elementMatches(target, selector)
}
var elementDataMap = new _core_polyfills_weak_map__WEBPACK_IMPORTED_MODULE_8__.default;
var guid = 0;
var skipEvent;
var special = function() {
    var specialData = {};
    _event_registrator_callbacks__WEBPACK_IMPORTED_MODULE_0__.default.add((function(eventName, eventObject) {
        specialData[eventName] = eventObject
    }));
    return {
        getField: function(eventName, field) {
            return specialData[eventName] && specialData[eventName][field]
        },
        callMethod: function(eventName, methodName, context, args) {
            return specialData[eventName] && specialData[eventName][methodName] && specialData[eventName][methodName].apply(context, args)
        }
    }
}();
var eventsEngine = (0,_core_utils_dependency_injector__WEBPACK_IMPORTED_MODULE_4__.default)({
    on: getHandler(normalizeOnArguments(iterate((function(element, eventName, selector, data, handler) {
        var handlersController = getHandlersController(element, eventName);
        handlersController.addHandler(handler, selector, data)
    })))),
    one: getHandler(normalizeOnArguments((function(element, eventName, selector, data, handler) {
        eventsEngine.on(element, eventName, selector, data, (function oneTimeHandler() {
            eventsEngine.off(element, eventName, selector, oneTimeHandler);
            handler.apply(this, arguments)
        }))
    }))),
    off: getHandler(normalizeOffArguments(iterate((function(element, eventName, selector, handler) {
        var handlersController = getHandlersController(element, eventName);
        handlersController.removeHandler(handler, selector)
    })))),
    trigger: getHandler(normalizeTriggerArguments((function(element, event, extraParameters) {
        var eventName = event.type;
        var handlersController = getHandlersController(element, event.type);
        special.callMethod(eventName, \"trigger\", element, [event, extraParameters]);
        handlersController.callHandlers(event, extraParameters);
        var noBubble = special.getField(eventName, \"noBubble\") || event.isPropagationStopped() || -1 !== NO_BUBBLE_EVENTS.indexOf(eventName);
        if (!noBubble) {
            var parents = [];
            ! function getParents(element) {
                var parent = element.parentNode;
                if (parent) {
                    parents.push(parent);
                    getParents(parent)
                }
            }(element);
            parents.push(window);
            var i = 0;
            while (parents[i] && !event.isPropagationStopped()) {
                var parentDataByEvent = getHandlersController(parents[i], event.type);
                parentDataByEvent.callHandlers((0,_core_utils_extend__WEBPACK_IMPORTED_MODULE_1__.extend)(event, {
                    currentTarget: parents[i]
                }), extraParameters);
                i++
            }
        }
        if (element.nodeType || (0,_core_utils_type__WEBPACK_IMPORTED_MODULE_5__.isWindow)(element)) {
            special.callMethod(eventName, \"_default\", element, [event, extraParameters]);
            callNativeMethod(eventName, element)
        }
    }))),
    triggerHandler: getHandler(normalizeTriggerArguments((function(element, event, extraParameters) {
        var handlersController = getHandlersController(element, event.type);
        handlersController.callHandlers(event, extraParameters)
    })))
});

function applyForEach(args, method) {
    var element = args[0];
    if (!element) {
        return
    }
    if (_core_dom_adapter__WEBPACK_IMPORTED_MODULE_2__.default.isNode(element) || (0,_core_utils_type__WEBPACK_IMPORTED_MODULE_5__.isWindow)(element)) {
        method.apply(eventsEngine, args)
    } else if (!(0,_core_utils_type__WEBPACK_IMPORTED_MODULE_5__.isString)(element) && \"length\" in element) {
        var itemArgs = Array.prototype.slice.call(args, 0);
        Array.prototype.forEach.call(element, (function(itemElement) {
            itemArgs[0] = itemElement;
            applyForEach(itemArgs, method)
        }))
    } else {
        throw _core_errors__WEBPACK_IMPORTED_MODULE_7__.default.Error(\"E0025\")
    }
}

function getHandler(method) {
    return function() {
        applyForEach(arguments, method)
    }
}

function detectPassiveEventHandlersSupport() {
    var isSupported = false;
    try {
        var options = Object.defineProperty({}, \"passive\", {
            get: function() {
                isSupported = true;
                return true
            }
        });
        window.addEventListener(\"test\", null, options)
    } catch (e) {}
    return isSupported
}
var passiveEventHandlersSupported = (0,_core_utils_call_once__WEBPACK_IMPORTED_MODULE_10__.default)(detectPassiveEventHandlersSupport);
var contains = (container, element) => {
    if ((0,_core_utils_type__WEBPACK_IMPORTED_MODULE_5__.isWindow)(container)) {
        return contains(container.document, element)
    }
    return container.contains ? container.contains(element) : !!(element.compareDocumentPosition(container) & element.DOCUMENT_POSITION_CONTAINS)
};

function getHandlersController(element, eventName) {
    var elementData = elementDataMap.get(element);
    eventName = eventName || \"\";
    var eventNameParts = eventName.split(\".\");
    var namespaces = eventNameParts.slice(1);
    var eventNameIsDefined = !!eventNameParts[0];
    eventName = eventNameParts[0] || EMPTY_EVENT_NAME;
    if (!elementData) {
        elementData = {};
        elementDataMap.set(element, elementData)
    }
    if (!elementData[eventName]) {
        elementData[eventName] = {
            handleObjects: [],
            nativeHandler: null
        }
    }
    var eventData = elementData[eventName];
    return {
        addHandler: function(handler, selector, data) {
            var callHandler = function(e, extraParameters) {
                var handlerArgs = [e];
                var target = e.currentTarget;
                var relatedTarget = e.relatedTarget;
                var secondaryTargetIsInside;
                var result;
                if (eventName in NATIVE_EVENTS_TO_SUBSCRIBE) {
                    secondaryTargetIsInside = relatedTarget && target && (relatedTarget === target || contains(target, relatedTarget))
                }
                if (void 0 !== extraParameters) {
                    handlerArgs.push(extraParameters)
                }
                special.callMethod(eventName, \"handle\", element, [e, data]);
                if (!secondaryTargetIsInside) {
                    result = handler.apply(target, handlerArgs)
                }
                if (false === result) {
                    e.preventDefault();
                    e.stopPropagation()
                }
            };
            var handleObject = {
                handler: handler,
                wrappedHandler: function(e, extraParameters) {
                    if (skipEvent && e.type === skipEvent) {
                        return
                    }
                    e.data = data;
                    e.delegateTarget = element;
                    if (selector) {
                        var currentTarget = e.target;
                        while (currentTarget && currentTarget !== element) {
                            if (matchesSafe(currentTarget, selector)) {
                                e.currentTarget = currentTarget;
                                callHandler(e, extraParameters)
                            }
                            currentTarget = currentTarget.parentNode
                        }
                    } else {
                        e.currentTarget = e.delegateTarget || e.target;
                        callHandler(e, extraParameters)
                    }
                },
                selector: selector,
                type: eventName,
                data: data,
                namespace: namespaces.join(\".\"),
                namespaces: namespaces,
                guid: ++guid
            };
            eventData.handleObjects.push(handleObject);
            var firstHandlerForTheType = 1 === eventData.handleObjects.length;
            var shouldAddNativeListener = firstHandlerForTheType && eventNameIsDefined;
            var nativeListenerOptions;
            if (shouldAddNativeListener) {
                shouldAddNativeListener = !special.callMethod(eventName, \"setup\", element, [data, namespaces, handler])
            }
            if (shouldAddNativeListener) {
                eventData.nativeHandler = getNativeHandler(eventName);
                if (passiveEventHandlersSupported() && forcePassiveFalseEventNames.indexOf(eventName) > -1) {
                    nativeListenerOptions = {
                        passive: false
                    }
                }
                eventData.removeListener = _core_dom_adapter__WEBPACK_IMPORTED_MODULE_2__.default.listen(element, NATIVE_EVENTS_TO_SUBSCRIBE[eventName] || eventName, eventData.nativeHandler, nativeListenerOptions)
            }
            special.callMethod(eventName, \"add\", element, [handleObject])
        },
        removeHandler: function(handler, selector) {
            var removeByEventName = function(eventName) {
                var eventData = elementData[eventName];
                if (!eventData.handleObjects.length) {
                    delete elementData[eventName];
                    return
                }
                var removedHandler;
                eventData.handleObjects = eventData.handleObjects.filter((function(handleObject) {
                    var skip = namespaces.length && !isSubset(handleObject.namespaces, namespaces) || handler && handleObject.handler !== handler || selector && handleObject.selector !== selector;
                    if (!skip) {
                        removedHandler = handleObject.handler;
                        special.callMethod(eventName, \"remove\", element, [handleObject])
                    }
                    return skip
                }));
                var lastHandlerForTheType = !eventData.handleObjects.length;
                var shouldRemoveNativeListener = lastHandlerForTheType && eventName !== EMPTY_EVENT_NAME;
                if (shouldRemoveNativeListener) {
                    special.callMethod(eventName, \"teardown\", element, [namespaces, removedHandler]);
                    if (eventData.nativeHandler) {
                        eventData.removeListener()
                    }
                    delete elementData[eventName]
                }
            };
            if (eventNameIsDefined) {
                removeByEventName(eventName)
            } else {
                for (var name in elementData) {
                    removeByEventName(name)
                }
            }
            var elementDataIsEmpty = 0 === Object.keys(elementData).length;
            if (elementDataIsEmpty) {
                elementDataMap.delete(element)
            }
        },
        callHandlers: function(event, extraParameters) {
            var forceStop = false;
            var handleCallback = function(handleObject) {
                if (forceStop) {
                    return
                }
                if (!namespaces.length || isSubset(handleObject.namespaces, namespaces)) {
                    handleObject.wrappedHandler(event, extraParameters);
                    forceStop = event.isImmediatePropagationStopped()
                }
            };
            eventData.handleObjects.forEach(handleCallback);
            if (namespaces.length && elementData[EMPTY_EVENT_NAME]) {
                elementData[EMPTY_EVENT_NAME].handleObjects.forEach(handleCallback)
            }
        }
    }
}

function getNativeHandler(subscribeName) {
    return function(event, extraParameters) {
        var handlersController = getHandlersController(this, subscribeName);
        event = eventsEngine.Event(event);
        handlersController.callHandlers(event, extraParameters)
    }
}

function isSubset(original, checked) {
    for (var i = 0; i < checked.length; i++) {
        if (original.indexOf(checked[i]) < 0) {
            return false
        }
    }
    return true
}

function normalizeOnArguments(callback) {
    return function(element, eventName, selector, data, handler) {
        if (!handler) {
            handler = data;
            data = void 0
        }
        if (\"string\" !== typeof selector) {
            data = selector;
            selector = void 0
        }
        if (!handler && \"string\" === typeof eventName) {
            handler = data || selector;
            selector = void 0;
            data = void 0
        }
        callback(element, eventName, selector, data, handler)
    }
}

function normalizeOffArguments(callback) {
    return function(element, eventName, selector, handler) {
        if (\"function\" === typeof selector) {
            handler = selector;
            selector = void 0
        }
        callback(element, eventName, selector, handler)
    }
}

function normalizeTriggerArguments(callback) {
    return function(element, src, extraParameters) {
        if (\"string\" === typeof src) {
            src = {
                type: src
            }
        }
        if (!src.target) {
            src.target = element
        }
        src.currentTarget = element;
        if (!src.delegateTarget) {
            src.delegateTarget = element
        }
        if (!src.type && src.originalEvent) {
            src.type = src.originalEvent.type
        }
        callback(element, src instanceof eventsEngine.Event ? src : eventsEngine.Event(src), extraParameters)
    }
}

function normalizeEventArguments(callback) {
    return function(src, config) {
        if (!(this instanceof eventsEngine.Event)) {
            return new eventsEngine.Event(src, config)
        }
        if (!src) {
            src = {}
        }
        if (\"string\" === typeof src) {
            src = {
                type: src
            }
        }
        if (!config) {
            config = {}
        }
        callback.call(this, src, config)
    }
}

function iterate(callback) {
    var iterateEventNames = function(element, eventName) {
        if (eventName && eventName.indexOf(\" \") > -1) {
            var args = Array.prototype.slice.call(arguments, 0);
            eventName.split(\" \").forEach((function(eventName) {
                args[1] = eventName;
                callback.apply(this, args)
            }))
        } else {
            callback.apply(this, arguments)
        }
    };
    return function(element, eventName) {
        if (\"object\" === typeof eventName) {
            var args = Array.prototype.slice.call(arguments, 0);
            for (var name in eventName) {
                args[1] = name;
                args[args.length - 1] = eventName[name];
                iterateEventNames.apply(this, args)
            }
        } else {
            iterateEventNames.apply(this, arguments)
        }
    }
}

function callNativeMethod(eventName, element) {
    var nativeMethodName = NATIVE_EVENTS_TO_TRIGGER[eventName] || eventName;
    if (function(eventName, element) {
            return \"click\" === eventName && \"a\" === element.localName
        }(eventName, element)) {
        return
    }
    if ((0,_core_utils_type__WEBPACK_IMPORTED_MODULE_5__.isFunction)(element[nativeMethodName])) {
        skipEvent = eventName;
        element[nativeMethodName]();
        skipEvent = void 0
    }
}

function calculateWhich(event) {
    if (function(event) {
            return null == event.which && 0 === event.type.indexOf(\"key\")
        }(event)) {
        return null != event.charCode ? event.charCode : event.keyCode
    }
    if (function(event) {
            return !event.which && void 0 !== event.button && /^(?:mouse|pointer|contextmenu|drag|drop)|click/.test(event.type)
        }(event)) {
        return {
            1: 1,
            2: 3,
            3: 1,
            4: 2
        } [event.button]
    }
    return event.which
}

function initEvent(EventClass) {
    if (EventClass) {
        eventsEngine.Event = EventClass;
        eventsEngine.Event.prototype = EventClass.prototype
    }
}
initEvent(normalizeEventArguments((function(src, config) {
    var that = this;
    var propagationStopped = false;
    var immediatePropagationStopped = false;
    var defaultPrevented = false;
    (0,_core_utils_extend__WEBPACK_IMPORTED_MODULE_1__.extend)(that, src);
    if (src instanceof eventsEngine.Event || (0,_core_utils_window__WEBPACK_IMPORTED_MODULE_3__.hasWindow)() && src instanceof window.Event) {
        that.originalEvent = src;
        that.currentTarget = void 0
    }
    if (!(src instanceof eventsEngine.Event)) {
        (0,_core_utils_extend__WEBPACK_IMPORTED_MODULE_1__.extend)(that, {
            isPropagationStopped: function() {
                return !!(propagationStopped || that.originalEvent && that.originalEvent.propagationStopped)
            },
            stopPropagation: function() {
                propagationStopped = true;
                that.originalEvent && that.originalEvent.stopPropagation()
            },
            isImmediatePropagationStopped: function() {
                return immediatePropagationStopped
            },
            stopImmediatePropagation: function() {
                this.stopPropagation();
                immediatePropagationStopped = true;
                that.originalEvent && that.originalEvent.stopImmediatePropagation()
            },
            isDefaultPrevented: function() {
                return !!(defaultPrevented || that.originalEvent && that.originalEvent.defaultPrevented)
            },
            preventDefault: function() {
                defaultPrevented = true;
                that.originalEvent && that.originalEvent.preventDefault()
            }
        })
    }
    addProperty(\"which\", calculateWhich, that);
    if (0 === src.type.indexOf(\"touch\")) {
        delete config.pageX;
        delete config.pageY
    }
    (0,_core_utils_extend__WEBPACK_IMPORTED_MODULE_1__.extend)(that, config);
    that.guid = ++guid
})));

function addProperty(propName, hook, eventInstance) {
    Object.defineProperty(eventInstance || eventsEngine.Event.prototype, propName, {
        enumerable: true,
        configurable: true,
        get: function() {
            return this.originalEvent && hook(this.originalEvent)
        },
        set: function(value) {
            Object.defineProperty(this, propName, {
                enumerable: true,
                configurable: true,
                writable: true,
                value: value
            })
        }
    })
}
(0,_events_core_hook_touch_props__WEBPACK_IMPORTED_MODULE_9__.default)(addProperty);
var beforeSetStrategy = (0,_core_utils_callbacks__WEBPACK_IMPORTED_MODULE_6__.default)();
var afterSetStrategy = (0,_core_utils_callbacks__WEBPACK_IMPORTED_MODULE_6__.default)();
eventsEngine.set = function(engine) {
    beforeSetStrategy.fire();
    eventsEngine.inject(engine);
    initEvent(engine.Event);
    afterSetStrategy.fire()
};
eventsEngine.subscribeGlobal = function() {
    applyForEach(arguments, normalizeOnArguments((function() {
        var args = arguments;
        eventsEngine.on.apply(this, args);
        beforeSetStrategy.add((function() {
            var offArgs = Array.prototype.slice.call(args, 0);
            offArgs.splice(3, 1);
            eventsEngine.off.apply(this, offArgs)
        }));
        afterSetStrategy.add((function() {
            eventsEngine.on.apply(this, args)
        }))
    })))
};
eventsEngine.forcePassiveFalseEventNames = forcePassiveFalseEventNames;
eventsEngine.passiveEventHandlersSupported = passiveEventHandlersSupported;
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (eventsEngine);


/***/ }),

/***/ \"./node_modules/devextreme/esm/events/core/hook_touch_props.js\":
/*!*********************************************************************!*\\
  !*** ./node_modules/devextreme/esm/events/core/hook_touch_props.js ***!
  \\*********************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/**
 * DevExtreme (esm/events/core/hook_touch_props.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */
var touchPropsToHook = [\"pageX\", \"pageY\", \"screenX\", \"screenY\", \"clientX\", \"clientY\"];
var touchPropHook = function(name, event) {
    if (event[name] && !event.touches || !event.touches) {
        return event[name]
    }
    var touches = event.touches.length ? event.touches : event.changedTouches;
    if (!touches.length) {
        return
    }
    return touches[0][name]
};
/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(callback) {
    touchPropsToHook.forEach((function(name) {
        callback(name, (function(event) {
            return touchPropHook(name, event)
        }))
    }), this)
}


/***/ }),

/***/ \"./node_modules/devextreme/esm/localization/cldr-data/accounting_formats.js\":
/*!**********************************************************************************!*\\
  !*** ./node_modules/devextreme/esm/localization/cldr-data/accounting_formats.js ***!
  \\**********************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/**
 * DevExtreme (esm/localization/cldr-data/accounting_formats.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
    af: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"af-NA\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    agq: \"#,##0.00\\xa4\",
    ak: \"\\xa4#,##0.00\",
    am: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    ar: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"ar-AE\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"ar-BH\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"ar-DJ\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"ar-DZ\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"ar-EG\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"ar-EH\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"ar-ER\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"ar-IL\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"ar-IQ\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"ar-JO\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"ar-KM\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"ar-KW\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"ar-LB\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"ar-LY\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"ar-MA\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"ar-MR\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"ar-OM\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"ar-PS\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"ar-QA\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"ar-SA\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"ar-SD\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"ar-SO\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"ar-SS\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"ar-SY\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"ar-TD\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"ar-TN\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"ar-YE\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    as: \"\\xa4\\xa0#,##,##0.00\",
    asa: \"#,##0.00\\xa0\\xa4\",
    ast: \"#,##0.00\\xa0\\xa4\",
    az: \"#,##0.00\\xa0\\xa4\",
    \"az-Cyrl\": \"#,##0.00\\xa0\\xa4\",
    \"az-Latn\": \"#,##0.00\\xa0\\xa4\",
    bas: \"#,##0.00\\xa0\\xa4\",
    be: \"#,##0.00\\xa0\\xa4\",
    bem: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    bez: \"#,##0.00\\xa4\",
    bg: \"0.00\\xa0\\xa4;(0.00\\xa0\\xa4)\",
    bm: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    bn: \"#,##,##0.00\\xa4;(#,##,##0.00\\xa4)\",
    \"bn-IN\": \"#,##,##0.00\\xa4;(#,##,##0.00\\xa4)\",
    bo: \"\\xa4\\xa0#,##0.00\",
    \"bo-IN\": \"\\xa4\\xa0#,##0.00\",
    br: \"#,##0.00\\xa0\\xa4\",
    brx: \"\\xa4\\xa0#,##,##0.00\",
    bs: \"#,##0.00\\xa0\\xa4\",
    \"bs-Cyrl\": \"#,##0.00\\xa0\\xa4\",
    \"bs-Latn\": \"#,##0.00\\xa0\\xa4\",
    ca: \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"ca-AD\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"ca-ES-VALENCIA\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"ca-FR\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"ca-IT\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    ccp: \"#,##,##0.00\\xa4;(#,##,##0.00\\xa4)\",
    \"ccp-IN\": \"#,##,##0.00\\xa4;(#,##,##0.00\\xa4)\",
    ce: \"#,##0.00\\xa0\\xa4\",
    ceb: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    cgg: \"\\xa4#,##0.00\",
    chr: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    ckb: \"\\xa4\\xa0#,##0.00\",
    \"ckb-IR\": \"\\xa4\\xa0#,##0.00\",
    cs: \"#,##0.00\\xa0\\xa4\",
    cy: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    da: \"#,##0.00\\xa0\\xa4\",
    \"da-GL\": \"#,##0.00\\xa0\\xa4\",
    dav: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    de: \"#,##0.00\\xa0\\xa4\",
    \"de-AT\": \"#,##0.00\\xa0\\xa4\",
    \"de-BE\": \"#,##0.00\\xa0\\xa4\",
    \"de-CH\": \"#,##0.00\\xa0\\xa4\",
    \"de-IT\": \"#,##0.00\\xa0\\xa4\",
    \"de-LI\": \"#,##0.00\\xa0\\xa4\",
    \"de-LU\": \"#,##0.00\\xa0\\xa4\",
    dje: \"#,##0.00\\xa4\",
    doi: \"\\xa4#,##0.00\",
    dsb: \"#,##0.00\\xa0\\xa4\",
    dua: \"#,##0.00\\xa0\\xa4\",
    dyo: \"#,##0.00\\xa0\\xa4\",
    dz: \"\\xa4#,##,##0.00\",
    ebu: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    ee: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"ee-TG\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    el: \"#,##0.00\\xa0\\xa4\",
    \"el-CY\": \"#,##0.00\\xa0\\xa4\",
    en: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-001\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-150\": \"#,##0.00\\xa0\\xa4\",
    \"en-AE\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-AG\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-AI\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-AS\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-AT\": \"\\xa4\\xa0#,##0.00\",
    \"en-AU\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-BB\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-BE\": \"#,##0.00\\xa0\\xa4\",
    \"en-BI\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-BM\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-BS\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-BW\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-BZ\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-CA\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-CC\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-CH\": \"\\xa4\\xa0#,##0.00;\\xa4-#,##0.00\",
    \"en-CK\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-CM\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-CX\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-CY\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-DE\": \"#,##0.00\\xa0\\xa4\",
    \"en-DG\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-DK\": \"#,##0.00\\xa0\\xa4\",
    \"en-DM\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-ER\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-FI\": \"#,##0.00\\xa0\\xa4\",
    \"en-FJ\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-FK\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-FM\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-GB\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-GD\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-GG\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-GH\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-GI\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-GM\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-GU\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-GY\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-HK\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-IE\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-IL\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-IM\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-IN\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-IO\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-JE\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-JM\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-KE\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-KI\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-KN\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-KY\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-LC\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-LR\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-LS\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-MG\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-MH\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-MO\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-MP\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-MS\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-MT\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-MU\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-MW\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-MY\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-NA\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-NF\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-NG\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-NL\": \"\\xa4\\xa0#,##0.00;(\\xa4\\xa0#,##0.00)\",
    \"en-NR\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-NU\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-NZ\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-PG\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-PH\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-PK\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-PN\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-PR\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-PW\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-RW\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-SB\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-SC\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-SD\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-SE\": \"#,##0.00\\xa0\\xa4\",
    \"en-SG\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-SH\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-SI\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"en-SL\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-SS\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-SX\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-SZ\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-TC\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-TK\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-TO\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-TT\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-TV\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-TZ\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-UG\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-UM\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-US-POSIX\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-VC\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-VG\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-VI\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-VU\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-WS\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-ZA\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-ZM\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"en-ZW\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    eo: \"\\xa4\\xa0#,##0.00\",
    es: \"#,##0.00\\xa0\\xa4\",
    \"es-419\": \"\\xa4#,##0.00\",
    \"es-AR\": \"\\xa4\\xa0#,##0.00;(\\xa4\\xa0#,##0.00)\",
    \"es-BO\": \"\\xa4#,##0.00\",
    \"es-BR\": \"\\xa4#,##0.00\",
    \"es-BZ\": \"\\xa4#,##0.00\",
    \"es-CL\": \"\\xa4#,##0.00\",
    \"es-CO\": \"\\xa4#,##0.00\",
    \"es-CR\": \"\\xa4#,##0.00\",
    \"es-CU\": \"\\xa4#,##0.00\",
    \"es-DO\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"es-EA\": \"#,##0.00\\xa0\\xa4\",
    \"es-EC\": \"\\xa4#,##0.00\",
    \"es-GQ\": \"#,##0.00\\xa0\\xa4\",
    \"es-GT\": \"\\xa4#,##0.00\",
    \"es-HN\": \"\\xa4#,##0.00\",
    \"es-IC\": \"#,##0.00\\xa0\\xa4\",
    \"es-MX\": \"\\xa4#,##0.00\",
    \"es-NI\": \"\\xa4#,##0.00\",
    \"es-PA\": \"\\xa4#,##0.00\",
    \"es-PE\": \"\\xa4#,##0.00\",
    \"es-PH\": \"#,##0.00\\xa0\\xa4\",
    \"es-PR\": \"\\xa4#,##0.00\",
    \"es-PY\": \"\\xa4#,##0.00\",
    \"es-SV\": \"\\xa4#,##0.00\",
    \"es-US\": \"\\xa4#,##0.00\",
    \"es-UY\": \"\\xa4\\xa0#,##0.00;(\\xa4\\xa0#,##0.00)\",
    \"es-VE\": \"\\xa4#,##0.00\",
    et: \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    eu: \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    ewo: \"#,##0.00\\xa0\\xa4\",
    fa: \"\\u200e\\xa4\\xa0#,##0.00;\\u200e(\\xa4\\xa0#,##0.00)\",
    \"fa-AF\": \"\\xa4\\xa0#,##0.00;\\u200e(\\xa4\\xa0#,##0.00)\",
    ff: \"#,##0.00\\xa0\\xa4\",
    \"ff-Adlm\": \"\\xa4\\xa0#,##0.00\",
    \"ff-Adlm-BF\": \"\\xa4\\xa0#,##0.00\",
    \"ff-Adlm-CM\": \"\\xa4\\xa0#,##0.00\",
    \"ff-Adlm-GH\": \"\\xa4\\xa0#,##0.00\",
    \"ff-Adlm-GM\": \"\\xa4\\xa0#,##0.00\",
    \"ff-Adlm-GW\": \"\\xa4\\xa0#,##0.00\",
    \"ff-Adlm-LR\": \"\\xa4\\xa0#,##0.00\",
    \"ff-Adlm-MR\": \"\\xa4\\xa0#,##0.00\",
    \"ff-Adlm-NE\": \"\\xa4\\xa0#,##0.00\",
    \"ff-Adlm-NG\": \"\\xa4\\xa0#,##0.00\",
    \"ff-Adlm-SL\": \"\\xa4\\xa0#,##0.00\",
    \"ff-Adlm-SN\": \"\\xa4\\xa0#,##0.00\",
    \"ff-Latn\": \"#,##0.00\\xa0\\xa4\",
    \"ff-Latn-BF\": \"#,##0.00\\xa0\\xa4\",
    \"ff-Latn-CM\": \"#,##0.00\\xa0\\xa4\",
    \"ff-Latn-GH\": \"#,##0.00\\xa0\\xa4\",
    \"ff-Latn-GM\": \"#,##0.00\\xa0\\xa4\",
    \"ff-Latn-GN\": \"#,##0.00\\xa0\\xa4\",
    \"ff-Latn-GW\": \"#,##0.00\\xa0\\xa4\",
    \"ff-Latn-LR\": \"#,##0.00\\xa0\\xa4\",
    \"ff-Latn-MR\": \"#,##0.00\\xa0\\xa4\",
    \"ff-Latn-NE\": \"#,##0.00\\xa0\\xa4\",
    \"ff-Latn-NG\": \"#,##0.00\\xa0\\xa4\",
    \"ff-Latn-SL\": \"#,##0.00\\xa0\\xa4\",
    fi: \"#,##0.00\\xa0\\xa4\",
    fil: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    fo: \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fo-DK\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    fr: \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-BE\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-BF\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-BI\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-BJ\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-BL\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-CA\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-CD\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-CF\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-CG\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-CH\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-CI\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-CM\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-DJ\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-DZ\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-GA\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-GF\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-GN\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-GP\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-GQ\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-HT\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-KM\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-LU\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-MA\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-MC\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-MF\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-MG\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-ML\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-MQ\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-MR\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-MU\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-NC\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-NE\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-PF\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-PM\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-RE\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-RW\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-SC\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-SN\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-SY\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-TD\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-TG\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-TN\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-VU\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-WF\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"fr-YT\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    fur: \"\\xa4\\xa0#,##0.00\",
    fy: \"\\xa4\\xa0#,##0.00;(\\xa4\\xa0#,##0.00)\",
    ga: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"ga-GB\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    gd: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    gl: \"#,##0.00\\xa0\\xa4\",
    gsw: \"#,##0.00\\xa0\\xa4\",
    \"gsw-FR\": \"#,##0.00\\xa0\\xa4\",
    \"gsw-LI\": \"#,##0.00\\xa0\\xa4\",
    gu: \"\\xa4#,##,##0.00;(\\xa4#,##,##0.00)\",
    guz: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    gv: \"\\xa4#,##0.00\",
    ha: \"\\xa4\\xa0#,##0.00\",
    \"ha-GH\": \"\\xa4\\xa0#,##0.00\",
    \"ha-NE\": \"\\xa4\\xa0#,##0.00\",
    haw: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    he: \"#,##0.00\\xa0\\xa4\",
    hi: \"\\xa4#,##,##0.00\",
    hr: \"#,##0.00\\xa0\\xa4\",
    \"hr-BA\": \"#,##0.00\\xa0\\xa4\",
    hsb: \"#,##0.00\\xa0\\xa4\",
    hu: \"#,##0.00\\xa0\\xa4\",
    hy: \"#,##0.00\\xa0\\xa4\",
    ia: \"\\xa4\\xa0#,##0.00;(\\xa4\\xa0#,##0.00)\",
    id: \"\\xa4#,##0.00\",
    ig: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    ii: \"\\xa4\\xa0#,##0.00\",
    is: \"#,##0.00\\xa0\\xa4\",
    it: \"#,##0.00\\xa0\\xa4\",
    \"it-CH\": \"#,##0.00\\xa0\\xa4\",
    \"it-SM\": \"#,##0.00\\xa0\\xa4\",
    \"it-VA\": \"#,##0.00\\xa0\\xa4\",
    ja: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    jgo: \"\\xa4\\xa0#,##0.00\",
    jmc: \"\\xa4#,##0.00\",
    jv: \"\\xa4\\xa0#,##0.00\",
    ka: \"#,##0.00\\xa0\\xa4\",
    kab: \"#,##0.00\\xa4\",
    kam: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    kde: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    kea: \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    khq: \"#,##0.00\\xa4\",
    ki: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    kk: \"#,##0.00\\xa0\\xa4\",
    kkj: \"\\xa4\\xa0#,##0.00\",
    kl: \"\\xa4#,##0.00;\\xa4-#,##0.00\",
    kln: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    km: \"#,##0.00\\xa4;(#,##0.00\\xa4)\",
    kn: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    ko: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"ko-KP\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    kok: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    ks: \"\\xa4\\xa0#,##,##0.00\",
    \"ks-Arab\": \"\\xa4\\xa0#,##,##0.00\",
    ksb: \"#,##0.00\\xa4\",
    ksf: \"#,##0.00\\xa0\\xa4\",
    ksh: \"#,##0.00\\xa0\\xa4\",
    ku: \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    kw: \"\\xa4#,##0.00\",
    ky: \"#,##0.00\\xa0\\xa4\",
    lag: \"\\xa4\\xa0#,##0.00\",
    lb: \"#,##0.00\\xa0\\xa4\",
    lg: \"#,##0.00\\xa4\",
    lkt: \"\\xa4\\xa0#,##0.00\",
    ln: \"#,##0.00\\xa0\\xa4\",
    \"ln-AO\": \"#,##0.00\\xa0\\xa4\",
    \"ln-CF\": \"#,##0.00\\xa0\\xa4\",
    \"ln-CG\": \"#,##0.00\\xa0\\xa4\",
    lo: \"\\xa4#,##0.00;\\xa4-#,##0.00\",
    lrc: \"\\xa4\\xa0#,##0.00\",
    \"lrc-IQ\": \"\\xa4\\xa0#,##0.00\",
    lt: \"#,##0.00\\xa0\\xa4\",
    lu: \"#,##0.00\\xa4\",
    luo: \"#,##0.00\\xa4\",
    luy: \"\\xa4#,##0.00;\\xa4-\\xa0#,##0.00\",
    lv: \"#,##0.00\\xa0\\xa4\",
    mai: \"\\xa4\\xa0#,##0.00\",
    mas: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"mas-TZ\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    mer: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    mfe: \"\\xa4\\xa0#,##0.00\",
    mg: \"\\xa4#,##0.00\",
    mgh: \"\\xa4\\xa0#,##0.00\",
    mgo: \"\\xa4\\xa0#,##0.00\",
    mi: \"\\xa4\\xa0#,##0.00\",
    mk: \"#,##0.00\\xa0\\xa4\",
    ml: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    mn: \"\\xa4\\xa0#,##0.00\",
    mni: \"\\xa4\\xa0#,##0.00\",
    \"mni-Beng\": \"\\xa4\\xa0#,##0.00\",
    mr: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    ms: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"ms-BN\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"ms-ID\": \"\\xa4#,##0.00\",
    \"ms-SG\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    mt: \"\\xa4#,##0.00\",
    mua: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    my: \"\\xa4\\xa0#,##0.00\",
    mzn: \"\\xa4\\xa0#,##0.00\",
    naq: \"\\xa4#,##0.00\",
    nb: \"\\xa4\\xa0#,##0.00\",
    \"nb-SJ\": \"\\xa4\\xa0#,##0.00\",
    nd: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    nds: \"\\xa4\\xa0#,##0.00\",
    \"nds-NL\": \"\\xa4\\xa0#,##0.00\",
    ne: \"\\xa4\\xa0#,##,##0.00\",
    \"ne-IN\": \"\\xa4\\xa0#,##,##0.00\",
    nl: \"\\xa4\\xa0#,##0.00;(\\xa4\\xa0#,##0.00)\",
    \"nl-AW\": \"\\xa4\\xa0#,##0.00;(\\xa4\\xa0#,##0.00)\",
    \"nl-BE\": \"\\xa4\\xa0#,##0.00;(\\xa4\\xa0#,##0.00)\",
    \"nl-BQ\": \"\\xa4\\xa0#,##0.00;(\\xa4\\xa0#,##0.00)\",
    \"nl-CW\": \"\\xa4\\xa0#,##0.00;(\\xa4\\xa0#,##0.00)\",
    \"nl-SR\": \"\\xa4\\xa0#,##0.00;(\\xa4\\xa0#,##0.00)\",
    \"nl-SX\": \"\\xa4\\xa0#,##0.00;(\\xa4\\xa0#,##0.00)\",
    nmg: \"#,##0.00\\xa0\\xa4\",
    nn: \"#,##0.00\\xa0\\xa4\",
    nnh: \"\\xa4\\xa0#,##0.00\",
    no: \"\\xa4\\xa0#,##0.00\",
    nus: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    nyn: \"\\xa4#,##0.00\",
    om: \"\\xa4#,##0.00\",
    \"om-KE\": \"\\xa4#,##0.00\",
    or: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    os: \"\\xa4\\xa0#,##0.00\",
    \"os-RU\": \"\\xa4\\xa0#,##0.00\",
    pa: \"\\xa4\\xa0#,##0.00\",
    \"pa-Arab\": \"\\xa4\\xa0#,##0.00\",
    \"pa-Guru\": \"\\xa4\\xa0#,##0.00\",
    pcm: \"\\xa4#,##0.00\",
    pl: \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    ps: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"ps-PK\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    pt: \"\\xa4\\xa0#,##0.00\",
    \"pt-AO\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"pt-CH\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"pt-CV\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"pt-GQ\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"pt-GW\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"pt-LU\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"pt-MO\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"pt-MZ\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"pt-PT\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"pt-ST\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"pt-TL\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    qu: \"\\xa4\\xa0#,##0.00\",
    \"qu-BO\": \"\\xa4\\xa0#,##0.00\",
    \"qu-EC\": \"\\xa4\\xa0#,##0.00\",
    rm: \"#,##0.00\\xa0\\xa4\",
    rn: \"#,##0.00\\xa4\",
    ro: \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"ro-MD\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    rof: \"\\xa4#,##0.00\",
    root: \"\\xa4\\xa0#,##0.00\",
    ru: \"#,##0.00\\xa0\\xa4\",
    \"ru-BY\": \"#,##0.00\\xa0\\xa4\",
    \"ru-KG\": \"#,##0.00\\xa0\\xa4\",
    \"ru-KZ\": \"#,##0.00\\xa0\\xa4\",
    \"ru-MD\": \"#,##0.00\\xa0\\xa4\",
    \"ru-UA\": \"#,##0.00\\xa0\\xa4\",
    rw: \"\\xa4\\xa0#,##0.00\",
    rwk: \"#,##0.00\\xa4\",
    sa: \"\\xa4\\xa0#,##0.00\",
    sah: \"#,##0.00\\xa0\\xa4\",
    saq: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    sat: \"\\xa4\\xa0#,##0.00\",
    \"sat-Olck\": \"\\xa4\\xa0#,##0.00\",
    sbp: \"#,##0.00\\xa4\",
    sd: \"\\xa4\\xa0#,##0.00\",
    \"sd-Arab\": \"\\xa4\\xa0#,##0.00\",
    \"sd-Deva\": \"\\xa4\\xa0#,##0.00\",
    se: \"#,##0.00\\xa0\\xa4\",
    \"se-FI\": \"#,##0.00\\xa0\\xa4\",
    \"se-SE\": \"#,##0.00\\xa0\\xa4\",
    seh: \"#,##0.00\\xa4\",
    ses: \"#,##0.00\\xa4\",
    sg: \"\\xa4#,##0.00;\\xa4-#,##0.00\",
    shi: \"#,##0.00\\xa4\",
    \"shi-Latn\": \"#,##0.00\\xa4\",
    \"shi-Tfng\": \"#,##0.00\\xa4\",
    si: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    sk: \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    sl: \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    smn: \"#,##0.00\\xa0\\xa4\",
    sn: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    so: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"so-DJ\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"so-ET\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"so-KE\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    sq: \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"sq-MK\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"sq-XK\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    sr: \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"sr-Cyrl\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"sr-Cyrl-BA\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"sr-Cyrl-ME\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"sr-Cyrl-XK\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"sr-Latn\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"sr-Latn-BA\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"sr-Latn-ME\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    \"sr-Latn-XK\": \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    su: \"\\xa4#,##0.00\",
    \"su-Latn\": \"\\xa4#,##0.00\",
    sv: \"#,##0.00\\xa0\\xa4\",
    \"sv-AX\": \"#,##0.00\\xa0\\xa4\",
    \"sv-FI\": \"#,##0.00\\xa0\\xa4\",
    sw: \"\\xa4\\xa0#,##0.00\",
    \"sw-CD\": \"\\xa4\\xa0#,##0.00\",
    \"sw-KE\": \"\\xa4\\xa0#,##0.00\",
    \"sw-UG\": \"\\xa4\\xa0#,##0.00\",
    ta: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"ta-LK\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"ta-MY\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"ta-SG\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    te: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    teo: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"teo-KE\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    tg: \"#,##0.00\\xa0\\xa4\",
    th: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    ti: \"\\xa4#,##0.00\",
    \"ti-ER\": \"\\xa4#,##0.00\",
    tk: \"#,##0.00\\xa0\\xa4\",
    to: \"\\xa4\\xa0#,##0.00\",
    tr: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"tr-CY\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    tt: \"#,##0.00\\xa0\\xa4\",
    twq: \"#,##0.00\\xa4\",
    tzm: \"#,##0.00\\xa0\\xa4\",
    ug: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    uk: \"#,##0.00\\xa0\\xa4\",
    ur: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"ur-IN\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    uz: \"#,##0.00\\xa0\\xa4\",
    \"uz-Arab\": \"\\xa4\\xa0#,##0.00\",
    \"uz-Cyrl\": \"#,##0.00\\xa0\\xa4\",
    \"uz-Latn\": \"#,##0.00\\xa0\\xa4\",
    vai: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"vai-Latn\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"vai-Vaii\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    vi: \"#,##0.00\\xa0\\xa4\",
    vun: \"\\xa4#,##0.00\",
    wae: \"\\xa4\\xa0#,##0.00\",
    wo: \"\\xa4\\xa0#,##0.00\",
    xh: \"\\xa4#,##0.00\",
    xog: \"#,##0.00\\xa0\\xa4\",
    yav: \"#,##0.00\\xa0\\xa4;(#,##0.00\\xa0\\xa4)\",
    yi: \"\\xa4\\xa0#,##0.00\",
    yo: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"yo-BJ\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    yue: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"yue-Hans\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"yue-Hant\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    zgh: \"#,##0.00\\xa4\",
    zh: \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"zh-Hans\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"zh-Hans-HK\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"zh-Hans-MO\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"zh-Hans-SG\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"zh-Hant\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"zh-Hant-HK\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    \"zh-Hant-MO\": \"\\xa4#,##0.00;(\\xa4#,##0.00)\",
    zu: \"\\xa4#,##0.00;(\\xa4#,##0.00)\"
});


/***/ }),

/***/ \"./node_modules/devextreme/esm/localization/cldr-data/parent_locales.js\":
/*!******************************************************************************!*\\
  !*** ./node_modules/devextreme/esm/localization/cldr-data/parent_locales.js ***!
  \\******************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/**
 * DevExtreme (esm/localization/cldr-data/parent_locales.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
    \"en-150\": \"en-001\",
    \"en-AG\": \"en-001\",
    \"en-AI\": \"en-001\",
    \"en-AU\": \"en-001\",
    \"en-BB\": \"en-001\",
    \"en-BM\": \"en-001\",
    \"en-BS\": \"en-001\",
    \"en-BW\": \"en-001\",
    \"en-BZ\": \"en-001\",
    \"en-CA\": \"en-001\",
    \"en-CC\": \"en-001\",
    \"en-CK\": \"en-001\",
    \"en-CM\": \"en-001\",
    \"en-CX\": \"en-001\",
    \"en-CY\": \"en-001\",
    \"en-DG\": \"en-001\",
    \"en-DM\": \"en-001\",
    \"en-ER\": \"en-001\",
    \"en-FJ\": \"en-001\",
    \"en-FK\": \"en-001\",
    \"en-FM\": \"en-001\",
    \"en-GB\": \"en-001\",
    \"en-GD\": \"en-001\",
    \"en-GG\": \"en-001\",
    \"en-GH\": \"en-001\",
    \"en-GI\": \"en-001\",
    \"en-GM\": \"en-001\",
    \"en-GY\": \"en-001\",
    \"en-HK\": \"en-001\",
    \"en-IE\": \"en-001\",
    \"en-IL\": \"en-001\",
    \"en-IM\": \"en-001\",
    \"en-IN\": \"en-001\",
    \"en-IO\": \"en-001\",
    \"en-JE\": \"en-001\",
    \"en-JM\": \"en-001\",
    \"en-KE\": \"en-001\",
    \"en-KI\": \"en-001\",
    \"en-KN\": \"en-001\",
    \"en-KY\": \"en-001\",
    \"en-LC\": \"en-001\",
    \"en-LR\": \"en-001\",
    \"en-LS\": \"en-001\",
    \"en-MG\": \"en-001\",
    \"en-MO\": \"en-001\",
    \"en-MS\": \"en-001\",
    \"en-MT\": \"en-001\",
    \"en-MU\": \"en-001\",
    \"en-MW\": \"en-001\",
    \"en-MY\": \"en-001\",
    \"en-NA\": \"en-001\",
    \"en-NF\": \"en-001\",
    \"en-NG\": \"en-001\",
    \"en-NR\": \"en-001\",
    \"en-NU\": \"en-001\",
    \"en-NZ\": \"en-001\",
    \"en-PG\": \"en-001\",
    \"en-PH\": \"en-001\",
    \"en-PK\": \"en-001\",
    \"en-PN\": \"en-001\",
    \"en-PW\": \"en-001\",
    \"en-RW\": \"en-001\",
    \"en-SB\": \"en-001\",
    \"en-SC\": \"en-001\",
    \"en-SD\": \"en-001\",
    \"en-SG\": \"en-001\",
    \"en-SH\": \"en-001\",
    \"en-SL\": \"en-001\",
    \"en-SS\": \"en-001\",
    \"en-SX\": \"en-001\",
    \"en-SZ\": \"en-001\",
    \"en-TC\": \"en-001\",
    \"en-TK\": \"en-001\",
    \"en-TO\": \"en-001\",
    \"en-TT\": \"en-001\",
    \"en-TV\": \"en-001\",
    \"en-TZ\": \"en-001\",
    \"en-UG\": \"en-001\",
    \"en-VC\": \"en-001\",
    \"en-VG\": \"en-001\",
    \"en-VU\": \"en-001\",
    \"en-WS\": \"en-001\",
    \"en-ZA\": \"en-001\",
    \"en-ZM\": \"en-001\",
    \"en-ZW\": \"en-001\",
    \"en-AT\": \"en-150\",
    \"en-BE\": \"en-150\",
    \"en-CH\": \"en-150\",
    \"en-DE\": \"en-150\",
    \"en-DK\": \"en-150\",
    \"en-FI\": \"en-150\",
    \"en-NL\": \"en-150\",
    \"en-SE\": \"en-150\",
    \"en-SI\": \"en-150\",
    \"es-AR\": \"es-419\",
    \"es-BO\": \"es-419\",
    \"es-BR\": \"es-419\",
    \"es-BZ\": \"es-419\",
    \"es-CL\": \"es-419\",
    \"es-CO\": \"es-419\",
    \"es-CR\": \"es-419\",
    \"es-CU\": \"es-419\",
    \"es-DO\": \"es-419\",
    \"es-EC\": \"es-419\",
    \"es-GT\": \"es-419\",
    \"es-HN\": \"es-419\",
    \"es-MX\": \"es-419\",
    \"es-NI\": \"es-419\",
    \"es-PA\": \"es-419\",
    \"es-PE\": \"es-419\",
    \"es-PR\": \"es-419\",
    \"es-PY\": \"es-419\",
    \"es-SV\": \"es-419\",
    \"es-US\": \"es-419\",
    \"es-UY\": \"es-419\",
    \"es-VE\": \"es-419\",
    nb: \"no\",
    nn: \"no\",
    \"pt-AO\": \"pt-PT\",
    \"pt-CH\": \"pt-PT\",
    \"pt-CV\": \"pt-PT\",
    \"pt-FR\": \"pt-PT\",
    \"pt-GQ\": \"pt-PT\",
    \"pt-GW\": \"pt-PT\",
    \"pt-LU\": \"pt-PT\",
    \"pt-MO\": \"pt-PT\",
    \"pt-MZ\": \"pt-PT\",
    \"pt-ST\": \"pt-PT\",
    \"pt-TL\": \"pt-PT\",
    \"az-Arab\": \"root\",
    \"az-Cyrl\": \"root\",
    \"blt-Latn\": \"root\",
    \"bm-Nkoo\": \"root\",
    \"bs-Cyrl\": \"root\",
    \"byn-Latn\": \"root\",
    \"cu-Glag\": \"root\",
    \"dje-Arab\": \"root\",
    \"dyo-Arab\": \"root\",
    \"en-Dsrt\": \"root\",
    \"en-Shaw\": \"root\",
    \"ff-Adlm\": \"root\",
    \"ff-Arab\": \"root\",
    \"ha-Arab\": \"root\",
    \"hi-Latn\": \"root\",
    \"iu-Latn\": \"root\",
    \"kk-Arab\": \"root\",
    \"ks-Deva\": \"root\",
    \"ku-Arab\": \"root\",
    \"ky-Arab\": \"root\",
    \"ky-Latn\": \"root\",
    \"ml-Arab\": \"root\",
    \"mn-Mong\": \"root\",
    \"mni-Mtei\": \"root\",
    \"ms-Arab\": \"root\",
    \"pa-Arab\": \"root\",
    \"sat-Deva\": \"root\",
    \"sd-Deva\": \"root\",
    \"sd-Khoj\": \"root\",
    \"sd-Sind\": \"root\",
    \"shi-Latn\": \"root\",
    \"so-Arab\": \"root\",
    \"sr-Latn\": \"root\",
    \"sw-Arab\": \"root\",
    \"tg-Arab\": \"root\",
    \"ug-Cyrl\": \"root\",
    \"uz-Arab\": \"root\",
    \"uz-Cyrl\": \"root\",
    \"vai-Latn\": \"root\",
    \"wo-Arab\": \"root\",
    \"yo-Arab\": \"root\",
    \"yue-Hans\": \"root\",
    \"zh-Hant\": \"root\",
    \"zh-Hant-MO\": \"zh-Hant-HK\"
});


/***/ }),

/***/ \"./node_modules/devextreme/esm/localization/core.js\":
/*!**********************************************************!*\\
  !*** ./node_modules/devextreme/esm/localization/core.js ***!
  \\**********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _core_utils_dependency_injector__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core/utils/dependency_injector */ \"./node_modules/devextreme/esm/core/utils/dependency_injector.js\");
/* harmony import */ var _cldr_data_parent_locales__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./cldr-data/parent_locales */ \"./node_modules/devextreme/esm/localization/cldr-data/parent_locales.js\");
/* harmony import */ var _parentLocale__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./parentLocale */ \"./node_modules/devextreme/esm/localization/parentLocale.js\");
/**
 * DevExtreme (esm/localization/core.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */



var DEFAULT_LOCALE = \"en\";
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_core_utils_dependency_injector__WEBPACK_IMPORTED_MODULE_0__.default)({
    locale: (() => {
        var currentLocale = DEFAULT_LOCALE;
        return locale => {
            if (!locale) {
                return currentLocale
            }
            currentLocale = locale
        }
    })(),
    getValueByClosestLocale: function(getter) {
        var locale = this.locale();
        var value = getter(locale);
        var isRootLocale;
        while (!value && !isRootLocale) {
            locale = (0,_parentLocale__WEBPACK_IMPORTED_MODULE_2__.default)(_cldr_data_parent_locales__WEBPACK_IMPORTED_MODULE_1__.default, locale);
            if (locale) {
                value = getter(locale)
            } else {
                isRootLocale = true
            }
        }
        if (void 0 === value && locale !== DEFAULT_LOCALE) {
            return getter(DEFAULT_LOCALE)
        }
        return value
    }
}));


/***/ }),

/***/ \"./node_modules/devextreme/esm/localization/currency.js\":
/*!**************************************************************!*\\
  !*** ./node_modules/devextreme/esm/localization/currency.js ***!
  \\**************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _core_utils_extend__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core/utils/extend */ \"./node_modules/devextreme/esm/core/utils/extend.js\");
/**
 * DevExtreme (esm/localization/currency.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */

/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
    _formatNumberCore: function(value, format, formatConfig) {
        if (\"currency\" === format) {
            formatConfig.precision = formatConfig.precision || 0;
            var result = this.format(value, (0,_core_utils_extend__WEBPACK_IMPORTED_MODULE_0__.extend)({}, formatConfig, {
                type: \"fixedpoint\"
            }));
            var currencyPart = this.getCurrencySymbol().symbol.replace(/\\\$/g, \"\$\$\$\$\");
            result = result.replace(/^(\\D*)(\\d.*)/, \"\$1\" + currencyPart + \"\$2\");
            return result
        }
        return this.callBase.apply(this, arguments)
    },
    getCurrencySymbol: function() {
        return {
            symbol: \"\$\"
        }
    },
    getOpenXmlCurrencyFormat: function() {
        return \"\$#,##0{0}_);\\\\(\$#,##0{0}\\\\)\"
    }
});


/***/ }),

/***/ \"./node_modules/devextreme/esm/localization/default_messages.js\":
/*!**********************************************************************!*\\
  !*** ./node_modules/devextreme/esm/localization/default_messages.js ***!
  \\**********************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"defaultMessages\": () => (/* binding */ defaultMessages)
/* harmony export */ });
/**
 * DevExtreme (esm/localization/default_messages.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */
var defaultMessages = {
    en: {
        Yes: \"Yes\",
        No: \"No\",
        Cancel: \"Cancel\",
        Clear: \"Clear\",
        Done: \"Done\",
        Loading: \"Loading...\",
        Select: \"Select...\",
        Search: \"Search\",
        Back: \"Back\",
        OK: \"OK\",
        \"dxCollectionWidget-noDataText\": \"No data to display\",
        \"dxDropDownEditor-selectLabel\": \"Select\",
        \"validation-required\": \"Required\",
        \"validation-required-formatted\": \"{0} is required\",
        \"validation-numeric\": \"Value must be a number\",
        \"validation-numeric-formatted\": \"{0} must be a number\",
        \"validation-range\": \"Value is out of range\",
        \"validation-range-formatted\": \"{0} is out of range\",
        \"validation-stringLength\": \"The length of the value is not correct\",
        \"validation-stringLength-formatted\": \"The length of {0} is not correct\",
        \"validation-custom\": \"Value is invalid\",
        \"validation-custom-formatted\": \"{0} is invalid\",
        \"validation-async\": \"Value is invalid\",
        \"validation-async-formatted\": \"{0} is invalid\",
        \"validation-compare\": \"Values do not match\",
        \"validation-compare-formatted\": \"{0} does not match\",
        \"validation-pattern\": \"Value does not match pattern\",
        \"validation-pattern-formatted\": \"{0} does not match pattern\",
        \"validation-email\": \"Email is invalid\",
        \"validation-email-formatted\": \"{0} is invalid\",
        \"validation-mask\": \"Value is invalid\",
        \"dxLookup-searchPlaceholder\": \"Minimum character number: {0}\",
        \"dxList-pullingDownText\": \"Pull down to refresh...\",
        \"dxList-pulledDownText\": \"Release to refresh...\",
        \"dxList-refreshingText\": \"Refreshing...\",
        \"dxList-pageLoadingText\": \"Loading...\",
        \"dxList-nextButtonText\": \"More\",
        \"dxList-selectAll\": \"Select All\",
        \"dxListEditDecorator-delete\": \"Delete\",
        \"dxListEditDecorator-more\": \"More\",
        \"dxScrollView-pullingDownText\": \"Pull down to refresh...\",
        \"dxScrollView-pulledDownText\": \"Release to refresh...\",
        \"dxScrollView-refreshingText\": \"Refreshing...\",
        \"dxScrollView-reachBottomText\": \"Loading...\",
        \"dxDateBox-simulatedDataPickerTitleTime\": \"Select time\",
        \"dxDateBox-simulatedDataPickerTitleDate\": \"Select date\",
        \"dxDateBox-simulatedDataPickerTitleDateTime\": \"Select date and time\",
        \"dxDateBox-validation-datetime\": \"Value must be a date or time\",
        \"dxFileUploader-selectFile\": \"Select file\",
        \"dxFileUploader-dropFile\": \"or Drop file here\",
        \"dxFileUploader-bytes\": \"bytes\",
        \"dxFileUploader-kb\": \"kb\",
        \"dxFileUploader-Mb\": \"Mb\",
        \"dxFileUploader-Gb\": \"Gb\",
        \"dxFileUploader-upload\": \"Upload\",
        \"dxFileUploader-uploaded\": \"Uploaded\",
        \"dxFileUploader-readyToUpload\": \"Ready to upload\",
        \"dxFileUploader-uploadAbortedMessage\": \"Upload cancelled\",
        \"dxFileUploader-uploadFailedMessage\": \"Upload failed\",
        \"dxFileUploader-invalidFileExtension\": \"File type is not allowed\",
        \"dxFileUploader-invalidMaxFileSize\": \"File is too large\",
        \"dxFileUploader-invalidMinFileSize\": \"File is too small\",
        \"dxRangeSlider-ariaFrom\": \"From\",
        \"dxRangeSlider-ariaTill\": \"Till\",
        \"dxSwitch-switchedOnText\": \"ON\",
        \"dxSwitch-switchedOffText\": \"OFF\",
        \"dxForm-optionalMark\": \"optional\",
        \"dxForm-requiredMessage\": \"{0} is required\",
        \"dxNumberBox-invalidValueMessage\": \"Value must be a number\",
        \"dxNumberBox-noDataText\": \"No data\",
        \"dxDataGrid-columnChooserTitle\": \"Column Chooser\",
        \"dxDataGrid-columnChooserEmptyText\": \"Drag a column here to hide it\",
        \"dxDataGrid-groupContinuesMessage\": \"Continues on the next page\",
        \"dxDataGrid-groupContinuedMessage\": \"Continued from the previous page\",
        \"dxDataGrid-groupHeaderText\": \"Group by This Column\",
        \"dxDataGrid-ungroupHeaderText\": \"Ungroup\",
        \"dxDataGrid-ungroupAllText\": \"Ungroup All\",
        \"dxDataGrid-editingEditRow\": \"Edit\",
        \"dxDataGrid-editingSaveRowChanges\": \"Save\",
        \"dxDataGrid-editingCancelRowChanges\": \"Cancel\",
        \"dxDataGrid-editingDeleteRow\": \"Delete\",
        \"dxDataGrid-editingUndeleteRow\": \"Undelete\",
        \"dxDataGrid-editingConfirmDeleteMessage\": \"Are you sure you want to delete this record?\",
        \"dxDataGrid-validationCancelChanges\": \"Cancel changes\",
        \"dxDataGrid-groupPanelEmptyText\": \"Drag a column header here to group by that column\",
        \"dxDataGrid-noDataText\": \"No data\",
        \"dxDataGrid-searchPanelPlaceholder\": \"Search...\",
        \"dxDataGrid-filterRowShowAllText\": \"(All)\",
        \"dxDataGrid-filterRowResetOperationText\": \"Reset\",
        \"dxDataGrid-filterRowOperationEquals\": \"Equals\",
        \"dxDataGrid-filterRowOperationNotEquals\": \"Does not equal\",
        \"dxDataGrid-filterRowOperationLess\": \"Less than\",
        \"dxDataGrid-filterRowOperationLessOrEquals\": \"Less than or equal to\",
        \"dxDataGrid-filterRowOperationGreater\": \"Greater than\",
        \"dxDataGrid-filterRowOperationGreaterOrEquals\": \"Greater than or equal to\",
        \"dxDataGrid-filterRowOperationStartsWith\": \"Starts with\",
        \"dxDataGrid-filterRowOperationContains\": \"Contains\",
        \"dxDataGrid-filterRowOperationNotContains\": \"Does not contain\",
        \"dxDataGrid-filterRowOperationEndsWith\": \"Ends with\",
        \"dxDataGrid-filterRowOperationBetween\": \"Between\",
        \"dxDataGrid-filterRowOperationBetweenStartText\": \"Start\",
        \"dxDataGrid-filterRowOperationBetweenEndText\": \"End\",
        \"dxDataGrid-applyFilterText\": \"Apply filter\",
        \"dxDataGrid-trueText\": \"true\",
        \"dxDataGrid-falseText\": \"false\",
        \"dxDataGrid-sortingAscendingText\": \"Sort Ascending\",
        \"dxDataGrid-sortingDescendingText\": \"Sort Descending\",
        \"dxDataGrid-sortingClearText\": \"Clear Sorting\",
        \"dxDataGrid-editingSaveAllChanges\": \"Save changes\",
        \"dxDataGrid-editingCancelAllChanges\": \"Discard changes\",
        \"dxDataGrid-editingAddRow\": \"Add a row\",
        \"dxDataGrid-summaryMin\": \"Min: {0}\",
        \"dxDataGrid-summaryMinOtherColumn\": \"Min of {1} is {0}\",
        \"dxDataGrid-summaryMax\": \"Max: {0}\",
        \"dxDataGrid-summaryMaxOtherColumn\": \"Max of {1} is {0}\",
        \"dxDataGrid-summaryAvg\": \"Avg: {0}\",
        \"dxDataGrid-summaryAvgOtherColumn\": \"Avg of {1} is {0}\",
        \"dxDataGrid-summarySum\": \"Sum: {0}\",
        \"dxDataGrid-summarySumOtherColumn\": \"Sum of {1} is {0}\",
        \"dxDataGrid-summaryCount\": \"Count: {0}\",
        \"dxDataGrid-columnFixingFix\": \"Fix\",
        \"dxDataGrid-columnFixingUnfix\": \"Unfix\",
        \"dxDataGrid-columnFixingLeftPosition\": \"To the left\",
        \"dxDataGrid-columnFixingRightPosition\": \"To the right\",
        \"dxDataGrid-exportTo\": \"Export\",
        \"dxDataGrid-exportToExcel\": \"Export to Excel file\",
        \"dxDataGrid-exporting\": \"Exporting...\",
        \"dxDataGrid-excelFormat\": \"Excel file\",
        \"dxDataGrid-selectedRows\": \"Selected rows\",
        \"dxDataGrid-exportSelectedRows\": \"Export selected rows\",
        \"dxDataGrid-exportAll\": \"Export all data\",
        \"dxDataGrid-headerFilterEmptyValue\": \"(Blanks)\",
        \"dxDataGrid-headerFilterOK\": \"OK\",
        \"dxDataGrid-headerFilterCancel\": \"Cancel\",
        \"dxDataGrid-ariaAdaptiveCollapse\": \"Hide additional data\",
        \"dxDataGrid-ariaAdaptiveExpand\": \"Display additional data\",
        \"dxDataGrid-ariaColumn\": \"Column\",
        \"dxDataGrid-ariaValue\": \"Value\",
        \"dxDataGrid-ariaFilterCell\": \"Filter cell\",
        \"dxDataGrid-ariaCollapse\": \"Collapse\",
        \"dxDataGrid-ariaExpand\": \"Expand\",
        \"dxDataGrid-ariaDataGrid\": \"Data grid\",
        \"dxDataGrid-ariaSearchInGrid\": \"Search in the data grid\",
        \"dxDataGrid-ariaSelectAll\": \"Select all\",
        \"dxDataGrid-ariaSelectRow\": \"Select row\",
        \"dxDataGrid-ariaToolbar\": \"Data grid toolbar\",
        \"dxDataGrid-filterBuilderPopupTitle\": \"Filter Builder\",
        \"dxDataGrid-filterPanelCreateFilter\": \"Create Filter\",
        \"dxDataGrid-filterPanelClearFilter\": \"Clear\",
        \"dxDataGrid-filterPanelFilterEnabledHint\": \"Enable the filter\",
        \"dxTreeList-ariaTreeList\": \"Tree list\",
        \"dxTreeList-ariaSearchInGrid\": \"Search in the tree list\",
        \"dxTreeList-ariaToolbar\": \"Tree list toolbar\",
        \"dxTreeList-editingAddRowToNode\": \"Add\",
        \"dxPager-infoText\": \"Page {0} of {1} ({2} items)\",
        \"dxPager-pagesCountText\": \"of\",
        \"dxPager-pageSizesAllText\": \"All\",
        \"dxPivotGrid-grandTotal\": \"Grand Total\",
        \"dxPivotGrid-total\": \"{0} Total\",
        \"dxPivotGrid-fieldChooserTitle\": \"Field Chooser\",
        \"dxPivotGrid-showFieldChooser\": \"Show Field Chooser\",
        \"dxPivotGrid-expandAll\": \"Expand All\",
        \"dxPivotGrid-collapseAll\": \"Collapse All\",
        \"dxPivotGrid-sortColumnBySummary\": 'Sort \"{0}\" by This Column',
        \"dxPivotGrid-sortRowBySummary\": 'Sort \"{0}\" by This Row',
        \"dxPivotGrid-removeAllSorting\": \"Remove All Sorting\",
        \"dxPivotGrid-dataNotAvailable\": \"N/A\",
        \"dxPivotGrid-rowFields\": \"Row Fields\",
        \"dxPivotGrid-columnFields\": \"Column Fields\",
        \"dxPivotGrid-dataFields\": \"Data Fields\",
        \"dxPivotGrid-filterFields\": \"Filter Fields\",
        \"dxPivotGrid-allFields\": \"All Fields\",
        \"dxPivotGrid-columnFieldArea\": \"Drop Column Fields Here\",
        \"dxPivotGrid-dataFieldArea\": \"Drop Data Fields Here\",
        \"dxPivotGrid-rowFieldArea\": \"Drop Row Fields Here\",
        \"dxPivotGrid-filterFieldArea\": \"Drop Filter Fields Here\",
        \"dxScheduler-editorLabelTitle\": \"Subject\",
        \"dxScheduler-editorLabelStartDate\": \"Start Date\",
        \"dxScheduler-editorLabelEndDate\": \"End Date\",
        \"dxScheduler-editorLabelDescription\": \"Description\",
        \"dxScheduler-editorLabelRecurrence\": \"Repeat\",
        \"dxScheduler-openAppointment\": \"Open appointment\",
        \"dxScheduler-recurrenceNever\": \"Never\",
        \"dxScheduler-recurrenceMinutely\": \"Every minute\",
        \"dxScheduler-recurrenceHourly\": \"Hourly\",
        \"dxScheduler-recurrenceDaily\": \"Daily\",
        \"dxScheduler-recurrenceWeekly\": \"Weekly\",
        \"dxScheduler-recurrenceMonthly\": \"Monthly\",
        \"dxScheduler-recurrenceYearly\": \"Yearly\",
        \"dxScheduler-recurrenceRepeatEvery\": \"Repeat Every\",
        \"dxScheduler-recurrenceRepeatOn\": \"Repeat On\",
        \"dxScheduler-recurrenceEnd\": \"End repeat\",
        \"dxScheduler-recurrenceAfter\": \"After\",
        \"dxScheduler-recurrenceOn\": \"On\",
        \"dxScheduler-recurrenceRepeatMinutely\": \"minute(s)\",
        \"dxScheduler-recurrenceRepeatHourly\": \"hour(s)\",
        \"dxScheduler-recurrenceRepeatDaily\": \"day(s)\",
        \"dxScheduler-recurrenceRepeatWeekly\": \"week(s)\",
        \"dxScheduler-recurrenceRepeatMonthly\": \"month(s)\",
        \"dxScheduler-recurrenceRepeatYearly\": \"year(s)\",
        \"dxScheduler-switcherDay\": \"Day\",
        \"dxScheduler-switcherWeek\": \"Week\",
        \"dxScheduler-switcherWorkWeek\": \"Work Week\",
        \"dxScheduler-switcherMonth\": \"Month\",
        \"dxScheduler-switcherAgenda\": \"Agenda\",
        \"dxScheduler-switcherTimelineDay\": \"Timeline Day\",
        \"dxScheduler-switcherTimelineWeek\": \"Timeline Week\",
        \"dxScheduler-switcherTimelineWorkWeek\": \"Timeline Work Week\",
        \"dxScheduler-switcherTimelineMonth\": \"Timeline Month\",
        \"dxScheduler-recurrenceRepeatOnDate\": \"on date\",
        \"dxScheduler-recurrenceRepeatCount\": \"occurrence(s)\",
        \"dxScheduler-allDay\": \"All day\",
        \"dxScheduler-confirmRecurrenceEditMessage\": \"Do you want to edit only this appointment or the whole series?\",
        \"dxScheduler-confirmRecurrenceDeleteMessage\": \"Do you want to delete only this appointment or the whole series?\",
        \"dxScheduler-confirmRecurrenceEditSeries\": \"Edit series\",
        \"dxScheduler-confirmRecurrenceDeleteSeries\": \"Delete series\",
        \"dxScheduler-confirmRecurrenceEditOccurrence\": \"Edit appointment\",
        \"dxScheduler-confirmRecurrenceDeleteOccurrence\": \"Delete appointment\",
        \"dxScheduler-noTimezoneTitle\": \"No timezone\",
        \"dxScheduler-moreAppointments\": \"{0} more\",
        \"dxCalendar-todayButtonText\": \"Today\",
        \"dxCalendar-ariaWidgetName\": \"Calendar\",
        \"dxColorView-ariaRed\": \"Red\",
        \"dxColorView-ariaGreen\": \"Green\",
        \"dxColorView-ariaBlue\": \"Blue\",
        \"dxColorView-ariaAlpha\": \"Transparency\",
        \"dxColorView-ariaHex\": \"Color code\",
        \"dxTagBox-selected\": \"{0} selected\",
        \"dxTagBox-allSelected\": \"All selected ({0})\",
        \"dxTagBox-moreSelected\": \"{0} more\",
        \"vizExport-printingButtonText\": \"Print\",
        \"vizExport-titleMenuText\": \"Exporting/Printing\",
        \"vizExport-exportButtonText\": \"{0} file\",
        \"dxFilterBuilder-and\": \"And\",
        \"dxFilterBuilder-or\": \"Or\",
        \"dxFilterBuilder-notAnd\": \"Not And\",
        \"dxFilterBuilder-notOr\": \"Not Or\",
        \"dxFilterBuilder-addCondition\": \"Add Condition\",
        \"dxFilterBuilder-addGroup\": \"Add Group\",
        \"dxFilterBuilder-enterValueText\": \"<enter a value>\",
        \"dxFilterBuilder-filterOperationEquals\": \"Equals\",
        \"dxFilterBuilder-filterOperationNotEquals\": \"Does not equal\",
        \"dxFilterBuilder-filterOperationLess\": \"Is less than\",
        \"dxFilterBuilder-filterOperationLessOrEquals\": \"Is less than or equal to\",
        \"dxFilterBuilder-filterOperationGreater\": \"Is greater than\",
        \"dxFilterBuilder-filterOperationGreaterOrEquals\": \"Is greater than or equal to\",
        \"dxFilterBuilder-filterOperationStartsWith\": \"Starts with\",
        \"dxFilterBuilder-filterOperationContains\": \"Contains\",
        \"dxFilterBuilder-filterOperationNotContains\": \"Does not contain\",
        \"dxFilterBuilder-filterOperationEndsWith\": \"Ends with\",
        \"dxFilterBuilder-filterOperationIsBlank\": \"Is blank\",
        \"dxFilterBuilder-filterOperationIsNotBlank\": \"Is not blank\",
        \"dxFilterBuilder-filterOperationBetween\": \"Is between\",
        \"dxFilterBuilder-filterOperationAnyOf\": \"Is any of\",
        \"dxFilterBuilder-filterOperationNoneOf\": \"Is none of\",
        \"dxHtmlEditor-dialogColorCaption\": \"Change Font Color\",
        \"dxHtmlEditor-dialogBackgroundCaption\": \"Change Background Color\",
        \"dxHtmlEditor-dialogLinkCaption\": \"Add Link\",
        \"dxHtmlEditor-dialogLinkUrlField\": \"URL\",
        \"dxHtmlEditor-dialogLinkTextField\": \"Text\",
        \"dxHtmlEditor-dialogLinkTargetField\": \"Open link in new window\",
        \"dxHtmlEditor-dialogImageCaption\": \"Add Image\",
        \"dxHtmlEditor-dialogImageUrlField\": \"URL\",
        \"dxHtmlEditor-dialogImageAltField\": \"Alternate text\",
        \"dxHtmlEditor-dialogImageWidthField\": \"Width (px)\",
        \"dxHtmlEditor-dialogImageHeightField\": \"Height (px)\",
        \"dxHtmlEditor-dialogInsertTableRowsField\": \"Rows\",
        \"dxHtmlEditor-dialogInsertTableColumnsField\": \"Columns\",
        \"dxHtmlEditor-dialogInsertTableCaption\": \"Insert Table\",
        \"dxHtmlEditor-heading\": \"Heading\",
        \"dxHtmlEditor-normalText\": \"Normal text\",
        \"dxHtmlEditor-background\": \"Background Color\",
        \"dxHtmlEditor-bold\": \"Bold\",
        \"dxHtmlEditor-color\": \"Font Color\",
        \"dxHtmlEditor-font\": \"Font\",
        \"dxHtmlEditor-italic\": \"Italic\",
        \"dxHtmlEditor-link\": \"Add Link\",
        \"dxHtmlEditor-image\": \"Add Image\",
        \"dxHtmlEditor-size\": \"Size\",
        \"dxHtmlEditor-strike\": \"Strikethrough\",
        \"dxHtmlEditor-subscript\": \"Subscript\",
        \"dxHtmlEditor-superscript\": \"Superscript\",
        \"dxHtmlEditor-underline\": \"Underline\",
        \"dxHtmlEditor-blockquote\": \"Blockquote\",
        \"dxHtmlEditor-header\": \"Header\",
        \"dxHtmlEditor-increaseIndent\": \"Increase Indent\",
        \"dxHtmlEditor-decreaseIndent\": \"Decrease Indent\",
        \"dxHtmlEditor-orderedList\": \"Ordered List\",
        \"dxHtmlEditor-bulletList\": \"Bullet List\",
        \"dxHtmlEditor-alignLeft\": \"Align Left\",
        \"dxHtmlEditor-alignCenter\": \"Align Center\",
        \"dxHtmlEditor-alignRight\": \"Align Right\",
        \"dxHtmlEditor-alignJustify\": \"Align Justify\",
        \"dxHtmlEditor-codeBlock\": \"Code Block\",
        \"dxHtmlEditor-variable\": \"Add Variable\",
        \"dxHtmlEditor-undo\": \"Undo\",
        \"dxHtmlEditor-redo\": \"Redo\",
        \"dxHtmlEditor-clear\": \"Clear Formatting\",
        \"dxHtmlEditor-insertTable\": \"Insert Table\",
        \"dxHtmlEditor-insertRowAbove\": \"Insert Row Above\",
        \"dxHtmlEditor-insertRowBelow\": \"Insert Row Below\",
        \"dxHtmlEditor-insertColumnLeft\": \"Insert Column Left\",
        \"dxHtmlEditor-insertColumnRight\": \"Insert Column Right\",
        \"dxHtmlEditor-deleteColumn\": \"Delete Column\",
        \"dxHtmlEditor-deleteRow\": \"Delete Row\",
        \"dxHtmlEditor-deleteTable\": \"Delete Table\",
        \"dxHtmlEditor-list\": \"List\",
        \"dxHtmlEditor-ordered\": \"Ordered\",
        \"dxHtmlEditor-bullet\": \"Bullet\",
        \"dxHtmlEditor-align\": \"Align\",
        \"dxHtmlEditor-center\": \"Center\",
        \"dxHtmlEditor-left\": \"Left\",
        \"dxHtmlEditor-right\": \"Right\",
        \"dxHtmlEditor-indent\": \"Indent\",
        \"dxHtmlEditor-justify\": \"Justify\",
        \"dxFileManager-newDirectoryName\": \"Untitled directory\",
        \"dxFileManager-rootDirectoryName\": \"Files\",
        \"dxFileManager-errorNoAccess\": \"Access Denied. Operation could not be completed.\",
        \"dxFileManager-errorDirectoryExistsFormat\": \"Directory '{0}' already exists.\",
        \"dxFileManager-errorFileExistsFormat\": \"File '{0}' already exists.\",
        \"dxFileManager-errorFileNotFoundFormat\": \"File '{0}' not found.\",
        \"dxFileManager-errorDirectoryNotFoundFormat\": \"Directory '{0}' not found.\",
        \"dxFileManager-errorWrongFileExtension\": \"File extension is not allowed.\",
        \"dxFileManager-errorMaxFileSizeExceeded\": \"File size exceeds the maximum allowed size.\",
        \"dxFileManager-errorInvalidSymbols\": \"This name contains invalid characters.\",
        \"dxFileManager-errorDefault\": \"Unspecified error.\",
        \"dxFileManager-errorDirectoryOpenFailed\": \"The directory cannot be opened\",
        \"dxFileManager-commandCreate\": \"New directory\",
        \"dxFileManager-commandRename\": \"Rename\",
        \"dxFileManager-commandMove\": \"Move to\",
        \"dxFileManager-commandCopy\": \"Copy to\",
        \"dxFileManager-commandDelete\": \"Delete\",
        \"dxFileManager-commandDownload\": \"Download\",
        \"dxFileManager-commandUpload\": \"Upload files\",
        \"dxFileManager-commandRefresh\": \"Refresh\",
        \"dxFileManager-commandThumbnails\": \"Thumbnails View\",
        \"dxFileManager-commandDetails\": \"Details View\",
        \"dxFileManager-commandClearSelection\": \"Clear selection\",
        \"dxFileManager-commandShowNavPane\": \"Toggle navigation pane\",
        \"dxFileManager-dialogDirectoryChooserMoveTitle\": \"Move to\",
        \"dxFileManager-dialogDirectoryChooserMoveButtonText\": \"Move\",
        \"dxFileManager-dialogDirectoryChooserCopyTitle\": \"Copy to\",
        \"dxFileManager-dialogDirectoryChooserCopyButtonText\": \"Copy\",
        \"dxFileManager-dialogRenameItemTitle\": \"Rename\",
        \"dxFileManager-dialogRenameItemButtonText\": \"Save\",
        \"dxFileManager-dialogCreateDirectoryTitle\": \"New directory\",
        \"dxFileManager-dialogCreateDirectoryButtonText\": \"Create\",
        \"dxFileManager-dialogDeleteItemTitle\": \"Delete\",
        \"dxFileManager-dialogDeleteItemButtonText\": \"Delete\",
        \"dxFileManager-dialogDeleteItemSingleItemConfirmation\": \"Are you sure you want to delete {0}?\",
        \"dxFileManager-dialogDeleteItemMultipleItemsConfirmation\": \"Are you sure you want to delete {0} items?\",
        \"dxFileManager-dialogButtonCancel\": \"Cancel\",
        \"dxFileManager-editingCreateSingleItemProcessingMessage\": \"Creating a directory inside {0}\",
        \"dxFileManager-editingCreateSingleItemSuccessMessage\": \"Created a directory inside {0}\",
        \"dxFileManager-editingCreateSingleItemErrorMessage\": \"Directory was not created\",
        \"dxFileManager-editingCreateCommonErrorMessage\": \"Directory was not created\",
        \"dxFileManager-editingRenameSingleItemProcessingMessage\": \"Renaming an item inside {0}\",
        \"dxFileManager-editingRenameSingleItemSuccessMessage\": \"Renamed an item inside {0}\",
        \"dxFileManager-editingRenameSingleItemErrorMessage\": \"Item was not renamed\",
        \"dxFileManager-editingRenameCommonErrorMessage\": \"Item was not renamed\",
        \"dxFileManager-editingDeleteSingleItemProcessingMessage\": \"Deleting an item from {0}\",
        \"dxFileManager-editingDeleteMultipleItemsProcessingMessage\": \"Deleting {0} items from {1}\",
        \"dxFileManager-editingDeleteSingleItemSuccessMessage\": \"Deleted an item from {0}\",
        \"dxFileManager-editingDeleteMultipleItemsSuccessMessage\": \"Deleted {0} items from {1}\",
        \"dxFileManager-editingDeleteSingleItemErrorMessage\": \"Item was not deleted\",
        \"dxFileManager-editingDeleteMultipleItemsErrorMessage\": \"{0} items were not deleted\",
        \"dxFileManager-editingDeleteCommonErrorMessage\": \"Some items were not deleted\",
        \"dxFileManager-editingMoveSingleItemProcessingMessage\": \"Moving an item to {0}\",
        \"dxFileManager-editingMoveMultipleItemsProcessingMessage\": \"Moving {0} items to {1}\",
        \"dxFileManager-editingMoveSingleItemSuccessMessage\": \"Moved an item to {0}\",
        \"dxFileManager-editingMoveMultipleItemsSuccessMessage\": \"Moved {0} items to {1}\",
        \"dxFileManager-editingMoveSingleItemErrorMessage\": \"Item was not moved\",
        \"dxFileManager-editingMoveMultipleItemsErrorMessage\": \"{0} items were not moved\",
        \"dxFileManager-editingMoveCommonErrorMessage\": \"Some items were not moved\",
        \"dxFileManager-editingCopySingleItemProcessingMessage\": \"Copying an item to {0}\",
        \"dxFileManager-editingCopyMultipleItemsProcessingMessage\": \"Copying {0} items to {1}\",
        \"dxFileManager-editingCopySingleItemSuccessMessage\": \"Copied an item to {0}\",
        \"dxFileManager-editingCopyMultipleItemsSuccessMessage\": \"Copied {0} items to {1}\",
        \"dxFileManager-editingCopySingleItemErrorMessage\": \"Item was not copied\",
        \"dxFileManager-editingCopyMultipleItemsErrorMessage\": \"{0} items were not copied\",
        \"dxFileManager-editingCopyCommonErrorMessage\": \"Some items were not copied\",
        \"dxFileManager-editingUploadSingleItemProcessingMessage\": \"Uploading an item to {0}\",
        \"dxFileManager-editingUploadMultipleItemsProcessingMessage\": \"Uploading {0} items to {1}\",
        \"dxFileManager-editingUploadSingleItemSuccessMessage\": \"Uploaded an item to {0}\",
        \"dxFileManager-editingUploadMultipleItemsSuccessMessage\": \"Uploaded {0} items to {1}\",
        \"dxFileManager-editingUploadSingleItemErrorMessage\": \"Item was not uploaded\",
        \"dxFileManager-editingUploadMultipleItemsErrorMessage\": \"{0} items were not uploaded\",
        \"dxFileManager-editingUploadCanceledMessage\": \"Canceled\",
        \"dxFileManager-listDetailsColumnCaptionName\": \"Name\",
        \"dxFileManager-listDetailsColumnCaptionDateModified\": \"Date Modified\",
        \"dxFileManager-listDetailsColumnCaptionFileSize\": \"File Size\",
        \"dxFileManager-listThumbnailsTooltipTextSize\": \"Size\",
        \"dxFileManager-listThumbnailsTooltipTextDateModified\": \"Date Modified\",
        \"dxFileManager-notificationProgressPanelTitle\": \"Progress\",
        \"dxFileManager-notificationProgressPanelEmptyListText\": \"No operations\",
        \"dxFileManager-notificationProgressPanelOperationCanceled\": \"Canceled\",
        \"dxDiagram-categoryGeneral\": \"General\",
        \"dxDiagram-categoryFlowchart\": \"Flowchart\",
        \"dxDiagram-categoryOrgChart\": \"Org Chart\",
        \"dxDiagram-categoryContainers\": \"Containers\",
        \"dxDiagram-categoryCustom\": \"Custom\",
        \"dxDiagram-commandExportToSvg\": \"Export to SVG\",
        \"dxDiagram-commandExportToPng\": \"Export to PNG\",
        \"dxDiagram-commandExportToJpg\": \"Export to JPEG\",
        \"dxDiagram-commandUndo\": \"Undo\",
        \"dxDiagram-commandRedo\": \"Redo\",
        \"dxDiagram-commandFontName\": \"Font Name\",
        \"dxDiagram-commandFontSize\": \"Font Size\",
        \"dxDiagram-commandBold\": \"Bold\",
        \"dxDiagram-commandItalic\": \"Italic\",
        \"dxDiagram-commandUnderline\": \"Underline\",
        \"dxDiagram-commandTextColor\": \"Font Color\",
        \"dxDiagram-commandLineColor\": \"Line Color\",
        \"dxDiagram-commandLineWidth\": \"Line Width\",
        \"dxDiagram-commandLineStyle\": \"Line Style\",
        \"dxDiagram-commandLineStyleSolid\": \"Solid\",
        \"dxDiagram-commandLineStyleDotted\": \"Dotted\",
        \"dxDiagram-commandLineStyleDashed\": \"Dashed\",
        \"dxDiagram-commandFillColor\": \"Fill Color\",
        \"dxDiagram-commandAlignLeft\": \"Align Left\",
        \"dxDiagram-commandAlignCenter\": \"Align Center\",
        \"dxDiagram-commandAlignRight\": \"Align Right\",
        \"dxDiagram-commandConnectorLineType\": \"Connector Line Type\",
        \"dxDiagram-commandConnectorLineStraight\": \"Straight\",
        \"dxDiagram-commandConnectorLineOrthogonal\": \"Orthogonal\",
        \"dxDiagram-commandConnectorLineStart\": \"Connector Line Start\",
        \"dxDiagram-commandConnectorLineEnd\": \"Connector Line End\",
        \"dxDiagram-commandConnectorLineNone\": \"None\",
        \"dxDiagram-commandConnectorLineArrow\": \"Arrow\",
        \"dxDiagram-commandFullscreen\": \"Full Screen\",
        \"dxDiagram-commandUnits\": \"Units\",
        \"dxDiagram-commandPageSize\": \"Page Size\",
        \"dxDiagram-commandPageOrientation\": \"Page Orientation\",
        \"dxDiagram-commandPageOrientationLandscape\": \"Landscape\",
        \"dxDiagram-commandPageOrientationPortrait\": \"Portrait\",
        \"dxDiagram-commandPageColor\": \"Page Color\",
        \"dxDiagram-commandShowGrid\": \"Show Grid\",
        \"dxDiagram-commandSnapToGrid\": \"Snap to Grid\",
        \"dxDiagram-commandGridSize\": \"Grid Size\",
        \"dxDiagram-commandZoomLevel\": \"Zoom Level\",
        \"dxDiagram-commandAutoZoom\": \"Auto Zoom\",
        \"dxDiagram-commandFitToContent\": \"Fit to Content\",
        \"dxDiagram-commandFitToWidth\": \"Fit to Width\",
        \"dxDiagram-commandAutoZoomByContent\": \"Auto Zoom by Content\",
        \"dxDiagram-commandAutoZoomByWidth\": \"Auto Zoom by Width\",
        \"dxDiagram-commandSimpleView\": \"Simple View\",
        \"dxDiagram-commandCut\": \"Cut\",
        \"dxDiagram-commandCopy\": \"Copy\",
        \"dxDiagram-commandPaste\": \"Paste\",
        \"dxDiagram-commandSelectAll\": \"Select All\",
        \"dxDiagram-commandDelete\": \"Delete\",
        \"dxDiagram-commandBringToFront\": \"Bring to Front\",
        \"dxDiagram-commandSendToBack\": \"Send to Back\",
        \"dxDiagram-commandLock\": \"Lock\",
        \"dxDiagram-commandUnlock\": \"Unlock\",
        \"dxDiagram-commandInsertShapeImage\": \"Insert Image...\",
        \"dxDiagram-commandEditShapeImage\": \"Change Image...\",
        \"dxDiagram-commandDeleteShapeImage\": \"Delete Image\",
        \"dxDiagram-commandLayoutLeftToRight\": \"Left-to-right\",
        \"dxDiagram-commandLayoutRightToLeft\": \"Right-to-left\",
        \"dxDiagram-commandLayoutTopToBottom\": \"Top-to-bottom\",
        \"dxDiagram-commandLayoutBottomToTop\": \"Bottom-to-top\",
        \"dxDiagram-unitIn\": \"in\",
        \"dxDiagram-unitCm\": \"cm\",
        \"dxDiagram-unitPx\": \"px\",
        \"dxDiagram-dialogButtonOK\": \"OK\",
        \"dxDiagram-dialogButtonCancel\": \"Cancel\",
        \"dxDiagram-dialogInsertShapeImageTitle\": \"Insert Image\",
        \"dxDiagram-dialogEditShapeImageTitle\": \"Change Image\",
        \"dxDiagram-dialogEditShapeImageSelectButton\": \"Select image\",
        \"dxDiagram-dialogEditShapeImageLabelText\": \"or drop file here\",
        \"dxDiagram-uiExport\": \"Export\",
        \"dxDiagram-uiProperties\": \"Properties\",
        \"dxDiagram-uiSettings\": \"Settings\",
        \"dxDiagram-uiShowToolbox\": \"Show Toolbox\",
        \"dxDiagram-uiSearch\": \"Search\",
        \"dxDiagram-uiStyle\": \"Style\",
        \"dxDiagram-uiLayout\": \"Layout\",
        \"dxDiagram-uiLayoutTree\": \"Tree\",
        \"dxDiagram-uiLayoutLayered\": \"Layered\",
        \"dxDiagram-uiDiagram\": \"Diagram\",
        \"dxDiagram-uiText\": \"Text\",
        \"dxDiagram-uiObject\": \"Object\",
        \"dxDiagram-uiConnector\": \"Connector\",
        \"dxDiagram-uiPage\": \"Page\",
        \"dxDiagram-shapeText\": \"Text\",
        \"dxDiagram-shapeRectangle\": \"Rectangle\",
        \"dxDiagram-shapeEllipse\": \"Ellipse\",
        \"dxDiagram-shapeCross\": \"Cross\",
        \"dxDiagram-shapeTriangle\": \"Triangle\",
        \"dxDiagram-shapeDiamond\": \"Diamond\",
        \"dxDiagram-shapeHeart\": \"Heart\",
        \"dxDiagram-shapePentagon\": \"Pentagon\",
        \"dxDiagram-shapeHexagon\": \"Hexagon\",
        \"dxDiagram-shapeOctagon\": \"Octagon\",
        \"dxDiagram-shapeStar\": \"Star\",
        \"dxDiagram-shapeArrowLeft\": \"Left Arrow\",
        \"dxDiagram-shapeArrowUp\": \"Up Arrow\",
        \"dxDiagram-shapeArrowRight\": \"Right Arrow\",
        \"dxDiagram-shapeArrowDown\": \"Down Arrow\",
        \"dxDiagram-shapeArrowUpDown\": \"Up Down Arrow\",
        \"dxDiagram-shapeArrowLeftRight\": \"Left Right Arrow\",
        \"dxDiagram-shapeProcess\": \"Process\",
        \"dxDiagram-shapeDecision\": \"Decision\",
        \"dxDiagram-shapeTerminator\": \"Terminator\",
        \"dxDiagram-shapePredefinedProcess\": \"Predefined Process\",
        \"dxDiagram-shapeDocument\": \"Document\",
        \"dxDiagram-shapeMultipleDocuments\": \"Multiple Documents\",
        \"dxDiagram-shapeManualInput\": \"Manual Input\",
        \"dxDiagram-shapePreparation\": \"Preparation\",
        \"dxDiagram-shapeData\": \"Data\",
        \"dxDiagram-shapeDatabase\": \"Database\",
        \"dxDiagram-shapeHardDisk\": \"Hard Disk\",
        \"dxDiagram-shapeInternalStorage\": \"Internal Storage\",
        \"dxDiagram-shapePaperTape\": \"Paper Tape\",
        \"dxDiagram-shapeManualOperation\": \"Manual Operation\",
        \"dxDiagram-shapeDelay\": \"Delay\",
        \"dxDiagram-shapeStoredData\": \"Stored Data\",
        \"dxDiagram-shapeDisplay\": \"Display\",
        \"dxDiagram-shapeMerge\": \"Merge\",
        \"dxDiagram-shapeConnector\": \"Connector\",
        \"dxDiagram-shapeOr\": \"Or\",
        \"dxDiagram-shapeSummingJunction\": \"Summing Junction\",
        \"dxDiagram-shapeContainerDefaultText\": \"Container\",
        \"dxDiagram-shapeVerticalContainer\": \"Vertical Container\",
        \"dxDiagram-shapeHorizontalContainer\": \"Horizontal Container\",
        \"dxDiagram-shapeCardDefaultText\": \"Person's Name\",
        \"dxDiagram-shapeCardWithImageOnLeft\": \"Card with Image on the Left\",
        \"dxDiagram-shapeCardWithImageOnTop\": \"Card with Image on the Top\",
        \"dxDiagram-shapeCardWithImageOnRight\": \"Card with Image on the Right\",
        \"dxGantt-dialogTitle\": \"Title\",
        \"dxGantt-dialogStartTitle\": \"Start\",
        \"dxGantt-dialogEndTitle\": \"End\",
        \"dxGantt-dialogProgressTitle\": \"Progress\",
        \"dxGantt-dialogResourcesTitle\": \"Resources\",
        \"dxGantt-dialogResourceManagerTitle\": \"Resource Manager\",
        \"dxGantt-dialogTaskDetailsTitle\": \"Task Details\",
        \"dxGantt-dialogEditResourceListHint\": \"Edit Resource List\",
        \"dxGantt-dialogEditNoResources\": \"No resources\",
        \"dxGantt-dialogButtonAdd\": \"Add\",
        \"dxGantt-contextMenuNewTask\": \"New Task\",
        \"dxGantt-contextMenuNewSubtask\": \"New Subtask\",
        \"dxGantt-contextMenuDeleteTask\": \"Delete Task\",
        \"dxGantt-contextMenuDeleteDependency\": \"Delete Dependency\",
        \"dxGantt-dialogTaskDeleteConfirmation\": \"Deleting a task also deletes all its dependencies and subtasks. Are you sure you want to delete this task?\",
        \"dxGantt-dialogDependencyDeleteConfirmation\": \"Are you sure you want to delete the dependency from the task?\",
        \"dxGantt-dialogResourcesDeleteConfirmation\": \"Deleting a resource also deletes it from tasks to which this resource is assigned. Are you sure you want to delete these resources? Resources: {0}\",
        \"dxGantt-dialogConstraintCriticalViolationMessage\": \"The task you are attempting to move is linked to a second task by a dependency relation. This change would conflict with dependency rules. How would you like to proceed?\",
        \"dxGantt-dialogConstraintViolationMessage\": \"The task you are attempting to move is linked to a second task by a dependency relation. How would you like to proceed?\",
        \"dxGantt-dialogCancelOperationMessage\": \"Cancel the operation\",
        \"dxGantt-dialogDeleteDependencyMessage\": \"Delete the dependency\",
        \"dxGantt-dialogMoveTaskAndKeepDependencyMessage\": \"Move the task and keep the dependency\",
        \"dxGantt-undo\": \"Undo\",
        \"dxGantt-redo\": \"Redo\",
        \"dxGantt-expandAll\": \"Expand All\",
        \"dxGantt-collapseAll\": \"Collapse All\",
        \"dxGantt-addNewTask\": \"Add New Task\",
        \"dxGantt-deleteSelectedTask\": \"Delete Selected Task\",
        \"dxGantt-zoomIn\": \"Zoom In\",
        \"dxGantt-zoomOut\": \"Zoom Out\",
        \"dxGantt-fullScreen\": \"Full Screen\",
        \"dxGantt-quarter\": \"Q{0}\"
    }
};


/***/ }),

/***/ \"./node_modules/devextreme/esm/localization/intl/number.js\":
/*!*****************************************************************!*\\
  !*** ./node_modules/devextreme/esm/localization/intl/number.js ***!
  \\*****************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _core_config__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../core/config */ \"./node_modules/devextreme/esm/core/config.js\");
/* harmony import */ var _core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../core */ \"./node_modules/devextreme/esm/localization/core.js\");
/* harmony import */ var _open_xml_currency_format__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../open_xml_currency_format */ \"./node_modules/devextreme/esm/localization/open_xml_currency_format.js\");
/* harmony import */ var _cldr_data_accounting_formats__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../cldr-data/accounting_formats */ \"./node_modules/devextreme/esm/localization/cldr-data/accounting_formats.js\");
/**
 * DevExtreme (esm/localization/intl/number.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */




var detectCurrencySymbolRegex = /([^\\s0]+)?(\\s*)0*[.,]*0*(\\s*)([^\\s0]+)?/;
var formattersCache = {};
var getFormatter = format => {
    var key = _core__WEBPACK_IMPORTED_MODULE_1__.default.locale() + \"/\" + JSON.stringify(format);
    if (!formattersCache[key]) {
        formattersCache[key] = new Intl.NumberFormat(_core__WEBPACK_IMPORTED_MODULE_1__.default.locale(), format).format
    }
    return formattersCache[key]
};
var getCurrencyFormatter = currency => new Intl.NumberFormat(_core__WEBPACK_IMPORTED_MODULE_1__.default.locale(), {
    style: \"currency\",
    currency: currency
});
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
    engine: function() {
        return \"intl\"
    },
    _formatNumberCore: function(value, format, formatConfig) {
        if (\"exponential\" === format) {
            return this.callBase.apply(this, arguments)
        }
        return getFormatter(this._normalizeFormatConfig(format, formatConfig, value))(value)
    },
    _normalizeFormatConfig: function(format, formatConfig, value) {
        var config;
        if (\"decimal\" === format) {
            config = {
                minimumIntegerDigits: formatConfig.precision || void 0,
                useGrouping: false,
                maximumFractionDigits: String(value).length,
                round: value < 0 ? \"ceil\" : \"floor\"
            }
        } else {
            config = this._getPrecisionConfig(formatConfig.precision)
        }
        if (\"percent\" === format) {
            config.style = \"percent\"
        } else if (\"currency\" === format) {
            config.style = \"currency\";
            config.currency = formatConfig.currency || (0,_core_config__WEBPACK_IMPORTED_MODULE_0__.default)().defaultCurrency
        }
        return config
    },
    _getPrecisionConfig: function(precision) {
        var config;
        if (null === precision) {
            config = {
                minimumFractionDigits: 0,
                maximumFractionDigits: 20
            }
        } else {
            config = {
                minimumFractionDigits: precision || 0,
                maximumFractionDigits: precision || 0
            }
        }
        return config
    },
    format: function(value, _format) {
        if (\"number\" !== typeof value) {
            return value
        }
        _format = this._normalizeFormat(_format);
        if (\"default\" === _format.currency) {
            _format.currency = (0,_core_config__WEBPACK_IMPORTED_MODULE_0__.default)().defaultCurrency
        }
        if (!_format || \"function\" !== typeof _format && !_format.type && !_format.formatter) {
            return getFormatter(_format)(value)
        }
        return this.callBase.apply(this, arguments)
    },
    _getCurrencySymbolInfo: function(currency) {
        var formatter = getCurrencyFormatter(currency);
        return this._extractCurrencySymbolInfo(formatter.format(0))
    },
    _extractCurrencySymbolInfo: function(currencyValueString) {
        var match = detectCurrencySymbolRegex.exec(currencyValueString) || [];
        var position = match[1] ? \"before\" : \"after\";
        var symbol = match[1] || match[4] || \"\";
        var delimiter = match[2] || match[3] || \"\";
        return {
            position: position,
            symbol: symbol,
            delimiter: delimiter
        }
    },
    getCurrencySymbol: function(currency) {
        if (!currency) {
            currency = (0,_core_config__WEBPACK_IMPORTED_MODULE_0__.default)().defaultCurrency
        }
        var symbolInfo = this._getCurrencySymbolInfo(currency);
        return {
            symbol: symbolInfo.symbol
        }
    },
    getOpenXmlCurrencyFormat: function(currency) {
        var targetCurrency = currency || (0,_core_config__WEBPACK_IMPORTED_MODULE_0__.default)().defaultCurrency;
        var currencySymbol = this._getCurrencySymbolInfo(targetCurrency).symbol;
        var closestAccountingFormat = _core__WEBPACK_IMPORTED_MODULE_1__.default.getValueByClosestLocale(locale => _cldr_data_accounting_formats__WEBPACK_IMPORTED_MODULE_3__.default[locale]);
        return (0,_open_xml_currency_format__WEBPACK_IMPORTED_MODULE_2__.default)(currencySymbol, closestAccountingFormat)
    }
});


/***/ }),

/***/ \"./node_modules/devextreme/esm/localization/ldml/number.js\":
/*!*****************************************************************!*\\
  !*** ./node_modules/devextreme/esm/localization/ldml/number.js ***!
  \\*****************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"getFormatter\": () => (/* binding */ getFormatter),
/* harmony export */   \"getFormat\": () => (/* binding */ getFormat)
/* harmony export */ });
/* harmony import */ var _core_utils_math__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../core/utils/math */ \"./node_modules/devextreme/esm/core/utils/math.js\");
/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils */ \"./node_modules/devextreme/esm/localization/utils.js\");
/**
 * DevExtreme (esm/localization/ldml/number.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */


var DEFAULT_CONFIG = {
    thousandsSeparator: \",\",
    decimalSeparator: \".\"
};
var ESCAPING_CHAR = \"'\";
var MAXIMUM_NUMBER_LENGTH = 15;

function getGroupSizes(formatString) {
    return formatString.split(\",\").slice(1).map((function(str) {
        return str.split(\"\").filter((function(char) {
            return \"#\" === char || \"0\" === char
        })).length
    }))
}

function getSignParts(format) {
    var signParts = format.split(\";\");
    if (1 === signParts.length) {
        signParts.push(\"-\" + signParts[0])
    }
    return signParts
}

function reverseString(str) {
    return str.toString().split(\"\").reverse().join(\"\")
}

function isPercentFormat(format) {
    return -1 !== format.indexOf(\"%\") && !format.match(/'[^']*%[^']*'/g)
}

function removeStubs(str) {
    return str.replace(/'.+'/g, \"\")
}

function getNonRequiredDigitCount(floatFormat) {
    if (!floatFormat) {
        return 0
    }
    var format = removeStubs(floatFormat);
    return format.length - format.replace(/[#]/g, \"\").length
}

function getRequiredDigitCount(floatFormat) {
    if (!floatFormat) {
        return 0
    }
    var format = removeStubs(floatFormat);
    return format.length - format.replace(/[0]/g, \"\").length
}

function normalizeValueString(valuePart, minDigitCount, maxDigitCount) {
    if (!valuePart) {
        return \"\"
    }
    if (valuePart.length > maxDigitCount) {
        valuePart = valuePart.substr(0, maxDigitCount)
    }
    while (valuePart.length > minDigitCount && \"0\" === valuePart.slice(-1)) {
        valuePart = valuePart.substr(0, valuePart.length - 1)
    }
    while (valuePart.length < minDigitCount) {
        valuePart += \"0\"
    }
    return valuePart
}

function applyGroups(valueString, groupSizes, thousandsSeparator) {
    if (!groupSizes.length) {
        return valueString
    }
    var groups = [];
    var index = 0;
    while (valueString) {
        var groupSize = groupSizes[index];
        if (!groupSize) {
            break
        }
        groups.push(valueString.slice(0, groupSize));
        valueString = valueString.slice(groupSize);
        if (index < groupSizes.length - 1) {
            index++
        }
    }
    return groups.join(thousandsSeparator)
}

function formatNumberPart(format, valueString) {
    return format.split(ESCAPING_CHAR).map((function(formatPart, escapeIndex) {
        var isEscape = escapeIndex % 2;
        if (!formatPart && isEscape) {
            return ESCAPING_CHAR
        }
        return isEscape ? formatPart : formatPart.replace(/[,#0]+/, valueString)
    })).join(\"\")
}

function getFloatPointIndex(format) {
    var isEscape = false;
    for (var index = 0; index < format.length; index++) {
        if (\"'\" === format[index]) {
            isEscape = !isEscape
        }
        if (\".\" === format[index] && !isEscape) {
            return index
        }
    }
    return format.length
}
function getFormatter(format, config) {
    config = config || DEFAULT_CONFIG;
    return function(value) {
        if (\"number\" !== typeof value || isNaN(value)) {
            return \"\"
        }
        var signFormatParts = getSignParts(format);
        var isPositiveZero = 1 / value === 1 / 0;
        var isPositive = value > 0 || isPositiveZero;
        var numberFormat = signFormatParts[isPositive ? 0 : 1];
        if (isPercentFormat(numberFormat)) {
            value *= 100
        }
        if (!isPositive) {
            value = -value
        }
        var floatPointIndex = getFloatPointIndex(numberFormat);
        var floatFormatParts = [numberFormat.substr(0, floatPointIndex), numberFormat.substr(floatPointIndex + 1)];
        var minFloatPrecision = getRequiredDigitCount(floatFormatParts[1]);
        var maxFloatPrecision = minFloatPrecision + getNonRequiredDigitCount(floatFormatParts[1]);
        var minIntegerPrecision = getRequiredDigitCount(floatFormatParts[0]);
        var maxIntegerPrecision = getNonRequiredDigitCount(floatFormatParts[0]) || config.unlimitedIntegerDigits ? void 0 : minIntegerPrecision;
        var integerLength = Math.floor(value).toString().length;
        var floatPrecision = (0,_core_utils_math__WEBPACK_IMPORTED_MODULE_0__.fitIntoRange)(maxFloatPrecision, 0, MAXIMUM_NUMBER_LENGTH - integerLength);
        var groupSizes = getGroupSizes(floatFormatParts[0]).reverse();
        var valueParts = (0,_utils__WEBPACK_IMPORTED_MODULE_1__.toFixed)(value, floatPrecision < 0 ? 0 : floatPrecision).split(\".\");
        var valueIntegerPart = normalizeValueString(reverseString(valueParts[0]), minIntegerPrecision, maxIntegerPrecision);
        var valueFloatPart = normalizeValueString(valueParts[1], minFloatPrecision, maxFloatPrecision);
        valueIntegerPart = applyGroups(valueIntegerPart, groupSizes, config.thousandsSeparator);
        var integerString = reverseString(formatNumberPart(reverseString(floatFormatParts[0]), valueIntegerPart));
        var floatString = maxFloatPrecision ? formatNumberPart(floatFormatParts[1], valueFloatPart) : \"\";
        var result = integerString + (floatString.match(/\\d/) ? config.decimalSeparator : \"\") + floatString;
        return result
    }
}

function parseValue(text, isPercent, isNegative) {
    var value = (isPercent ? .01 : 1) * parseFloat(text) || 0;
    return isNegative ? -value : value
}

function prepareValueText(valueText, formatter, isPercent, isIntegerPart) {
    var nextValueText = valueText;
    var char;
    var text;
    var nextText;
    do {
        if (nextText) {
            char = text.length === nextText.length ? \"0\" : \"1\";
            valueText = isIntegerPart ? char + valueText : valueText + char
        }
        text = nextText || formatter(parseValue(nextValueText, isPercent));
        nextValueText = isIntegerPart ? \"1\" + nextValueText : nextValueText + \"1\";
        nextText = formatter(parseValue(nextValueText, isPercent))
    } while (text !== nextText && (isIntegerPart ? text.length === nextText.length : text.length <= nextText.length));
    if (isIntegerPart && nextText.length > text.length) {
        var hasGroups = -1 === formatter(12345).indexOf(\"12345\");
        do {
            valueText = \"1\" + valueText
        } while (hasGroups && parseValue(valueText, isPercent) < 1e5)
    }
    return valueText
}

function getFormatByValueText(valueText, formatter, isPercent, isNegative) {
    var format = formatter(parseValue(valueText, isPercent, isNegative));
    var valueTextParts = valueText.split(\".\");
    var valueTextWithModifiedFloat = valueTextParts[0] + \".3\" + valueTextParts[1].slice(1);
    var valueWithModifiedFloat = parseValue(valueTextWithModifiedFloat, isPercent, isNegative);
    var decimalSeparatorIndex = formatter(valueWithModifiedFloat).indexOf(\"3\") - 1;
    format = format.replace(/(\\d)\\D(\\d)/g, \"\$1,\$2\");
    if (decimalSeparatorIndex >= 0) {
        format = format.slice(0, decimalSeparatorIndex) + \".\" + format.slice(decimalSeparatorIndex + 1)
    }
    format = format.replace(/1+/, \"1\").replace(/1/g, \"#\");
    if (!isPercent) {
        format = format.replace(\"%\", \"'%'\")
    }
    return format
}
function getFormat(formatter) {
    var valueText = \".\";
    var isPercent = formatter(1).indexOf(\"100\") >= 0;
    valueText = prepareValueText(valueText, formatter, isPercent, true);
    valueText = prepareValueText(valueText, formatter, isPercent, false);
    var positiveFormat = getFormatByValueText(valueText, formatter, isPercent, false);
    var negativeFormat = getFormatByValueText(valueText, formatter, isPercent, true);
    return negativeFormat === \"-\" + positiveFormat ? positiveFormat : positiveFormat + \";\" + negativeFormat
}


/***/ }),

/***/ \"./node_modules/devextreme/esm/localization/message.js\":
/*!*************************************************************!*\\
  !*** ./node_modules/devextreme/esm/localization/message.js ***!
  \\*************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _core_renderer__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core/renderer */ \"./node_modules/devextreme/esm/core/renderer.js\");
/* harmony import */ var _core_utils_dependency_injector__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../core/utils/dependency_injector */ \"./node_modules/devextreme/esm/core/utils/dependency_injector.js\");
/* harmony import */ var _core_utils_extend__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../core/utils/extend */ \"./node_modules/devextreme/esm/core/utils/extend.js\");
/* harmony import */ var _core_utils_iterator__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../core/utils/iterator */ \"./node_modules/devextreme/esm/core/utils/iterator.js\");
/* harmony import */ var _core_utils_string__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../core/utils/string */ \"./node_modules/devextreme/esm/core/utils/string.js\");
/* harmony import */ var _core_utils_inflector__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../core/utils/inflector */ \"./node_modules/devextreme/esm/core/utils/inflector.js\");
/* harmony import */ var _core__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./core */ \"./node_modules/devextreme/esm/localization/core.js\");
/* harmony import */ var _default_messages__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./default_messages */ \"./node_modules/devextreme/esm/localization/default_messages.js\");
/**
 * DevExtreme (esm/localization/message.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */








var baseDictionary = (0,_core_utils_extend__WEBPACK_IMPORTED_MODULE_2__.extend)(true, {}, _default_messages__WEBPACK_IMPORTED_MODULE_7__.defaultMessages);
var getDataByLocale = (localeData, locale) => localeData[locale] || {};
var newMessages = {};
var messageLocalization = (0,_core_utils_dependency_injector__WEBPACK_IMPORTED_MODULE_1__.default)({
    engine: function() {
        return \"base\"
    },
    _dictionary: baseDictionary,
    load: function(messages) {
        (0,_core_utils_extend__WEBPACK_IMPORTED_MODULE_2__.extend)(true, this._dictionary, messages)
    },
    _localizablePrefix: \"@\",
    setup: function(localizablePrefix) {
        this._localizablePrefix = localizablePrefix
    },
    localizeString: function(text) {
        var that = this;
        var regex = new RegExp(\"(^|[^a-zA-Z_0-9\" + that._localizablePrefix + \"-]+)(\" + that._localizablePrefix + \"{1,2})([a-zA-Z_0-9-]+)\", \"g\");
        var escapeString = that._localizablePrefix + that._localizablePrefix;
        return text.replace(regex, (str, prefix, escape, localizationKey) => {
            var defaultResult = that._localizablePrefix + localizationKey;
            var result;
            if (escape !== escapeString) {
                result = that.format(localizationKey)
            }
            if (!result) {
                newMessages[localizationKey] = (0,_core_utils_inflector__WEBPACK_IMPORTED_MODULE_5__.humanize)(localizationKey)
            }
            return prefix + (result || defaultResult)
        })
    },
    localizeNode: function(node) {
        var that = this;
        (0,_core_renderer__WEBPACK_IMPORTED_MODULE_0__.default)(node).each((index, nodeItem) => {
            if (!nodeItem.nodeType) {
                return
            }
            if (3 === nodeItem.nodeType) {
                nodeItem.nodeValue = that.localizeString(nodeItem.nodeValue)
            } else if (!(0,_core_renderer__WEBPACK_IMPORTED_MODULE_0__.default)(nodeItem).is(\"iframe\")) {
                (0,_core_utils_iterator__WEBPACK_IMPORTED_MODULE_3__.each)(nodeItem.attributes || [], (index, attr) => {
                    if (\"string\" === typeof attr.value) {
                        var localizedValue = that.localizeString(attr.value);
                        if (attr.value !== localizedValue) {
                            attr.value = localizedValue
                        }
                    }
                });
                (0,_core_renderer__WEBPACK_IMPORTED_MODULE_0__.default)(nodeItem).contents().each((index, node) => {
                    that.localizeNode(node)
                })
            }
        })
    },
    getMessagesByLocales: function() {
        return this._dictionary
    },
    getDictionary: function(onlyNew) {
        if (onlyNew) {
            return newMessages
        }
        return (0,_core_utils_extend__WEBPACK_IMPORTED_MODULE_2__.extend)({}, newMessages, this.getMessagesByLocales()[_core__WEBPACK_IMPORTED_MODULE_6__.default.locale()])
    },
    getFormatter: function(key) {
        return this._getFormatterBase(key) || this._getFormatterBase(key, \"en\")
    },
    _getFormatterBase: function(key, locale) {
        var message = _core__WEBPACK_IMPORTED_MODULE_6__.default.getValueByClosestLocale(locale => getDataByLocale(this._dictionary, locale)[key]);
        if (message) {
            return function() {
                var args = 1 === arguments.length && Array.isArray(arguments[0]) ? arguments[0].slice(0) : Array.prototype.slice.call(arguments, 0);
                args.unshift(message);
                return _core_utils_string__WEBPACK_IMPORTED_MODULE_4__.format.apply(this, args)
            }
        }
    },
    format: function(key) {
        var formatter = this.getFormatter(key);
        var values = Array.prototype.slice.call(arguments, 1);
        return formatter && formatter.apply(this, values) || \"\"
    }
});
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (messageLocalization);


/***/ }),

/***/ \"./node_modules/devextreme/esm/localization/number.js\":
/*!************************************************************!*\\
  !*** ./node_modules/devextreme/esm/localization/number.js ***!
  \\************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _core_utils_dependency_injector__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core/utils/dependency_injector */ \"./node_modules/devextreme/esm/core/utils/dependency_injector.js\");
/* harmony import */ var _core_utils_array__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../core/utils/array */ \"./node_modules/devextreme/esm/core/utils/array.js\");
/* harmony import */ var _core_utils_common__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../core/utils/common */ \"./node_modules/devextreme/esm/core/utils/common.js\");
/* harmony import */ var _core_utils_iterator__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../core/utils/iterator */ \"./node_modules/devextreme/esm/core/utils/iterator.js\");
/* harmony import */ var _core_utils_type__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../core/utils/type */ \"./node_modules/devextreme/esm/core/utils/type.js\");
/* harmony import */ var _ldml_number__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./ldml/number */ \"./node_modules/devextreme/esm/localization/ldml/number.js\");
/* harmony import */ var _core_config__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../core/config */ \"./node_modules/devextreme/esm/core/config.js\");
/* harmony import */ var _core_errors__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../core/errors */ \"./node_modules/devextreme/esm/core/errors.js\");
/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./utils */ \"./node_modules/devextreme/esm/localization/utils.js\");
/* harmony import */ var _currency__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./currency */ \"./node_modules/devextreme/esm/localization/currency.js\");
/* harmony import */ var _intl_number__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./intl/number */ \"./node_modules/devextreme/esm/localization/intl/number.js\");
/**
 * DevExtreme (esm/localization/number.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */











var hasIntl = \"undefined\" !== typeof Intl;
var MAX_LARGE_NUMBER_POWER = 4;
var DECIMAL_BASE = 10;
var NUMERIC_FORMATS = [\"currency\", \"fixedpoint\", \"exponential\", \"percent\", \"decimal\"];
var LargeNumberFormatPostfixes = {
    1: \"K\",
    2: \"M\",
    3: \"B\",
    4: \"T\"
};
var LargeNumberFormatPowers = {
    largenumber: \"auto\",
    thousands: 1,
    millions: 2,
    billions: 3,
    trillions: 4
};
var numberLocalization = (0,_core_utils_dependency_injector__WEBPACK_IMPORTED_MODULE_0__.default)({
    engine: function() {
        return \"base\"
    },
    numericFormats: NUMERIC_FORMATS,
    defaultLargeNumberFormatPostfixes: LargeNumberFormatPostfixes,
    _parseNumberFormatString: function(formatType) {
        var formatObject = {};
        if (!formatType || \"string\" !== typeof formatType) {
            return
        }
        var formatList = formatType.toLowerCase().split(\" \");
        (0,_core_utils_iterator__WEBPACK_IMPORTED_MODULE_3__.each)(formatList, (index, value) => {
            if ((0,_core_utils_array__WEBPACK_IMPORTED_MODULE_1__.inArray)(value, NUMERIC_FORMATS) > -1) {
                formatObject.formatType = value
            } else if (value in LargeNumberFormatPowers) {
                formatObject.power = LargeNumberFormatPowers[value]
            }
        });
        if (formatObject.power && !formatObject.formatType) {
            formatObject.formatType = \"fixedpoint\"
        }
        if (formatObject.formatType) {
            return formatObject
        }
    },
    _calculateNumberPower: function(value, base, minPower, maxPower) {
        var number = Math.abs(value);
        var power = 0;
        if (number > 1) {
            while (number && number >= base && (void 0 === maxPower || power < maxPower)) {
                power++;
                number /= base
            }
        } else if (number > 0 && number < 1) {
            while (number < 1 && (void 0 === minPower || power > minPower)) {
                power--;
                number *= base
            }
        }
        return power
    },
    _getNumberByPower: function(number, power, base) {
        var result = number;
        while (power > 0) {
            result /= base;
            power--
        }
        while (power < 0) {
            result *= base;
            power++
        }
        return result
    },
    _formatNumber: function(value, formatObject, formatConfig) {
        if (\"auto\" === formatObject.power) {
            formatObject.power = this._calculateNumberPower(value, 1e3, 0, MAX_LARGE_NUMBER_POWER)
        }
        if (formatObject.power) {
            value = this._getNumberByPower(value, formatObject.power, 1e3)
        }
        var powerPostfix = this.defaultLargeNumberFormatPostfixes[formatObject.power] || \"\";
        var result = this._formatNumberCore(value, formatObject.formatType, formatConfig);
        result = result.replace(/(\\d|.\$)(\\D*)\$/, \"\$1\" + powerPostfix + \"\$2\");
        return result
    },
    _formatNumberExponential: function(value, formatConfig) {
        var power = this._calculateNumberPower(value, DECIMAL_BASE);
        var number = this._getNumberByPower(value, power, DECIMAL_BASE);
        if (void 0 === formatConfig.precision) {
            formatConfig.precision = 1
        }
        if (number.toFixed(formatConfig.precision || 0) >= DECIMAL_BASE) {
            power++;
            number /= DECIMAL_BASE
        }
        var powString = (power >= 0 ? \"+\" : \"\") + power.toString();
        return this._formatNumberCore(number, \"fixedpoint\", formatConfig) + \"E\" + powString
    },
    _addZeroes: function(value, precision) {
        var multiplier = Math.pow(10, precision);
        var sign = value < 0 ? \"-\" : \"\";
        value = (Math.abs(value) * multiplier >>> 0) / multiplier;
        var result = value.toString();
        while (result.length < precision) {
            result = \"0\" + result
        }
        return sign + result
    },
    _addGroupSeparators: function(value) {
        var parts = value.toString().split(\".\");
        return parts[0].replace(/\\B(?=(\\d{3})+(?!\\d))/g, (0,_core_config__WEBPACK_IMPORTED_MODULE_6__.default)().thousandsSeparator) + (parts[1] ? (0,_core_config__WEBPACK_IMPORTED_MODULE_6__.default)().decimalSeparator + parts[1] : \"\")
    },
    _formatNumberCore: function(value, format, formatConfig) {
        if (\"exponential\" === format) {
            return this._formatNumberExponential(value, formatConfig)
        }
        if (\"decimal\" !== format && null !== formatConfig.precision) {
            formatConfig.precision = formatConfig.precision || 0
        }
        if (\"percent\" === format) {
            value *= 100
        }
        if (void 0 !== formatConfig.precision) {
            if (\"decimal\" === format) {
                value = this._addZeroes(value, formatConfig.precision)
            } else {
                value = null === formatConfig.precision ? value.toPrecision() : (0,_utils__WEBPACK_IMPORTED_MODULE_8__.toFixed)(value, formatConfig.precision)
            }
        }
        if (\"decimal\" !== format) {
            value = this._addGroupSeparators(value)
        } else {
            value = value.toString().replace(\".\", (0,_core_config__WEBPACK_IMPORTED_MODULE_6__.default)().decimalSeparator)
        }
        if (\"percent\" === format) {
            value += \"%\"
        }
        return value
    },
    _normalizeFormat: function(format) {
        if (!format) {
            return {}
        }
        if (\"function\" === typeof format) {
            return format
        }
        if (!(0,_core_utils_type__WEBPACK_IMPORTED_MODULE_4__.isPlainObject)(format)) {
            format = {
                type: format
            }
        }
        return format
    },
    _getSeparators: function() {
        return {
            decimalSeparator: this.getDecimalSeparator(),
            thousandsSeparator: this.getThousandsSeparator()
        }
    },
    getThousandsSeparator: function() {
        return this.format(1e4, \"fixedPoint\")[2]
    },
    getDecimalSeparator: function() {
        return this.format(1.2, {
            type: \"fixedPoint\",
            precision: 1
        })[1]
    },
    convertDigits: function(value, toStandard) {
        var digits = this.format(90, \"decimal\");
        if (\"string\" !== typeof value || \"0\" === digits[1]) {
            return value
        }
        var fromFirstDigit = toStandard ? digits[1] : \"0\";
        var toFirstDigit = toStandard ? \"0\" : digits[1];
        var fromLastDigit = toStandard ? digits[0] : \"9\";
        var regExp = new RegExp(\"[\" + fromFirstDigit + \"-\" + fromLastDigit + \"]\", \"g\");
        return value.replace(regExp, char => String.fromCharCode(char.charCodeAt(0) + (toFirstDigit.charCodeAt(0) - fromFirstDigit.charCodeAt(0))))
    },
    getNegativeEtalonRegExp: function(format) {
        var separators = this._getSeparators();
        var digitalRegExp = new RegExp(\"[0-9\" + (0,_core_utils_common__WEBPACK_IMPORTED_MODULE_2__.escapeRegExp)(separators.decimalSeparator + separators.thousandsSeparator) + \"]+\", \"g\");
        var negativeEtalon = this.format(-1, format).replace(digitalRegExp, \"1\");
        [\"\\\\\", \"(\", \")\", \"[\", \"]\", \"*\", \"+\", \"\$\", \"^\", \"?\", \"|\", \"{\", \"}\"].forEach(char => {
            negativeEtalon = negativeEtalon.replace(char, \"\\\\\".concat(char))
        });
        negativeEtalon = negativeEtalon.replace(\" \", \"\\\\s\");
        negativeEtalon = negativeEtalon.replace(\"1\", \".+\");
        return new RegExp(negativeEtalon, \"g\")
    },
    getSign: function(text, format) {
        if (\"-\" === text.replace(/[^0-9-]/g, \"\").charAt(0)) {
            return -1
        }
        if (!format) {
            return 1
        }
        var negativeEtalon = this.getNegativeEtalonRegExp(format);
        return text.match(negativeEtalon) ? -1 : 1
    },
    format: function(value, _format) {
        if (\"number\" !== typeof value) {
            return value
        }
        if (\"number\" === typeof _format) {
            return value
        }
        _format = _format && _format.formatter || _format;
        if (\"function\" === typeof _format) {
            return _format(value)
        }
        _format = this._normalizeFormat(_format);
        if (!_format.type) {
            _format.type = \"decimal\"
        }
        var numberConfig = this._parseNumberFormatString(_format.type);
        if (!numberConfig) {
            var formatterConfig = this._getSeparators();
            formatterConfig.unlimitedIntegerDigits = _format.unlimitedIntegerDigits;
            return this.convertDigits((0,_ldml_number__WEBPACK_IMPORTED_MODULE_5__.getFormatter)(_format.type, formatterConfig)(value))
        }
        return this._formatNumber(value, numberConfig, _format)
    },
    parse: function(text, format) {
        if (!text) {
            return
        }
        if (format && format.parser) {
            return format.parser(text)
        }
        text = this.convertDigits(text, true);
        if (format && \"string\" !== typeof format) {
            _core_errors__WEBPACK_IMPORTED_MODULE_7__.default.log(\"W0011\")
        }
        var decimalSeparator = this.getDecimalSeparator();
        var regExp = new RegExp(\"[^0-9\" + (0,_core_utils_common__WEBPACK_IMPORTED_MODULE_2__.escapeRegExp)(decimalSeparator) + \"]\", \"g\");
        var cleanedText = text.replace(regExp, \"\").replace(decimalSeparator, \".\").replace(/\\.\$/g, \"\");
        if (\".\" === cleanedText || \"\" === cleanedText) {
            return null
        }
        if (this._calcSignificantDigits(cleanedText) > 15) {
            return NaN
        }
        var parsed = +cleanedText * this.getSign(text, format);
        format = this._normalizeFormat(format);
        var formatConfig = this._parseNumberFormatString(format.type);
        var power = null === formatConfig || void 0 === formatConfig ? void 0 : formatConfig.power;
        if (power) {
            if (\"auto\" === power) {
                var match = text.match(/\\d(K|M|B|T)/);
                if (match) {
                    power = (0,_core_utils_array__WEBPACK_IMPORTED_MODULE_1__.find)(Object.keys(LargeNumberFormatPostfixes), power => LargeNumberFormatPostfixes[power] === match[1])
                }
            }
            parsed *= Math.pow(10, 3 * power)
        }
        if (\"percent\" === (null === formatConfig || void 0 === formatConfig ? void 0 : formatConfig.formatType)) {
            parsed /= 100
        }
        return parsed
    },
    _calcSignificantDigits: function(text) {
        var [integer, fractional] = text.split(\".\");
        var calcDigitsAfterLeadingZeros = digits => {
            var index = -1;
            for (var i = 0; i < digits.length; i++) {
                if (\"0\" !== digits[i]) {
                    index = i;
                    break
                }
            }
            return index > -1 ? digits.length - index : 0
        };
        var result = 0;
        if (integer) {
            result += calcDigitsAfterLeadingZeros(integer.split(\"\"))
        }
        if (fractional) {
            result += calcDigitsAfterLeadingZeros(fractional.split(\"\").reverse())
        }
        return result
    }
});
numberLocalization.inject(_currency__WEBPACK_IMPORTED_MODULE_9__.default);
if (hasIntl) {
    numberLocalization.inject(_intl_number__WEBPACK_IMPORTED_MODULE_10__.default)
}
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (numberLocalization);


/***/ }),

/***/ \"./node_modules/devextreme/esm/localization/open_xml_currency_format.js\":
/*!******************************************************************************!*\\
  !*** ./node_modules/devextreme/esm/localization/open_xml_currency_format.js ***!
  \\******************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/**
 * DevExtreme (esm/localization/open_xml_currency_format.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((currencySymbol, accountingFormat) => {
    if (!accountingFormat) {
        return
    }
    var encodedCurrencySymbol = currencySymbol;
    if (\"string\" === typeof currencySymbol) {
        encodedCurrencySymbol = \"\";
        for (var i = 0; i < currencySymbol.length; i++) {
            if (\"\$\" !== currencySymbol[i]) {
                encodedCurrencySymbol += \"\\\\\"
            }
            encodedCurrencySymbol += currencySymbol[i]
        }
    }
    var encodeSymbols = {
        \".00\": \"{0}\",
        \"'\": \"\\\\'\",
        \"\\\\(\": \"\\\\(\",
        \"\\\\)\": \"\\\\)\",
        \" \": \"\\\\ \",
        '\"': \"&quot;\",
        \"\\\\\\xa4\": encodedCurrencySymbol
    };
    var result = accountingFormat.split(\";\");
    for (var _i = 0; _i < result.length; _i++) {
        for (var symbol in encodeSymbols) {
            if (Object.prototype.hasOwnProperty.call(encodeSymbols, symbol)) {
                result[_i] = result[_i].replace(new RegExp(symbol, \"g\"), encodeSymbols[symbol])
            }
        }
    }
    return 2 === result.length ? result[0] + \"_);\" + result[1] : result[0]
});


/***/ }),

/***/ \"./node_modules/devextreme/esm/localization/parentLocale.js\":
/*!******************************************************************!*\\
  !*** ./node_modules/devextreme/esm/localization/parentLocale.js ***!
  \\******************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/**
 * DevExtreme (esm/localization/parentLocale.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */
var PARENT_LOCALE_SEPARATOR = \"-\";
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((parentLocales, locale) => {
    var parentLocale = parentLocales[locale];
    if (parentLocale) {
        return \"root\" !== parentLocale && parentLocale
    }
    return locale.substr(0, locale.lastIndexOf(PARENT_LOCALE_SEPARATOR))
});


/***/ }),

/***/ \"./node_modules/devextreme/esm/localization/utils.js\":
/*!***********************************************************!*\\
  !*** ./node_modules/devextreme/esm/localization/utils.js ***!
  \\***********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"toFixed\": () => (/* binding */ toFixed)
/* harmony export */ });
/* harmony import */ var _core_utils_math__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core/utils/math */ \"./node_modules/devextreme/esm/core/utils/math.js\");
/**
 * DevExtreme (esm/localization/utils.js)
 * Version: 21.1.4
 * Build date: Mon Jun 21 2021
 *
 * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */

var DECIMAL_BASE = 10;

function roundByAbs(value) {
    var valueSign = (0,_core_utils_math__WEBPACK_IMPORTED_MODULE_0__.sign)(value);
    return valueSign * Math.round(Math.abs(value))
}

function adjustValue(value, precision) {
    var precisionMultiplier = Math.pow(DECIMAL_BASE, precision);
    var roundMultiplier = precisionMultiplier * DECIMAL_BASE;
    var intermediateValue = value * roundMultiplier / DECIMAL_BASE;
    return roundByAbs(intermediateValue) / precisionMultiplier
}
function toFixed(value, precision) {
    var valuePrecision = precision || 0;
    var adjustedValue = valuePrecision > 0 ? adjustValue(...arguments) : value;
    return adjustedValue.toFixed(valuePrecision)
}


/***/ })

}]);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZGV2ZXh0cmVtZS9lc20vY29yZS9jbGFzcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZGV2ZXh0cmVtZS9lc20vY29yZS9jb25maWcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2RldmV4dHJlbWUvZXNtL2NvcmUvZG9tX2FkYXB0ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2RldmV4dHJlbWUvZXNtL2NvcmUvZWxlbWVudF9kYXRhLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9kZXZleHRyZW1lL2VzbS9jb3JlL2Vycm9ycy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZGV2ZXh0cmVtZS9lc20vY29yZS9ndWlkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9kZXZleHRyZW1lL2VzbS9jb3JlL21lbW9yaXplZF9jYWxsYmFja3MuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2RldmV4dHJlbWUvZXNtL2NvcmUvcG9seWZpbGxzL3dlYWtfbWFwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9kZXZleHRyZW1lL2VzbS9jb3JlL3JlbmRlcmVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9kZXZleHRyZW1lL2VzbS9jb3JlL3JlbmRlcmVyX2Jhc2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2RldmV4dHJlbWUvZXNtL2NvcmUvdXRpbHMvYXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2RldmV4dHJlbWUvZXNtL2NvcmUvdXRpbHMvY2FsbF9vbmNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9kZXZleHRyZW1lL2VzbS9jb3JlL3V0aWxzL2NhbGxiYWNrcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZGV2ZXh0cmVtZS9lc20vY29yZS91dGlscy9jb21tb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2RldmV4dHJlbWUvZXNtL2NvcmUvdXRpbHMvY29uc29sZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZGV2ZXh0cmVtZS9lc20vY29yZS91dGlscy9kYXRhLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9kZXZleHRyZW1lL2VzbS9jb3JlL3V0aWxzL2RlZmVycmVkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9kZXZleHRyZW1lL2VzbS9jb3JlL3V0aWxzL2RlcGVuZGVuY3lfaW5qZWN0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2RldmV4dHJlbWUvZXNtL2NvcmUvdXRpbHMvZXJyb3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2RldmV4dHJlbWUvZXNtL2NvcmUvdXRpbHMvZXh0ZW5kLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9kZXZleHRyZW1lL2VzbS9jb3JlL3V0aWxzL2h0bWxfcGFyc2VyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9kZXZleHRyZW1lL2VzbS9jb3JlL3V0aWxzL2luZmxlY3Rvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZGV2ZXh0cmVtZS9lc20vY29yZS91dGlscy9pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZGV2ZXh0cmVtZS9lc20vY29yZS91dGlscy9tYXRoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9kZXZleHRyZW1lL2VzbS9jb3JlL3V0aWxzL29iamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZGV2ZXh0cmVtZS9lc20vY29yZS91dGlscy9zaXplLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9kZXZleHRyZW1lL2VzbS9jb3JlL3V0aWxzL3N0cmluZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZGV2ZXh0cmVtZS9lc20vY29yZS91dGlscy9zdHlsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZGV2ZXh0cmVtZS9lc20vY29yZS91dGlscy90eXBlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9kZXZleHRyZW1lL2VzbS9jb3JlL3V0aWxzL3ZhcmlhYmxlX3dyYXBwZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2RldmV4dHJlbWUvZXNtL2NvcmUvdXRpbHMvd2luZG93LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9kZXZleHRyZW1lL2VzbS9jb3JlL3ZlcnNpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2RldmV4dHJlbWUvZXNtL2V2ZW50cy9jb3JlL2V2ZW50X3JlZ2lzdHJhdG9yX2NhbGxiYWNrcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZGV2ZXh0cmVtZS9lc20vZXZlbnRzL2NvcmUvZXZlbnRzX2VuZ2luZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZGV2ZXh0cmVtZS9lc20vZXZlbnRzL2NvcmUvaG9va190b3VjaF9wcm9wcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZGV2ZXh0cmVtZS9lc20vbG9jYWxpemF0aW9uL2NsZHItZGF0YS9hY2NvdW50aW5nX2Zvcm1hdHMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2RldmV4dHJlbWUvZXNtL2xvY2FsaXphdGlvbi9jbGRyLWRhdGEvcGFyZW50X2xvY2FsZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2RldmV4dHJlbWUvZXNtL2xvY2FsaXphdGlvbi9jb3JlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9kZXZleHRyZW1lL2VzbS9sb2NhbGl6YXRpb24vY3VycmVuY3kuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2RldmV4dHJlbWUvZXNtL2xvY2FsaXphdGlvbi9kZWZhdWx0X21lc3NhZ2VzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9kZXZleHRyZW1lL2VzbS9sb2NhbGl6YXRpb24vaW50bC9udW1iZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2RldmV4dHJlbWUvZXNtL2xvY2FsaXphdGlvbi9sZG1sL251bWJlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZGV2ZXh0cmVtZS9lc20vbG9jYWxpemF0aW9uL21lc3NhZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2RldmV4dHJlbWUvZXNtL2xvY2FsaXphdGlvbi9udW1iZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2RldmV4dHJlbWUvZXNtL2xvY2FsaXphdGlvbi9vcGVuX3htbF9jdXJyZW5jeV9mb3JtYXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2RldmV4dHJlbWUvZXNtL2xvY2FsaXphdGlvbi9wYXJlbnRMb2NhbGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2RldmV4dHJlbWUvZXNtL2xvY2FsaXphdGlvbi91dGlscy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQWU7QUFDZjtBQUNBLG1CQUFtQixzQkFBc0I7QUFDekM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxDOzs7Ozs7Ozs7Ozs7Ozs7OztBQ2hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQzhCO0FBR1I7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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QTtBQUNBO0FBQ0EsMkNBQTJDLDZEQUFpQjtBQUM1RDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsb0JBQW9CO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFD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dUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkIsc0JBQXNCO0FBQ3RCLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0Esc0JBQXNCO0FBQ3RCLDRCQUE0QjtBQUM1QjtBQUNBLDJCQUEyQjtBQUMzQiwyQkFBMkI7QUFDM0IsMkJBQTJCO0FBQzNCLDJCQUEyQjtBQUMzQjtBQUNBLDJCQUEyQjtBQUMzQiwyQkFBMkI7QUFDM0I7QUFDQSwyQkFBMkI7QUFDM0IsMkJBQTJCO0FBQzNCLDJCQUEyQjtBQUMzQiwyQkFBMkI7QUFDM0IsMkJBQTJCO0FBQzNCLDJCQUEyQjtBQUMzQiwyQkFBMkI7QUFDM0IsK0JBQStCO0FBQy9CLDJCQUEyQjtBQUMzQiwyQkFBMkI7QUFDM0IsMkJBQTJCO0FBQzNCLDJCQUEyQjtBQUMzQjtBQUNBLDJCQUEyQjtBQUMzQjtBQUNBLDJCQUEyQjtBQUMzQiwyQkFBMkI7QUFDM0I7QUFDQSwyQkFBMkI7QUFDM0IsMkJBQTJCO0FBQzNCLDJCQUEyQjtBQUMzQiwyQkFBMkI7QUFDM0IsMkJBQTJCO0FBQzNCLDJCQUEyQjtBQUMzQiwyQkFBMkI7QUFDM0IsMkJBQTJCO0FBQzNCLDJCQUEyQjtBQUMzQiwyQkFBMkI7QUFDM0IsMkJBQTJCO0FBQzNCLDJCQUEyQjtBQUMzQiwyQkFBMkI7QUFDM0IsMkJBQTJCO0FBQzNCLDJCQUEyQjtBQUMzQiwyQkFBMkI7QUFDM0IsMkJBQTJCO0FBQzNCLDJCQUEyQjtBQUMzQiwyQkFBMkI7QUFDM0IsMkJBQTJCO0FBQzNCLDJCQUEyQjtBQUMzQiwyQkFBMkI7QUFDM0IsMkJBQTJCO0FBQzNCLDJCQUEyQjtBQUMzQiwyQkFBMkI7QUFDM0IsMkJBQTJCO0FBQzNCLDJCQUEyQjtBQUMzQiwyQkFBMkI7QUFDM0IsMkJBQTJCO0FBQzNCLDJCQUEyQjtBQUMzQiwyQkFBMkI7QUFDM0IsMkJBQTJCO0FBQzNCLDJCQUEyQjtBQUMzQiwyQkFBMkI7QUFDM0IsMkJBQTJCO0FBQzNCLDJCQUEyQjtBQUMzQiwyQkFBMkI7QUFDM0IsMkJBQTJCO0FBQzNCLCtCQUErQjtBQUMvQiwyQkFBMkI7QUFDM0IsMkJBQTJCO0FBQzNCLDJCQUEyQjtBQUMzQiwyQkFBMkI7QUFDM0IsMkJBQTJCO0FBQzNCLDJCQUEyQjtBQUMzQiwyQkFBMkI7QUFDM0IsMkJBQTJCO0FBQzNCLDJCQUEyQjtBQUMzQiwyQkFBMkI7QUFDM0IsMkJBQTJCO0FBQzNCLDJCQUEyQjtBQUMzQiwyQkFBMkI7QUFDM0I7QUFDQSwyQkFBMkI7QUFDM0IsMkJBQTJCO0FBQzNCLCtCQUErQjtBQUMvQiwyQkFBMkI7QUFDM0IsMkJBQTJCO0FBQzNCLDJCQUEyQjtBQUMzQiwyQkFBMkI7QUFDM0IsMkJBQTJCO0FBQzNCLDJCQUEyQjtBQUMzQiwyQkFBMkI7QUFDM0IsMkJBQTJCO0FBQzNCLDJCQUEyQjtBQUMzQiwyQkFBMkI7QUFDM0IsMkJBQTJCO0FBQzNCLDJCQUEyQjtBQUMzQixpQ0FBaUM7QUFDakMsMkJBQTJCO0FBQzNCLDJCQUEyQjtBQUMzQiwyQkFBMkI7QUFDM0IsMkJBQTJCO0FBQzNCLDJCQUEyQjtBQUMzQiwyQkFBMkI7QUFDM0IsMkJBQTJCO0FBQzNCLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSwrQkFBK0I7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkI7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCO0FBQy9CO0FBQ0EsMEJBQTBCO0FBQzFCLDBCQUEwQjtBQUMxQjtBQUNBLGdDQUFnQztBQUNoQywrQkFBK0I7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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RUFBRTtBQUM1QztBQUNBLHdDQUF3QyxFQUFFO0FBQzFDO0FBQ0EsNkRBQTZELEVBQUU7QUFDL0Q7QUFDQSx5Q0FBeUMsRUFBRTtBQUMzQztBQUNBLHdDQUF3QyxFQUFFO0FBQzFDO0FBQ0EsMENBQTBDLEVBQUU7QUFDNUM7QUFDQSwwQ0FBMEMsRUFBRTtBQUM1QztBQUNBLHdDQUF3QyxFQUFFO0FBQzFDO0FBQ0Esa0VBQWtFLEVBQUU7QUFDcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQyxFQUFFO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDLEVBQUU7QUFDMUMscURBQXFELEVBQUUsS0FBSyxFQUFFO0FBQzlELHdDQUF3QyxFQUFFO0FBQzFDLHFEQUFxRCxFQUFFLEtBQUssRUFBRTtBQUM5RCx3Q0FBd0MsRUFBRTtBQUMxQyxxREFBcUQsRUFBRSxLQUFLLEVBQUU7QUFDOUQsd0NBQXdDLEVBQUU7QUFDMUMscURBQXFELEVBQUUsS0FBSyxFQUFFO0FBQzlELDRDQUE0QyxFQUFFO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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NkUsRUFBRSxXQUFXLEVBQUU7QUFDNUY7QUFDQSxrRUFBa0UsRUFBRTtBQUNwRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzTUFBc00sRUFBRTtBQUN4TTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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QUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCLG1CQUFtQjtBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCwwQkFBMEIsOENBQW9CO0FBQzlDO0FBQ0EsOEJBQThCLGtEQUFzQjtBQUNwRDtBQUNBLGlFQUFlLGtCQUFrQixFQUFDOzs7Ozs7Ozs7Ozs7Ozs7O0FDN1RsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsMkJBQTJCO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLEVBQUU7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQTtBQUNBLDBDQUEwQztBQUMxQyxvQkFBb0Isb0JBQW9CO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlEQUFpRDtBQUNqRCxDQUFDLEVBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7QUN4Q0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxFQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQ2ZGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHNEI7QUFDNUI7O0FBRUE7QUFDQSxvQkFBb0Isc0RBQUk7QUFDeEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6InZlbmRvcnMtbm9kZV9tb2R1bGVzX2RldmV4dHJlbWVfZXNtX2xvY2FsaXphdGlvbl9tZXNzYWdlX2pzLW5vZGVfbW9kdWxlc19kZXZleHRyZW1lX2VzbV9sb2NhbC0yYTk2MDkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfZXh0ZW5kcygpIHtcbiAgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTtcblxuICAgICAgZm9yICh2YXIga2V5IGluIHNvdXJjZSkge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkge1xuICAgICAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9O1xuXG4gIHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufSIsIi8qKlxyXG4gKiBEZXZFeHRyZW1lIChlc20vY29yZS9jbGFzcy5qcylcclxuICogVmVyc2lvbjogMjEuMS40XHJcbiAqIEJ1aWxkIGRhdGU6IE1vbiBKdW4gMjEgMjAyMVxyXG4gKlxyXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTIgLSAyMDIxIERldmVsb3BlciBFeHByZXNzIEluYy4gQUxMIFJJR0hUUyBSRVNFUlZFRFxyXG4gKiBSZWFkIGFib3V0IERldkV4dHJlbWUgbGljZW5zaW5nIGhlcmU6IGh0dHBzOi8vanMuZGV2ZXhwcmVzcy5jb20vTGljZW5zaW5nL1xyXG4gKi9cclxuaW1wb3J0IGVycm9ycyBmcm9tIFwiLi9lcnJvcnNcIjtcclxuaW1wb3J0IHtcclxuICAgIGlzV2luZG93XHJcbn0gZnJvbSBcIi4vdXRpbHMvdHlwZVwiO1xyXG52YXIgd3JhcE92ZXJyaWRkZW4gPSBmdW5jdGlvbihiYXNlUHJvdG8sIG1ldGhvZE5hbWUsIG1ldGhvZCkge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciBwcmV2Q2FsbEJhc2UgPSB0aGlzLmNhbGxCYXNlO1xyXG4gICAgICAgIHRoaXMuY2FsbEJhc2UgPSBiYXNlUHJvdG9bbWV0aG9kTmFtZV07XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgcmV0dXJuIG1ldGhvZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpXHJcbiAgICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICAgICAgdGhpcy5jYWxsQmFzZSA9IHByZXZDYWxsQmFzZVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxudmFyIGNsb25lUHJvdG90eXBlID0gZnVuY3Rpb24ob2JqKSB7XHJcbiAgICB2YXIgZnVuYyA9IGZ1bmN0aW9uKCkge307XHJcbiAgICBmdW5jLnByb3RvdHlwZSA9IG9iai5wcm90b3R5cGU7XHJcbiAgICByZXR1cm4gbmV3IGZ1bmNcclxufTtcclxudmFyIHJlZGVmaW5lID0gZnVuY3Rpb24obWVtYmVycykge1xyXG4gICAgdmFyIG92ZXJyaWRkZW47XHJcbiAgICB2YXIgbWVtYmVyTmFtZTtcclxuICAgIHZhciBtZW1iZXI7XHJcbiAgICBpZiAoIW1lbWJlcnMpIHtcclxuICAgICAgICByZXR1cm4gdGhpc1xyXG4gICAgfVxyXG4gICAgZm9yIChtZW1iZXJOYW1lIGluIG1lbWJlcnMpIHtcclxuICAgICAgICBtZW1iZXIgPSBtZW1iZXJzW21lbWJlck5hbWVdO1xyXG4gICAgICAgIG92ZXJyaWRkZW4gPSBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiB0aGlzLnByb3RvdHlwZVttZW1iZXJOYW1lXSAmJiBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBtZW1iZXI7XHJcbiAgICAgICAgdGhpcy5wcm90b3R5cGVbbWVtYmVyTmFtZV0gPSBvdmVycmlkZGVuID8gd3JhcE92ZXJyaWRkZW4odGhpcy5wYXJlbnQucHJvdG90eXBlLCBtZW1iZXJOYW1lLCBtZW1iZXIpIDogbWVtYmVyXHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpc1xyXG59O1xyXG52YXIgaW5jbHVkZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgdmFyIGNsYXNzT2JqID0gdGhpcztcclxuICAgIHZhciBhcmd1bWVudDtcclxuICAgIHZhciBuYW1lO1xyXG4gICAgdmFyIGk7XHJcbiAgICB2YXIgaGFzQ2xhc3NPYmpPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuYmluZChjbGFzc09iaik7XHJcbiAgICB2YXIgaXNFUzZDbGFzcyA9ICFoYXNDbGFzc09iak93blByb3BlcnR5KFwiX2luY2x1ZGVkQ3RvcnNcIikgJiYgIWhhc0NsYXNzT2JqT3duUHJvcGVydHkoXCJfaW5jbHVkZWRQb3N0Q3RvcnNcIik7XHJcbiAgICBpZiAoaXNFUzZDbGFzcykge1xyXG4gICAgICAgIGNsYXNzT2JqLl9pbmNsdWRlZEN0b3JzID0gY2xhc3NPYmouX2luY2x1ZGVkQ3RvcnMuc2xpY2UoMCk7XHJcbiAgICAgICAgY2xhc3NPYmouX2luY2x1ZGVkUG9zdEN0b3JzID0gY2xhc3NPYmouX2luY2x1ZGVkUG9zdEN0b3JzLnNsaWNlKDApXHJcbiAgICB9XHJcbiAgICBmb3IgKGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgYXJndW1lbnQgPSBhcmd1bWVudHNbaV07XHJcbiAgICAgICAgaWYgKGFyZ3VtZW50LmN0b3IpIHtcclxuICAgICAgICAgICAgY2xhc3NPYmouX2luY2x1ZGVkQ3RvcnMucHVzaChhcmd1bWVudC5jdG9yKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoYXJndW1lbnQucG9zdEN0b3IpIHtcclxuICAgICAgICAgICAgY2xhc3NPYmouX2luY2x1ZGVkUG9zdEN0b3JzLnB1c2goYXJndW1lbnQucG9zdEN0b3IpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAobmFtZSBpbiBhcmd1bWVudCkge1xyXG4gICAgICAgICAgICBpZiAoXCJjdG9yXCIgPT09IG5hbWUgfHwgXCJwb3N0Q3RvclwiID09PSBuYW1lIHx8IFwiZGVmYXVsdFwiID09PSBuYW1lKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNsYXNzT2JqLnByb3RvdHlwZVtuYW1lXSA9IGFyZ3VtZW50W25hbWVdXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNsYXNzT2JqXHJcbn07XHJcbnZhciBzdWJjbGFzc09mID0gZnVuY3Rpb24ocGFyZW50Q2xhc3MpIHtcclxuICAgIHZhciBoYXNQYXJlbnRQcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuYmluZCh0aGlzKShcInBhcmVudFwiKTtcclxuICAgIHZhciBpc0VTNkNsYXNzID0gIWhhc1BhcmVudFByb3BlcnR5ICYmIHRoaXMucGFyZW50O1xyXG4gICAgaWYgKGlzRVM2Q2xhc3MpIHtcclxuICAgICAgICB2YXIgYmFzZUNsYXNzID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpO1xyXG4gICAgICAgIHJldHVybiBiYXNlQ2xhc3MgPT09IHBhcmVudENsYXNzIHx8IGJhc2VDbGFzcy5zdWJjbGFzc09mKHBhcmVudENsYXNzKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAodGhpcy5wYXJlbnQgPT09IHBhcmVudENsYXNzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5wYXJlbnQgfHwgIXRoaXMucGFyZW50LnN1YmNsYXNzT2YpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLnBhcmVudC5zdWJjbGFzc09mKHBhcmVudENsYXNzKVxyXG4gICAgfVxyXG59O1xyXG52YXIgYWJzdHJhY3QgPSBmdW5jdGlvbigpIHtcclxuICAgIHRocm93IGVycm9ycy5FcnJvcihcIkUwMDAxXCIpXHJcbn07XHJcbnZhciBjb3B5U3RhdGljID0gZnVuY3Rpb24oKSB7XHJcbiAgICB2YXIgaGFzT3duID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcclxuICAgIHJldHVybiBmdW5jdGlvbihzb3VyY2UsIGRlc3RpbmF0aW9uKSB7XHJcbiAgICAgICAgZm9yICh2YXIga2V5IGluIHNvdXJjZSkge1xyXG4gICAgICAgICAgICBpZiAoIWhhc093bi5jYWxsKHNvdXJjZSwga2V5KSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZGVzdGluYXRpb25ba2V5XSA9IHNvdXJjZVtrZXldXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59KCk7XHJcbnZhciBjbGFzc0ltcGwgPSBmdW5jdGlvbigpIHt9O1xyXG5jbGFzc0ltcGwuaW5oZXJpdCA9IGZ1bmN0aW9uKG1lbWJlcnMpIHtcclxuICAgIHZhciBpbmhlcml0b3IgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICBpZiAoIXRoaXMgfHwgaXNXaW5kb3codGhpcykgfHwgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgdGhpcy5jb25zdHJ1Y3Rvcikge1xyXG4gICAgICAgICAgICB0aHJvdyBlcnJvcnMuRXJyb3IoXCJFMDAwM1wiKVxyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgaW5zdGFuY2UgPSB0aGlzO1xyXG4gICAgICAgIHZhciBjdG9yID0gaW5zdGFuY2UuY3RvcjtcclxuICAgICAgICB2YXIgaW5jbHVkZWRDdG9ycyA9IGluc3RhbmNlLmNvbnN0cnVjdG9yLl9pbmNsdWRlZEN0b3JzO1xyXG4gICAgICAgIHZhciBpbmNsdWRlZFBvc3RDdG9ycyA9IGluc3RhbmNlLmNvbnN0cnVjdG9yLl9pbmNsdWRlZFBvc3RDdG9ycztcclxuICAgICAgICB2YXIgaTtcclxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaW5jbHVkZWRDdG9ycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpbmNsdWRlZEN0b3JzW2ldLmNhbGwoaW5zdGFuY2UpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjdG9yKSB7XHJcbiAgICAgICAgICAgIGN0b3IuYXBwbHkoaW5zdGFuY2UsIGFyZ3VtZW50cylcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGluY2x1ZGVkUG9zdEN0b3JzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGluY2x1ZGVkUG9zdEN0b3JzW2ldLmNhbGwoaW5zdGFuY2UpXHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIGluaGVyaXRvci5wcm90b3R5cGUgPSBjbG9uZVByb3RvdHlwZSh0aGlzKTtcclxuICAgIGNvcHlTdGF0aWModGhpcywgaW5oZXJpdG9yKTtcclxuICAgIGluaGVyaXRvci5pbmhlcml0ID0gdGhpcy5pbmhlcml0O1xyXG4gICAgaW5oZXJpdG9yLmFic3RyYWN0ID0gYWJzdHJhY3Q7XHJcbiAgICBpbmhlcml0b3IucmVkZWZpbmUgPSByZWRlZmluZTtcclxuICAgIGluaGVyaXRvci5pbmNsdWRlID0gaW5jbHVkZTtcclxuICAgIGluaGVyaXRvci5zdWJjbGFzc09mID0gc3ViY2xhc3NPZjtcclxuICAgIGluaGVyaXRvci5wYXJlbnQgPSB0aGlzO1xyXG4gICAgaW5oZXJpdG9yLl9pbmNsdWRlZEN0b3JzID0gdGhpcy5faW5jbHVkZWRDdG9ycyA/IHRoaXMuX2luY2x1ZGVkQ3RvcnMuc2xpY2UoMCkgOiBbXTtcclxuICAgIGluaGVyaXRvci5faW5jbHVkZWRQb3N0Q3RvcnMgPSB0aGlzLl9pbmNsdWRlZFBvc3RDdG9ycyA/IHRoaXMuX2luY2x1ZGVkUG9zdEN0b3JzLnNsaWNlKDApIDogW107XHJcbiAgICBpbmhlcml0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gaW5oZXJpdG9yO1xyXG4gICAgaW5oZXJpdG9yLnJlZGVmaW5lKG1lbWJlcnMpO1xyXG4gICAgcmV0dXJuIGluaGVyaXRvclxyXG59O1xyXG5jbGFzc0ltcGwuYWJzdHJhY3QgPSBhYnN0cmFjdDtcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3NJbXBsO1xyXG4iLCIvKipcclxuICogRGV2RXh0cmVtZSAoZXNtL2NvcmUvY29uZmlnLmpzKVxyXG4gKiBWZXJzaW9uOiAyMS4xLjRcclxuICogQnVpbGQgZGF0ZTogTW9uIEp1biAyMSAyMDIxXHJcbiAqXHJcbiAqIENvcHlyaWdodCAoYykgMjAxMiAtIDIwMjEgRGV2ZWxvcGVyIEV4cHJlc3MgSW5jLiBBTEwgUklHSFRTIFJFU0VSVkVEXHJcbiAqIFJlYWQgYWJvdXQgRGV2RXh0cmVtZSBsaWNlbnNpbmcgaGVyZTogaHR0cHM6Ly9qcy5kZXZleHByZXNzLmNvbS9MaWNlbnNpbmcvXHJcbiAqL1xyXG5pbXBvcnQge1xyXG4gICAgZXh0ZW5kXHJcbn0gZnJvbSBcIi4vdXRpbHMvZXh0ZW5kXCI7XHJcbmltcG9ydCBlcnJvcnMgZnJvbSBcIi4vZXJyb3JzXCI7XHJcbnZhciBjb25maWcgPSB7XHJcbiAgICBydGxFbmFibGVkOiBmYWxzZSxcclxuICAgIGRlZmF1bHRDdXJyZW5jeTogXCJVU0RcIixcclxuICAgIG9EYXRhRmlsdGVyVG9Mb3dlcjogdHJ1ZSxcclxuICAgIHNlcnZlckRlY2ltYWxTZXBhcmF0b3I6IFwiLlwiLFxyXG4gICAgZGVjaW1hbFNlcGFyYXRvcjogXCIuXCIsXHJcbiAgICB0aG91c2FuZHNTZXBhcmF0b3I6IFwiLFwiLFxyXG4gICAgZm9yY2VJc29EYXRlUGFyc2luZzogdHJ1ZSxcclxuICAgIHdyYXBBY3Rpb25zQmVmb3JlRXhlY3V0ZTogdHJ1ZSxcclxuICAgIHVzZUxlZ2FjeVN0b3JlUmVzdWx0OiBmYWxzZSxcclxuICAgIHVzZUpRdWVyeTogdm9pZCAwLFxyXG4gICAgZWRpdG9yU3R5bGluZ01vZGU6IHZvaWQgMCxcclxuICAgIHVzZUxlZ2FjeVZpc2libGVJbmRleDogZmFsc2UsXHJcbiAgICBmbG9hdGluZ0FjdGlvbkJ1dHRvbkNvbmZpZzoge1xyXG4gICAgICAgIGljb246IFwiYWRkXCIsXHJcbiAgICAgICAgY2xvc2VJY29uOiBcImNsb3NlXCIsXHJcbiAgICAgICAgbGFiZWw6IFwiXCIsXHJcbiAgICAgICAgcG9zaXRpb246IHtcclxuICAgICAgICAgICAgYXQ6IFwicmlnaHQgYm90dG9tXCIsXHJcbiAgICAgICAgICAgIG15OiBcInJpZ2h0IGJvdHRvbVwiLFxyXG4gICAgICAgICAgICBvZmZzZXQ6IHtcclxuICAgICAgICAgICAgICAgIHg6IC0xNixcclxuICAgICAgICAgICAgICAgIHk6IC0xNlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBtYXhTcGVlZERpYWxBY3Rpb25Db3VudDogNSxcclxuICAgICAgICBzaGFkaW5nOiBmYWxzZSxcclxuICAgICAgICBkaXJlY3Rpb246IFwiYXV0b1wiXHJcbiAgICB9LFxyXG4gICAgb3B0aW9uc1BhcnNlcjogb3B0aW9uc1N0cmluZyA9PiB7XHJcbiAgICAgICAgaWYgKFwie1wiICE9PSBvcHRpb25zU3RyaW5nLnRyaW0oKS5jaGFyQXQoMCkpIHtcclxuICAgICAgICAgICAgb3B0aW9uc1N0cmluZyA9IFwie1wiICsgb3B0aW9uc1N0cmluZyArIFwifVwiXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgRnVuY3Rpb24oXCJyZXR1cm4gXCIgKyBvcHRpb25zU3RyaW5nKSgpXHJcbiAgICAgICAgfSBjYXRjaCAoZXgpIHtcclxuICAgICAgICAgICAgdGhyb3cgZXJyb3JzLkVycm9yKFwiRTMwMThcIiwgZXgsIG9wdGlvbnNTdHJpbmcpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG52YXIgZGVwcmVjYXRlZEZpZWxkcyA9IFtcImRlY2ltYWxTZXBhcmF0b3JcIiwgXCJ0aG91c2FuZHNTZXBhcmF0b3JcIl07XHJcbnZhciBjb25maWdNZXRob2QgPSBmdW5jdGlvbigpIHtcclxuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkge1xyXG4gICAgICAgIHJldHVybiBjb25maWdcclxuICAgIH1cclxuICAgIHZhciBuZXdDb25maWcgPSBhcmd1bWVudHMubGVuZ3RoIDw9IDAgPyB2b2lkIDAgOiBhcmd1bWVudHNbMF07XHJcbiAgICBkZXByZWNhdGVkRmllbGRzLmZvckVhY2goZGVwcmVjYXRlZEZpZWxkID0+IHtcclxuICAgICAgICBpZiAobmV3Q29uZmlnW2RlcHJlY2F0ZWRGaWVsZF0pIHtcclxuICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSBcIk5vdywgdGhlIFwiLmNvbmNhdChkZXByZWNhdGVkRmllbGQsIFwiIGlzIHNlbGVjdGVkIGJhc2VkIG9uIHRoZSBzcGVjaWZpZWQgbG9jYWxlLlwiKTtcclxuICAgICAgICAgICAgZXJyb3JzLmxvZyhcIlcwMDAzXCIsIFwiY29uZmlnXCIsIGRlcHJlY2F0ZWRGaWVsZCwgXCIxOS4yXCIsIG1lc3NhZ2UpXHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBleHRlbmQoY29uZmlnLCBuZXdDb25maWcpXHJcbn07XHJcbmlmIChcInVuZGVmaW5lZFwiICE9PSB0eXBlb2YgRGV2RXhwcmVzcyAmJiBEZXZFeHByZXNzLmNvbmZpZykge1xyXG4gICAgY29uZmlnTWV0aG9kKERldkV4cHJlc3MuY29uZmlnKVxyXG59XHJcbmV4cG9ydCBkZWZhdWx0IGNvbmZpZ01ldGhvZDtcclxuIiwiLyoqXHJcbiAqIERldkV4dHJlbWUgKGVzbS9jb3JlL2RvbV9hZGFwdGVyLmpzKVxyXG4gKiBWZXJzaW9uOiAyMS4xLjRcclxuICogQnVpbGQgZGF0ZTogTW9uIEp1biAyMSAyMDIxXHJcbiAqXHJcbiAqIENvcHlyaWdodCAoYykgMjAxMiAtIDIwMjEgRGV2ZWxvcGVyIEV4cHJlc3MgSW5jLiBBTEwgUklHSFRTIFJFU0VSVkVEXHJcbiAqIFJlYWQgYWJvdXQgRGV2RXh0cmVtZSBsaWNlbnNpbmcgaGVyZTogaHR0cHM6Ly9qcy5kZXZleHByZXNzLmNvbS9MaWNlbnNpbmcvXHJcbiAqL1xyXG5pbXBvcnQgaW5qZWN0b3IgZnJvbSBcIi4vdXRpbHMvZGVwZW5kZW5jeV9pbmplY3RvclwiO1xyXG5pbXBvcnQge1xyXG4gICAgbm9vcFxyXG59IGZyb20gXCIuL3V0aWxzL2NvbW1vblwiO1xyXG52YXIgRUxFTUVOVF9OT0RFID0gMTtcclxudmFyIFRFWFRfTk9ERSA9IDM7XHJcbnZhciBET0NVTUVOVF9OT0RFID0gOTtcclxudmFyIG5hdGl2ZURPTUFkYXB0ZXJTdHJhdGVneSA9IHtcclxuICAgIHF1ZXJ5U2VsZWN0b3JBbGw6IChlbGVtZW50LCBzZWxlY3RvcikgPT4gZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSxcclxuICAgIGVsZW1lbnRNYXRjaGVzKGVsZW1lbnQsIHNlbGVjdG9yKSB7XHJcbiAgICAgICAgdmFyIG1hdGNoZXMgPSBlbGVtZW50Lm1hdGNoZXMgfHwgZWxlbWVudC5tYXRjaGVzU2VsZWN0b3IgfHwgZWxlbWVudC5tb3pNYXRjaGVzU2VsZWN0b3IgfHwgZWxlbWVudC5tc01hdGNoZXNTZWxlY3RvciB8fCBlbGVtZW50Lm9NYXRjaGVzU2VsZWN0b3IgfHwgZWxlbWVudC53ZWJraXRNYXRjaGVzU2VsZWN0b3IgfHwgKHNlbGVjdG9yID0+IHtcclxuICAgICAgICAgICAgdmFyIGRvYyA9IGVsZW1lbnQuZG9jdW1lbnQgfHwgZWxlbWVudC5vd25lckRvY3VtZW50O1xyXG4gICAgICAgICAgICBpZiAoIWRvYykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGl0ZW1zID0gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKGRvYywgc2VsZWN0b3IpO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbXNbaV0gPT09IGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIG1hdGNoZXMuY2FsbChlbGVtZW50LCBzZWxlY3RvcilcclxuICAgIH0sXHJcbiAgICBjcmVhdGVFbGVtZW50KHRhZ05hbWUsIGNvbnRleHQpIHtcclxuICAgICAgICBjb250ZXh0ID0gY29udGV4dCB8fCB0aGlzLl9kb2N1bWVudDtcclxuICAgICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpXHJcbiAgICB9LFxyXG4gICAgY3JlYXRlRWxlbWVudE5TKG5zLCB0YWdOYW1lLCBjb250ZXh0KSB7XHJcbiAgICAgICAgY29udGV4dCA9IGNvbnRleHQgfHwgdGhpcy5fZG9jdW1lbnQ7XHJcbiAgICAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlRWxlbWVudE5TKG5zLCB0YWdOYW1lKVxyXG4gICAgfSxcclxuICAgIGNyZWF0ZVRleHROb2RlKHRleHQsIGNvbnRleHQpIHtcclxuICAgICAgICBjb250ZXh0ID0gY29udGV4dCB8fCB0aGlzLl9kb2N1bWVudDtcclxuICAgICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVUZXh0Tm9kZSh0ZXh0KVxyXG4gICAgfSxcclxuICAgIGlzTm9kZTogZWxlbWVudCA9PiBlbGVtZW50ICYmIFwib2JqZWN0XCIgPT09IHR5cGVvZiBlbGVtZW50ICYmIFwibm9kZVR5cGVcIiBpbiBlbGVtZW50ICYmIFwibm9kZU5hbWVcIiBpbiBlbGVtZW50LFxyXG4gICAgaXNFbGVtZW50Tm9kZTogZWxlbWVudCA9PiBlbGVtZW50ICYmIGVsZW1lbnQubm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERSxcclxuICAgIGlzVGV4dE5vZGU6IGVsZW1lbnQgPT4gZWxlbWVudCAmJiBlbGVtZW50Lm5vZGVUeXBlID09PSBURVhUX05PREUsXHJcbiAgICBpc0RvY3VtZW50OiBlbGVtZW50ID0+IGVsZW1lbnQgJiYgZWxlbWVudC5ub2RlVHlwZSA9PT0gRE9DVU1FTlRfTk9ERSxcclxuICAgIHJlbW92ZUVsZW1lbnQoZWxlbWVudCkge1xyXG4gICAgICAgIHZhciBwYXJlbnROb2RlID0gZWxlbWVudCAmJiBlbGVtZW50LnBhcmVudE5vZGU7XHJcbiAgICAgICAgaWYgKHBhcmVudE5vZGUpIHtcclxuICAgICAgICAgICAgcGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlbGVtZW50KVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICBpbnNlcnRFbGVtZW50KHBhcmVudEVsZW1lbnQsIG5ld0VsZW1lbnQsIG5leHRTaWJsaW5nRWxlbWVudCkge1xyXG4gICAgICAgIGlmIChwYXJlbnRFbGVtZW50ICYmIG5ld0VsZW1lbnQgJiYgcGFyZW50RWxlbWVudCAhPT0gbmV3RWxlbWVudCkge1xyXG4gICAgICAgICAgICBpZiAobmV4dFNpYmxpbmdFbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgICBwYXJlbnRFbGVtZW50Lmluc2VydEJlZm9yZShuZXdFbGVtZW50LCBuZXh0U2libGluZ0VsZW1lbnQpXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBwYXJlbnRFbGVtZW50LmFwcGVuZENoaWxkKG5ld0VsZW1lbnQpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgZ2V0QXR0cmlidXRlOiAoZWxlbWVudCwgbmFtZSkgPT4gZWxlbWVudC5nZXRBdHRyaWJ1dGUobmFtZSksXHJcbiAgICBzZXRBdHRyaWJ1dGUoZWxlbWVudCwgbmFtZSwgdmFsdWUpIHtcclxuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSlcclxuICAgIH0sXHJcbiAgICByZW1vdmVBdHRyaWJ1dGUoZWxlbWVudCwgbmFtZSkge1xyXG4gICAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKG5hbWUpXHJcbiAgICB9LFxyXG4gICAgc2V0UHJvcGVydHkoZWxlbWVudCwgbmFtZSwgdmFsdWUpIHtcclxuICAgICAgICBlbGVtZW50W25hbWVdID0gdmFsdWVcclxuICAgIH0sXHJcbiAgICBzZXRUZXh0KGVsZW1lbnQsIHRleHQpIHtcclxuICAgICAgICBpZiAoZWxlbWVudCkge1xyXG4gICAgICAgICAgICBlbGVtZW50LnRleHRDb250ZW50ID0gdGV4dFxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICBzZXRDbGFzcyhlbGVtZW50LCBjbGFzc05hbWUsIGlzQWRkKSB7XHJcbiAgICAgICAgaWYgKDEgPT09IGVsZW1lbnQubm9kZVR5cGUgJiYgY2xhc3NOYW1lKSB7XHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50LmNsYXNzTGlzdCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzQWRkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSlcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzTmFtZSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHZhciBjbGFzc05hbWVTdXBwb3J0ZWQgPSBcInN0cmluZ1wiID09PSB0eXBlb2YgZWxlbWVudC5jbGFzc05hbWU7XHJcbiAgICAgICAgICAgICAgICB2YXIgZWxlbWVudENsYXNzID0gY2xhc3NOYW1lU3VwcG9ydGVkID8gZWxlbWVudC5jbGFzc05hbWUgOiB0aGlzLmdldEF0dHJpYnV0ZShlbGVtZW50LCBcImNsYXNzXCIpIHx8IFwiXCI7XHJcbiAgICAgICAgICAgICAgICB2YXIgY2xhc3NOYW1lcyA9IGVsZW1lbnRDbGFzcy5zcGxpdChcIiBcIik7XHJcbiAgICAgICAgICAgICAgICB2YXIgY2xhc3NJbmRleCA9IGNsYXNzTmFtZXMuaW5kZXhPZihjbGFzc05hbWUpO1xyXG4gICAgICAgICAgICAgICAgdmFyIHJlc3VsdENsYXNzTmFtZTtcclxuICAgICAgICAgICAgICAgIGlmIChpc0FkZCAmJiBjbGFzc0luZGV4IDwgMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdENsYXNzTmFtZSA9IGVsZW1lbnRDbGFzcyA/IGVsZW1lbnRDbGFzcyArIFwiIFwiICsgY2xhc3NOYW1lIDogY2xhc3NOYW1lXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoIWlzQWRkICYmIGNsYXNzSW5kZXggPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZXMuc3BsaWNlKGNsYXNzSW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdENsYXNzTmFtZSA9IGNsYXNzTmFtZXMuam9pbihcIiBcIilcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICh2b2lkIDAgIT09IHJlc3VsdENsYXNzTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjbGFzc05hbWVTdXBwb3J0ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5jbGFzc05hbWUgPSByZXN1bHRDbGFzc05hbWVcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZShlbGVtZW50LCBcImNsYXNzXCIsIHJlc3VsdENsYXNzTmFtZSlcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgc2V0U3R5bGUoZWxlbWVudCwgbmFtZSwgdmFsdWUpIHtcclxuICAgICAgICBlbGVtZW50LnN0eWxlW25hbWVdID0gdmFsdWUgfHwgXCJcIlxyXG4gICAgfSxcclxuICAgIF9kb2N1bWVudDogXCJ1bmRlZmluZWRcIiA9PT0gdHlwZW9mIGRvY3VtZW50ID8gdm9pZCAwIDogZG9jdW1lbnQsXHJcbiAgICBnZXREb2N1bWVudCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZG9jdW1lbnRcclxuICAgIH0sXHJcbiAgICBnZXRBY3RpdmVFbGVtZW50KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9kb2N1bWVudC5hY3RpdmVFbGVtZW50XHJcbiAgICB9LFxyXG4gICAgZ2V0Qm9keSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZG9jdW1lbnQuYm9keVxyXG4gICAgfSxcclxuICAgIGNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKVxyXG4gICAgfSxcclxuICAgIGdldERvY3VtZW50RWxlbWVudCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XHJcbiAgICB9LFxyXG4gICAgZ2V0TG9jYXRpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RvY3VtZW50LmxvY2F0aW9uXHJcbiAgICB9LFxyXG4gICAgZ2V0U2VsZWN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9kb2N1bWVudC5zZWxlY3Rpb25cclxuICAgIH0sXHJcbiAgICBnZXRSZWFkeVN0YXRlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9kb2N1bWVudC5yZWFkeVN0YXRlXHJcbiAgICB9LFxyXG4gICAgZ2V0SGVhZCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZG9jdW1lbnQuaGVhZFxyXG4gICAgfSxcclxuICAgIGhhc0RvY3VtZW50UHJvcGVydHkocHJvcGVydHkpIHtcclxuICAgICAgICByZXR1cm4gcHJvcGVydHkgaW4gdGhpcy5fZG9jdW1lbnRcclxuICAgIH0sXHJcbiAgICBsaXN0ZW4oZWxlbWVudCwgZXZlbnQsIGNhbGxiYWNrLCBvcHRpb25zKSB7XHJcbiAgICAgICAgaWYgKCFlbGVtZW50IHx8ICEoXCJhZGRFdmVudExpc3RlbmVyXCIgaW4gZWxlbWVudCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5vb3BcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBjYWxsYmFjaywgb3B0aW9ucyk7XHJcbiAgICAgICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50LCBjYWxsYmFjaylcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcbmV4cG9ydCBkZWZhdWx0IGluamVjdG9yKG5hdGl2ZURPTUFkYXB0ZXJTdHJhdGVneSk7XHJcbiIsIi8qKlxyXG4gKiBEZXZFeHRyZW1lIChlc20vY29yZS9lbGVtZW50X2RhdGEuanMpXHJcbiAqIFZlcnNpb246IDIxLjEuNFxyXG4gKiBCdWlsZCBkYXRlOiBNb24gSnVuIDIxIDIwMjFcclxuICpcclxuICogQ29weXJpZ2h0IChjKSAyMDEyIC0gMjAyMSBEZXZlbG9wZXIgRXhwcmVzcyBJbmMuIEFMTCBSSUdIVFMgUkVTRVJWRURcclxuICogUmVhZCBhYm91dCBEZXZFeHRyZW1lIGxpY2Vuc2luZyBoZXJlOiBodHRwczovL2pzLmRldmV4cHJlc3MuY29tL0xpY2Vuc2luZy9cclxuICovXHJcbmltcG9ydCBXZWFrTWFwIGZyb20gXCIuL3BvbHlmaWxscy93ZWFrX21hcFwiO1xyXG5pbXBvcnQgZG9tQWRhcHRlciBmcm9tIFwiLi9kb21fYWRhcHRlclwiO1xyXG5pbXBvcnQgZXZlbnRzRW5naW5lIGZyb20gXCIuLi9ldmVudHMvY29yZS9ldmVudHNfZW5naW5lXCI7XHJcbmltcG9ydCBNZW1vcml6ZWRDYWxsYmFja3MgZnJvbSBcIi4vbWVtb3JpemVkX2NhbGxiYWNrc1wiO1xyXG52YXIgZGF0YU1hcCA9IG5ldyBXZWFrTWFwO1xyXG52YXIgc3RyYXRlZ3k7XHJcbmV4cG9ydCB2YXIgc3RyYXRlZ3lDaGFuZ2luZyA9IG5ldyBNZW1vcml6ZWRDYWxsYmFja3M7XHJcbnZhciBiZWZvcmVDbGVhbkRhdGFGdW5jID0gZnVuY3Rpb24oKSB7fTtcclxudmFyIGFmdGVyQ2xlYW5EYXRhRnVuYyA9IGZ1bmN0aW9uKCkge307XHJcbmV4cG9ydCB2YXIgc2V0RGF0YVN0cmF0ZWd5ID0gZnVuY3Rpb24odmFsdWUpIHtcclxuICAgIHN0cmF0ZWd5Q2hhbmdpbmcuZmlyZSh2YWx1ZSk7XHJcbiAgICBzdHJhdGVneSA9IHZhbHVlO1xyXG4gICAgdmFyIGNsZWFuRGF0YSA9IHN0cmF0ZWd5LmNsZWFuRGF0YTtcclxuICAgIHN0cmF0ZWd5LmNsZWFuRGF0YSA9IGZ1bmN0aW9uKG5vZGVzKSB7XHJcbiAgICAgICAgYmVmb3JlQ2xlYW5EYXRhRnVuYyhub2Rlcyk7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IGNsZWFuRGF0YS5jYWxsKHRoaXMsIG5vZGVzKTtcclxuICAgICAgICBhZnRlckNsZWFuRGF0YUZ1bmMobm9kZXMpO1xyXG4gICAgICAgIHJldHVybiByZXN1bHRcclxuICAgIH1cclxufTtcclxuc2V0RGF0YVN0cmF0ZWd5KHtcclxuICAgIGRhdGE6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciBlbGVtZW50ID0gYXJndW1lbnRzWzBdO1xyXG4gICAgICAgIHZhciBrZXkgPSBhcmd1bWVudHNbMV07XHJcbiAgICAgICAgdmFyIHZhbHVlID0gYXJndW1lbnRzWzJdO1xyXG4gICAgICAgIGlmICghZWxlbWVudCkge1xyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGVsZW1lbnREYXRhID0gZGF0YU1hcC5nZXQoZWxlbWVudCk7XHJcbiAgICAgICAgaWYgKCFlbGVtZW50RGF0YSkge1xyXG4gICAgICAgICAgICBlbGVtZW50RGF0YSA9IHt9O1xyXG4gICAgICAgICAgICBkYXRhTWFwLnNldChlbGVtZW50LCBlbGVtZW50RGF0YSlcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHZvaWQgMCA9PT0ga2V5KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBlbGVtZW50RGF0YVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoMiA9PT0gYXJndW1lbnRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZWxlbWVudERhdGFba2V5XVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbGVtZW50RGF0YVtrZXldID0gdmFsdWU7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlXHJcbiAgICB9LFxyXG4gICAgcmVtb3ZlRGF0YTogZnVuY3Rpb24oZWxlbWVudCwga2V5KSB7XHJcbiAgICAgICAgaWYgKCFlbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodm9pZCAwID09PSBrZXkpIHtcclxuICAgICAgICAgICAgZGF0YU1hcC5kZWxldGUoZWxlbWVudClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB2YXIgZWxlbWVudERhdGEgPSBkYXRhTWFwLmdldChlbGVtZW50KTtcclxuICAgICAgICAgICAgaWYgKGVsZW1lbnREYXRhKSB7XHJcbiAgICAgICAgICAgICAgICBkZWxldGUgZWxlbWVudERhdGFba2V5XVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIGNsZWFuRGF0YTogZnVuY3Rpb24oZWxlbWVudHMpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGV2ZW50c0VuZ2luZS5vZmYoZWxlbWVudHNbaV0pO1xyXG4gICAgICAgICAgICBkYXRhTWFwLmRlbGV0ZShlbGVtZW50c1tpXSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0pO1xyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGF0YVN0cmF0ZWd5KCkge1xyXG4gICAgcmV0dXJuIHN0cmF0ZWd5XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGRhdGEoKSB7XHJcbiAgICByZXR1cm4gc3RyYXRlZ3kuZGF0YS5hcHBseSh0aGlzLCBhcmd1bWVudHMpXHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGJlZm9yZUNsZWFuRGF0YShjYWxsYmFjaykge1xyXG4gICAgYmVmb3JlQ2xlYW5EYXRhRnVuYyA9IGNhbGxiYWNrXHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGFmdGVyQ2xlYW5EYXRhKGNhbGxiYWNrKSB7XHJcbiAgICBhZnRlckNsZWFuRGF0YUZ1bmMgPSBjYWxsYmFja1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBjbGVhbkRhdGEobm9kZXMpIHtcclxuICAgIHJldHVybiBzdHJhdGVneS5jbGVhbkRhdGEuY2FsbCh0aGlzLCBub2RlcylcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlRGF0YShlbGVtZW50LCBrZXkpIHtcclxuICAgIHJldHVybiBzdHJhdGVneS5yZW1vdmVEYXRhLmNhbGwodGhpcywgZWxlbWVudCwga2V5KVxyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBjbGVhbkRhdGFSZWN1cnNpdmUoZWxlbWVudCwgY2xlYW5TZWxmKSB7XHJcbiAgICBpZiAoIWRvbUFkYXB0ZXIuaXNFbGVtZW50Tm9kZShlbGVtZW50KSkge1xyXG4gICAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgdmFyIGNoaWxkRWxlbWVudHMgPSBlbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiKlwiKTtcclxuICAgIHN0cmF0ZWd5LmNsZWFuRGF0YShjaGlsZEVsZW1lbnRzKTtcclxuICAgIGlmIChjbGVhblNlbGYpIHtcclxuICAgICAgICBzdHJhdGVneS5jbGVhbkRhdGEoW2VsZW1lbnRdKVxyXG4gICAgfVxyXG59XHJcbiIsIi8qKlxyXG4gKiBEZXZFeHRyZW1lIChlc20vY29yZS9lcnJvcnMuanMpXHJcbiAqIFZlcnNpb246IDIxLjEuNFxyXG4gKiBCdWlsZCBkYXRlOiBNb24gSnVuIDIxIDIwMjFcclxuICpcclxuICogQ29weXJpZ2h0IChjKSAyMDEyIC0gMjAyMSBEZXZlbG9wZXIgRXhwcmVzcyBJbmMuIEFMTCBSSUdIVFMgUkVTRVJWRURcclxuICogUmVhZCBhYm91dCBEZXZFeHRyZW1lIGxpY2Vuc2luZyBoZXJlOiBodHRwczovL2pzLmRldmV4cHJlc3MuY29tL0xpY2Vuc2luZy9cclxuICovXHJcbmltcG9ydCBlcnJvclV0aWxzIGZyb20gXCIuL3V0aWxzL2Vycm9yXCI7XHJcbmV4cG9ydCBkZWZhdWx0IGVycm9yVXRpbHMoe1xyXG4gICAgRTAwMDE6IFwiTWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZFwiLFxyXG4gICAgRTAwMDI6IFwiTWVtYmVyIG5hbWUgY29sbGlzaW9uOiB7MH1cIixcclxuICAgIEUwMDAzOiBcIkEgY2xhc3MgbXVzdCBiZSBpbnN0YW50aWF0ZWQgdXNpbmcgdGhlICduZXcnIGtleXdvcmRcIixcclxuICAgIEUwMDA0OiBcIlRoZSBOQU1FIHByb3BlcnR5IG9mIHRoZSBjb21wb25lbnQgaXMgbm90IHNwZWNpZmllZFwiLFxyXG4gICAgRTAwMDU6IFwiVW5rbm93biBkZXZpY2VcIixcclxuICAgIEUwMDA2OiBcIlVua25vd24gZW5kcG9pbnQga2V5IGlzIHJlcXVlc3RlZFwiLFxyXG4gICAgRTAwMDc6IFwiJ0ludmFsaWRhdGUnIG1ldGhvZCBpcyBjYWxsZWQgb3V0c2lkZSB0aGUgdXBkYXRlIHRyYW5zYWN0aW9uXCIsXHJcbiAgICBFMDAwODogXCJUeXBlIG9mIHRoZSBvcHRpb24gbmFtZSBpcyBub3QgYXBwcm9wcmlhdGUgdG8gY3JlYXRlIGFuIGFjdGlvblwiLFxyXG4gICAgRTAwMDk6IFwiQ29tcG9uZW50ICd7MH0nIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZCBmb3IgYW4gZWxlbWVudFwiLFxyXG4gICAgRTAwMTA6IFwiQW5pbWF0aW9uIGNvbmZpZ3VyYXRpb24gd2l0aCB0aGUgJ3swfScgdHlwZSByZXF1aXJlcyAnezF9JyBjb25maWd1cmF0aW9uIGFzIHsyfVwiLFxyXG4gICAgRTAwMTE6IFwiVW5rbm93biBhbmltYXRpb24gdHlwZSAnezB9J1wiLFxyXG4gICAgRTAwMTI6IFwialF1ZXJ5IHZlcnNpb24gaXMgdG9vIG9sZC4gUGxlYXNlIHVwZ3JhZGUgalF1ZXJ5IHRvIDEuMTAuMCBvciBsYXRlclwiLFxyXG4gICAgRTAwMTM6IFwiS25vY2tvdXRKUyB2ZXJzaW9uIGlzIHRvbyBvbGQuIFBsZWFzZSB1cGdyYWRlIEtub2Nrb3V0SlMgdG8gMi4zLjAgb3IgbGF0ZXJcIixcclxuICAgIEUwMDE0OiBcIlRoZSAncmVsZWFzZScgbWV0aG9kIHNob3VsZG4ndCBiZSBjYWxsZWQgZm9yIGFuIHVubG9ja2VkIExvY2sgb2JqZWN0XCIsXHJcbiAgICBFMDAxNTogXCJRdWV1ZWQgdGFzayByZXR1cm5lZCBhbiB1bmV4cGVjdGVkIHJlc3VsdFwiLFxyXG4gICAgRTAwMTc6IFwiRXZlbnQgbmFtZXNwYWNlIGlzIG5vdCBkZWZpbmVkXCIsXHJcbiAgICBFMDAxODogXCJEZXZFeHByZXNzLnVpLkRldkV4cHJlc3NQb3B1cCB3aWRnZXQgaXMgcmVxdWlyZWRcIixcclxuICAgIEUwMDIwOiBcIlRlbXBsYXRlIGVuZ2luZSAnezB9JyBpcyBub3Qgc3VwcG9ydGVkXCIsXHJcbiAgICBFMDAyMTogXCJVbmtub3duIHRoZW1lIGlzIHNldDogezB9XCIsXHJcbiAgICBFMDAyMjogXCJMSU5LW3JlbD1EZXZFeHByZXNzLXRoZW1lXSB0YWdzIG11c3QgZ28gYmVmb3JlIERldkV4cHJlc3MgaW5jbHVkZWQgc2NyaXB0c1wiLFxyXG4gICAgRTAwMjM6IFwiVGVtcGxhdGUgbmFtZSBpcyBub3Qgc3BlY2lmaWVkXCIsXHJcbiAgICBFMDAyNDogXCJEZXZFeHRyZW1lIGJ1bmRsZSBhbHJlYWR5IGluY2x1ZGVkXCIsXHJcbiAgICBFMDAyNTogXCJVbmV4cGVjdGVkIGFyZ3VtZW50IHR5cGVcIixcclxuICAgIEUwMTAwOiBcIlVua25vd24gdmFsaWRhdGlvbiB0eXBlIGlzIGRldGVjdGVkXCIsXHJcbiAgICBFMDEwMTogXCJNaXNjb25maWd1cmVkIHJhbmdlIHZhbGlkYXRpb24gcnVsZSBpcyBkZXRlY3RlZFwiLFxyXG4gICAgRTAxMDI6IFwiTWlzY29uZmlndXJlZCBjb21wYXJpc29uIHZhbGlkYXRpb24gcnVsZSBpcyBkZXRlY3RlZFwiLFxyXG4gICAgRTAxMDM6IFwidmFsaWRhdGlvbkNhbGxiYWNrIG9mIGFuIGFzeW5jaHJvbm91cyBydWxlIHNob3VsZCByZXR1cm4gYSBqUXVlcnkgb3IgYSBuYXRpdmUgcHJvbWlzZVwiLFxyXG4gICAgRTAxMTA6IFwiVW5rbm93biB2YWxpZGF0aW9uIGdyb3VwIGlzIGRldGVjdGVkXCIsXHJcbiAgICBFMDEyMDogXCJBZGFwdGVyIGZvciBhIERldkV4cHJlc3NWYWxpZGF0b3IgY29tcG9uZW50IGNhbm5vdCBiZSBjb25maWd1cmVkXCIsXHJcbiAgICBFMDEyMTogXCJUaGUgJ2N1c3RvbUl0ZW0nIGZpZWxkIG9mIHRoZSAnb25DdXN0b21JdGVtQ3JlYXRpbmcnIGZ1bmN0aW9uJ3MgcGFyYW1ldGVyIHNob3VsZCBjb250YWluIGEgY3VzdG9tIGl0ZW0gb3IgUHJvbWlzZSB0aGF0IGlzIHJlc29sdmVkIGFmdGVyIHRoZSBpdGVtIGlzIGNyZWF0ZWQuXCIsXHJcbiAgICBXMDAwMDogXCInezB9JyBpcyBkZXByZWNhdGVkIGluIHsxfS4gezJ9XCIsXHJcbiAgICBXMDAwMTogXCJ7MH0gLSAnezF9JyBvcHRpb24gaXMgZGVwcmVjYXRlZCBpbiB7Mn0uIHszfVwiLFxyXG4gICAgVzAwMDI6IFwiezB9IC0gJ3sxfScgbWV0aG9kIGlzIGRlcHJlY2F0ZWQgaW4gezJ9LiB7M31cIixcclxuICAgIFcwMDAzOiBcInswfSAtICd7MX0nIHByb3BlcnR5IGlzIGRlcHJlY2F0ZWQgaW4gezJ9LiB7M31cIixcclxuICAgIFcwMDA0OiBcIlRpbWVvdXQgZm9yIHRoZW1lIGxvYWRpbmcgaXMgb3ZlcjogezB9XCIsXHJcbiAgICBXMDAwNTogXCInezB9JyBldmVudCBpcyBkZXByZWNhdGVkIGluIHsxfS4gezJ9XCIsXHJcbiAgICBXMDAwNjogXCJJbnZhbGlkIHJlY3VycmVuY2UgcnVsZTogJ3swfSdcIixcclxuICAgIFcwMDA3OiBcIid7MH0nIEdsb2JhbGl6ZSBjdWx0dXJlIGlzIG5vdCBkZWZpbmVkXCIsXHJcbiAgICBXMDAwODogXCJJbnZhbGlkIHZpZXcgbmFtZTogJ3swfSdcIixcclxuICAgIFcwMDA5OiBcIkludmFsaWQgdGltZSB6b25lIG5hbWU6ICd7MH0nXCIsXHJcbiAgICBXMDAxMDogXCJ7MH0gaXMgZGVwcmVjYXRlZCBpbiB7MX0uIHsyfVwiLFxyXG4gICAgVzAwMTE6IFwiTnVtYmVyIHBhcnNpbmcgaXMgaW52b2tlZCB3aGlsZSB0aGUgcGFyc2VyIGlzIG5vdCBkZWZpbmVkXCIsXHJcbiAgICBXMDAxMjogXCJEYXRlIHBhcnNpbmcgaXMgaW52b2tlZCB3aGlsZSB0aGUgcGFyc2VyIGlzIG5vdCBkZWZpbmVkXCIsXHJcbiAgICBXMDAxMzogXCInezB9JyBmaWxlIGlzIGRlcHJlY2F0ZWQgaW4gezF9LiB7Mn1cIixcclxuICAgIFcwMDE0OiBcInswfSAtICd7MX0nIHR5cGUgaXMgZGVwcmVjYXRlZCBpbiB7Mn0uIHszfVwiLFxyXG4gICAgVzAwMTU6IFwiSW5zdGVhZCBvZiByZXR1cm5pbmcgYSB2YWx1ZSBmcm9tIHRoZSAnezB9JyBmdW5jdGlvbiwgd3JpdGUgaXQgaW50byB0aGUgJ3sxfScgZmllbGQgb2YgdGhlIGZ1bmN0aW9uJ3MgcGFyYW1ldGVyLlwiLFxyXG4gICAgVzAwMTY6ICdUaGUgXCJ7MH1cIiBvcHRpb24gZG9lcyBub3QgYWNjZXB0IHRoZSBcInsxfVwiIHZhbHVlIHNpbmNlIHYuezJ9LiB7M30uJ1xyXG59KTtcclxuIiwiLyoqXHJcbiAqIERldkV4dHJlbWUgKGVzbS9jb3JlL2d1aWQuanMpXHJcbiAqIFZlcnNpb246IDIxLjEuNFxyXG4gKiBCdWlsZCBkYXRlOiBNb24gSnVuIDIxIDIwMjFcclxuICpcclxuICogQ29weXJpZ2h0IChjKSAyMDEyIC0gMjAyMSBEZXZlbG9wZXIgRXhwcmVzcyBJbmMuIEFMTCBSSUdIVFMgUkVTRVJWRURcclxuICogUmVhZCBhYm91dCBEZXZFeHRyZW1lIGxpY2Vuc2luZyBoZXJlOiBodHRwczovL2pzLmRldmV4cHJlc3MuY29tL0xpY2Vuc2luZy9cclxuICovXHJcbmltcG9ydCBDbGFzcyBmcm9tIFwiLi9jbGFzc1wiO1xyXG52YXIgR3VpZCA9IENsYXNzLmluaGVyaXQoe1xyXG4gICAgY3RvcjogZnVuY3Rpb24odmFsdWUpIHtcclxuICAgICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdmFsdWUgPSBTdHJpbmcodmFsdWUpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3ZhbHVlID0gdGhpcy5fbm9ybWFsaXplKHZhbHVlIHx8IHRoaXMuX2dlbmVyYXRlKCkpXHJcbiAgICB9LFxyXG4gICAgX25vcm1hbGl6ZTogZnVuY3Rpb24odmFsdWUpIHtcclxuICAgICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoL1teYS1mMC05XS9naSwgXCJcIikudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICB3aGlsZSAodmFsdWUubGVuZ3RoIDwgMzIpIHtcclxuICAgICAgICAgICAgdmFsdWUgKz0gXCIwXCJcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFt2YWx1ZS5zdWJzdHIoMCwgOCksIHZhbHVlLnN1YnN0cig4LCA0KSwgdmFsdWUuc3Vic3RyKDEyLCA0KSwgdmFsdWUuc3Vic3RyKDE2LCA0KSwgdmFsdWUuc3Vic3RyKDIwLCAxMildLmpvaW4oXCItXCIpXHJcbiAgICB9LFxyXG4gICAgX2dlbmVyYXRlOiBmdW5jdGlvbigpIHtcclxuICAgICAgICB2YXIgdmFsdWUgPSBcIlwiO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMzI7IGkrKykge1xyXG4gICAgICAgICAgICB2YWx1ZSArPSBNYXRoLnJvdW5kKDE1ICogTWF0aC5yYW5kb20oKSkudG9TdHJpbmcoMTYpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB2YWx1ZVxyXG4gICAgfSxcclxuICAgIHRvU3RyaW5nOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWVcclxuICAgIH0sXHJcbiAgICB2YWx1ZU9mOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWVcclxuICAgIH0sXHJcbiAgICB0b0pTT046IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl92YWx1ZVxyXG4gICAgfVxyXG59KTtcclxuZXhwb3J0IGRlZmF1bHQgR3VpZDtcclxuIiwiLyoqXHJcbiAqIERldkV4dHJlbWUgKGVzbS9jb3JlL21lbW9yaXplZF9jYWxsYmFja3MuanMpXHJcbiAqIFZlcnNpb246IDIxLjEuNFxyXG4gKiBCdWlsZCBkYXRlOiBNb24gSnVuIDIxIDIwMjFcclxuICpcclxuICogQ29weXJpZ2h0IChjKSAyMDEyIC0gMjAyMSBEZXZlbG9wZXIgRXhwcmVzcyBJbmMuIEFMTCBSSUdIVFMgUkVTRVJWRURcclxuICogUmVhZCBhYm91dCBEZXZFeHRyZW1lIGxpY2Vuc2luZyBoZXJlOiBodHRwczovL2pzLmRldmV4cHJlc3MuY29tL0xpY2Vuc2luZy9cclxuICovXHJcbmltcG9ydCB7XHJcbiAgICBlYWNoXHJcbn0gZnJvbSBcIi4uL2NvcmUvdXRpbHMvaXRlcmF0b3JcIjtcclxuaW1wb3J0IENhbGxiYWNrcyBmcm9tIFwiLi91dGlscy9jYWxsYmFja3NcIjtcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWVtb3JpemVkQ2FsbGJhY2tzIHtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMubWVtb3J5ID0gW107XHJcbiAgICAgICAgdGhpcy5jYWxsYmFja3MgPSBDYWxsYmFja3MoKVxyXG4gICAgfVxyXG4gICAgYWRkKGZuKSB7XHJcbiAgICAgICAgZWFjaCh0aGlzLm1lbW9yeSwgKF8sIGl0ZW0pID0+IGZuLmFwcGx5KGZuLCBpdGVtKSk7XHJcbiAgICAgICAgdGhpcy5jYWxsYmFja3MuYWRkKGZuKVxyXG4gICAgfVxyXG4gICAgcmVtb3ZlKGZuKSB7XHJcbiAgICAgICAgdGhpcy5jYWxsYmFja3MucmVtb3ZlKGZuKVxyXG4gICAgfVxyXG4gICAgZmlyZSgpIHtcclxuICAgICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcclxuICAgICAgICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm1lbW9yeS5wdXNoKGFyZ3MpO1xyXG4gICAgICAgIHRoaXMuY2FsbGJhY2tzLmZpcmUuYXBwbHkodGhpcy5jYWxsYmFja3MsIGFyZ3MpXHJcbiAgICB9XHJcbn1cclxuIiwiLyoqXHJcbiAqIERldkV4dHJlbWUgKGVzbS9jb3JlL3BvbHlmaWxscy93ZWFrX21hcC5qcylcclxuICogVmVyc2lvbjogMjEuMS40XHJcbiAqIEJ1aWxkIGRhdGU6IE1vbiBKdW4gMjEgMjAyMVxyXG4gKlxyXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTIgLSAyMDIxIERldmVsb3BlciBFeHByZXNzIEluYy4gQUxMIFJJR0hUUyBSRVNFUlZFRFxyXG4gKiBSZWFkIGFib3V0IERldkV4dHJlbWUgbGljZW5zaW5nIGhlcmU6IGh0dHBzOi8vanMuZGV2ZXhwcmVzcy5jb20vTGljZW5zaW5nL1xyXG4gKi9cclxuaW1wb3J0IHtcclxuICAgIGluQXJyYXlcclxufSBmcm9tIFwiLi4vdXRpbHMvYXJyYXlcIjtcclxuaW1wb3J0IHtcclxuICAgIGhhc1dpbmRvdyxcclxuICAgIGdldFdpbmRvd1xyXG59IGZyb20gXCIuLi91dGlscy93aW5kb3dcIjtcclxudmFyIHdlYWtNYXAgPSBoYXNXaW5kb3coKSA/IGdldFdpbmRvdygpLldlYWtNYXAgOiBXZWFrTWFwO1xyXG5pZiAoIXdlYWtNYXApIHtcclxuICAgIHdlYWtNYXAgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICB2YXIga2V5cyA9IFtdO1xyXG4gICAgICAgIHZhciB2YWx1ZXMgPSBbXTtcclxuICAgICAgICB0aGlzLnNldCA9IGZ1bmN0aW9uKGtleSwgdmFsdWUpIHtcclxuICAgICAgICAgICAgdmFyIGluZGV4ID0gaW5BcnJheShrZXksIGtleXMpO1xyXG4gICAgICAgICAgICBpZiAoLTEgPT09IGluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goa2V5KTtcclxuICAgICAgICAgICAgICAgIHZhbHVlcy5wdXNoKHZhbHVlKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdmFsdWVzW2luZGV4XSA9IHZhbHVlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuZ2V0ID0gZnVuY3Rpb24oa2V5KSB7XHJcbiAgICAgICAgICAgIHZhciBpbmRleCA9IGluQXJyYXkoa2V5LCBrZXlzKTtcclxuICAgICAgICAgICAgaWYgKC0xID09PSBpbmRleCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlc1tpbmRleF1cclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuaGFzID0gZnVuY3Rpb24oa2V5KSB7XHJcbiAgICAgICAgICAgIHZhciBpbmRleCA9IGluQXJyYXkoa2V5LCBrZXlzKTtcclxuICAgICAgICAgICAgaWYgKC0xID09PSBpbmRleCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRydWVcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuZGVsZXRlID0gZnVuY3Rpb24oa2V5KSB7XHJcbiAgICAgICAgICAgIHZhciBpbmRleCA9IGluQXJyYXkoa2V5LCBrZXlzKTtcclxuICAgICAgICAgICAgaWYgKC0xID09PSBpbmRleCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAga2V5cy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICB2YWx1ZXMuc3BsaWNlKGluZGV4LCAxKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5leHBvcnQgZGVmYXVsdCB3ZWFrTWFwO1xyXG4iLCIvKipcclxuICogRGV2RXh0cmVtZSAoZXNtL2NvcmUvcmVuZGVyZXIuanMpXHJcbiAqIFZlcnNpb246IDIxLjEuNFxyXG4gKiBCdWlsZCBkYXRlOiBNb24gSnVuIDIxIDIwMjFcclxuICpcclxuICogQ29weXJpZ2h0IChjKSAyMDEyIC0gMjAyMSBEZXZlbG9wZXIgRXhwcmVzcyBJbmMuIEFMTCBSSUdIVFMgUkVTRVJWRURcclxuICogUmVhZCBhYm91dCBEZXZFeHRyZW1lIGxpY2Vuc2luZyBoZXJlOiBodHRwczovL2pzLmRldmV4cHJlc3MuY29tL0xpY2Vuc2luZy9cclxuICovXHJcbmltcG9ydCByZW5kZXJlckJhc2UgZnJvbSBcIi4vcmVuZGVyZXJfYmFzZVwiO1xyXG5leHBvcnQgZGVmYXVsdCByZW5kZXJlckJhc2UuZ2V0KCk7XHJcbiIsIi8qKlxyXG4gKiBEZXZFeHRyZW1lIChlc20vY29yZS9yZW5kZXJlcl9iYXNlLmpzKVxyXG4gKiBWZXJzaW9uOiAyMS4xLjRcclxuICogQnVpbGQgZGF0ZTogTW9uIEp1biAyMSAyMDIxXHJcbiAqXHJcbiAqIENvcHlyaWdodCAoYykgMjAxMiAtIDIwMjEgRGV2ZWxvcGVyIEV4cHJlc3MgSW5jLiBBTEwgUklHSFRTIFJFU0VSVkVEXHJcbiAqIFJlYWQgYWJvdXQgRGV2RXh0cmVtZSBsaWNlbnNpbmcgaGVyZTogaHR0cHM6Ly9qcy5kZXZleHByZXNzLmNvbS9MaWNlbnNpbmcvXHJcbiAqL1xyXG5pbXBvcnQge1xyXG4gICAgY2xlYW5EYXRhUmVjdXJzaXZlLFxyXG4gICAgcmVtb3ZlRGF0YSxcclxuICAgIGRhdGEgYXMgZWxlbWVudERhdGFcclxufSBmcm9tIFwiLi9lbGVtZW50X2RhdGFcIjtcclxuaW1wb3J0IGRvbUFkYXB0ZXIgZnJvbSBcIi4vZG9tX2FkYXB0ZXJcIjtcclxuaW1wb3J0IHtcclxuICAgIGdldFdpbmRvd1xyXG59IGZyb20gXCIuL3V0aWxzL3dpbmRvd1wiO1xyXG5pbXBvcnQge1xyXG4gICAgaXNPYmplY3QsXHJcbiAgICBpc1dpbmRvdyxcclxuICAgIGlzUGxhaW5PYmplY3QsXHJcbiAgICBpc1N0cmluZyxcclxuICAgIGlzTnVtZXJpYyxcclxuICAgIGlzRGVmaW5lZCxcclxuICAgIGlzRnVuY3Rpb24sXHJcbiAgICB0eXBlXHJcbn0gZnJvbSBcIi4vdXRpbHMvdHlwZVwiO1xyXG5pbXBvcnQge1xyXG4gICAgc3R5bGVQcm9wLFxyXG4gICAgbm9ybWFsaXplU3R5bGVQcm9wXHJcbn0gZnJvbSBcIi4vdXRpbHMvc3R5bGVcIjtcclxuaW1wb3J0IHtcclxuICAgIGdldFNpemUsXHJcbiAgICBnZXRFbGVtZW50Qm94UGFyYW1zXHJcbn0gZnJvbSBcIi4vdXRpbHMvc2l6ZVwiO1xyXG5pbXBvcnQge1xyXG4gICAgcGFyc2VIVE1MLFxyXG4gICAgaXNUYWJsZVBhcnRcclxufSBmcm9tIFwiLi91dGlscy9odG1sX3BhcnNlclwiO1xyXG52YXIgd2luZG93ID0gZ2V0V2luZG93KCk7XHJcbnZhciByZW5kZXJlcjtcclxudmFyIGluaXRSZW5kZXIgPSBmdW5jdGlvbihzZWxlY3RvciwgY29udGV4dCkge1xyXG4gICAgaWYgKCFzZWxlY3Rvcikge1xyXG4gICAgICAgIHRoaXMubGVuZ3RoID0gMDtcclxuICAgICAgICByZXR1cm4gdGhpc1xyXG4gICAgfVxyXG4gICAgaWYgKFwic3RyaW5nXCIgPT09IHR5cGVvZiBzZWxlY3Rvcikge1xyXG4gICAgICAgIGlmIChcImJvZHlcIiA9PT0gc2VsZWN0b3IpIHtcclxuICAgICAgICAgICAgdGhpc1swXSA9IGNvbnRleHQgPyBjb250ZXh0LmJvZHkgOiBkb21BZGFwdGVyLmdldEJvZHkoKTtcclxuICAgICAgICAgICAgdGhpcy5sZW5ndGggPSAxO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpc1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb250ZXh0ID0gY29udGV4dCB8fCBkb21BZGFwdGVyLmdldERvY3VtZW50KCk7XHJcbiAgICAgICAgaWYgKFwiPFwiID09PSBzZWxlY3RvclswXSkge1xyXG4gICAgICAgICAgICB0aGlzWzBdID0gZG9tQWRhcHRlci5jcmVhdGVFbGVtZW50KHNlbGVjdG9yLnNsaWNlKDEsIC0xKSwgY29udGV4dCk7XHJcbiAgICAgICAgICAgIHRoaXMubGVuZ3RoID0gMTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXNcclxuICAgICAgICB9IFtdLnB1c2guYXBwbHkodGhpcywgZG9tQWRhcHRlci5xdWVyeVNlbGVjdG9yQWxsKGNvbnRleHQsIHNlbGVjdG9yKSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuICAgIH0gZWxzZSBpZiAoZG9tQWRhcHRlci5pc05vZGUoc2VsZWN0b3IpIHx8IGlzV2luZG93KHNlbGVjdG9yKSkge1xyXG4gICAgICAgIHRoaXNbMF0gPSBzZWxlY3RvcjtcclxuICAgICAgICB0aGlzLmxlbmd0aCA9IDE7XHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShzZWxlY3RvcikpIHtcclxuICAgICAgICBbXS5wdXNoLmFwcGx5KHRoaXMsIHNlbGVjdG9yKTtcclxuICAgICAgICByZXR1cm4gdGhpc1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlbmRlcmVyKHNlbGVjdG9yLnRvQXJyYXkgPyBzZWxlY3Rvci50b0FycmF5KCkgOiBbc2VsZWN0b3JdKVxyXG59O1xyXG5yZW5kZXJlciA9IGZ1bmN0aW9uKHNlbGVjdG9yLCBjb250ZXh0KSB7XHJcbiAgICByZXR1cm4gbmV3IGluaXRSZW5kZXIoc2VsZWN0b3IsIGNvbnRleHQpXHJcbn07XHJcbnJlbmRlcmVyLmZuID0ge1xyXG4gICAgZHhSZW5kZXJlcjogdHJ1ZVxyXG59O1xyXG5pbml0UmVuZGVyLnByb3RvdHlwZSA9IHJlbmRlcmVyLmZuO1xyXG52YXIgcmVwZWF0TWV0aG9kID0gZnVuY3Rpb24obWV0aG9kTmFtZSwgYXJncykge1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIGl0ZW0gPSByZW5kZXJlcih0aGlzW2ldKTtcclxuICAgICAgICBpdGVtW21ldGhvZE5hbWVdLmFwcGx5KGl0ZW0sIGFyZ3MpXHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpc1xyXG59O1xyXG52YXIgc2V0QXR0cmlidXRlVmFsdWUgPSBmdW5jdGlvbihlbGVtZW50LCBhdHRyTmFtZSwgdmFsdWUpIHtcclxuICAgIGlmICh2b2lkIDAgIT09IHZhbHVlICYmIG51bGwgIT09IHZhbHVlKSB7XHJcbiAgICAgICAgZG9tQWRhcHRlci5zZXRBdHRyaWJ1dGUoZWxlbWVudCwgYXR0ck5hbWUsIHZhbHVlKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBkb21BZGFwdGVyLnJlbW92ZUF0dHJpYnV0ZShlbGVtZW50LCBhdHRyTmFtZSlcclxuICAgIH1cclxufTtcclxuaW5pdFJlbmRlci5wcm90b3R5cGUuc2hvdyA9IGZ1bmN0aW9uKCkge1xyXG4gICAgcmV0dXJuIHRoaXMudG9nZ2xlKHRydWUpXHJcbn07XHJcbmluaXRSZW5kZXIucHJvdG90eXBlLmhpZGUgPSBmdW5jdGlvbigpIHtcclxuICAgIHJldHVybiB0aGlzLnRvZ2dsZShmYWxzZSlcclxufTtcclxuaW5pdFJlbmRlci5wcm90b3R5cGUudG9nZ2xlID0gZnVuY3Rpb24odmFsdWUpIHtcclxuICAgIGlmICh0aGlzWzBdKSB7XHJcbiAgICAgICAgdGhpcy50b2dnbGVDbGFzcyhcImR4LXN0YXRlLWludmlzaWJsZVwiLCAhdmFsdWUpXHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpc1xyXG59O1xyXG5pbml0UmVuZGVyLnByb3RvdHlwZS5hdHRyID0gZnVuY3Rpb24oYXR0ck5hbWUsIHZhbHVlKSB7XHJcbiAgICBpZiAodGhpcy5sZW5ndGggPiAxICYmIGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgcmV0dXJuIHJlcGVhdE1ldGhvZC5jYWxsKHRoaXMsIFwiYXR0clwiLCBhcmd1bWVudHMpXHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXNbMF0pIHtcclxuICAgICAgICBpZiAoaXNPYmplY3QoYXR0ck5hbWUpIHx8IHZvaWQgMCAhPT0gdmFsdWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXNcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXNbMF0uZ2V0QXR0cmlidXRlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcChhdHRyTmFtZSwgdmFsdWUpXHJcbiAgICB9XHJcbiAgICBpZiAoXCJzdHJpbmdcIiA9PT0gdHlwZW9mIGF0dHJOYW1lICYmIDEgPT09IGFyZ3VtZW50cy5sZW5ndGgpIHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gdGhpc1swXS5nZXRBdHRyaWJ1dGUoYXR0ck5hbWUpO1xyXG4gICAgICAgIHJldHVybiBudWxsID09IHJlc3VsdCA/IHZvaWQgMCA6IHJlc3VsdFxyXG4gICAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KGF0dHJOYW1lKSkge1xyXG4gICAgICAgIGZvciAodmFyIGtleSBpbiBhdHRyTmFtZSkge1xyXG4gICAgICAgICAgICB0aGlzLmF0dHIoa2V5LCBhdHRyTmFtZVtrZXldKVxyXG4gICAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgc2V0QXR0cmlidXRlVmFsdWUodGhpc1swXSwgYXR0ck5hbWUsIHZhbHVlKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXNcclxufTtcclxuaW5pdFJlbmRlci5wcm90b3R5cGUucmVtb3ZlQXR0ciA9IGZ1bmN0aW9uKGF0dHJOYW1lKSB7XHJcbiAgICB0aGlzWzBdICYmIGRvbUFkYXB0ZXIucmVtb3ZlQXR0cmlidXRlKHRoaXNbMF0sIGF0dHJOYW1lKTtcclxuICAgIHJldHVybiB0aGlzXHJcbn07XHJcbmluaXRSZW5kZXIucHJvdG90eXBlLnByb3AgPSBmdW5jdGlvbihwcm9wTmFtZSwgdmFsdWUpIHtcclxuICAgIGlmICghdGhpc1swXSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzXHJcbiAgICB9XHJcbiAgICBpZiAoXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHByb3BOYW1lICYmIDEgPT09IGFyZ3VtZW50cy5sZW5ndGgpIHtcclxuICAgICAgICByZXR1cm4gdGhpc1swXVtwcm9wTmFtZV1cclxuICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChwcm9wTmFtZSkpIHtcclxuICAgICAgICBmb3IgKHZhciBrZXkgaW4gcHJvcE5hbWUpIHtcclxuICAgICAgICAgICAgdGhpcy5wcm9wKGtleSwgcHJvcE5hbWVba2V5XSlcclxuICAgICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIGRvbUFkYXB0ZXIuc2V0UHJvcGVydHkodGhpc1swXSwgcHJvcE5hbWUsIHZhbHVlKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXNcclxufTtcclxuaW5pdFJlbmRlci5wcm90b3R5cGUuYWRkQ2xhc3MgPSBmdW5jdGlvbihjbGFzc05hbWUpIHtcclxuICAgIHJldHVybiB0aGlzLnRvZ2dsZUNsYXNzKGNsYXNzTmFtZSwgdHJ1ZSlcclxufTtcclxuaW5pdFJlbmRlci5wcm90b3R5cGUucmVtb3ZlQ2xhc3MgPSBmdW5jdGlvbihjbGFzc05hbWUpIHtcclxuICAgIHJldHVybiB0aGlzLnRvZ2dsZUNsYXNzKGNsYXNzTmFtZSwgZmFsc2UpXHJcbn07XHJcbmluaXRSZW5kZXIucHJvdG90eXBlLmhhc0NsYXNzID0gZnVuY3Rpb24oY2xhc3NOYW1lKSB7XHJcbiAgICBpZiAoIXRoaXNbMF0gfHwgdm9pZCAwID09PSB0aGlzWzBdLmNsYXNzTmFtZSkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgfVxyXG4gICAgdmFyIGNsYXNzTmFtZXMgPSBjbGFzc05hbWUuc3BsaXQoXCIgXCIpO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjbGFzc05hbWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKHRoaXNbMF0uY2xhc3NMaXN0KSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzWzBdLmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWVzW2ldKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHZhciBfY2xhc3NOYW1lID0gaXNTdHJpbmcodGhpc1swXS5jbGFzc05hbWUpID8gdGhpc1swXS5jbGFzc05hbWUgOiBkb21BZGFwdGVyLmdldEF0dHJpYnV0ZSh0aGlzWzBdLCBcImNsYXNzXCIpO1xyXG4gICAgICAgICAgICBpZiAoKF9jbGFzc05hbWUgfHwgXCJcIikuc3BsaXQoXCIgXCIpLmluZGV4T2YoY2xhc3NOYW1lc1tpXSkgPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZVxyXG59O1xyXG5pbml0UmVuZGVyLnByb3RvdHlwZS50b2dnbGVDbGFzcyA9IGZ1bmN0aW9uKGNsYXNzTmFtZSwgdmFsdWUpIHtcclxuICAgIGlmICh0aGlzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICByZXR1cm4gcmVwZWF0TWV0aG9kLmNhbGwodGhpcywgXCJ0b2dnbGVDbGFzc1wiLCBhcmd1bWVudHMpXHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXNbMF0gfHwgIWNsYXNzTmFtZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzXHJcbiAgICB9XHJcbiAgICB2YWx1ZSA9IHZvaWQgMCA9PT0gdmFsdWUgPyAhdGhpcy5oYXNDbGFzcyhjbGFzc05hbWUpIDogdmFsdWU7XHJcbiAgICB2YXIgY2xhc3NOYW1lcyA9IGNsYXNzTmFtZS5zcGxpdChcIiBcIik7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNsYXNzTmFtZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBkb21BZGFwdGVyLnNldENsYXNzKHRoaXNbMF0sIGNsYXNzTmFtZXNbaV0sIHZhbHVlKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXNcclxufTtcclxuW1wid2lkdGhcIiwgXCJoZWlnaHRcIiwgXCJvdXRlcldpZHRoXCIsIFwib3V0ZXJIZWlnaHRcIiwgXCJpbm5lcldpZHRoXCIsIFwiaW5uZXJIZWlnaHRcIl0uZm9yRWFjaCgoZnVuY3Rpb24obWV0aG9kTmFtZSkge1xyXG4gICAgdmFyIHBhcnRpYWxOYW1lID0gbWV0aG9kTmFtZS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoXCJ3aWR0aFwiKSA+PSAwID8gXCJXaWR0aFwiIDogXCJIZWlnaHRcIjtcclxuICAgIHZhciBwcm9wTmFtZSA9IHBhcnRpYWxOYW1lLnRvTG93ZXJDYXNlKCk7XHJcbiAgICB2YXIgaXNPdXRlciA9IDAgPT09IG1ldGhvZE5hbWUuaW5kZXhPZihcIm91dGVyXCIpO1xyXG4gICAgdmFyIGlzSW5uZXIgPSAwID09PSBtZXRob2ROYW1lLmluZGV4T2YoXCJpbm5lclwiKTtcclxuICAgIGluaXRSZW5kZXIucHJvdG90eXBlW21ldGhvZE5hbWVdID0gZnVuY3Rpb24odmFsdWUpIHtcclxuICAgICAgICBpZiAodGhpcy5sZW5ndGggPiAxICYmIGFyZ3VtZW50cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByZXBlYXRNZXRob2QuY2FsbCh0aGlzLCBtZXRob2ROYW1lLCBhcmd1bWVudHMpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBlbGVtZW50ID0gdGhpc1swXTtcclxuICAgICAgICBpZiAoIWVsZW1lbnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpc1dpbmRvdyhlbGVtZW50KSkge1xyXG4gICAgICAgICAgICByZXR1cm4gaXNPdXRlciA/IGVsZW1lbnRbXCJpbm5lclwiICsgcGFydGlhbE5hbWVdIDogZG9tQWRhcHRlci5nZXREb2N1bWVudEVsZW1lbnQoKVtcImNsaWVudFwiICsgcGFydGlhbE5hbWVdXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChkb21BZGFwdGVyLmlzRG9jdW1lbnQoZWxlbWVudCkpIHtcclxuICAgICAgICAgICAgdmFyIGRvY3VtZW50RWxlbWVudCA9IGRvbUFkYXB0ZXIuZ2V0RG9jdW1lbnRFbGVtZW50KCk7XHJcbiAgICAgICAgICAgIHZhciBib2R5ID0gZG9tQWRhcHRlci5nZXRCb2R5KCk7XHJcbiAgICAgICAgICAgIHJldHVybiBNYXRoLm1heChib2R5W1wic2Nyb2xsXCIgKyBwYXJ0aWFsTmFtZV0sIGJvZHlbXCJvZmZzZXRcIiArIHBhcnRpYWxOYW1lXSwgZG9jdW1lbnRFbGVtZW50W1wic2Nyb2xsXCIgKyBwYXJ0aWFsTmFtZV0sIGRvY3VtZW50RWxlbWVudFtcIm9mZnNldFwiICsgcGFydGlhbE5hbWVdLCBkb2N1bWVudEVsZW1lbnRbXCJjbGllbnRcIiArIHBhcnRpYWxOYW1lXSlcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKDAgPT09IGFyZ3VtZW50cy5sZW5ndGggfHwgXCJib29sZWFuXCIgPT09IHR5cGVvZiB2YWx1ZSkge1xyXG4gICAgICAgICAgICB2YXIgaW5jbHVkZSA9IHtcclxuICAgICAgICAgICAgICAgIHBhZGRpbmdzOiBpc0lubmVyIHx8IGlzT3V0ZXIsXHJcbiAgICAgICAgICAgICAgICBib3JkZXJzOiBpc091dGVyLFxyXG4gICAgICAgICAgICAgICAgbWFyZ2luczogdmFsdWVcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgcmV0dXJuIGdldFNpemUoZWxlbWVudCwgcHJvcE5hbWUsIGluY2x1ZGUpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh2b2lkIDAgPT09IHZhbHVlIHx8IG51bGwgPT09IHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpc051bWVyaWModmFsdWUpKSB7XHJcbiAgICAgICAgICAgIHZhciBlbGVtZW50U3R5bGVzID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XHJcbiAgICAgICAgICAgIHZhciBzaXplQWRqdXN0bWVudCA9IGdldEVsZW1lbnRCb3hQYXJhbXMocHJvcE5hbWUsIGVsZW1lbnRTdHlsZXMpO1xyXG4gICAgICAgICAgICB2YXIgaXNCb3JkZXJCb3ggPSBcImJvcmRlci1ib3hcIiA9PT0gZWxlbWVudFN0eWxlcy5ib3hTaXppbmc7XHJcbiAgICAgICAgICAgIHZhbHVlID0gTnVtYmVyKHZhbHVlKTtcclxuICAgICAgICAgICAgaWYgKGlzT3V0ZXIpIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlIC09IGlzQm9yZGVyQm94ID8gMCA6IHNpemVBZGp1c3RtZW50LmJvcmRlciArIHNpemVBZGp1c3RtZW50LnBhZGRpbmdcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChpc0lubmVyKSB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZSArPSBpc0JvcmRlckJveCA/IHNpemVBZGp1c3RtZW50LmJvcmRlciA6IC1zaXplQWRqdXN0bWVudC5wYWRkaW5nXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNCb3JkZXJCb3gpIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlICs9IHNpemVBZGp1c3RtZW50LmJvcmRlciArIHNpemVBZGp1c3RtZW50LnBhZGRpbmdcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB2YWx1ZSArPSBpc051bWVyaWModmFsdWUpID8gXCJweFwiIDogXCJcIjtcclxuICAgICAgICBkb21BZGFwdGVyLnNldFN0eWxlKGVsZW1lbnQsIHByb3BOYW1lLCB2YWx1ZSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuICAgIH1cclxufSkpO1xyXG5pbml0UmVuZGVyLnByb3RvdHlwZS5odG1sID0gZnVuY3Rpb24odmFsdWUpIHtcclxuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzWzBdLmlubmVySFRNTFxyXG4gICAgfVxyXG4gICAgdGhpcy5lbXB0eSgpO1xyXG4gICAgaWYgKFwic3RyaW5nXCIgPT09IHR5cGVvZiB2YWx1ZSAmJiAhaXNUYWJsZVBhcnQodmFsdWUpIHx8IFwibnVtYmVyXCIgPT09IHR5cGVvZiB2YWx1ZSkge1xyXG4gICAgICAgIHRoaXNbMF0uaW5uZXJIVE1MID0gdmFsdWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmFwcGVuZChwYXJzZUhUTUwodmFsdWUpKVxyXG59O1xyXG52YXIgYXBwZW5kRWxlbWVudHMgPSBmdW5jdGlvbihlbGVtZW50LCBuZXh0U2libGluZykge1xyXG4gICAgaWYgKCF0aGlzWzBdIHx8ICFlbGVtZW50KSB7XHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBpZiAoXCJzdHJpbmdcIiA9PT0gdHlwZW9mIGVsZW1lbnQpIHtcclxuICAgICAgICBlbGVtZW50ID0gcGFyc2VIVE1MKGVsZW1lbnQpXHJcbiAgICB9IGVsc2UgaWYgKGVsZW1lbnQubm9kZVR5cGUpIHtcclxuICAgICAgICBlbGVtZW50ID0gW2VsZW1lbnRdXHJcbiAgICB9IGVsc2UgaWYgKGlzTnVtZXJpYyhlbGVtZW50KSkge1xyXG4gICAgICAgIGVsZW1lbnQgPSBbZG9tQWRhcHRlci5jcmVhdGVUZXh0Tm9kZShlbGVtZW50KV1cclxuICAgIH1cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlbWVudC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhciBpdGVtID0gZWxlbWVudFtpXTtcclxuICAgICAgICB2YXIgY29udGFpbmVyID0gdGhpc1swXTtcclxuICAgICAgICB2YXIgd3JhcFRSID0gXCJUQUJMRVwiID09PSBjb250YWluZXIudGFnTmFtZSAmJiBcIlRSXCIgPT09IGl0ZW0udGFnTmFtZTtcclxuICAgICAgICBpZiAod3JhcFRSICYmIGNvbnRhaW5lci50Qm9kaWVzICYmIGNvbnRhaW5lci50Qm9kaWVzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBjb250YWluZXIgPSBjb250YWluZXIudEJvZGllc1swXVxyXG4gICAgICAgIH1cclxuICAgICAgICBkb21BZGFwdGVyLmluc2VydEVsZW1lbnQoY29udGFpbmVyLCBpdGVtLm5vZGVUeXBlID8gaXRlbSA6IGl0ZW1bMF0sIG5leHRTaWJsaW5nKVxyXG4gICAgfVxyXG59O1xyXG52YXIgc2V0Q3NzID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcclxuICAgIGlmICghdGhpc1swXSB8fCAhdGhpc1swXS5zdHlsZSkge1xyXG4gICAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgaWYgKG51bGwgPT09IHZhbHVlIHx8IFwibnVtYmVyXCIgPT09IHR5cGVvZiB2YWx1ZSAmJiBpc05hTih2YWx1ZSkpIHtcclxuICAgICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIG5hbWUgPSBzdHlsZVByb3AobmFtZSk7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB0aGlzW2ldLnN0eWxlW25hbWVdID0gbm9ybWFsaXplU3R5bGVQcm9wKG5hbWUsIHZhbHVlKVxyXG4gICAgfVxyXG59O1xyXG5pbml0UmVuZGVyLnByb3RvdHlwZS5jc3MgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xyXG4gICAgaWYgKGlzU3RyaW5nKG5hbWUpKSB7XHJcbiAgICAgICAgaWYgKDIgPT09IGFyZ3VtZW50cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgc2V0Q3NzLmNhbGwodGhpcywgbmFtZSwgdmFsdWUpXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzWzBdKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBuYW1lID0gc3R5bGVQcm9wKG5hbWUpO1xyXG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpc1swXSlbbmFtZV0gfHwgdGhpc1swXS5zdHlsZVtuYW1lXTtcclxuICAgICAgICAgICAgcmV0dXJuIGlzTnVtZXJpYyhyZXN1bHQpID8gcmVzdWx0LnRvU3RyaW5nKCkgOiByZXN1bHRcclxuICAgICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3QobmFtZSkpIHtcclxuICAgICAgICBmb3IgKHZhciBrZXkgaW4gbmFtZSkge1xyXG4gICAgICAgICAgICBzZXRDc3MuY2FsbCh0aGlzLCBrZXksIG5hbWVba2V5XSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpc1xyXG59O1xyXG5pbml0UmVuZGVyLnByb3RvdHlwZS5wcmVwZW5kID0gZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5wcmVwZW5kKGFyZ3VtZW50c1tpXSlcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuICAgIH1cclxuICAgIGFwcGVuZEVsZW1lbnRzLmFwcGx5KHRoaXMsIFtlbGVtZW50LCB0aGlzWzBdLmZpcnN0Q2hpbGRdKTtcclxuICAgIHJldHVybiB0aGlzXHJcbn07XHJcbmluaXRSZW5kZXIucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKGFyZ3VtZW50c1tpXSlcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuICAgIH1cclxuICAgIGFwcGVuZEVsZW1lbnRzLmFwcGx5KHRoaXMsIFtlbGVtZW50XSk7XHJcbiAgICByZXR1cm4gdGhpc1xyXG59O1xyXG5pbml0UmVuZGVyLnByb3RvdHlwZS5wcmVwZW5kVG8gPSBmdW5jdGlvbihlbGVtZW50KSB7XHJcbiAgICBpZiAodGhpcy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICAgICAgcmVuZGVyZXIodGhpc1tpXSkucHJlcGVuZFRvKGVsZW1lbnQpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzXHJcbiAgICB9XHJcbiAgICBlbGVtZW50ID0gcmVuZGVyZXIoZWxlbWVudCk7XHJcbiAgICBpZiAoZWxlbWVudFswXSkge1xyXG4gICAgICAgIGRvbUFkYXB0ZXIuaW5zZXJ0RWxlbWVudChlbGVtZW50WzBdLCB0aGlzWzBdLCBlbGVtZW50WzBdLmZpcnN0Q2hpbGQpXHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpc1xyXG59O1xyXG5pbml0UmVuZGVyLnByb3RvdHlwZS5hcHBlbmRUbyA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICAgIGlmICh0aGlzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICByZXR1cm4gcmVwZWF0TWV0aG9kLmNhbGwodGhpcywgXCJhcHBlbmRUb1wiLCBhcmd1bWVudHMpXHJcbiAgICB9XHJcbiAgICBkb21BZGFwdGVyLmluc2VydEVsZW1lbnQocmVuZGVyZXIoZWxlbWVudClbMF0sIHRoaXNbMF0pO1xyXG4gICAgcmV0dXJuIHRoaXNcclxufTtcclxuaW5pdFJlbmRlci5wcm90b3R5cGUuaW5zZXJ0QmVmb3JlID0gZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudFswXSkge1xyXG4gICAgICAgIGRvbUFkYXB0ZXIuaW5zZXJ0RWxlbWVudChlbGVtZW50WzBdLnBhcmVudE5vZGUsIHRoaXNbMF0sIGVsZW1lbnRbMF0pXHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpc1xyXG59O1xyXG5pbml0UmVuZGVyLnByb3RvdHlwZS5pbnNlcnRBZnRlciA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICAgIGlmIChlbGVtZW50ICYmIGVsZW1lbnRbMF0pIHtcclxuICAgICAgICBkb21BZGFwdGVyLmluc2VydEVsZW1lbnQoZWxlbWVudFswXS5wYXJlbnROb2RlLCB0aGlzWzBdLCBlbGVtZW50WzBdLm5leHRTaWJsaW5nKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXNcclxufTtcclxuaW5pdFJlbmRlci5wcm90b3R5cGUuYmVmb3JlID0gZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gICAgaWYgKHRoaXNbMF0pIHtcclxuICAgICAgICBkb21BZGFwdGVyLmluc2VydEVsZW1lbnQodGhpc1swXS5wYXJlbnROb2RlLCBlbGVtZW50WzBdLCB0aGlzWzBdKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXNcclxufTtcclxuaW5pdFJlbmRlci5wcm90b3R5cGUuYWZ0ZXIgPSBmdW5jdGlvbihlbGVtZW50KSB7XHJcbiAgICBpZiAodGhpc1swXSkge1xyXG4gICAgICAgIGRvbUFkYXB0ZXIuaW5zZXJ0RWxlbWVudCh0aGlzWzBdLnBhcmVudE5vZGUsIGVsZW1lbnRbMF0sIHRoaXNbMF0ubmV4dFNpYmxpbmcpXHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpc1xyXG59O1xyXG5pbml0UmVuZGVyLnByb3RvdHlwZS53cmFwID0gZnVuY3Rpb24od3JhcHBlcikge1xyXG4gICAgaWYgKHRoaXNbMF0pIHtcclxuICAgICAgICB2YXIgd3JhcCA9IHJlbmRlcmVyKHdyYXBwZXIpO1xyXG4gICAgICAgIHdyYXAuaW5zZXJ0QmVmb3JlKHRoaXMpO1xyXG4gICAgICAgIHdyYXAuYXBwZW5kKHRoaXMpXHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpc1xyXG59O1xyXG5pbml0UmVuZGVyLnByb3RvdHlwZS53cmFwSW5uZXIgPSBmdW5jdGlvbih3cmFwcGVyKSB7XHJcbiAgICB2YXIgY29udGVudHMgPSB0aGlzLmNvbnRlbnRzKCk7XHJcbiAgICBpZiAoY29udGVudHMubGVuZ3RoKSB7XHJcbiAgICAgICAgY29udGVudHMud3JhcCh3cmFwcGVyKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmFwcGVuZCh3cmFwcGVyKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXNcclxufTtcclxuaW5pdFJlbmRlci5wcm90b3R5cGUucmVwbGFjZVdpdGggPSBmdW5jdGlvbihlbGVtZW50KSB7XHJcbiAgICBpZiAoIShlbGVtZW50ICYmIGVsZW1lbnRbMF0pKSB7XHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBpZiAoZWxlbWVudC5pcyh0aGlzKSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzXHJcbiAgICB9XHJcbiAgICBlbGVtZW50Lmluc2VydEJlZm9yZSh0aGlzKTtcclxuICAgIHRoaXMucmVtb3ZlKCk7XHJcbiAgICByZXR1cm4gZWxlbWVudFxyXG59O1xyXG5pbml0UmVuZGVyLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbigpIHtcclxuICAgIGlmICh0aGlzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICByZXR1cm4gcmVwZWF0TWV0aG9kLmNhbGwodGhpcywgXCJyZW1vdmVcIiwgYXJndW1lbnRzKVxyXG4gICAgfVxyXG4gICAgY2xlYW5EYXRhUmVjdXJzaXZlKHRoaXNbMF0sIHRydWUpO1xyXG4gICAgZG9tQWRhcHRlci5yZW1vdmVFbGVtZW50KHRoaXNbMF0pO1xyXG4gICAgcmV0dXJuIHRoaXNcclxufTtcclxuaW5pdFJlbmRlci5wcm90b3R5cGUuZGV0YWNoID0gZnVuY3Rpb24oKSB7XHJcbiAgICBpZiAodGhpcy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgcmV0dXJuIHJlcGVhdE1ldGhvZC5jYWxsKHRoaXMsIFwiZGV0YWNoXCIsIGFyZ3VtZW50cylcclxuICAgIH1cclxuICAgIGRvbUFkYXB0ZXIucmVtb3ZlRWxlbWVudCh0aGlzWzBdKTtcclxuICAgIHJldHVybiB0aGlzXHJcbn07XHJcbmluaXRSZW5kZXIucHJvdG90eXBlLmVtcHR5ID0gZnVuY3Rpb24oKSB7XHJcbiAgICBpZiAodGhpcy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgcmV0dXJuIHJlcGVhdE1ldGhvZC5jYWxsKHRoaXMsIFwiZW1wdHlcIiwgYXJndW1lbnRzKVxyXG4gICAgfVxyXG4gICAgY2xlYW5EYXRhUmVjdXJzaXZlKHRoaXNbMF0pO1xyXG4gICAgZG9tQWRhcHRlci5zZXRUZXh0KHRoaXNbMF0sIFwiXCIpO1xyXG4gICAgcmV0dXJuIHRoaXNcclxufTtcclxuaW5pdFJlbmRlci5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbigpIHtcclxuICAgIHZhciByZXN1bHQgPSBbXTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHJlc3VsdC5wdXNoKHRoaXNbaV0uY2xvbmVOb2RlKHRydWUpKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlbmRlcmVyKHJlc3VsdClcclxufTtcclxuaW5pdFJlbmRlci5wcm90b3R5cGUudGV4dCA9IGZ1bmN0aW9uKHZhbHVlKSB7XHJcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gXCJcIjtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgcmVzdWx0ICs9IHRoaXNbaV0gJiYgdGhpc1tpXS50ZXh0Q29udGVudCB8fCBcIlwiXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHRcclxuICAgIH1cclxuICAgIHZhciB0ZXh0ID0gaXNGdW5jdGlvbih2YWx1ZSkgPyB2YWx1ZSgpIDogdmFsdWU7XHJcbiAgICBjbGVhbkRhdGFSZWN1cnNpdmUodGhpc1swXSwgZmFsc2UpO1xyXG4gICAgZG9tQWRhcHRlci5zZXRUZXh0KHRoaXNbMF0sIGlzRGVmaW5lZCh0ZXh0KSA/IHRleHQgOiBcIlwiKTtcclxuICAgIHJldHVybiB0aGlzXHJcbn07XHJcbmluaXRSZW5kZXIucHJvdG90eXBlLnZhbCA9IGZ1bmN0aW9uKHZhbHVlKSB7XHJcbiAgICBpZiAoMSA9PT0gYXJndW1lbnRzLmxlbmd0aCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnByb3AoXCJ2YWx1ZVwiLCBpc0RlZmluZWQodmFsdWUpID8gdmFsdWUgOiBcIlwiKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMucHJvcChcInZhbHVlXCIpXHJcbn07XHJcbmluaXRSZW5kZXIucHJvdG90eXBlLmNvbnRlbnRzID0gZnVuY3Rpb24oKSB7XHJcbiAgICBpZiAoIXRoaXNbMF0pIHtcclxuICAgICAgICByZXR1cm4gcmVuZGVyZXIoKVxyXG4gICAgfVxyXG4gICAgdmFyIHJlc3VsdCA9IFtdO1xyXG4gICAgcmVzdWx0LnB1c2guYXBwbHkocmVzdWx0LCB0aGlzWzBdLmNoaWxkTm9kZXMpO1xyXG4gICAgcmV0dXJuIHJlbmRlcmVyKHJlc3VsdClcclxufTtcclxuaW5pdFJlbmRlci5wcm90b3R5cGUuZmluZCA9IGZ1bmN0aW9uKHNlbGVjdG9yKSB7XHJcbiAgICB2YXIgcmVzdWx0ID0gcmVuZGVyZXIoKTtcclxuICAgIGlmICghc2VsZWN0b3IpIHtcclxuICAgICAgICByZXR1cm4gcmVzdWx0XHJcbiAgICB9XHJcbiAgICB2YXIgbm9kZXMgPSBbXTtcclxuICAgIHZhciBpO1xyXG4gICAgaWYgKFwic3RyaW5nXCIgPT09IHR5cGVvZiBzZWxlY3Rvcikge1xyXG4gICAgICAgIHNlbGVjdG9yID0gc2VsZWN0b3IudHJpbSgpO1xyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBlbGVtZW50ID0gdGhpc1tpXTtcclxuICAgICAgICAgICAgaWYgKGRvbUFkYXB0ZXIuaXNFbGVtZW50Tm9kZShlbGVtZW50KSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGVsZW1lbnRJZCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiaWRcIik7XHJcbiAgICAgICAgICAgICAgICB2YXIgcXVlcnlJZCA9IGVsZW1lbnRJZCB8fCBcImR4LXF1ZXJ5LWNoaWxkcmVuXCI7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWVsZW1lbnRJZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNldEF0dHJpYnV0ZVZhbHVlKGVsZW1lbnQsIFwiaWRcIiwgcXVlcnlJZClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHF1ZXJ5SWQgPSBcIltpZD0nXCIgKyBxdWVyeUlkICsgXCInXSBcIjtcclxuICAgICAgICAgICAgICAgIHZhciBxdWVyeVNlbGVjdG9yID0gcXVlcnlJZCArIHNlbGVjdG9yLnJlcGxhY2UoLyhbXlxcXFxdKSgsKS9nLCBcIiQxLCBcIiArIHF1ZXJ5SWQpO1xyXG4gICAgICAgICAgICAgICAgbm9kZXMucHVzaC5hcHBseShub2RlcywgZG9tQWRhcHRlci5xdWVyeVNlbGVjdG9yQWxsKGVsZW1lbnQsIHF1ZXJ5U2VsZWN0b3IpKTtcclxuICAgICAgICAgICAgICAgIHNldEF0dHJpYnV0ZVZhbHVlKGVsZW1lbnQsIFwiaWRcIiwgZWxlbWVudElkKVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGRvbUFkYXB0ZXIuaXNEb2N1bWVudChlbGVtZW50KSkge1xyXG4gICAgICAgICAgICAgICAgbm9kZXMucHVzaC5hcHBseShub2RlcywgZG9tQWRhcHRlci5xdWVyeVNlbGVjdG9yQWxsKGVsZW1lbnQsIHNlbGVjdG9yKSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgc2VsZWN0b3IgPSBkb21BZGFwdGVyLmlzTm9kZShzZWxlY3RvcikgPyBzZWxlY3RvciA6IHNlbGVjdG9yWzBdO1xyXG4gICAgICAgICAgICBpZiAodGhpc1tpXSAhPT0gc2VsZWN0b3IgJiYgdGhpc1tpXS5jb250YWlucyhzZWxlY3RvcikpIHtcclxuICAgICAgICAgICAgICAgIG5vZGVzLnB1c2goc2VsZWN0b3IpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0LmFkZChub2RlcylcclxufTtcclxudmFyIGlzVmlzaWJsZSA9IGZ1bmN0aW9uKF8sIGVsZW1lbnQpIHtcclxuICAgIGlmICghZWxlbWVudC5ub2RlVHlwZSkge1xyXG4gICAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9XHJcbiAgICByZXR1cm4gISEoZWxlbWVudC5vZmZzZXRXaWR0aCB8fCBlbGVtZW50Lm9mZnNldEhlaWdodCB8fCBlbGVtZW50LmdldENsaWVudFJlY3RzKCkubGVuZ3RoKVxyXG59O1xyXG5pbml0UmVuZGVyLnByb3RvdHlwZS5maWx0ZXIgPSBmdW5jdGlvbihzZWxlY3Rvcikge1xyXG4gICAgaWYgKCFzZWxlY3Rvcikge1xyXG4gICAgICAgIHJldHVybiByZW5kZXJlcigpXHJcbiAgICB9XHJcbiAgICBpZiAoXCI6dmlzaWJsZVwiID09PSBzZWxlY3Rvcikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmZpbHRlcihpc1Zpc2libGUpXHJcbiAgICB9IGVsc2UgaWYgKFwiOmhpZGRlblwiID09PSBzZWxlY3Rvcikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmZpbHRlcigoZnVuY3Rpb24oXywgZWxlbWVudCkge1xyXG4gICAgICAgICAgICByZXR1cm4gIWlzVmlzaWJsZShfLCBlbGVtZW50KVxyXG4gICAgICAgIH0pKVxyXG4gICAgfVxyXG4gICAgdmFyIHJlc3VsdCA9IFtdO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIGl0ZW0gPSB0aGlzW2ldO1xyXG4gICAgICAgIGlmIChkb21BZGFwdGVyLmlzRWxlbWVudE5vZGUoaXRlbSkgJiYgXCJzdHJpbmdcIiA9PT0gdHlwZShzZWxlY3RvcikpIHtcclxuICAgICAgICAgICAgZG9tQWRhcHRlci5lbGVtZW50TWF0Y2hlcyhpdGVtLCBzZWxlY3RvcikgJiYgcmVzdWx0LnB1c2goaXRlbSlcclxuICAgICAgICB9IGVsc2UgaWYgKGRvbUFkYXB0ZXIuaXNOb2RlKHNlbGVjdG9yKSB8fCBpc1dpbmRvdyhzZWxlY3RvcikpIHtcclxuICAgICAgICAgICAgc2VsZWN0b3IgPT09IGl0ZW0gJiYgcmVzdWx0LnB1c2goaXRlbSlcclxuICAgICAgICB9IGVsc2UgaWYgKGlzRnVuY3Rpb24oc2VsZWN0b3IpKSB7XHJcbiAgICAgICAgICAgIHNlbGVjdG9yLmNhbGwoaXRlbSwgaSwgaXRlbSkgJiYgcmVzdWx0LnB1c2goaXRlbSlcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHNlbGVjdG9yLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxlY3RvcltqXSA9PT0gaXRlbSAmJiByZXN1bHQucHVzaChpdGVtKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlbmRlcmVyKHJlc3VsdClcclxufTtcclxuaW5pdFJlbmRlci5wcm90b3R5cGUubm90ID0gZnVuY3Rpb24oc2VsZWN0b3IpIHtcclxuICAgIHZhciByZXN1bHQgPSBbXTtcclxuICAgIHZhciBub2RlcyA9IHRoaXMuZmlsdGVyKHNlbGVjdG9yKS50b0FycmF5KCk7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBpZiAoLTEgPT09IG5vZGVzLmluZGV4T2YodGhpc1tpXSkpIHtcclxuICAgICAgICAgICAgcmVzdWx0LnB1c2godGhpc1tpXSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVuZGVyZXIocmVzdWx0KVxyXG59O1xyXG5pbml0UmVuZGVyLnByb3RvdHlwZS5pcyA9IGZ1bmN0aW9uKHNlbGVjdG9yKSB7XHJcbiAgICByZXR1cm4gISF0aGlzLmZpbHRlcihzZWxlY3RvcikubGVuZ3RoXHJcbn07XHJcbmluaXRSZW5kZXIucHJvdG90eXBlLmNoaWxkcmVuID0gZnVuY3Rpb24oc2VsZWN0b3IpIHtcclxuICAgIHZhciByZXN1bHQgPSBbXTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhciBub2RlcyA9IHRoaXNbaV0gPyB0aGlzW2ldLmNoaWxkTm9kZXMgOiBbXTtcclxuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG5vZGVzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgIGlmIChkb21BZGFwdGVyLmlzRWxlbWVudE5vZGUobm9kZXNbal0pKSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChub2Rlc1tqXSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJlc3VsdCA9IHJlbmRlcmVyKHJlc3VsdCk7XHJcbiAgICByZXR1cm4gc2VsZWN0b3IgPyByZXN1bHQuZmlsdGVyKHNlbGVjdG9yKSA6IHJlc3VsdFxyXG59O1xyXG5pbml0UmVuZGVyLnByb3RvdHlwZS5zaWJsaW5ncyA9IGZ1bmN0aW9uKCkge1xyXG4gICAgdmFyIGVsZW1lbnQgPSB0aGlzWzBdO1xyXG4gICAgaWYgKCFlbGVtZW50IHx8ICFlbGVtZW50LnBhcmVudE5vZGUpIHtcclxuICAgICAgICByZXR1cm4gcmVuZGVyZXIoKVxyXG4gICAgfVxyXG4gICAgdmFyIHJlc3VsdCA9IFtdO1xyXG4gICAgdmFyIHBhcmVudENoaWxkTm9kZXMgPSBlbGVtZW50LnBhcmVudE5vZGUuY2hpbGROb2RlcyB8fCBbXTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFyZW50Q2hpbGROb2Rlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhciBub2RlID0gcGFyZW50Q2hpbGROb2Rlc1tpXTtcclxuICAgICAgICBpZiAoZG9tQWRhcHRlci5pc0VsZW1lbnROb2RlKG5vZGUpICYmIG5vZGUgIT09IGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgcmVzdWx0LnB1c2gobm9kZSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVuZGVyZXIocmVzdWx0KVxyXG59O1xyXG5pbml0UmVuZGVyLnByb3RvdHlwZS5lYWNoID0gZnVuY3Rpb24oY2FsbGJhY2spIHtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGlmIChmYWxzZSA9PT0gY2FsbGJhY2suY2FsbCh0aGlzW2ldLCBpLCB0aGlzW2ldKSkge1xyXG4gICAgICAgICAgICBicmVha1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuaW5pdFJlbmRlci5wcm90b3R5cGUuaW5kZXggPSBmdW5jdGlvbihlbGVtZW50KSB7XHJcbiAgICBpZiAoIWVsZW1lbnQpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQoKS5jaGlsZHJlbigpLmluZGV4KHRoaXMpXHJcbiAgICB9XHJcbiAgICBlbGVtZW50ID0gcmVuZGVyZXIoZWxlbWVudCk7XHJcbiAgICByZXR1cm4gdGhpcy50b0FycmF5KCkuaW5kZXhPZihlbGVtZW50WzBdKVxyXG59O1xyXG5pbml0UmVuZGVyLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbihpbmRleCkge1xyXG4gICAgcmV0dXJuIHRoaXNbaW5kZXggPCAwID8gdGhpcy5sZW5ndGggKyBpbmRleCA6IGluZGV4XVxyXG59O1xyXG5pbml0UmVuZGVyLnByb3RvdHlwZS5lcSA9IGZ1bmN0aW9uKGluZGV4KSB7XHJcbiAgICBpbmRleCA9IGluZGV4IDwgMCA/IHRoaXMubGVuZ3RoICsgaW5kZXggOiBpbmRleDtcclxuICAgIHJldHVybiByZW5kZXJlcih0aGlzW2luZGV4XSlcclxufTtcclxuaW5pdFJlbmRlci5wcm90b3R5cGUuZmlyc3QgPSBmdW5jdGlvbigpIHtcclxuICAgIHJldHVybiB0aGlzLmVxKDApXHJcbn07XHJcbmluaXRSZW5kZXIucHJvdG90eXBlLmxhc3QgPSBmdW5jdGlvbigpIHtcclxuICAgIHJldHVybiB0aGlzLmVxKC0xKVxyXG59O1xyXG5pbml0UmVuZGVyLnByb3RvdHlwZS5wYXJlbnQgPSBmdW5jdGlvbihzZWxlY3Rvcikge1xyXG4gICAgaWYgKCF0aGlzWzBdKSB7XHJcbiAgICAgICAgcmV0dXJuIHJlbmRlcmVyKClcclxuICAgIH1cclxuICAgIHZhciByZXN1bHQgPSByZW5kZXJlcih0aGlzWzBdLnBhcmVudE5vZGUpO1xyXG4gICAgcmV0dXJuICFzZWxlY3RvciB8fCByZXN1bHQuaXMoc2VsZWN0b3IpID8gcmVzdWx0IDogcmVuZGVyZXIoKVxyXG59O1xyXG5pbml0UmVuZGVyLnByb3RvdHlwZS5wYXJlbnRzID0gZnVuY3Rpb24oc2VsZWN0b3IpIHtcclxuICAgIHZhciByZXN1bHQgPSBbXTtcclxuICAgIHZhciBwYXJlbnQgPSB0aGlzLnBhcmVudCgpO1xyXG4gICAgd2hpbGUgKHBhcmVudCAmJiBwYXJlbnRbMF0gJiYgIWRvbUFkYXB0ZXIuaXNEb2N1bWVudChwYXJlbnRbMF0pKSB7XHJcbiAgICAgICAgaWYgKGRvbUFkYXB0ZXIuaXNFbGVtZW50Tm9kZShwYXJlbnRbMF0pKSB7XHJcbiAgICAgICAgICAgIGlmICghc2VsZWN0b3IgfHwgcGFyZW50LmlzKHNlbGVjdG9yKSkge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gocGFyZW50LmdldCgwKSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50KClcclxuICAgIH1cclxuICAgIHJldHVybiByZW5kZXJlcihyZXN1bHQpXHJcbn07XHJcbmluaXRSZW5kZXIucHJvdG90eXBlLmNsb3Nlc3QgPSBmdW5jdGlvbihzZWxlY3Rvcikge1xyXG4gICAgaWYgKHRoaXMuaXMoc2VsZWN0b3IpKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuICAgIH1cclxuICAgIHZhciBwYXJlbnQgPSB0aGlzLnBhcmVudCgpO1xyXG4gICAgd2hpbGUgKHBhcmVudCAmJiBwYXJlbnQubGVuZ3RoKSB7XHJcbiAgICAgICAgaWYgKHBhcmVudC5pcyhzZWxlY3RvcikpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHBhcmVudFxyXG4gICAgICAgIH1cclxuICAgICAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50KClcclxuICAgIH1cclxuICAgIHJldHVybiByZW5kZXJlcigpXHJcbn07XHJcbmluaXRSZW5kZXIucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbihzZWxlY3Rvcikge1xyXG4gICAgaWYgKCF0aGlzWzBdKSB7XHJcbiAgICAgICAgcmV0dXJuIHJlbmRlcmVyKClcclxuICAgIH1cclxuICAgIHZhciBuZXh0ID0gcmVuZGVyZXIodGhpc1swXS5uZXh0U2libGluZyk7XHJcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHtcclxuICAgICAgICByZXR1cm4gbmV4dFxyXG4gICAgfVxyXG4gICAgd2hpbGUgKG5leHQgJiYgbmV4dC5sZW5ndGgpIHtcclxuICAgICAgICBpZiAobmV4dC5pcyhzZWxlY3RvcikpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5leHRcclxuICAgICAgICB9XHJcbiAgICAgICAgbmV4dCA9IG5leHQubmV4dCgpXHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVuZGVyZXIoKVxyXG59O1xyXG5pbml0UmVuZGVyLnByb3RvdHlwZS5wcmV2ID0gZnVuY3Rpb24oKSB7XHJcbiAgICBpZiAoIXRoaXNbMF0pIHtcclxuICAgICAgICByZXR1cm4gcmVuZGVyZXIoKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlbmRlcmVyKHRoaXNbMF0ucHJldmlvdXNTaWJsaW5nKVxyXG59O1xyXG5pbml0UmVuZGVyLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbihzZWxlY3Rvcikge1xyXG4gICAgdmFyIHRhcmdldHMgPSByZW5kZXJlcihzZWxlY3Rvcik7XHJcbiAgICB2YXIgcmVzdWx0ID0gdGhpcy50b0FycmF5KCk7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRhcmdldHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YXIgdGFyZ2V0ID0gdGFyZ2V0c1tpXTtcclxuICAgICAgICBpZiAoLTEgPT09IHJlc3VsdC5pbmRleE9mKHRhcmdldCkpIHtcclxuICAgICAgICAgICAgcmVzdWx0LnB1c2godGFyZ2V0KVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByZW5kZXJlcihyZXN1bHQpXHJcbn07XHJcbnZhciBlbXB0eUFycmF5ID0gW107XHJcbmluaXRSZW5kZXIucHJvdG90eXBlLnNwbGljZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgcmV0dXJuIHJlbmRlcmVyKGVtcHR5QXJyYXkuc3BsaWNlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpXHJcbn07XHJcbmluaXRSZW5kZXIucHJvdG90eXBlLnNsaWNlID0gZnVuY3Rpb24oKSB7XHJcbiAgICByZXR1cm4gcmVuZGVyZXIoZW1wdHlBcnJheS5zbGljZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpKVxyXG59O1xyXG5pbml0UmVuZGVyLnByb3RvdHlwZS50b0FycmF5ID0gZnVuY3Rpb24oKSB7XHJcbiAgICByZXR1cm4gZW1wdHlBcnJheS5zbGljZS5jYWxsKHRoaXMpXHJcbn07XHJcbnZhciBnZXRXaW5kb3dCeUVsZW1lbnQgPSBmdW5jdGlvbihlbGVtZW50KSB7XHJcbiAgICByZXR1cm4gaXNXaW5kb3coZWxlbWVudCkgPyBlbGVtZW50IDogZWxlbWVudC5kZWZhdWx0Vmlld1xyXG59O1xyXG5pbml0UmVuZGVyLnByb3RvdHlwZS5vZmZzZXQgPSBmdW5jdGlvbigpIHtcclxuICAgIGlmICghdGhpc1swXSkge1xyXG4gICAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzWzBdLmdldENsaWVudFJlY3RzKCkubGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdG9wOiAwLFxyXG4gICAgICAgICAgICBsZWZ0OiAwXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgdmFyIHJlY3QgPSB0aGlzWzBdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgdmFyIHdpbiA9IGdldFdpbmRvd0J5RWxlbWVudCh0aGlzWzBdLm93bmVyRG9jdW1lbnQpO1xyXG4gICAgdmFyIGRvY0VsZW0gPSB0aGlzWzBdLm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICB0b3A6IHJlY3QudG9wICsgd2luLnBhZ2VZT2Zmc2V0IC0gZG9jRWxlbS5jbGllbnRUb3AsXHJcbiAgICAgICAgbGVmdDogcmVjdC5sZWZ0ICsgd2luLnBhZ2VYT2Zmc2V0IC0gZG9jRWxlbS5jbGllbnRMZWZ0XHJcbiAgICB9XHJcbn07XHJcbmluaXRSZW5kZXIucHJvdG90eXBlLm9mZnNldFBhcmVudCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgaWYgKCF0aGlzWzBdKSB7XHJcbiAgICAgICAgcmV0dXJuIHJlbmRlcmVyKClcclxuICAgIH1cclxuICAgIHZhciBvZmZzZXRQYXJlbnQgPSByZW5kZXJlcih0aGlzWzBdLm9mZnNldFBhcmVudCk7XHJcbiAgICB3aGlsZSAob2Zmc2V0UGFyZW50WzBdICYmIFwic3RhdGljXCIgPT09IG9mZnNldFBhcmVudC5jc3MoXCJwb3NpdGlvblwiKSkge1xyXG4gICAgICAgIG9mZnNldFBhcmVudCA9IHJlbmRlcmVyKG9mZnNldFBhcmVudFswXS5vZmZzZXRQYXJlbnQpXHJcbiAgICB9XHJcbiAgICBvZmZzZXRQYXJlbnQgPSBvZmZzZXRQYXJlbnRbMF0gPyBvZmZzZXRQYXJlbnQgOiByZW5kZXJlcihkb21BZGFwdGVyLmdldERvY3VtZW50RWxlbWVudCgpKTtcclxuICAgIHJldHVybiBvZmZzZXRQYXJlbnRcclxufTtcclxuaW5pdFJlbmRlci5wcm90b3R5cGUucG9zaXRpb24gPSBmdW5jdGlvbigpIHtcclxuICAgIGlmICghdGhpc1swXSkge1xyXG4gICAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgdmFyIG9mZnNldDtcclxuICAgIHZhciBtYXJnaW5Ub3AgPSBwYXJzZUZsb2F0KHRoaXMuY3NzKFwibWFyZ2luVG9wXCIpKTtcclxuICAgIHZhciBtYXJnaW5MZWZ0ID0gcGFyc2VGbG9hdCh0aGlzLmNzcyhcIm1hcmdpbkxlZnRcIikpO1xyXG4gICAgaWYgKFwiZml4ZWRcIiA9PT0gdGhpcy5jc3MoXCJwb3NpdGlvblwiKSkge1xyXG4gICAgICAgIG9mZnNldCA9IHRoaXNbMF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdG9wOiBvZmZzZXQudG9wIC0gbWFyZ2luVG9wLFxyXG4gICAgICAgICAgICBsZWZ0OiBvZmZzZXQubGVmdCAtIG1hcmdpbkxlZnRcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBvZmZzZXQgPSB0aGlzLm9mZnNldCgpO1xyXG4gICAgdmFyIG9mZnNldFBhcmVudCA9IHRoaXMub2Zmc2V0UGFyZW50KCk7XHJcbiAgICB2YXIgcGFyZW50T2Zmc2V0ID0ge1xyXG4gICAgICAgIHRvcDogMCxcclxuICAgICAgICBsZWZ0OiAwXHJcbiAgICB9O1xyXG4gICAgaWYgKFwiSFRNTFwiICE9PSBvZmZzZXRQYXJlbnRbMF0ubm9kZU5hbWUpIHtcclxuICAgICAgICBwYXJlbnRPZmZzZXQgPSBvZmZzZXRQYXJlbnQub2Zmc2V0KClcclxuICAgIH1cclxuICAgIHBhcmVudE9mZnNldCA9IHtcclxuICAgICAgICB0b3A6IHBhcmVudE9mZnNldC50b3AgKyBwYXJzZUZsb2F0KG9mZnNldFBhcmVudC5jc3MoXCJib3JkZXJUb3BXaWR0aFwiKSksXHJcbiAgICAgICAgbGVmdDogcGFyZW50T2Zmc2V0LmxlZnQgKyBwYXJzZUZsb2F0KG9mZnNldFBhcmVudC5jc3MoXCJib3JkZXJMZWZ0V2lkdGhcIikpXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICB0b3A6IG9mZnNldC50b3AgLSBwYXJlbnRPZmZzZXQudG9wIC0gbWFyZ2luVG9wLFxyXG4gICAgICAgIGxlZnQ6IG9mZnNldC5sZWZ0IC0gcGFyZW50T2Zmc2V0LmxlZnQgLSBtYXJnaW5MZWZ0XHJcbiAgICB9XHJcbn07XHJcblt7XHJcbiAgICBuYW1lOiBcInNjcm9sbExlZnRcIixcclxuICAgIG9mZnNldFByb3A6IFwicGFnZVhPZmZzZXRcIixcclxuICAgIHNjcm9sbFdpbmRvdzogZnVuY3Rpb24od2luLCB2YWx1ZSkge1xyXG4gICAgICAgIHdpbi5zY3JvbGxUbyh2YWx1ZSwgd2luLnBhZ2VZT2Zmc2V0KVxyXG4gICAgfVxyXG59LCB7XHJcbiAgICBuYW1lOiBcInNjcm9sbFRvcFwiLFxyXG4gICAgb2Zmc2V0UHJvcDogXCJwYWdlWU9mZnNldFwiLFxyXG4gICAgc2Nyb2xsV2luZG93OiBmdW5jdGlvbih3aW4sIHZhbHVlKSB7XHJcbiAgICAgICAgd2luLnNjcm9sbFRvKHdpbi5wYWdlWE9mZnNldCwgdmFsdWUpXHJcbiAgICB9XHJcbn1dLmZvckVhY2goKGZ1bmN0aW9uKGRpcmVjdGlvblN0cmF0ZWd5KSB7XHJcbiAgICB2YXIgcHJvcE5hbWUgPSBkaXJlY3Rpb25TdHJhdGVneS5uYW1lO1xyXG4gICAgaW5pdFJlbmRlci5wcm90b3R5cGVbcHJvcE5hbWVdID0gZnVuY3Rpb24odmFsdWUpIHtcclxuICAgICAgICBpZiAoIXRoaXNbMF0pIHtcclxuICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciB3aW5kb3cgPSBnZXRXaW5kb3dCeUVsZW1lbnQodGhpc1swXSk7XHJcbiAgICAgICAgaWYgKHZvaWQgMCA9PT0gdmFsdWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHdpbmRvdyA/IHdpbmRvd1tkaXJlY3Rpb25TdHJhdGVneS5vZmZzZXRQcm9wXSA6IHRoaXNbMF1bcHJvcE5hbWVdXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh3aW5kb3cpIHtcclxuICAgICAgICAgICAgZGlyZWN0aW9uU3RyYXRlZ3kuc2Nyb2xsV2luZG93KHdpbmRvdywgdmFsdWUpXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpc1swXVtwcm9wTmFtZV0gPSB2YWx1ZVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpc1xyXG4gICAgfVxyXG59KSk7XHJcbmluaXRSZW5kZXIucHJvdG90eXBlLmRhdGEgPSBmdW5jdGlvbihrZXksIHZhbHVlKSB7XHJcbiAgICBpZiAoIXRoaXNbMF0pIHtcclxuICAgICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50RGF0YS5jYWxsKHJlbmRlcmVyLCB0aGlzWzBdLCBrZXkpXHJcbiAgICB9XHJcbiAgICBlbGVtZW50RGF0YS5jYWxsKHJlbmRlcmVyLCB0aGlzWzBdLCBrZXksIHZhbHVlKTtcclxuICAgIHJldHVybiB0aGlzXHJcbn07XHJcbmluaXRSZW5kZXIucHJvdG90eXBlLnJlbW92ZURhdGEgPSBmdW5jdGlvbihrZXkpIHtcclxuICAgIHRoaXNbMF0gJiYgcmVtb3ZlRGF0YSh0aGlzWzBdLCBrZXkpO1xyXG4gICAgcmV0dXJuIHRoaXNcclxufTtcclxudmFyIHJlbmRlcmVyV3JhcHBlciA9IGZ1bmN0aW9uKCkge1xyXG4gICAgcmV0dXJuIHJlbmRlcmVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcclxufTtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlbmRlcmVyV3JhcHBlciwgXCJmblwiLCB7XHJcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxyXG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxyXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gcmVuZGVyZXIuZm5cclxuICAgIH0sXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKHZhbHVlKSB7XHJcbiAgICAgICAgcmVuZGVyZXIuZm4gPSB2YWx1ZVxyXG4gICAgfVxyXG59KTtcclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gICAgc2V0OiBmdW5jdGlvbihzdHJhdGVneSkge1xyXG4gICAgICAgIHJlbmRlcmVyID0gc3RyYXRlZ3lcclxuICAgIH0sXHJcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiByZW5kZXJlcldyYXBwZXJcclxuICAgIH1cclxufTtcclxuIiwiLyoqXHJcbiAqIERldkV4dHJlbWUgKGVzbS9jb3JlL3V0aWxzL2FycmF5LmpzKVxyXG4gKiBWZXJzaW9uOiAyMS4xLjRcclxuICogQnVpbGQgZGF0ZTogTW9uIEp1biAyMSAyMDIxXHJcbiAqXHJcbiAqIENvcHlyaWdodCAoYykgMjAxMiAtIDIwMjEgRGV2ZWxvcGVyIEV4cHJlc3MgSW5jLiBBTEwgUklHSFRTIFJFU0VSVkVEXHJcbiAqIFJlYWQgYWJvdXQgRGV2RXh0cmVtZSBsaWNlbnNpbmcgaGVyZTogaHR0cHM6Ly9qcy5kZXZleHByZXNzLmNvbS9MaWNlbnNpbmcvXHJcbiAqL1xyXG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcclxuaW1wb3J0IHtcclxuICAgIGlzRGVmaW5lZFxyXG59IGZyb20gXCIuL3R5cGVcIjtcclxuaW1wb3J0IHtcclxuICAgIGVhY2hcclxufSBmcm9tIFwiLi9pdGVyYXRvclwiO1xyXG5pbXBvcnQge1xyXG4gICAgb3JkZXJFYWNoXHJcbn0gZnJvbSBcIi4vb2JqZWN0XCI7XHJcbmltcG9ydCBjb25maWcgZnJvbSBcIi4uL2NvbmZpZ1wiO1xyXG5leHBvcnQgdmFyIGlzRW1wdHkgPSBmdW5jdGlvbihlbnRpdHkpIHtcclxuICAgIHJldHVybiBBcnJheS5pc0FycmF5KGVudGl0eSkgJiYgIWVudGl0eS5sZW5ndGhcclxufTtcclxuZXhwb3J0IHZhciB3cmFwVG9BcnJheSA9IGZ1bmN0aW9uKGVudGl0eSkge1xyXG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoZW50aXR5KSA/IGVudGl0eSA6IFtlbnRpdHldXHJcbn07XHJcbmV4cG9ydCB2YXIgaW5BcnJheSA9IGZ1bmN0aW9uKHZhbHVlLCBvYmplY3QpIHtcclxuICAgIGlmICghb2JqZWN0KSB7XHJcbiAgICAgICAgcmV0dXJuIC0xXHJcbiAgICB9XHJcbiAgICB2YXIgYXJyYXkgPSBBcnJheS5pc0FycmF5KG9iamVjdCkgPyBvYmplY3QgOiBvYmplY3QudG9BcnJheSgpO1xyXG4gICAgcmV0dXJuIGFycmF5LmluZGV4T2YodmFsdWUpXHJcbn07XHJcbmV4cG9ydCB2YXIgaW50ZXJzZWN0aW9uID0gZnVuY3Rpb24oYSwgYikge1xyXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGEpIHx8IDAgPT09IGEubGVuZ3RoIHx8ICFBcnJheS5pc0FycmF5KGIpIHx8IDAgPT09IGIubGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuIFtdXHJcbiAgICB9XHJcbiAgICB2YXIgcmVzdWx0ID0gW107XHJcbiAgICBlYWNoKGEsIChmdW5jdGlvbihfLCB2YWx1ZSkge1xyXG4gICAgICAgIHZhciBpbmRleCA9IGluQXJyYXkodmFsdWUsIGIpO1xyXG4gICAgICAgIGlmICgtMSAhPT0gaW5kZXgpIHtcclxuICAgICAgICAgICAgcmVzdWx0LnB1c2godmFsdWUpXHJcbiAgICAgICAgfVxyXG4gICAgfSkpO1xyXG4gICAgcmV0dXJuIHJlc3VsdFxyXG59O1xyXG5leHBvcnQgdmFyIHVuaXF1ZVZhbHVlcyA9IGZ1bmN0aW9uKGRhdGEpIHtcclxuICAgIHJldHVybiBkYXRhLmZpbHRlcigoZnVuY3Rpb24oaXRlbSwgcG9zaXRpb24pIHtcclxuICAgICAgICByZXR1cm4gZGF0YS5pbmRleE9mKGl0ZW0pID09PSBwb3NpdGlvblxyXG4gICAgfSkpXHJcbn07XHJcbmV4cG9ydCB2YXIgcmVtb3ZlRHVwbGljYXRlcyA9IGZ1bmN0aW9uKGZyb20sIHdoYXQpIHtcclxuICAgIGlmICghQXJyYXkuaXNBcnJheShmcm9tKSB8fCAwID09PSBmcm9tLmxlbmd0aCkge1xyXG4gICAgICAgIHJldHVybiBbXVxyXG4gICAgfVxyXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHdoYXQpIHx8IDAgPT09IHdoYXQubGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuIGZyb20uc2xpY2UoKVxyXG4gICAgfVxyXG4gICAgdmFyIHJlc3VsdCA9IFtdO1xyXG4gICAgZWFjaChmcm9tLCAoZnVuY3Rpb24oXywgdmFsdWUpIHtcclxuICAgICAgICB2YXIgaW5kZXggPSBpbkFycmF5KHZhbHVlLCB3aGF0KTtcclxuICAgICAgICBpZiAoLTEgPT09IGluZGV4KSB7XHJcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKVxyXG4gICAgICAgIH1cclxuICAgIH0pKTtcclxuICAgIHJldHVybiByZXN1bHRcclxufTtcclxuZXhwb3J0IHZhciBub3JtYWxpemVJbmRleGVzID0gZnVuY3Rpb24oaXRlbXMsIGluZGV4UGFyYW1ldGVyTmFtZSwgY3VycmVudEl0ZW0sIG5lZWRJbmRleENhbGxiYWNrKSB7XHJcbiAgICB2YXIgaW5kZXhlZEl0ZW1zID0ge307XHJcbiAgICB2YXIgcGFyYW1ldGVySW5kZXggPSAwO1xyXG4gICAgdmFyIHVzZUxlZ2FjeVZpc2libGVJbmRleCA9IGNvbmZpZygpLnVzZUxlZ2FjeVZpc2libGVJbmRleDtcclxuICAgIGVhY2goaXRlbXMsIChmdW5jdGlvbihpbmRleCwgaXRlbSkge1xyXG4gICAgICAgIGluZGV4ID0gaXRlbVtpbmRleFBhcmFtZXRlck5hbWVdO1xyXG4gICAgICAgIGlmIChpbmRleCA+PSAwKSB7XHJcbiAgICAgICAgICAgIGluZGV4ZWRJdGVtc1tpbmRleF0gPSBpbmRleGVkSXRlbXNbaW5kZXhdIHx8IFtdO1xyXG4gICAgICAgICAgICBpZiAoaXRlbSA9PT0gY3VycmVudEl0ZW0pIHtcclxuICAgICAgICAgICAgICAgIGluZGV4ZWRJdGVtc1tpbmRleF0udW5zaGlmdChpdGVtKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaW5kZXhlZEl0ZW1zW2luZGV4XS5wdXNoKGl0ZW0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpdGVtW2luZGV4UGFyYW1ldGVyTmFtZV0gPSB2b2lkIDBcclxuICAgICAgICB9XHJcbiAgICB9KSk7XHJcbiAgICBpZiAoIXVzZUxlZ2FjeVZpc2libGVJbmRleCkge1xyXG4gICAgICAgIGVhY2goaXRlbXMsIChmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgaWYgKCFpc0RlZmluZWQodGhpc1tpbmRleFBhcmFtZXRlck5hbWVdKSAmJiAoIW5lZWRJbmRleENhbGxiYWNrIHx8IG5lZWRJbmRleENhbGxiYWNrKHRoaXMpKSkge1xyXG4gICAgICAgICAgICAgICAgd2hpbGUgKGluZGV4ZWRJdGVtc1twYXJhbWV0ZXJJbmRleF0pIHtcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJJbmRleCsrXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpbmRleGVkSXRlbXNbcGFyYW1ldGVySW5kZXhdID0gW3RoaXNdO1xyXG4gICAgICAgICAgICAgICAgcGFyYW1ldGVySW5kZXgrK1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSkpXHJcbiAgICB9XHJcbiAgICBwYXJhbWV0ZXJJbmRleCA9IDA7XHJcbiAgICBvcmRlckVhY2goaW5kZXhlZEl0ZW1zLCAoZnVuY3Rpb24oaW5kZXgsIGl0ZW1zKSB7XHJcbiAgICAgICAgZWFjaChpdGVtcywgKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpc1tpbmRleFBhcmFtZXRlck5hbWVdID0gcGFyYW1ldGVySW5kZXgrK1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSkpXHJcbiAgICB9KSk7XHJcbiAgICBpZiAodXNlTGVnYWN5VmlzaWJsZUluZGV4KSB7XHJcbiAgICAgICAgZWFjaChpdGVtcywgKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICBpZiAoIWlzRGVmaW5lZCh0aGlzW2luZGV4UGFyYW1ldGVyTmFtZV0pICYmICghbmVlZEluZGV4Q2FsbGJhY2sgfHwgbmVlZEluZGV4Q2FsbGJhY2sodGhpcykpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzW2luZGV4UGFyYW1ldGVyTmFtZV0gPSBwYXJhbWV0ZXJJbmRleCsrXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KSlcclxuICAgIH1cclxuICAgIHJldHVybiBwYXJhbWV0ZXJJbmRleFxyXG59O1xyXG5leHBvcnQgdmFyIG1lcmdlID0gZnVuY3Rpb24oYXJyYXkxLCBhcnJheTIpIHtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkyLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgYXJyYXkxW2FycmF5MS5sZW5ndGhdID0gYXJyYXkyW2ldXHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXJyYXkxXHJcbn07XHJcbmV4cG9ydCB2YXIgZmluZCA9IGZ1bmN0aW9uKGFycmF5LCBjb25kaXRpb24pIHtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBpZiAoY29uZGl0aW9uKGFycmF5W2ldKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gYXJyYXlbaV1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcbmV4cG9ydCB2YXIgZ3JvdXBCeSA9IChhcnJheSwgY2IpID0+IGFycmF5LnJlZHVjZSgocmVzdWx0LCBpdGVtKSA9PiBfZXh0ZW5kcyh7fSwgcmVzdWx0LCB7XHJcbiAgICBbY2IoaXRlbSldOiBbLi4ucmVzdWx0W2NiKGl0ZW0pXSB8fCBbXSwgaXRlbV1cclxufSksIHt9KTtcclxuIiwiLyoqXHJcbiAqIERldkV4dHJlbWUgKGVzbS9jb3JlL3V0aWxzL2NhbGxfb25jZS5qcylcclxuICogVmVyc2lvbjogMjEuMS40XHJcbiAqIEJ1aWxkIGRhdGU6IE1vbiBKdW4gMjEgMjAyMVxyXG4gKlxyXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTIgLSAyMDIxIERldmVsb3BlciBFeHByZXNzIEluYy4gQUxMIFJJR0hUUyBSRVNFUlZFRFxyXG4gKiBSZWFkIGFib3V0IERldkV4dHJlbWUgbGljZW5zaW5nIGhlcmU6IGh0dHBzOi8vanMuZGV2ZXhwcmVzcy5jb20vTGljZW5zaW5nL1xyXG4gKi9cclxudmFyIGNhbGxPbmNlID0gZnVuY3Rpb24oaGFuZGxlcikge1xyXG4gICAgdmFyIHJlc3VsdDtcclxuICAgIHZhciBfd3JhcHBlZEhhbmRsZXIgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXN1bHQgPSBoYW5kbGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcbiAgICAgICAgX3dyYXBwZWRIYW5kbGVyID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiByZXN1bHRcclxuICAgIH07XHJcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIF93cmFwcGVkSGFuZGxlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpXHJcbiAgICB9XHJcbn07XHJcbmV4cG9ydCBkZWZhdWx0IGNhbGxPbmNlO1xyXG4iLCIvKipcclxuICogRGV2RXh0cmVtZSAoZXNtL2NvcmUvdXRpbHMvY2FsbGJhY2tzLmpzKVxyXG4gKiBWZXJzaW9uOiAyMS4xLjRcclxuICogQnVpbGQgZGF0ZTogTW9uIEp1biAyMSAyMDIxXHJcbiAqXHJcbiAqIENvcHlyaWdodCAoYykgMjAxMiAtIDIwMjEgRGV2ZWxvcGVyIEV4cHJlc3MgSW5jLiBBTEwgUklHSFRTIFJFU0VSVkVEXHJcbiAqIFJlYWQgYWJvdXQgRGV2RXh0cmVtZSBsaWNlbnNpbmcgaGVyZTogaHR0cHM6Ly9qcy5kZXZleHByZXNzLmNvbS9MaWNlbnNpbmcvXHJcbiAqL1xyXG52YXIgQ2FsbGJhY2sgPSBmdW5jdGlvbihvcHRpb25zKSB7XHJcbiAgICB0aGlzLl9vcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcclxuICAgIHRoaXMuX2xpc3QgPSBbXTtcclxuICAgIHRoaXMuX3F1ZXVlID0gW107XHJcbiAgICB0aGlzLl9maXJpbmcgPSBmYWxzZTtcclxuICAgIHRoaXMuX2ZpcmVkID0gZmFsc2U7XHJcbiAgICB0aGlzLl9maXJpbmdJbmRleGVzID0gW11cclxufTtcclxuQ2FsbGJhY2sucHJvdG90eXBlLl9maXJlQ29yZSA9IGZ1bmN0aW9uKGNvbnRleHQsIGFyZ3MpIHtcclxuICAgIHZhciBmaXJpbmdJbmRleGVzID0gdGhpcy5fZmlyaW5nSW5kZXhlcztcclxuICAgIHZhciBsaXN0ID0gdGhpcy5fbGlzdDtcclxuICAgIHZhciBzdG9wT25GYWxzZSA9IHRoaXMuX29wdGlvbnMuc3RvcE9uRmFsc2U7XHJcbiAgICB2YXIgc3RlcCA9IGZpcmluZ0luZGV4ZXMubGVuZ3RoO1xyXG4gICAgZm9yIChmaXJpbmdJbmRleGVzW3N0ZXBdID0gMDsgZmlyaW5nSW5kZXhlc1tzdGVwXSA8IGxpc3QubGVuZ3RoOyBmaXJpbmdJbmRleGVzW3N0ZXBdKyspIHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gbGlzdFtmaXJpbmdJbmRleGVzW3N0ZXBdXS5hcHBseShjb250ZXh0LCBhcmdzKTtcclxuICAgICAgICBpZiAoZmFsc2UgPT09IHJlc3VsdCAmJiBzdG9wT25GYWxzZSkge1xyXG4gICAgICAgICAgICBicmVha1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZpcmluZ0luZGV4ZXMucG9wKClcclxufTtcclxuQ2FsbGJhY2sucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uKGZuKSB7XHJcbiAgICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgZm4gJiYgKCF0aGlzLl9vcHRpb25zLnVuaXF1ZSB8fCAhdGhpcy5oYXMoZm4pKSkge1xyXG4gICAgICAgIHRoaXMuX2xpc3QucHVzaChmbilcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzXHJcbn07XHJcbkNhbGxiYWNrLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbihmbikge1xyXG4gICAgdmFyIGxpc3QgPSB0aGlzLl9saXN0O1xyXG4gICAgdmFyIGZpcmluZ0luZGV4ZXMgPSB0aGlzLl9maXJpbmdJbmRleGVzO1xyXG4gICAgdmFyIGluZGV4ID0gbGlzdC5pbmRleE9mKGZuKTtcclxuICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgbGlzdC5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgIGlmICh0aGlzLl9maXJpbmcgJiYgZmlyaW5nSW5kZXhlcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgc3RlcCA9IDA7IHN0ZXAgPCBmaXJpbmdJbmRleGVzLmxlbmd0aDsgc3RlcCsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPD0gZmlyaW5nSW5kZXhlc1tzdGVwXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZpcmluZ0luZGV4ZXNbc3RlcF0tLVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXNcclxufTtcclxuQ2FsbGJhY2sucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uKGZuKSB7XHJcbiAgICB2YXIgbGlzdCA9IHRoaXMuX2xpc3Q7XHJcbiAgICByZXR1cm4gZm4gPyBsaXN0LmluZGV4T2YoZm4pID4gLTEgOiAhIWxpc3QubGVuZ3RoXHJcbn07XHJcbkNhbGxiYWNrLnByb3RvdHlwZS5lbXB0eSA9IGZ1bmN0aW9uKGZuKSB7XHJcbiAgICB0aGlzLl9saXN0ID0gW107XHJcbiAgICByZXR1cm4gdGhpc1xyXG59O1xyXG5DYWxsYmFjay5wcm90b3R5cGUuZmlyZVdpdGggPSBmdW5jdGlvbihjb250ZXh0LCBhcmdzKSB7XHJcbiAgICB2YXIgcXVldWUgPSB0aGlzLl9xdWV1ZTtcclxuICAgIGFyZ3MgPSBhcmdzIHx8IFtdO1xyXG4gICAgYXJncyA9IGFyZ3Muc2xpY2UgPyBhcmdzLnNsaWNlKCkgOiBhcmdzO1xyXG4gICAgaWYgKHRoaXMuX29wdGlvbnMuc3luY1N0cmF0ZWd5KSB7XHJcbiAgICAgICAgdGhpcy5fZmlyaW5nID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9maXJlQ29yZShjb250ZXh0LCBhcmdzKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBxdWV1ZS5wdXNoKFtjb250ZXh0LCBhcmdzXSk7XHJcbiAgICAgICAgaWYgKHRoaXMuX2ZpcmluZykge1xyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fZmlyaW5nID0gdHJ1ZTtcclxuICAgICAgICB3aGlsZSAocXVldWUubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHZhciBtZW1vcnkgPSBxdWV1ZS5zaGlmdCgpO1xyXG4gICAgICAgICAgICB0aGlzLl9maXJlQ29yZShtZW1vcnlbMF0sIG1lbW9yeVsxXSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLl9maXJpbmcgPSBmYWxzZTtcclxuICAgIHRoaXMuX2ZpcmVkID0gdHJ1ZTtcclxuICAgIHJldHVybiB0aGlzXHJcbn07XHJcbkNhbGxiYWNrLnByb3RvdHlwZS5maXJlID0gZnVuY3Rpb24oKSB7XHJcbiAgICB0aGlzLmZpcmVXaXRoKHRoaXMsIGFyZ3VtZW50cylcclxufTtcclxuQ2FsbGJhY2sucHJvdG90eXBlLmZpcmVkID0gZnVuY3Rpb24oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZmlyZWRcclxufTtcclxudmFyIENhbGxiYWNrcyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcclxuICAgIHJldHVybiBuZXcgQ2FsbGJhY2sob3B0aW9ucylcclxufTtcclxuZXhwb3J0IGRlZmF1bHQgQ2FsbGJhY2tzO1xyXG4iLCIvKipcclxuICogRGV2RXh0cmVtZSAoZXNtL2NvcmUvdXRpbHMvY29tbW9uLmpzKVxyXG4gKiBWZXJzaW9uOiAyMS4xLjRcclxuICogQnVpbGQgZGF0ZTogTW9uIEp1biAyMSAyMDIxXHJcbiAqXHJcbiAqIENvcHlyaWdodCAoYykgMjAxMiAtIDIwMjEgRGV2ZWxvcGVyIEV4cHJlc3MgSW5jLiBBTEwgUklHSFRTIFJFU0VSVkVEXHJcbiAqIFJlYWQgYWJvdXQgRGV2RXh0cmVtZSBsaWNlbnNpbmcgaGVyZTogaHR0cHM6Ly9qcy5kZXZleHByZXNzLmNvbS9MaWNlbnNpbmcvXHJcbiAqL1xyXG5pbXBvcnQgY29uZmlnIGZyb20gXCIuLi9jb25maWdcIjtcclxuaW1wb3J0IEd1aWQgZnJvbSBcIi4uL2d1aWRcIjtcclxuaW1wb3J0IHtcclxuICAgIHdoZW4sXHJcbiAgICBEZWZlcnJlZFxyXG59IGZyb20gXCIuLi91dGlscy9kZWZlcnJlZFwiO1xyXG5pbXBvcnQge1xyXG4gICAgdG9Db21wYXJhYmxlXHJcbn0gZnJvbSBcIi4vZGF0YVwiO1xyXG5pbXBvcnQge1xyXG4gICAgZWFjaFxyXG59IGZyb20gXCIuL2l0ZXJhdG9yXCI7XHJcbmltcG9ydCB7XHJcbiAgICBpc0RlZmluZWQsXHJcbiAgICBpc0Z1bmN0aW9uLFxyXG4gICAgaXNTdHJpbmcsXHJcbiAgICBpc09iamVjdCxcclxuICAgIHR5cGVcclxufSBmcm9tIFwiLi90eXBlXCI7XHJcbmV4cG9ydCB2YXIgZW5zdXJlRGVmaW5lZCA9IGZ1bmN0aW9uKHZhbHVlLCBkZWZhdWx0VmFsdWUpIHtcclxuICAgIHJldHVybiBpc0RlZmluZWQodmFsdWUpID8gdmFsdWUgOiBkZWZhdWx0VmFsdWVcclxufTtcclxuZXhwb3J0IHZhciBleGVjdXRlQXN5bmMgPSBmdW5jdGlvbihhY3Rpb24sIGNvbnRleHQpIHtcclxuICAgIHZhciBkZWZlcnJlZCA9IG5ldyBEZWZlcnJlZDtcclxuICAgIHZhciBub3JtYWxpemVkQ29udGV4dCA9IGNvbnRleHQgfHwgdGhpcztcclxuICAgIHZhciB0YXNrID0ge1xyXG4gICAgICAgIHByb21pc2U6IGRlZmVycmVkLnByb21pc2UoKSxcclxuICAgICAgICBhYm9ydDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcklkKTtcclxuICAgICAgICAgICAgZGVmZXJyZWQucmVqZWN0V2l0aChub3JtYWxpemVkQ29udGV4dClcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgdmFyIGNhbGxiYWNrID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IGFjdGlvbi5jYWxsKG5vcm1hbGl6ZWRDb250ZXh0KTtcclxuICAgICAgICBpZiAocmVzdWx0ICYmIHJlc3VsdC5kb25lICYmIGlzRnVuY3Rpb24ocmVzdWx0LmRvbmUpKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdC5kb25lKChmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgIGRlZmVycmVkLnJlc29sdmVXaXRoKG5vcm1hbGl6ZWRDb250ZXh0KVxyXG4gICAgICAgICAgICB9KSlcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBkZWZlcnJlZC5yZXNvbHZlV2l0aChub3JtYWxpemVkQ29udGV4dClcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgdmFyIHRpbWVySWQgPSAoYXJndW1lbnRzWzJdIHx8IHNldFRpbWVvdXQpKGNhbGxiYWNrLCBcIm51bWJlclwiID09PSB0eXBlb2YgY29udGV4dCA/IGNvbnRleHQgOiAwKTtcclxuICAgIHJldHVybiB0YXNrXHJcbn07XHJcbnZhciBkZWxheWVkRnVuY3MgPSBbXTtcclxudmFyIGRlbGF5ZWROYW1lcyA9IFtdO1xyXG52YXIgZGVsYXllZERlZmVycmVkcyA9IFtdO1xyXG52YXIgZXhlY3V0aW5nTmFtZTtcclxudmFyIGRlZmVyRXhlY3V0ZSA9IGZ1bmN0aW9uKG5hbWUsIGZ1bmMsIGRlZmVycmVkKSB7XHJcbiAgICBpZiAoZXhlY3V0aW5nTmFtZSAmJiBleGVjdXRpbmdOYW1lICE9PSBuYW1lKSB7XHJcbiAgICAgICAgZGVsYXllZEZ1bmNzLnB1c2goZnVuYyk7XHJcbiAgICAgICAgZGVsYXllZE5hbWVzLnB1c2gobmFtZSk7XHJcbiAgICAgICAgZGVmZXJyZWQgPSBkZWZlcnJlZCB8fCBuZXcgRGVmZXJyZWQ7XHJcbiAgICAgICAgZGVsYXllZERlZmVycmVkcy5wdXNoKGRlZmVycmVkKTtcclxuICAgICAgICByZXR1cm4gZGVmZXJyZWRcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdmFyIG9sZEV4ZWN1dGluZ05hbWUgPSBleGVjdXRpbmdOYW1lO1xyXG4gICAgICAgIHZhciBjdXJyZW50RGVsYXllZENvdW50ID0gZGVsYXllZERlZmVycmVkcy5sZW5ndGg7XHJcbiAgICAgICAgZXhlY3V0aW5nTmFtZSA9IG5hbWU7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IGZ1bmMoKTtcclxuICAgICAgICBpZiAoIXJlc3VsdCkge1xyXG4gICAgICAgICAgICBpZiAoZGVsYXllZERlZmVycmVkcy5sZW5ndGggPiBjdXJyZW50RGVsYXllZENvdW50KSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSB3aGVuLmFwcGx5KHRoaXMsIGRlbGF5ZWREZWZlcnJlZHMuc2xpY2UoY3VycmVudERlbGF5ZWRDb3VudCkpXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZGVmZXJyZWQpIHtcclxuICAgICAgICAgICAgICAgIGRlZmVycmVkLnJlc29sdmUoKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGV4ZWN1dGluZ05hbWUgPSBvbGRFeGVjdXRpbmdOYW1lO1xyXG4gICAgICAgIGlmIChkZWZlcnJlZCAmJiByZXN1bHQgJiYgcmVzdWx0LmRvbmUpIHtcclxuICAgICAgICAgICAgcmVzdWx0LmRvbmUoZGVmZXJyZWQucmVzb2x2ZSkuZmFpbChkZWZlcnJlZC5yZWplY3QpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghZXhlY3V0aW5nTmFtZSAmJiBkZWxheWVkRnVuY3MubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIChcInJlbmRlclwiID09PSBkZWxheWVkTmFtZXMuc2hpZnQoKSA/IGRlZmVyUmVuZGVyIDogZGVmZXJVcGRhdGUpKGRlbGF5ZWRGdW5jcy5zaGlmdCgpLCBkZWxheWVkRGVmZXJyZWRzLnNoaWZ0KCkpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQgfHwgd2hlbigpXHJcbiAgICB9XHJcbn07XHJcbmV4cG9ydCB2YXIgZGVmZXJSZW5kZXIgPSBmdW5jdGlvbihmdW5jLCBkZWZlcnJlZCkge1xyXG4gICAgcmV0dXJuIGRlZmVyRXhlY3V0ZShcInJlbmRlclwiLCBmdW5jLCBkZWZlcnJlZClcclxufTtcclxuZXhwb3J0IHZhciBkZWZlclVwZGF0ZSA9IGZ1bmN0aW9uKGZ1bmMsIGRlZmVycmVkKSB7XHJcbiAgICByZXR1cm4gZGVmZXJFeGVjdXRlKFwidXBkYXRlXCIsIGZ1bmMsIGRlZmVycmVkKVxyXG59O1xyXG5leHBvcnQgdmFyIGRlZmVyUmVuZGVyZXIgPSBmdW5jdGlvbihmdW5jKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xyXG4gICAgICAgIHJldHVybiBkZWZlckV4ZWN1dGUoXCJyZW5kZXJcIiwgKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZnVuYy5jYWxsKHRoYXQpXHJcbiAgICAgICAgfSkpXHJcbiAgICB9XHJcbn07XHJcbmV4cG9ydCB2YXIgZGVmZXJVcGRhdGVyID0gZnVuY3Rpb24oZnVuYykge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciB0aGF0ID0gdGhpcztcclxuICAgICAgICByZXR1cm4gZGVmZXJFeGVjdXRlKFwidXBkYXRlXCIsIChmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbCh0aGF0KVxyXG4gICAgICAgIH0pKVxyXG4gICAgfVxyXG59O1xyXG5leHBvcnQgdmFyIGZpbmRCZXN0TWF0Y2hlcyA9IGZ1bmN0aW9uKHRhcmdldEZpbHRlciwgaXRlbXMsIG1hcEZuKSB7XHJcbiAgICB2YXIgYmVzdE1hdGNoZXMgPSBbXTtcclxuICAgIHZhciBtYXhNYXRjaENvdW50ID0gMDtcclxuICAgIGVhY2goaXRlbXMsIChpbmRleCwgaXRlbVNyYykgPT4ge1xyXG4gICAgICAgIHZhciBtYXRjaENvdW50ID0gMDtcclxuICAgICAgICB2YXIgaXRlbSA9IG1hcEZuID8gbWFwRm4oaXRlbVNyYykgOiBpdGVtU3JjO1xyXG4gICAgICAgIGVhY2godGFyZ2V0RmlsdGVyLCAocGFyYW1OYW1lLCB0YXJnZXRWYWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICB2YXIgdmFsdWUgPSBpdGVtW3BhcmFtTmFtZV07XHJcbiAgICAgICAgICAgIGlmICh2b2lkIDAgPT09IHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAobWF0Y2godmFsdWUsIHRhcmdldFZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgbWF0Y2hDb3VudCsrO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbWF0Y2hDb3VudCA9IC0xO1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAobWF0Y2hDb3VudCA8IG1heE1hdGNoQ291bnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtYXRjaENvdW50ID4gbWF4TWF0Y2hDb3VudCkge1xyXG4gICAgICAgICAgICBiZXN0TWF0Y2hlcy5sZW5ndGggPSAwO1xyXG4gICAgICAgICAgICBtYXhNYXRjaENvdW50ID0gbWF0Y2hDb3VudFxyXG4gICAgICAgIH1cclxuICAgICAgICBiZXN0TWF0Y2hlcy5wdXNoKGl0ZW1TcmMpXHJcbiAgICB9KTtcclxuICAgIHJldHVybiBiZXN0TWF0Y2hlc1xyXG59O1xyXG52YXIgbWF0Y2ggPSBmdW5jdGlvbih2YWx1ZSwgdGFyZ2V0VmFsdWUpIHtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSAmJiBBcnJheS5pc0FycmF5KHRhcmdldFZhbHVlKSkge1xyXG4gICAgICAgIHZhciBtaXNtYXRjaCA9IGZhbHNlO1xyXG4gICAgICAgIGVhY2godmFsdWUsIChpbmRleCwgdmFsdWVJdGVtKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZUl0ZW0gIT09IHRhcmdldFZhbHVlW2luZGV4XSkge1xyXG4gICAgICAgICAgICAgICAgbWlzbWF0Y2ggPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAobWlzbWF0Y2gpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9XHJcbiAgICBpZiAodmFsdWUgPT09IHRhcmdldFZhbHVlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWVcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZVxyXG59O1xyXG5leHBvcnQgdmFyIHNwbGl0UGFpciA9IGZ1bmN0aW9uKHJhdykge1xyXG4gICAgdmFyIF9yYXckeCwgX3JhdyR5O1xyXG4gICAgc3dpdGNoICh0eXBlKHJhdykpIHtcclxuICAgICAgICBjYXNlIFwic3RyaW5nXCI6XHJcbiAgICAgICAgICAgIHJldHVybiByYXcuc3BsaXQoL1xccysvLCAyKTtcclxuICAgICAgICBjYXNlIFwib2JqZWN0XCI6XHJcbiAgICAgICAgICAgIHJldHVybiBbbnVsbCAhPT0gKF9yYXckeCA9IHJhdy54KSAmJiB2b2lkIDAgIT09IF9yYXckeCA/IF9yYXckeCA6IHJhdy5oLCBudWxsICE9PSAoX3JhdyR5ID0gcmF3LnkpICYmIHZvaWQgMCAhPT0gX3JhdyR5ID8gX3JhdyR5IDogcmF3LnZdO1xyXG4gICAgICAgIGNhc2UgXCJudW1iZXJcIjpcclxuICAgICAgICAgICAgcmV0dXJuIFtyYXddO1xyXG4gICAgICAgIGNhc2UgXCJhcnJheVwiOlxyXG4gICAgICAgICAgICByZXR1cm4gcmF3O1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsXHJcbiAgICB9XHJcbn07XHJcbmV4cG9ydCB2YXIgbm9ybWFsaXplS2V5ID0gZnVuY3Rpb24oaWQpIHtcclxuICAgIHZhciBrZXkgPSBpc1N0cmluZyhpZCkgPyBpZCA6IGlkLnRvU3RyaW5nKCk7XHJcbiAgICB2YXIgYXJyID0ga2V5Lm1hdGNoKC9bXmEtekEtWjAtOV9dL2cpO1xyXG4gICAgYXJyICYmIGVhY2goYXJyLCAoXywgc2lnbikgPT4ge1xyXG4gICAgICAgIGtleSA9IGtleS5yZXBsYWNlKHNpZ24sIFwiX19cIiArIHNpZ24uY2hhckNvZGVBdCgpICsgXCJfX1wiKVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4ga2V5XHJcbn07XHJcbmV4cG9ydCB2YXIgZGVub3JtYWxpemVLZXkgPSBmdW5jdGlvbihrZXkpIHtcclxuICAgIHZhciBhcnIgPSBrZXkubWF0Y2goL19fXFxkK19fL2cpO1xyXG4gICAgYXJyICYmIGFyci5mb3JFYWNoKGNoYXIgPT4ge1xyXG4gICAgICAgIHZhciBjaGFyQ29kZSA9IHBhcnNlSW50KGNoYXIucmVwbGFjZShcIl9fXCIsIFwiXCIpKTtcclxuICAgICAgICBrZXkgPSBrZXkucmVwbGFjZShjaGFyLCBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoYXJDb2RlKSlcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGtleVxyXG59O1xyXG5leHBvcnQgdmFyIHBhaXJUb09iamVjdCA9IGZ1bmN0aW9uKHJhdywgcHJldmVudFJvdW5kKSB7XHJcbiAgICB2YXIgcGFpciA9IHNwbGl0UGFpcihyYXcpO1xyXG4gICAgdmFyIGggPSBwcmV2ZW50Um91bmQgPyBwYXJzZUZsb2F0KHBhaXIgJiYgcGFpclswXSkgOiBwYXJzZUludChwYWlyICYmIHBhaXJbMF0sIDEwKTtcclxuICAgIHZhciB2ID0gcHJldmVudFJvdW5kID8gcGFyc2VGbG9hdChwYWlyICYmIHBhaXJbMV0pIDogcGFyc2VJbnQocGFpciAmJiBwYWlyWzFdLCAxMCk7XHJcbiAgICBpZiAoIWlzRmluaXRlKGgpKSB7XHJcbiAgICAgICAgaCA9IDBcclxuICAgIH1cclxuICAgIGlmICghaXNGaW5pdGUodikpIHtcclxuICAgICAgICB2ID0gaFxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBoOiBoLFxyXG4gICAgICAgIHY6IHZcclxuICAgIH1cclxufTtcclxuZXhwb3J0IHZhciBnZXRLZXlIYXNoID0gZnVuY3Rpb24oa2V5KSB7XHJcbiAgICBpZiAoa2V5IGluc3RhbmNlb2YgR3VpZCkge1xyXG4gICAgICAgIHJldHVybiBrZXkudG9TdHJpbmcoKVxyXG4gICAgfSBlbHNlIGlmIChpc09iamVjdChrZXkpIHx8IEFycmF5LmlzQXJyYXkoa2V5KSkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHZhciBrZXlIYXNoID0gSlNPTi5zdHJpbmdpZnkoa2V5KTtcclxuICAgICAgICAgICAgcmV0dXJuIFwie31cIiA9PT0ga2V5SGFzaCA/IGtleSA6IGtleUhhc2hcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBrZXlcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4ga2V5XHJcbn07XHJcbmV4cG9ydCB2YXIgZXNjYXBlUmVnRXhwID0gZnVuY3Rpb24oc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1tbXFxde31cXC0oKSorPy5cXFxcXiR8XFxzXS9nLCBcIlxcXFwkJlwiKVxyXG59O1xyXG5leHBvcnQgdmFyIGFwcGx5U2VydmVyRGVjaW1hbFNlcGFyYXRvciA9IGZ1bmN0aW9uKHZhbHVlKSB7XHJcbiAgICB2YXIgc2VwYXJhdG9yID0gY29uZmlnKCkuc2VydmVyRGVjaW1hbFNlcGFyYXRvcjtcclxuICAgIGlmIChpc0RlZmluZWQodmFsdWUpKSB7XHJcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS50b1N0cmluZygpLnJlcGxhY2UoXCIuXCIsIHNlcGFyYXRvcilcclxuICAgIH1cclxuICAgIHJldHVybiB2YWx1ZVxyXG59O1xyXG5leHBvcnQgdmFyIG5vb3AgPSBmdW5jdGlvbigpIHt9O1xyXG5leHBvcnQgdmFyIGFzeW5jTm9vcCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgcmV0dXJuIChuZXcgRGVmZXJyZWQpLnJlc29sdmUoKS5wcm9taXNlKClcclxufTtcclxuZXhwb3J0IHZhciBncmVwID0gZnVuY3Rpb24oZWxlbWVudHMsIGNoZWNrRnVuY3Rpb24sIGludmVydCkge1xyXG4gICAgdmFyIHJlc3VsdCA9IFtdO1xyXG4gICAgdmFyIGNoZWNrO1xyXG4gICAgdmFyIGV4cGVjdGVkQ2hlY2sgPSAhaW52ZXJ0O1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNoZWNrID0gISFjaGVja0Z1bmN0aW9uKGVsZW1lbnRzW2ldLCBpKTtcclxuICAgICAgICBpZiAoY2hlY2sgPT09IGV4cGVjdGVkQ2hlY2spIHtcclxuICAgICAgICAgICAgcmVzdWx0LnB1c2goZWxlbWVudHNbaV0pXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdFxyXG59O1xyXG52YXIgYXJyYXlzRXF1YWxCeVZhbHVlID0gZnVuY3Rpb24oYXJyYXkxLCBhcnJheTIsIGRlcHRoKSB7XHJcbiAgICBpZiAoYXJyYXkxLmxlbmd0aCAhPT0gYXJyYXkyLmxlbmd0aCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgfVxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheTEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBpZiAoIWVxdWFsQnlWYWx1ZShhcnJheTFbaV0sIGFycmF5MltpXSwgZGVwdGggKyAxKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZVxyXG59O1xyXG52YXIgb2JqZWN0c0VxdWFsQnlWYWx1ZSA9IGZ1bmN0aW9uKG9iamVjdDEsIG9iamVjdDIsIGRlcHRoLCBzdHJpY3QpIHtcclxuICAgIGZvciAodmFyIHByb3BlcnR5TmFtZSBpbiBvYmplY3QxKSB7XHJcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QxLCBwcm9wZXJ0eU5hbWUpICYmICFlcXVhbEJ5VmFsdWUob2JqZWN0MVtwcm9wZXJ0eU5hbWVdLCBvYmplY3QyW3Byb3BlcnR5TmFtZV0sIGRlcHRoICsgMSwgc3RyaWN0KSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmb3IgKHZhciBfcHJvcGVydHlOYW1lIGluIG9iamVjdDIpIHtcclxuICAgICAgICBpZiAoIShfcHJvcGVydHlOYW1lIGluIG9iamVjdDEpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlXHJcbn07XHJcbnZhciBtYXhFcXVhbGl0eURlcHRoID0gMztcclxuZXhwb3J0IHZhciBlcXVhbEJ5VmFsdWUgPSBmdW5jdGlvbihvYmplY3QxLCBvYmplY3QyKSB7XHJcbiAgICB2YXIgZGVwdGggPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiB2b2lkIDAgIT09IGFyZ3VtZW50c1syXSA/IGFyZ3VtZW50c1syXSA6IDA7XHJcbiAgICB2YXIgc3RyaWN0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgdm9pZCAwICE9PSBhcmd1bWVudHNbM10gPyBhcmd1bWVudHNbM10gOiB0cnVlO1xyXG4gICAgb2JqZWN0MSA9IHRvQ29tcGFyYWJsZShvYmplY3QxLCB0cnVlKTtcclxuICAgIG9iamVjdDIgPSB0b0NvbXBhcmFibGUob2JqZWN0MiwgdHJ1ZSk7XHJcbiAgICB2YXIgY29tcGFyaXNvblJlc3VsdCA9IHN0cmljdCA/IG9iamVjdDEgPT09IG9iamVjdDIgOiBvYmplY3QxID09IG9iamVjdDI7XHJcbiAgICBpZiAoY29tcGFyaXNvblJlc3VsdCB8fCBkZXB0aCA+PSBtYXhFcXVhbGl0eURlcHRoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWVcclxuICAgIH1cclxuICAgIGlmIChpc09iamVjdChvYmplY3QxKSAmJiBpc09iamVjdChvYmplY3QyKSkge1xyXG4gICAgICAgIHJldHVybiBvYmplY3RzRXF1YWxCeVZhbHVlKG9iamVjdDEsIG9iamVjdDIsIGRlcHRoLCBzdHJpY3QpXHJcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkob2JqZWN0MSkgJiYgQXJyYXkuaXNBcnJheShvYmplY3QyKSkge1xyXG4gICAgICAgIHJldHVybiBhcnJheXNFcXVhbEJ5VmFsdWUob2JqZWN0MSwgb2JqZWN0MiwgZGVwdGgpXHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2VcclxufTtcclxuIiwiLyoqXHJcbiAqIERldkV4dHJlbWUgKGVzbS9jb3JlL3V0aWxzL2NvbnNvbGUuanMpXHJcbiAqIFZlcnNpb246IDIxLjEuNFxyXG4gKiBCdWlsZCBkYXRlOiBNb24gSnVuIDIxIDIwMjFcclxuICpcclxuICogQ29weXJpZ2h0IChjKSAyMDEyIC0gMjAyMSBEZXZlbG9wZXIgRXhwcmVzcyBJbmMuIEFMTCBSSUdIVFMgUkVTRVJWRURcclxuICogUmVhZCBhYm91dCBEZXZFeHRyZW1lIGxpY2Vuc2luZyBoZXJlOiBodHRwczovL2pzLmRldmV4cHJlc3MuY29tL0xpY2Vuc2luZy9cclxuICovXHJcbmltcG9ydCB7XHJcbiAgICBpc0Z1bmN0aW9uXHJcbn0gZnJvbSBcIi4vdHlwZVwiO1xyXG52YXIgbm9vcCA9IGZ1bmN0aW9uKCkge307XHJcbnZhciBnZXRDb25zb2xlTWV0aG9kID0gZnVuY3Rpb24obWV0aG9kKSB7XHJcbiAgICBpZiAoXCJ1bmRlZmluZWRcIiA9PT0gdHlwZW9mIGNvbnNvbGUgfHwgIWlzRnVuY3Rpb24oY29uc29sZVttZXRob2RdKSkge1xyXG4gICAgICAgIHJldHVybiBub29wXHJcbiAgICB9XHJcbiAgICByZXR1cm4gY29uc29sZVttZXRob2RdLmJpbmQoY29uc29sZSlcclxufTtcclxuZXhwb3J0IHZhciBsb2dnZXIgPSB7XHJcbiAgICBpbmZvOiBnZXRDb25zb2xlTWV0aG9kKFwiaW5mb1wiKSxcclxuICAgIHdhcm46IGdldENvbnNvbGVNZXRob2QoXCJ3YXJuXCIpLFxyXG4gICAgZXJyb3I6IGdldENvbnNvbGVNZXRob2QoXCJlcnJvclwiKVxyXG59O1xyXG5leHBvcnQgdmFyIGRlYnVnID0gZnVuY3Rpb24oKSB7XHJcbiAgICBmdW5jdGlvbiBhc3NlcnQoY29uZGl0aW9uLCBtZXNzYWdlKSB7XHJcbiAgICAgICAgaWYgKCFjb25kaXRpb24pIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBhc3NlcnQ6IGFzc2VydCxcclxuICAgICAgICBhc3NlcnRQYXJhbTogZnVuY3Rpb24ocGFyYW1ldGVyLCBtZXNzYWdlKSB7XHJcbiAgICAgICAgICAgIGFzc2VydChudWxsICE9PSBwYXJhbWV0ZXIgJiYgdm9pZCAwICE9PSBwYXJhbWV0ZXIsIG1lc3NhZ2UpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59KCk7XHJcbiIsIi8qKlxyXG4gKiBEZXZFeHRyZW1lIChlc20vY29yZS91dGlscy9kYXRhLmpzKVxyXG4gKiBWZXJzaW9uOiAyMS4xLjRcclxuICogQnVpbGQgZGF0ZTogTW9uIEp1biAyMSAyMDIxXHJcbiAqXHJcbiAqIENvcHlyaWdodCAoYykgMjAxMiAtIDIwMjEgRGV2ZWxvcGVyIEV4cHJlc3MgSW5jLiBBTEwgUklHSFRTIFJFU0VSVkVEXHJcbiAqIFJlYWQgYWJvdXQgRGV2RXh0cmVtZSBsaWNlbnNpbmcgaGVyZTogaHR0cHM6Ly9qcy5kZXZleHByZXNzLmNvbS9MaWNlbnNpbmcvXHJcbiAqL1xyXG5pbXBvcnQgZXJyb3JzIGZyb20gXCIuLi9lcnJvcnNcIjtcclxuaW1wb3J0IENsYXNzIGZyb20gXCIuLi9jbGFzc1wiO1xyXG5pbXBvcnQge1xyXG4gICAgZGVlcEV4dGVuZEFycmF5U2FmZVxyXG59IGZyb20gXCIuL29iamVjdFwiO1xyXG5pbXBvcnQge1xyXG4gICAgaXNPYmplY3QsXHJcbiAgICBpc1BsYWluT2JqZWN0LFxyXG4gICAgaXNGdW5jdGlvbixcclxuICAgIGlzRGVmaW5lZFxyXG59IGZyb20gXCIuL3R5cGVcIjtcclxuaW1wb3J0IHtcclxuICAgIGVhY2hcclxufSBmcm9tIFwiLi9pdGVyYXRvclwiO1xyXG5pbXBvcnQgdmFyaWFibGVXcmFwcGVyIGZyb20gXCIuL3ZhcmlhYmxlX3dyYXBwZXJcIjtcclxudmFyIHVud3JhcFZhcmlhYmxlID0gdmFyaWFibGVXcmFwcGVyLnVud3JhcDtcclxudmFyIGlzV3JhcHBlZCA9IHZhcmlhYmxlV3JhcHBlci5pc1dyYXBwZWQ7XHJcbnZhciBhc3NpZ24gPSB2YXJpYWJsZVdyYXBwZXIuYXNzaWduO1xyXG52YXIgYnJhY2tldHNUb0RvdHMgPSBmdW5jdGlvbihleHByKSB7XHJcbiAgICByZXR1cm4gZXhwci5yZXBsYWNlKC9cXFsvZywgXCIuXCIpLnJlcGxhY2UoL1xcXS9nLCBcIlwiKVxyXG59O1xyXG52YXIgcmVhZFByb3BWYWx1ZSA9IGZ1bmN0aW9uKG9iaiwgcHJvcE5hbWUsIG9wdGlvbnMpIHtcclxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xyXG4gICAgaWYgKFwidGhpc1wiID09PSBwcm9wTmFtZSkge1xyXG4gICAgICAgIHJldHVybiB1bndyYXAob2JqLCBvcHRpb25zKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHVud3JhcChvYmpbcHJvcE5hbWVdLCBvcHRpb25zKVxyXG59O1xyXG52YXIgYXNzaWduUHJvcFZhbHVlID0gZnVuY3Rpb24ob2JqLCBwcm9wTmFtZSwgdmFsdWUsIG9wdGlvbnMpIHtcclxuICAgIGlmIChcInRoaXNcIiA9PT0gcHJvcE5hbWUpIHtcclxuICAgICAgICB0aHJvdyBuZXcgZXJyb3JzLkVycm9yKFwiRTQwMTZcIilcclxuICAgIH1cclxuICAgIHZhciBwcm9wVmFsdWUgPSBvYmpbcHJvcE5hbWVdO1xyXG4gICAgaWYgKG9wdGlvbnMudW53cmFwT2JzZXJ2YWJsZXMgJiYgaXNXcmFwcGVkKHByb3BWYWx1ZSkpIHtcclxuICAgICAgICBhc3NpZ24ocHJvcFZhbHVlLCB2YWx1ZSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgb2JqW3Byb3BOYW1lXSA9IHZhbHVlXHJcbiAgICB9XHJcbn07XHJcbnZhciBwcmVwYXJlT3B0aW9ucyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcclxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xyXG4gICAgb3B0aW9ucy51bndyYXBPYnNlcnZhYmxlcyA9IHZvaWQgMCAhPT0gb3B0aW9ucy51bndyYXBPYnNlcnZhYmxlcyA/IG9wdGlvbnMudW53cmFwT2JzZXJ2YWJsZXMgOiB0cnVlO1xyXG4gICAgcmV0dXJuIG9wdGlvbnNcclxufTtcclxuXHJcbmZ1bmN0aW9uIHVud3JhcCh2YWx1ZSwgb3B0aW9ucykge1xyXG4gICAgcmV0dXJuIG9wdGlvbnMudW53cmFwT2JzZXJ2YWJsZXMgPyB1bndyYXBWYXJpYWJsZSh2YWx1ZSkgOiB2YWx1ZVxyXG59XHJcbmV4cG9ydCB2YXIgY29tcGlsZUdldHRlciA9IGZ1bmN0aW9uKGV4cHIpIHtcclxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xyXG4gICAgICAgIGV4cHIgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cylcclxuICAgIH1cclxuICAgIGlmICghZXhwciB8fCBcInRoaXNcIiA9PT0gZXhwcikge1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbihvYmopIHtcclxuICAgICAgICAgICAgcmV0dXJuIG9ialxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChcInN0cmluZ1wiID09PSB0eXBlb2YgZXhwcikge1xyXG4gICAgICAgIGV4cHIgPSBicmFja2V0c1RvRG90cyhleHByKTtcclxuICAgICAgICB2YXIgcGF0aCA9IGV4cHIuc3BsaXQoXCIuXCIpO1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbihvYmosIG9wdGlvbnMpIHtcclxuICAgICAgICAgICAgb3B0aW9ucyA9IHByZXBhcmVPcHRpb25zKG9wdGlvbnMpO1xyXG4gICAgICAgICAgICB2YXIgZnVuY3Rpb25Bc0lzID0gb3B0aW9ucy5mdW5jdGlvbnNBc0lzO1xyXG4gICAgICAgICAgICB2YXIgaGFzRGVmYXVsdFZhbHVlID0gXCJkZWZhdWx0VmFsdWVcIiBpbiBvcHRpb25zO1xyXG4gICAgICAgICAgICB2YXIgY3VycmVudCA9IHVud3JhcChvYmosIG9wdGlvbnMpO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGlmICghY3VycmVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChudWxsID09IGN1cnJlbnQgJiYgaGFzRGVmYXVsdFZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvcHRpb25zLmRlZmF1bHRWYWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdmFyIHBhdGhQYXJ0ID0gcGF0aFtpXTtcclxuICAgICAgICAgICAgICAgIGlmIChoYXNEZWZhdWx0VmFsdWUgJiYgaXNPYmplY3QoY3VycmVudCkgJiYgIShwYXRoUGFydCBpbiBjdXJyZW50KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvcHRpb25zLmRlZmF1bHRWYWx1ZVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdmFyIG5leHQgPSB1bndyYXAoY3VycmVudFtwYXRoUGFydF0sIG9wdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFmdW5jdGlvbkFzSXMgJiYgaXNGdW5jdGlvbihuZXh0KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG5leHQgPSBuZXh0LmNhbGwoY3VycmVudClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBuZXh0XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShleHByKSkge1xyXG4gICAgICAgIHJldHVybiBjb21iaW5lR2V0dGVycyhleHByKVxyXG4gICAgfVxyXG4gICAgaWYgKGlzRnVuY3Rpb24oZXhwcikpIHtcclxuICAgICAgICByZXR1cm4gZXhwclxyXG4gICAgfVxyXG59O1xyXG5cclxuZnVuY3Rpb24gY29tYmluZUdldHRlcnMoZ2V0dGVycykge1xyXG4gICAgdmFyIGNvbXBpbGVkR2V0dGVycyA9IHt9O1xyXG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSBnZXR0ZXJzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgIHZhciBnZXR0ZXIgPSBnZXR0ZXJzW2ldO1xyXG4gICAgICAgIGNvbXBpbGVkR2V0dGVyc1tnZXR0ZXJdID0gY29tcGlsZUdldHRlcihnZXR0ZXIpXHJcbiAgICB9XHJcbiAgICByZXR1cm4gZnVuY3Rpb24ob2JqLCBvcHRpb25zKSB7XHJcbiAgICAgICAgdmFyIHJlc3VsdDtcclxuICAgICAgICBlYWNoKGNvbXBpbGVkR2V0dGVycywgKGZ1bmN0aW9uKG5hbWUpIHtcclxuICAgICAgICAgICAgdmFyIHZhbHVlID0gdGhpcyhvYmosIG9wdGlvbnMpO1xyXG4gICAgICAgICAgICBpZiAodm9pZCAwID09PSB2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGN1cnJlbnQgPSByZXN1bHQgfHwgKHJlc3VsdCA9IHt9KTtcclxuICAgICAgICAgICAgdmFyIHBhdGggPSBuYW1lLnNwbGl0KFwiLlwiKTtcclxuICAgICAgICAgICAgdmFyIGxhc3QgPSBwYXRoLmxlbmd0aCAtIDE7XHJcbiAgICAgICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBsYXN0OyBfaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcGF0aEl0ZW0gPSBwYXRoW19pXTtcclxuICAgICAgICAgICAgICAgIGlmICghKHBhdGhJdGVtIGluIGN1cnJlbnQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFtwYXRoSXRlbV0gPSB7fVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnRbcGF0aEl0ZW1dXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY3VycmVudFtwYXRoW2xhc3RdXSA9IHZhbHVlXHJcbiAgICAgICAgfSkpO1xyXG4gICAgICAgIHJldHVybiByZXN1bHRcclxuICAgIH1cclxufVxyXG52YXIgZW5zdXJlUHJvcFZhbHVlRGVmaW5lZCA9IGZ1bmN0aW9uKG9iaiwgcHJvcE5hbWUsIHZhbHVlLCBvcHRpb25zKSB7XHJcbiAgICBpZiAoaXNEZWZpbmVkKHZhbHVlKSkge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZVxyXG4gICAgfVxyXG4gICAgdmFyIG5ld1ZhbHVlID0ge307XHJcbiAgICBhc3NpZ25Qcm9wVmFsdWUob2JqLCBwcm9wTmFtZSwgbmV3VmFsdWUsIG9wdGlvbnMpO1xyXG4gICAgcmV0dXJuIG5ld1ZhbHVlXHJcbn07XHJcbmV4cG9ydCB2YXIgY29tcGlsZVNldHRlciA9IGZ1bmN0aW9uKGV4cHIpIHtcclxuICAgIGV4cHIgPSBicmFja2V0c1RvRG90cyhleHByIHx8IFwidGhpc1wiKS5zcGxpdChcIi5cIik7XHJcbiAgICB2YXIgbGFzdExldmVsSW5kZXggPSBleHByLmxlbmd0aCAtIDE7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24ob2JqLCB2YWx1ZSwgb3B0aW9ucykge1xyXG4gICAgICAgIG9wdGlvbnMgPSBwcmVwYXJlT3B0aW9ucyhvcHRpb25zKTtcclxuICAgICAgICB2YXIgY3VycmVudFZhbHVlID0gdW53cmFwKG9iaiwgb3B0aW9ucyk7XHJcbiAgICAgICAgZXhwci5mb3JFYWNoKChmdW5jdGlvbihwcm9wZXJ0eU5hbWUsIGxldmVsSW5kZXgpIHtcclxuICAgICAgICAgICAgdmFyIHByb3BlcnR5VmFsdWUgPSByZWFkUHJvcFZhbHVlKGN1cnJlbnRWYWx1ZSwgcHJvcGVydHlOYW1lLCBvcHRpb25zKTtcclxuICAgICAgICAgICAgdmFyIGlzUHJvcGVydHlGdW5jID0gIW9wdGlvbnMuZnVuY3Rpb25zQXNJcyAmJiBpc0Z1bmN0aW9uKHByb3BlcnR5VmFsdWUpICYmICFpc1dyYXBwZWQocHJvcGVydHlWYWx1ZSk7XHJcbiAgICAgICAgICAgIGlmIChsZXZlbEluZGV4ID09PSBsYXN0TGV2ZWxJbmRleCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMubWVyZ2UgJiYgaXNQbGFpbk9iamVjdCh2YWx1ZSkgJiYgKCFpc0RlZmluZWQocHJvcGVydHlWYWx1ZSkgfHwgaXNQbGFpbk9iamVjdChwcm9wZXJ0eVZhbHVlKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVZhbHVlID0gZW5zdXJlUHJvcFZhbHVlRGVmaW5lZChjdXJyZW50VmFsdWUsIHByb3BlcnR5TmFtZSwgcHJvcGVydHlWYWx1ZSwgb3B0aW9ucyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVlcEV4dGVuZEFycmF5U2FmZShwcm9wZXJ0eVZhbHVlLCB2YWx1ZSwgZmFsc2UsIHRydWUpXHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzUHJvcGVydHlGdW5jKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFZhbHVlW3Byb3BlcnR5TmFtZV0odmFsdWUpXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGFzc2lnblByb3BWYWx1ZShjdXJyZW50VmFsdWUsIHByb3BlcnR5TmFtZSwgdmFsdWUsIG9wdGlvbnMpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eVZhbHVlID0gZW5zdXJlUHJvcFZhbHVlRGVmaW5lZChjdXJyZW50VmFsdWUsIHByb3BlcnR5TmFtZSwgcHJvcGVydHlWYWx1ZSwgb3B0aW9ucyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNQcm9wZXJ0eUZ1bmMpIHtcclxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVZhbHVlID0gcHJvcGVydHlWYWx1ZS5jYWxsKGN1cnJlbnRWYWx1ZSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGN1cnJlbnRWYWx1ZSA9IHByb3BlcnR5VmFsdWVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pKVxyXG4gICAgfVxyXG59O1xyXG5leHBvcnQgdmFyIHRvQ29tcGFyYWJsZSA9IGZ1bmN0aW9uKHZhbHVlLCBjYXNlU2Vuc2l0aXZlKSB7XHJcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlLmdldFRpbWUoKVxyXG4gICAgfVxyXG4gICAgaWYgKHZhbHVlICYmIHZhbHVlIGluc3RhbmNlb2YgQ2xhc3MgJiYgdmFsdWUudmFsdWVPZikge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZS52YWx1ZU9mKClcclxuICAgIH1cclxuICAgIGlmICghY2FzZVNlbnNpdGl2ZSAmJiBcInN0cmluZ1wiID09PSB0eXBlb2YgdmFsdWUpIHtcclxuICAgICAgICByZXR1cm4gdmFsdWUudG9Mb3dlckNhc2UoKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZhbHVlXHJcbn07XHJcbiIsIi8qKlxyXG4gKiBEZXZFeHRyZW1lIChlc20vY29yZS91dGlscy9kZWZlcnJlZC5qcylcclxuICogVmVyc2lvbjogMjEuMS40XHJcbiAqIEJ1aWxkIGRhdGU6IE1vbiBKdW4gMjEgMjAyMVxyXG4gKlxyXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTIgLSAyMDIxIERldmVsb3BlciBFeHByZXNzIEluYy4gQUxMIFJJR0hUUyBSRVNFUlZFRFxyXG4gKiBSZWFkIGFib3V0IERldkV4dHJlbWUgbGljZW5zaW5nIGhlcmU6IGh0dHBzOi8vanMuZGV2ZXhwcmVzcy5jb20vTGljZW5zaW5nL1xyXG4gKi9cclxuaW1wb3J0IHtcclxuICAgIGlzRGVmZXJyZWQsXHJcbiAgICBpc0RlZmluZWQsXHJcbiAgICBpc1Byb21pc2VcclxufSBmcm9tIFwiLi4vdXRpbHMvdHlwZVwiO1xyXG5pbXBvcnQge1xyXG4gICAgZXh0ZW5kXHJcbn0gZnJvbSBcIi4uL3V0aWxzL2V4dGVuZFwiO1xyXG5pbXBvcnQgQ2FsbGJhY2tzIGZyb20gXCIuLi91dGlscy9jYWxsYmFja3NcIjtcclxudmFyIGRlZmVycmVkQ29uZmlnID0gW3tcclxuICAgIG1ldGhvZDogXCJyZXNvbHZlXCIsXHJcbiAgICBoYW5kbGVyOiBcImRvbmVcIixcclxuICAgIHN0YXRlOiBcInJlc29sdmVkXCJcclxufSwge1xyXG4gICAgbWV0aG9kOiBcInJlamVjdFwiLFxyXG4gICAgaGFuZGxlcjogXCJmYWlsXCIsXHJcbiAgICBzdGF0ZTogXCJyZWplY3RlZFwiXHJcbn0sIHtcclxuICAgIG1ldGhvZDogXCJub3RpZnlcIixcclxuICAgIGhhbmRsZXI6IFwicHJvZ3Jlc3NcIlxyXG59XTtcclxudmFyIF9EZWZlcnJlZE9iaiA9IGZ1bmN0aW9uKCkge1xyXG4gICAgdmFyIHRoYXQgPSB0aGlzO1xyXG4gICAgdGhpcy5fc3RhdGUgPSBcInBlbmRpbmdcIjtcclxuICAgIHRoaXMuX3Byb21pc2UgPSB7fTtcclxuICAgIGRlZmVycmVkQ29uZmlnLmZvckVhY2goZnVuY3Rpb24oY29uZmlnKSB7XHJcbiAgICAgICAgdmFyIG1ldGhvZE5hbWUgPSBjb25maWcubWV0aG9kO1xyXG4gICAgICAgIHRoaXNbbWV0aG9kTmFtZSArIFwiQ2FsbGJhY2tzXCJdID0gbmV3IENhbGxiYWNrcztcclxuICAgICAgICB0aGlzW21ldGhvZE5hbWVdID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzW21ldGhvZE5hbWUgKyBcIldpdGhcIl0odGhpcy5fcHJvbWlzZSwgYXJndW1lbnRzKVxyXG4gICAgICAgIH0uYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLl9wcm9taXNlW2NvbmZpZy5oYW5kbGVyXSA9IGZ1bmN0aW9uKGhhbmRsZXIpIHtcclxuICAgICAgICAgICAgaWYgKCFoYW5kbGVyKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpc1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBjYWxsYmFja3MgPSB0aGF0W21ldGhvZE5hbWUgKyBcIkNhbGxiYWNrc1wiXTtcclxuICAgICAgICAgICAgaWYgKGNhbGxiYWNrcy5maXJlZCgpKSB7XHJcbiAgICAgICAgICAgICAgICBoYW5kbGVyLmFwcGx5KHRoYXRbbWV0aG9kTmFtZSArIFwiQ29udGV4dFwiXSwgdGhhdFttZXRob2ROYW1lICsgXCJBcmdzXCJdKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY2FsbGJhY2tzLmFkZChmdW5jdGlvbihjb250ZXh0LCBhcmdzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlci5hcHBseShjb250ZXh0LCBhcmdzKVxyXG4gICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzXHJcbiAgICAgICAgfVxyXG4gICAgfS5iaW5kKHRoaXMpKTtcclxuICAgIHRoaXMuX3Byb21pc2UuYWx3YXlzID0gZnVuY3Rpb24oaGFuZGxlcikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRvbmUoaGFuZGxlcikuZmFpbChoYW5kbGVyKVxyXG4gICAgfTtcclxuICAgIHRoaXMuX3Byb21pc2UuY2F0Y2ggPSBmdW5jdGlvbihoYW5kbGVyKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudGhlbihudWxsLCBoYW5kbGVyKVxyXG4gICAgfTtcclxuICAgIHRoaXMuX3Byb21pc2UudGhlbiA9IGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBuZXcgX0RlZmVycmVkT2JqO1xyXG4gICAgICAgIFtcImRvbmVcIiwgXCJmYWlsXCJdLmZvckVhY2goZnVuY3Rpb24obWV0aG9kKSB7XHJcbiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IFwiZG9uZVwiID09PSBtZXRob2QgPyByZXNvbHZlIDogcmVqZWN0O1xyXG4gICAgICAgICAgICB0aGlzW21ldGhvZF0oKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFjYWxsYmFjaykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdFtcImRvbmVcIiA9PT0gbWV0aG9kID8gXCJyZXNvbHZlXCIgOiBcInJlamVjdFwiXS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdmFyIGNhbGxiYWNrUmVzdWx0ID0gY2FsbGJhY2sgJiYgY2FsbGJhY2suYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxuICAgICAgICAgICAgICAgIGlmIChpc0RlZmVycmVkKGNhbGxiYWNrUmVzdWx0KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrUmVzdWx0LmRvbmUocmVzdWx0LnJlc29sdmUpLmZhaWwocmVzdWx0LnJlamVjdClcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNQcm9taXNlKGNhbGxiYWNrUmVzdWx0KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrUmVzdWx0LnRoZW4ocmVzdWx0LnJlc29sdmUsIHJlc3VsdC5yZWplY3QpXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5yZXNvbHZlLmFwcGx5KHRoaXMsIGlzRGVmaW5lZChjYWxsYmFja1Jlc3VsdCkgPyBbY2FsbGJhY2tSZXN1bHRdIDogYXJndW1lbnRzKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KSlcclxuICAgICAgICB9LmJpbmQodGhpcykpO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQucHJvbWlzZSgpXHJcbiAgICB9O1xyXG4gICAgdGhpcy5fcHJvbWlzZS5zdGF0ZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiB0aGF0Ll9zdGF0ZVxyXG4gICAgfTtcclxuICAgIHRoaXMuX3Byb21pc2UucHJvbWlzZSA9IGZ1bmN0aW9uKGFyZ3MpIHtcclxuICAgICAgICByZXR1cm4gYXJncyA/IGV4dGVuZChhcmdzLCB0aGF0Ll9wcm9taXNlKSA6IHRoYXQuX3Byb21pc2VcclxuICAgIH07XHJcbiAgICB0aGlzLl9wcm9taXNlLnByb21pc2UodGhpcylcclxufTtcclxuZGVmZXJyZWRDb25maWcuZm9yRWFjaCgoZnVuY3Rpb24oY29uZmlnKSB7XHJcbiAgICB2YXIgbWV0aG9kTmFtZSA9IGNvbmZpZy5tZXRob2Q7XHJcbiAgICB2YXIgc3RhdGUgPSBjb25maWcuc3RhdGU7XHJcbiAgICBfRGVmZXJyZWRPYmoucHJvdG90eXBlW21ldGhvZE5hbWUgKyBcIldpdGhcIl0gPSBmdW5jdGlvbihjb250ZXh0LCBhcmdzKSB7XHJcbiAgICAgICAgdmFyIGNhbGxiYWNrcyA9IHRoaXNbbWV0aG9kTmFtZSArIFwiQ2FsbGJhY2tzXCJdO1xyXG4gICAgICAgIGlmIChcInBlbmRpbmdcIiA9PT0gdGhpcy5zdGF0ZSgpKSB7XHJcbiAgICAgICAgICAgIHRoaXNbbWV0aG9kTmFtZSArIFwiQXJnc1wiXSA9IGFyZ3M7XHJcbiAgICAgICAgICAgIHRoaXNbbWV0aG9kTmFtZSArIFwiQ29udGV4dFwiXSA9IGNvbnRleHQ7XHJcbiAgICAgICAgICAgIGlmIChzdGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGUgPSBzdGF0ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhbGxiYWNrcy5maXJlKGNvbnRleHQsIGFyZ3MpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzXHJcbiAgICB9XHJcbn0pKTtcclxuZXhwb3J0IGZ1bmN0aW9uIGZyb21Qcm9taXNlKHByb21pc2UsIGNvbnRleHQpIHtcclxuICAgIGlmIChpc0RlZmVycmVkKHByb21pc2UpKSB7XHJcbiAgICAgICAgcmV0dXJuIHByb21pc2VcclxuICAgIH0gZWxzZSBpZiAoaXNQcm9taXNlKHByb21pc2UpKSB7XHJcbiAgICAgICAgdmFyIGQgPSBuZXcgX0RlZmVycmVkT2JqO1xyXG4gICAgICAgIHByb21pc2UudGhlbigoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIGQucmVzb2x2ZVdpdGguYXBwbHkoZCwgW2NvbnRleHRdLmNvbmNhdChbXHJcbiAgICAgICAgICAgICAgICBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cylcclxuICAgICAgICAgICAgXSkpXHJcbiAgICAgICAgfSksIChmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgZC5yZWplY3RXaXRoLmFwcGx5KGQsIFtjb250ZXh0XS5jb25jYXQoW1xyXG4gICAgICAgICAgICAgICAgW10uc2xpY2UuY2FsbChhcmd1bWVudHMpXHJcbiAgICAgICAgICAgIF0pKVxyXG4gICAgICAgIH0pKTtcclxuICAgICAgICByZXR1cm4gZFxyXG4gICAgfVxyXG4gICAgcmV0dXJuIChuZXcgX0RlZmVycmVkT2JqKS5yZXNvbHZlV2l0aChjb250ZXh0LCBbcHJvbWlzZV0pXHJcbn1cclxudmFyIHdoZW5GdW5jID0gZnVuY3Rpb24oKSB7XHJcbiAgICBpZiAoMSA9PT0gYXJndW1lbnRzLmxlbmd0aCkge1xyXG4gICAgICAgIHJldHVybiBmcm9tUHJvbWlzZShhcmd1bWVudHNbMF0pXHJcbiAgICB9XHJcbiAgICB2YXIgdmFsdWVzID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMpO1xyXG4gICAgdmFyIGNvbnRleHRzID0gW107XHJcbiAgICB2YXIgcmVzb2x2ZWRDb3VudCA9IDA7XHJcbiAgICB2YXIgZGVmZXJyZWQgPSBuZXcgX0RlZmVycmVkT2JqO1xyXG4gICAgdmFyIHVwZGF0ZVN0YXRlID0gZnVuY3Rpb24oaSkge1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xyXG4gICAgICAgICAgICBjb250ZXh0c1tpXSA9IHRoaXM7XHJcbiAgICAgICAgICAgIHZhbHVlc1tpXSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gW10uc2xpY2UuY2FsbChhcmd1bWVudHMpIDogdmFsdWU7XHJcbiAgICAgICAgICAgIHJlc29sdmVkQ291bnQrKztcclxuICAgICAgICAgICAgaWYgKHJlc29sdmVkQ291bnQgPT09IHZhbHVlcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIGRlZmVycmVkLnJlc29sdmVXaXRoKGNvbnRleHRzLCB2YWx1ZXMpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBpZiAoaXNEZWZlcnJlZCh2YWx1ZXNbaV0pKSB7XHJcbiAgICAgICAgICAgIHZhbHVlc1tpXS5wcm9taXNlKCkuZG9uZSh1cGRhdGVTdGF0ZShpKSkuZmFpbChkZWZlcnJlZC5yZWplY3QpXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmVzb2x2ZWRDb3VudCsrXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHJlc29sdmVkQ291bnQgPT09IHZhbHVlcy5sZW5ndGgpIHtcclxuICAgICAgICBkZWZlcnJlZC5yZXNvbHZlV2l0aChjb250ZXh0cywgdmFsdWVzKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRlZmVycmVkLnByb21pc2UoKVxyXG59O1xyXG5leHBvcnQgZnVuY3Rpb24gc2V0U3RyYXRlZ3kodmFsdWUpIHtcclxuICAgIF9EZWZlcnJlZE9iaiA9IHZhbHVlLkRlZmVycmVkO1xyXG4gICAgd2hlbkZ1bmMgPSB2YWx1ZS53aGVuXHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIERlZmVycmVkKCkge1xyXG4gICAgcmV0dXJuIG5ldyBfRGVmZXJyZWRPYmpcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gd2hlbigpIHtcclxuICAgIHJldHVybiB3aGVuRnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpXHJcbn1cclxuIiwiLyoqXHJcbiAqIERldkV4dHJlbWUgKGVzbS9jb3JlL3V0aWxzL2RlcGVuZGVuY3lfaW5qZWN0b3IuanMpXHJcbiAqIFZlcnNpb246IDIxLjEuNFxyXG4gKiBCdWlsZCBkYXRlOiBNb24gSnVuIDIxIDIwMjFcclxuICpcclxuICogQ29weXJpZ2h0IChjKSAyMDEyIC0gMjAyMSBEZXZlbG9wZXIgRXhwcmVzcyBJbmMuIEFMTCBSSUdIVFMgUkVTRVJWRURcclxuICogUmVhZCBhYm91dCBEZXZFeHRyZW1lIGxpY2Vuc2luZyBoZXJlOiBodHRwczovL2pzLmRldmV4cHJlc3MuY29tL0xpY2Vuc2luZy9cclxuICovXHJcbmltcG9ydCB7XHJcbiAgICBleHRlbmRcclxufSBmcm9tIFwiLi9leHRlbmRcIjtcclxuaW1wb3J0IHtcclxuICAgIGlzRnVuY3Rpb25cclxufSBmcm9tIFwiLi90eXBlXCI7XHJcbmltcG9ydCB7XHJcbiAgICBlYWNoXHJcbn0gZnJvbSBcIi4vaXRlcmF0b3JcIjtcclxuaW1wb3J0IENsYXNzIGZyb20gXCIuLi9jbGFzc1wiO1xyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihvYmplY3QpIHtcclxuICAgIHZhciBCYXNlQ2xhc3MgPSBDbGFzcy5pbmhlcml0KG9iamVjdCk7XHJcbiAgICB2YXIgSW5qZWN0ZWRDbGFzcyA9IEJhc2VDbGFzcztcclxuICAgIHZhciBpbnN0YW5jZSA9IG5ldyBJbmplY3RlZENsYXNzKG9iamVjdCk7XHJcbiAgICB2YXIgaW5pdGlhbEZpZWxkcyA9IHt9O1xyXG4gICAgdmFyIGluamVjdEZpZWxkcyA9IGZ1bmN0aW9uKGluamVjdGlvbk9iamVjdCwgaW5pdGlhbCkge1xyXG4gICAgICAgIGVhY2goaW5qZWN0aW9uT2JqZWN0LCAoZnVuY3Rpb24oa2V5KSB7XHJcbiAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKGluc3RhbmNlW2tleV0pKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5pdGlhbCB8fCAhb2JqZWN0W2tleV0pIHtcclxuICAgICAgICAgICAgICAgICAgICBvYmplY3Rba2V5XSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2Vba2V5XS5hcHBseShvYmplY3QsIGFyZ3VtZW50cylcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5pdGlhbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGluaXRpYWxGaWVsZHNba2V5XSA9IG9iamVjdFtrZXldXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBvYmplY3Rba2V5XSA9IGluc3RhbmNlW2tleV1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pKVxyXG4gICAgfTtcclxuICAgIGluamVjdEZpZWxkcyhvYmplY3QsIHRydWUpO1xyXG4gICAgb2JqZWN0LmluamVjdCA9IGZ1bmN0aW9uKGluamVjdGlvbk9iamVjdCkge1xyXG4gICAgICAgIEluamVjdGVkQ2xhc3MgPSBJbmplY3RlZENsYXNzLmluaGVyaXQoaW5qZWN0aW9uT2JqZWN0KTtcclxuICAgICAgICBpbnN0YW5jZSA9IG5ldyBJbmplY3RlZENsYXNzO1xyXG4gICAgICAgIGluamVjdEZpZWxkcyhpbmplY3Rpb25PYmplY3QpXHJcbiAgICB9O1xyXG4gICAgb2JqZWN0LnJlc2V0SW5qZWN0aW9uID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgZXh0ZW5kKG9iamVjdCwgaW5pdGlhbEZpZWxkcyk7XHJcbiAgICAgICAgSW5qZWN0ZWRDbGFzcyA9IEJhc2VDbGFzcztcclxuICAgICAgICBpbnN0YW5jZSA9IG5ldyBCYXNlQ2xhc3NcclxuICAgIH07XHJcbiAgICByZXR1cm4gb2JqZWN0XHJcbn1cclxuIiwiLyoqXHJcbiAqIERldkV4dHJlbWUgKGVzbS9jb3JlL3V0aWxzL2Vycm9yLmpzKVxyXG4gKiBWZXJzaW9uOiAyMS4xLjRcclxuICogQnVpbGQgZGF0ZTogTW9uIEp1biAyMSAyMDIxXHJcbiAqXHJcbiAqIENvcHlyaWdodCAoYykgMjAxMiAtIDIwMjEgRGV2ZWxvcGVyIEV4cHJlc3MgSW5jLiBBTEwgUklHSFRTIFJFU0VSVkVEXHJcbiAqIFJlYWQgYWJvdXQgRGV2RXh0cmVtZSBsaWNlbnNpbmcgaGVyZTogaHR0cHM6Ly9qcy5kZXZleHByZXNzLmNvbS9MaWNlbnNpbmcvXHJcbiAqL1xyXG5pbXBvcnQge1xyXG4gICAgZXh0ZW5kXHJcbn0gZnJvbSBcIi4vZXh0ZW5kXCI7XHJcbmltcG9ydCB7XHJcbiAgICBsb2dnZXJcclxufSBmcm9tIFwiLi9jb25zb2xlXCI7XHJcbmltcG9ydCB7XHJcbiAgICBmb3JtYXRcclxufSBmcm9tIFwiLi9zdHJpbmdcIjtcclxuaW1wb3J0IHtcclxuICAgIHZlcnNpb25cclxufSBmcm9tIFwiLi4vdmVyc2lvblwiO1xyXG52YXIgRVJST1JfVVJMID0gXCJodHRwOi8vanMuZGV2ZXhwcmVzcy5jb20vZXJyb3IvXCIgKyB2ZXJzaW9uLnNwbGl0KFwiLlwiKS5zbGljZSgwLCAyKS5qb2luKFwiX1wiKSArIFwiL1wiO1xyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihiYXNlRXJyb3JzLCBlcnJvcnMpIHtcclxuICAgIHZhciBleHBvcnRzID0ge1xyXG4gICAgICAgIEVSUk9SX01FU1NBR0VTOiBleHRlbmQoZXJyb3JzLCBiYXNlRXJyb3JzKSxcclxuICAgICAgICBFcnJvcjogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBtYWtlRXJyb3IoW10uc2xpY2UuY2FsbChhcmd1bWVudHMpKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbG9nOiBmdW5jdGlvbihpZCkge1xyXG4gICAgICAgICAgICB2YXIgbWV0aG9kID0gXCJsb2dcIjtcclxuICAgICAgICAgICAgaWYgKC9eRVxcZCskLy50ZXN0KGlkKSkge1xyXG4gICAgICAgICAgICAgICAgbWV0aG9kID0gXCJlcnJvclwiXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoL15XXFxkKyQvLnRlc3QoaWQpKSB7XHJcbiAgICAgICAgICAgICAgICBtZXRob2QgPSBcIndhcm5cIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxvZ2dlclttZXRob2RdKFwibG9nXCIgPT09IG1ldGhvZCA/IGlkIDogY29tYmluZU1lc3NhZ2UoW10uc2xpY2UuY2FsbChhcmd1bWVudHMpKSlcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGZ1bmN0aW9uIGNvbWJpbmVNZXNzYWdlKGFyZ3MpIHtcclxuICAgICAgICB2YXIgaWQgPSBhcmdzWzBdO1xyXG4gICAgICAgIGFyZ3MgPSBhcmdzLnNsaWNlKDEpO1xyXG4gICAgICAgIHJldHVybiBmb3JtYXRNZXNzYWdlKGlkLCBmb3JtYXREZXRhaWxzKGlkLCBhcmdzKSlcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBmb3JtYXREZXRhaWxzKGlkLCBhcmdzKSB7XHJcbiAgICAgICAgYXJncyA9IFtleHBvcnRzLkVSUk9SX01FU1NBR0VTW2lkXV0uY29uY2F0KGFyZ3MpO1xyXG4gICAgICAgIHJldHVybiBmb3JtYXQuYXBwbHkodGhpcywgYXJncykucmVwbGFjZSgvXFwuKlxccyo/JC8sIFwiXCIpXHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gZm9ybWF0TWVzc2FnZShpZCwgZGV0YWlscykge1xyXG4gICAgICAgIHJldHVybiBmb3JtYXQuYXBwbHkodGhpcywgW1wiezB9IC0gezF9LiBTZWU6XFxuezJ9XCIsIGlkLCBkZXRhaWxzLCBnZXRFcnJvclVybChpZCldKVxyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIG1ha2VFcnJvcihhcmdzKSB7XHJcbiAgICAgICAgdmFyIGlkID0gYXJnc1swXTtcclxuICAgICAgICBhcmdzID0gYXJncy5zbGljZSgxKTtcclxuICAgICAgICB2YXIgZGV0YWlscyA9IGZvcm1hdERldGFpbHMoaWQsIGFyZ3MpO1xyXG4gICAgICAgIHZhciB1cmwgPSBnZXRFcnJvclVybChpZCk7XHJcbiAgICAgICAgdmFyIG1lc3NhZ2UgPSBmb3JtYXRNZXNzYWdlKGlkLCBkZXRhaWxzKTtcclxuICAgICAgICByZXR1cm4gZXh0ZW5kKG5ldyBFcnJvcihtZXNzYWdlKSwge1xyXG4gICAgICAgICAgICBfX2lkOiBpZCxcclxuICAgICAgICAgICAgX19kZXRhaWxzOiBkZXRhaWxzLFxyXG4gICAgICAgICAgICB1cmw6IHVybFxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gZ2V0RXJyb3JVcmwoaWQpIHtcclxuICAgICAgICByZXR1cm4gRVJST1JfVVJMICsgaWRcclxuICAgIH1cclxuICAgIHJldHVybiBleHBvcnRzXHJcbn1cclxuIiwiLyoqXHJcbiAqIERldkV4dHJlbWUgKGVzbS9jb3JlL3V0aWxzL2V4dGVuZC5qcylcclxuICogVmVyc2lvbjogMjEuMS40XHJcbiAqIEJ1aWxkIGRhdGU6IE1vbiBKdW4gMjEgMjAyMVxyXG4gKlxyXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTIgLSAyMDIxIERldmVsb3BlciBFeHByZXNzIEluYy4gQUxMIFJJR0hUUyBSRVNFUlZFRFxyXG4gKiBSZWFkIGFib3V0IERldkV4dHJlbWUgbGljZW5zaW5nIGhlcmU6IGh0dHBzOi8vanMuZGV2ZXhwcmVzcy5jb20vTGljZW5zaW5nL1xyXG4gKi9cclxuaW1wb3J0IHtcclxuICAgIGlzUGxhaW5PYmplY3RcclxufSBmcm9tIFwiLi90eXBlXCI7XHJcbmV4cG9ydCB2YXIgZXh0ZW5kRnJvbU9iamVjdCA9IGZ1bmN0aW9uKHRhcmdldCwgc291cmNlLCBvdmVycmlkZUV4aXN0aW5nVmFsdWVzKSB7XHJcbiAgICB0YXJnZXQgPSB0YXJnZXQgfHwge307XHJcbiAgICBmb3IgKHZhciBwcm9wIGluIHNvdXJjZSkge1xyXG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBwcm9wKSkge1xyXG4gICAgICAgICAgICB2YXIgdmFsdWUgPSBzb3VyY2VbcHJvcF07XHJcbiAgICAgICAgICAgIGlmICghKHByb3AgaW4gdGFyZ2V0KSB8fCBvdmVycmlkZUV4aXN0aW5nVmFsdWVzKSB7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRbcHJvcF0gPSB2YWx1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRhcmdldFxyXG59O1xyXG5leHBvcnQgdmFyIGV4dGVuZCA9IGZ1bmN0aW9uIGV4dGVuZCh0YXJnZXQpIHtcclxuICAgIHRhcmdldCA9IHRhcmdldCB8fCB7fTtcclxuICAgIHZhciBpID0gMTtcclxuICAgIHZhciBkZWVwID0gZmFsc2U7XHJcbiAgICBpZiAoXCJib29sZWFuXCIgPT09IHR5cGVvZiB0YXJnZXQpIHtcclxuICAgICAgICBkZWVwID0gdGFyZ2V0O1xyXG4gICAgICAgIHRhcmdldCA9IGFyZ3VtZW50c1sxXSB8fCB7fTtcclxuICAgICAgICBpKytcclxuICAgIH1cclxuICAgIGZvciAoOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTtcclxuICAgICAgICBpZiAobnVsbCA9PSBzb3VyY2UpIHtcclxuICAgICAgICAgICAgY29udGludWVcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yICh2YXIga2V5IGluIHNvdXJjZSkge1xyXG4gICAgICAgICAgICB2YXIgdGFyZ2V0VmFsdWUgPSB0YXJnZXRba2V5XTtcclxuICAgICAgICAgICAgdmFyIHNvdXJjZVZhbHVlID0gc291cmNlW2tleV07XHJcbiAgICAgICAgICAgIHZhciBzb3VyY2VWYWx1ZUlzQXJyYXkgPSBmYWxzZTtcclxuICAgICAgICAgICAgdmFyIGNsb25lID0gdm9pZCAwO1xyXG4gICAgICAgICAgICBpZiAoXCJfX3Byb3RvX19cIiA9PT0ga2V5IHx8IFwiY29uc3RydWN0b3JcIiA9PT0ga2V5IHx8IHRhcmdldCA9PT0gc291cmNlVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGRlZXAgJiYgc291cmNlVmFsdWUgJiYgKGlzUGxhaW5PYmplY3Qoc291cmNlVmFsdWUpIHx8IChzb3VyY2VWYWx1ZUlzQXJyYXkgPSBBcnJheS5pc0FycmF5KHNvdXJjZVZhbHVlKSkpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc291cmNlVmFsdWVJc0FycmF5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2xvbmUgPSB0YXJnZXRWYWx1ZSAmJiBBcnJheS5pc0FycmF5KHRhcmdldFZhbHVlKSA/IHRhcmdldFZhbHVlIDogW11cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2xvbmUgPSB0YXJnZXRWYWx1ZSAmJiBpc1BsYWluT2JqZWN0KHRhcmdldFZhbHVlKSA/IHRhcmdldFZhbHVlIDoge31cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRhcmdldFtrZXldID0gZXh0ZW5kKGRlZXAsIGNsb25lLCBzb3VyY2VWYWx1ZSlcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh2b2lkIDAgIT09IHNvdXJjZVZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVZhbHVlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGFyZ2V0XHJcbn07XHJcbiIsIi8qKlxyXG4gKiBEZXZFeHRyZW1lIChlc20vY29yZS91dGlscy9odG1sX3BhcnNlci5qcylcclxuICogVmVyc2lvbjogMjEuMS40XHJcbiAqIEJ1aWxkIGRhdGU6IE1vbiBKdW4gMjEgMjAyMVxyXG4gKlxyXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTIgLSAyMDIxIERldmVsb3BlciBFeHByZXNzIEluYy4gQUxMIFJJR0hUUyBSRVNFUlZFRFxyXG4gKiBSZWFkIGFib3V0IERldkV4dHJlbWUgbGljZW5zaW5nIGhlcmU6IGh0dHBzOi8vanMuZGV2ZXhwcmVzcy5jb20vTGljZW5zaW5nL1xyXG4gKi9cclxuaW1wb3J0IHtcclxuICAgIG1lcmdlXHJcbn0gZnJvbSBcIi4vYXJyYXlcIjtcclxuaW1wb3J0IGRvbUFkYXB0ZXIgZnJvbSBcIi4uL2RvbV9hZGFwdGVyXCI7XHJcbnZhciBpc1RhZ05hbWUgPSAvPChbYS16XVteL1xcMD5cXHgyMFxcdFxcclxcblxcZl0rKS9pO1xyXG52YXIgdGFnV3JhcHBlcnMgPSB7XHJcbiAgICBkZWZhdWx0OiB7XHJcbiAgICAgICAgdGFnc0NvdW50OiAwLFxyXG4gICAgICAgIHN0YXJ0VGFnczogXCJcIixcclxuICAgICAgICBlbmRUYWdzOiBcIlwiXHJcbiAgICB9LFxyXG4gICAgdGhlYWQ6IHtcclxuICAgICAgICB0YWdzQ291bnQ6IDEsXHJcbiAgICAgICAgc3RhcnRUYWdzOiBcIjx0YWJsZT5cIixcclxuICAgICAgICBlbmRUYWdzOiBcIjwvdGFibGU+XCJcclxuICAgIH0sXHJcbiAgICB0ZDoge1xyXG4gICAgICAgIHRhZ3NDb3VudDogMyxcclxuICAgICAgICBzdGFydFRhZ3M6IFwiPHRhYmxlPjx0Ym9keT48dHI+XCIsXHJcbiAgICAgICAgZW5kVGFnczogXCI8L3RyPjwvdGJvZHk+PC90YWJsZT5cIlxyXG4gICAgfSxcclxuICAgIGNvbDoge1xyXG4gICAgICAgIHRhZ3NDb3VudDogMixcclxuICAgICAgICBzdGFydFRhZ3M6IFwiPHRhYmxlPjxjb2xncm91cD5cIixcclxuICAgICAgICBlbmRUYWdzOiBcIjwvY29sZ3JvdXA+PC90YWJsZT5cIlxyXG4gICAgfSxcclxuICAgIHRyOiB7XHJcbiAgICAgICAgdGFnc0NvdW50OiAyLFxyXG4gICAgICAgIHN0YXJ0VGFnczogXCI8dGFibGU+PHRib2R5PlwiLFxyXG4gICAgICAgIGVuZFRhZ3M6IFwiPC90Ym9keT48L3RhYmxlPlwiXHJcbiAgICB9XHJcbn07XHJcbnRhZ1dyYXBwZXJzLnRib2R5ID0gdGFnV3JhcHBlcnMuY29sZ3JvdXAgPSB0YWdXcmFwcGVycy5jYXB0aW9uID0gdGFnV3JhcHBlcnMudGZvb3QgPSB0YWdXcmFwcGVycy50aGVhZDtcclxudGFnV3JhcHBlcnMudGggPSB0YWdXcmFwcGVycy50ZDtcclxuZXhwb3J0IHZhciBwYXJzZUhUTUwgPSBmdW5jdGlvbihodG1sKSB7XHJcbiAgICBpZiAoXCJzdHJpbmdcIiAhPT0gdHlwZW9mIGh0bWwpIHtcclxuICAgICAgICByZXR1cm4gbnVsbFxyXG4gICAgfVxyXG4gICAgdmFyIGZyYWdtZW50ID0gZG9tQWRhcHRlci5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XHJcbiAgICB2YXIgY29udGFpbmVyID0gZnJhZ21lbnQuYXBwZW5kQ2hpbGQoZG9tQWRhcHRlci5jcmVhdGVFbGVtZW50KFwiZGl2XCIpKTtcclxuICAgIHZhciB0YWdzID0gaXNUYWdOYW1lLmV4ZWMoaHRtbCk7XHJcbiAgICB2YXIgZmlyc3RSb290VGFnID0gdGFncyAmJiB0YWdzWzFdLnRvTG93ZXJDYXNlKCk7XHJcbiAgICB2YXIgdGFnV3JhcHBlciA9IHRhZ1dyYXBwZXJzW2ZpcnN0Um9vdFRhZ10gfHwgdGFnV3JhcHBlcnMuZGVmYXVsdDtcclxuICAgIGNvbnRhaW5lci5pbm5lckhUTUwgPSB0YWdXcmFwcGVyLnN0YXJ0VGFncyArIGh0bWwgKyB0YWdXcmFwcGVyLmVuZFRhZ3M7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRhZ1dyYXBwZXIudGFnc0NvdW50OyBpKyspIHtcclxuICAgICAgICBjb250YWluZXIgPSBjb250YWluZXIubGFzdENoaWxkXHJcbiAgICB9XHJcbiAgICByZXR1cm4gbWVyZ2UoW10sIGNvbnRhaW5lci5jaGlsZE5vZGVzKVxyXG59O1xyXG5leHBvcnQgdmFyIGlzVGFibGVQYXJ0ID0gZnVuY3Rpb24oaHRtbCkge1xyXG4gICAgdmFyIHRhZ3MgPSBpc1RhZ05hbWUuZXhlYyhodG1sKTtcclxuICAgIHJldHVybiB0YWdzICYmIHRhZ3NbMV0gaW4gdGFnV3JhcHBlcnNcclxufTtcclxuIiwiLyoqXHJcbiAqIERldkV4dHJlbWUgKGVzbS9jb3JlL3V0aWxzL2luZmxlY3Rvci5qcylcclxuICogVmVyc2lvbjogMjEuMS40XHJcbiAqIEJ1aWxkIGRhdGU6IE1vbiBKdW4gMjEgMjAyMVxyXG4gKlxyXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTIgLSAyMDIxIERldmVsb3BlciBFeHByZXNzIEluYy4gQUxMIFJJR0hUUyBSRVNFUlZFRFxyXG4gKiBSZWFkIGFib3V0IERldkV4dHJlbWUgbGljZW5zaW5nIGhlcmU6IGh0dHBzOi8vanMuZGV2ZXhwcmVzcy5jb20vTGljZW5zaW5nL1xyXG4gKi9cclxuaW1wb3J0IHtcclxuICAgIG1hcFxyXG59IGZyb20gXCIuL2l0ZXJhdG9yXCI7XHJcbnZhciBfbm9ybWFsaXplID0gZnVuY3Rpb24odGV4dCkge1xyXG4gICAgaWYgKHZvaWQgMCA9PT0gdGV4dCB8fCBudWxsID09PSB0ZXh0KSB7XHJcbiAgICAgICAgcmV0dXJuIFwiXCJcclxuICAgIH1cclxuICAgIHJldHVybiBTdHJpbmcodGV4dClcclxufTtcclxudmFyIF91cHBlckNhc2VGaXJzdCA9IGZ1bmN0aW9uKHRleHQpIHtcclxuICAgIHJldHVybiBfbm9ybWFsaXplKHRleHQpLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdGV4dC5zdWJzdHIoMSlcclxufTtcclxudmFyIF9jaG9wID0gZnVuY3Rpb24odGV4dCkge1xyXG4gICAgcmV0dXJuIF9ub3JtYWxpemUodGV4dCkucmVwbGFjZSgvKFthLXpcXGRdKShbQS1aXSkvZywgXCIkMSAkMlwiKS5zcGxpdCgvW1xcc18tXSsvKVxyXG59O1xyXG5leHBvcnQgdmFyIGRhc2hlcml6ZSA9IGZ1bmN0aW9uKHRleHQpIHtcclxuICAgIHJldHVybiBtYXAoX2Nob3AodGV4dCksIChmdW5jdGlvbihwKSB7XHJcbiAgICAgICAgcmV0dXJuIHAudG9Mb3dlckNhc2UoKVxyXG4gICAgfSkpLmpvaW4oXCItXCIpXHJcbn07XHJcbmV4cG9ydCB2YXIgdW5kZXJzY29yZSA9IGZ1bmN0aW9uKHRleHQpIHtcclxuICAgIHJldHVybiBkYXNoZXJpemUodGV4dCkucmVwbGFjZSgvLS9nLCBcIl9cIilcclxufTtcclxuZXhwb3J0IHZhciBjYW1lbGl6ZSA9IGZ1bmN0aW9uKHRleHQsIHVwcGVyRmlyc3QpIHtcclxuICAgIHJldHVybiBtYXAoX2Nob3AodGV4dCksIChmdW5jdGlvbihwLCBpKSB7XHJcbiAgICAgICAgcCA9IHAudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICBpZiAodXBwZXJGaXJzdCB8fCBpID4gMCkge1xyXG4gICAgICAgICAgICBwID0gX3VwcGVyQ2FzZUZpcnN0KHApXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwXHJcbiAgICB9KSkuam9pbihcIlwiKVxyXG59O1xyXG5leHBvcnQgdmFyIGh1bWFuaXplID0gZnVuY3Rpb24odGV4dCkge1xyXG4gICAgcmV0dXJuIF91cHBlckNhc2VGaXJzdChkYXNoZXJpemUodGV4dCkucmVwbGFjZSgvLS9nLCBcIiBcIikpXHJcbn07XHJcbmV4cG9ydCB2YXIgdGl0bGVpemUgPSBmdW5jdGlvbih0ZXh0KSB7XHJcbiAgICByZXR1cm4gbWFwKF9jaG9wKHRleHQpLCAoZnVuY3Rpb24ocCkge1xyXG4gICAgICAgIHJldHVybiBfdXBwZXJDYXNlRmlyc3QocC50b0xvd2VyQ2FzZSgpKVxyXG4gICAgfSkpLmpvaW4oXCIgXCIpXHJcbn07XHJcbnZhciBESUdJVF9DSEFSUyA9IFtcIjBcIiwgXCIxXCIsIFwiMlwiLCBcIjNcIiwgXCI0XCIsIFwiNVwiLCBcIjZcIiwgXCI3XCIsIFwiOFwiLCBcIjlcIl07XHJcbmV4cG9ydCB2YXIgY2FwdGlvbml6ZSA9IGZ1bmN0aW9uKG5hbWUpIHtcclxuICAgIHZhciBjYXB0aW9uTGlzdCA9IFtdO1xyXG4gICAgdmFyIGk7XHJcbiAgICB2YXIgY2hhcjtcclxuICAgIHZhciBpc1ByZXZDaGFyTmV3V29yZCA9IGZhbHNlO1xyXG4gICAgdmFyIGlzTmV3V29yZCA9IGZhbHNlO1xyXG4gICAgZm9yIChpID0gMDsgaSA8IG5hbWUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjaGFyID0gbmFtZS5jaGFyQXQoaSk7XHJcbiAgICAgICAgaXNOZXdXb3JkID0gY2hhciA9PT0gY2hhci50b1VwcGVyQ2FzZSgpICYmIFwiLVwiICE9PSBjaGFyICYmIFwiKVwiICE9PSBjaGFyICYmIFwiL1wiICE9PSBjaGFyIHx8IGNoYXIgaW4gRElHSVRfQ0hBUlM7XHJcbiAgICAgICAgaWYgKFwiX1wiID09PSBjaGFyIHx8IFwiLlwiID09PSBjaGFyKSB7XHJcbiAgICAgICAgICAgIGNoYXIgPSBcIiBcIjtcclxuICAgICAgICAgICAgaXNOZXdXb3JkID0gdHJ1ZVxyXG4gICAgICAgIH0gZWxzZSBpZiAoMCA9PT0gaSkge1xyXG4gICAgICAgICAgICBjaGFyID0gY2hhci50b1VwcGVyQ2FzZSgpO1xyXG4gICAgICAgICAgICBpc05ld1dvcmQgPSB0cnVlXHJcbiAgICAgICAgfSBlbHNlIGlmICghaXNQcmV2Q2hhck5ld1dvcmQgJiYgaXNOZXdXb3JkKSB7XHJcbiAgICAgICAgICAgIGlmIChjYXB0aW9uTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBjYXB0aW9uTGlzdC5wdXNoKFwiIFwiKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhcHRpb25MaXN0LnB1c2goY2hhcik7XHJcbiAgICAgICAgaXNQcmV2Q2hhck5ld1dvcmQgPSBpc05ld1dvcmRcclxuICAgIH1cclxuICAgIHJldHVybiBjYXB0aW9uTGlzdC5qb2luKFwiXCIpXHJcbn07XHJcbiIsIi8qKlxyXG4gKiBEZXZFeHRyZW1lIChlc20vY29yZS91dGlscy9pdGVyYXRvci5qcylcclxuICogVmVyc2lvbjogMjEuMS40XHJcbiAqIEJ1aWxkIGRhdGU6IE1vbiBKdW4gMjEgMjAyMVxyXG4gKlxyXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTIgLSAyMDIxIERldmVsb3BlciBFeHByZXNzIEluYy4gQUxMIFJJR0hUUyBSRVNFUlZFRFxyXG4gKiBSZWFkIGFib3V0IERldkV4dHJlbWUgbGljZW5zaW5nIGhlcmU6IGh0dHBzOi8vanMuZGV2ZXhwcmVzcy5jb20vTGljZW5zaW5nL1xyXG4gKi9cclxudmFyIG1hcCA9ICh2YWx1ZXMsIGNhbGxiYWNrKSA9PiB7XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZXMpKSB7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlcy5tYXAoY2FsbGJhY2spXHJcbiAgICB9XHJcbiAgICB2YXIgcmVzdWx0ID0gW107XHJcbiAgICBmb3IgKHZhciBrZXkgaW4gdmFsdWVzKSB7XHJcbiAgICAgICAgcmVzdWx0LnB1c2goY2FsbGJhY2sodmFsdWVzW2tleV0sIGtleSkpXHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0XHJcbn07XHJcbnZhciBlYWNoID0gKHZhbHVlcywgY2FsbGJhY2spID0+IHtcclxuICAgIGlmICghdmFsdWVzKSB7XHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBpZiAoXCJsZW5ndGhcIiBpbiB2YWx1ZXMpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoZmFsc2UgPT09IGNhbGxiYWNrLmNhbGwodmFsdWVzW2ldLCBpLCB2YWx1ZXNbaV0pKSB7XHJcbiAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBmb3IgKHZhciBrZXkgaW4gdmFsdWVzKSB7XHJcbiAgICAgICAgICAgIGlmIChmYWxzZSA9PT0gY2FsbGJhY2suY2FsbCh2YWx1ZXNba2V5XSwga2V5LCB2YWx1ZXNba2V5XSkpIHtcclxuICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsdWVzXHJcbn07XHJcbnZhciByZXZlcnNlRWFjaCA9IChhcnJheSwgY2FsbGJhY2spID0+IHtcclxuICAgIGlmICghYXJyYXkgfHwgIShcImxlbmd0aFwiIGluIGFycmF5KSB8fCAwID09PSBhcnJheS5sZW5ndGgpIHtcclxuICAgICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIGZvciAodmFyIGkgPSBhcnJheS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIGlmIChmYWxzZSA9PT0gY2FsbGJhY2suY2FsbChhcnJheVtpXSwgaSwgYXJyYXlbaV0pKSB7XHJcbiAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG5leHBvcnQge1xyXG4gICAgbWFwLFxyXG4gICAgZWFjaCxcclxuICAgIHJldmVyc2VFYWNoXHJcbn07XHJcbiIsIi8qKlxyXG4gKiBEZXZFeHRyZW1lIChlc20vY29yZS91dGlscy9tYXRoLmpzKVxyXG4gKiBWZXJzaW9uOiAyMS4xLjRcclxuICogQnVpbGQgZGF0ZTogTW9uIEp1biAyMSAyMDIxXHJcbiAqXHJcbiAqIENvcHlyaWdodCAoYykgMjAxMiAtIDIwMjEgRGV2ZWxvcGVyIEV4cHJlc3MgSW5jLiBBTEwgUklHSFRTIFJFU0VSVkVEXHJcbiAqIFJlYWQgYWJvdXQgRGV2RXh0cmVtZSBsaWNlbnNpbmcgaGVyZTogaHR0cHM6Ly9qcy5kZXZleHByZXNzLmNvbS9MaWNlbnNpbmcvXHJcbiAqL1xyXG5pbXBvcnQge1xyXG4gICAgaXNFeHBvbmVudGlhbFxyXG59IGZyb20gXCIuL3R5cGVcIjtcclxudmFyIHNpZ24gPSBmdW5jdGlvbih2YWx1ZSkge1xyXG4gICAgaWYgKDAgPT09IHZhbHVlKSB7XHJcbiAgICAgICAgcmV0dXJuIDBcclxuICAgIH1cclxuICAgIHJldHVybiB2YWx1ZSAvIE1hdGguYWJzKHZhbHVlKVxyXG59O1xyXG52YXIgZml0SW50b1JhbmdlID0gZnVuY3Rpb24odmFsdWUsIG1pblZhbHVlLCBtYXhWYWx1ZSkge1xyXG4gICAgdmFyIGlzTWluVmFsdWVVbmRlZmluZWQgPSAhbWluVmFsdWUgJiYgMCAhPT0gbWluVmFsdWU7XHJcbiAgICB2YXIgaXNNYXhWYWx1ZVVuZGVmaW5lZCA9ICFtYXhWYWx1ZSAmJiAwICE9PSBtYXhWYWx1ZTtcclxuICAgIGlzTWluVmFsdWVVbmRlZmluZWQgJiYgKG1pblZhbHVlID0gIWlzTWF4VmFsdWVVbmRlZmluZWQgPyBNYXRoLm1pbih2YWx1ZSwgbWF4VmFsdWUpIDogdmFsdWUpO1xyXG4gICAgaXNNYXhWYWx1ZVVuZGVmaW5lZCAmJiAobWF4VmFsdWUgPSAhaXNNaW5WYWx1ZVVuZGVmaW5lZCA/IE1hdGgubWF4KHZhbHVlLCBtaW5WYWx1ZSkgOiB2YWx1ZSk7XHJcbiAgICByZXR1cm4gTWF0aC5taW4oTWF0aC5tYXgodmFsdWUsIG1pblZhbHVlKSwgbWF4VmFsdWUpXHJcbn07XHJcbnZhciBpblJhbmdlID0gZnVuY3Rpb24odmFsdWUsIG1pblZhbHVlLCBtYXhWYWx1ZSkge1xyXG4gICAgcmV0dXJuIHZhbHVlID49IG1pblZhbHVlICYmIHZhbHVlIDw9IG1heFZhbHVlXHJcbn07XHJcblxyXG5mdW5jdGlvbiBnZXRFeHBvbmVudCh2YWx1ZSkge1xyXG4gICAgcmV0dXJuIE1hdGguYWJzKHBhcnNlSW50KHZhbHVlLnRvRXhwb25lbnRpYWwoKS5zcGxpdChcImVcIilbMV0pKVxyXG59XHJcblxyXG5mdW5jdGlvbiBfaXNFZGdlQnVnKCkge1xyXG4gICAgcmV0dXJuIFwiMC4wMDAzMDBcIiAhPT0gM2UtNC50b1ByZWNpc2lvbigzKVxyXG59XHJcblxyXG5mdW5jdGlvbiBhZGp1c3QodmFsdWUsIGludGVydmFsKSB7XHJcbiAgICB2YXIgcHJlY2lzaW9uID0gZ2V0UHJlY2lzaW9uKGludGVydmFsIHx8IDApICsgMjtcclxuICAgIHZhciBzZXBhcmF0ZWRWYWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCkuc3BsaXQoXCIuXCIpO1xyXG4gICAgdmFyIHNvdXJjZVZhbHVlID0gdmFsdWU7XHJcbiAgICB2YXIgYWJzVmFsdWUgPSBNYXRoLmFicyh2YWx1ZSk7XHJcbiAgICB2YXIgc2VwYXJhdGVkQWRqdXN0ZWRWYWx1ZTtcclxuICAgIHZhciBpc0V4cG9uZW50VmFsdWUgPSBpc0V4cG9uZW50aWFsKHZhbHVlKTtcclxuICAgIHZhciBpbnRlZ2VyUGFydCA9IGFic1ZhbHVlID4gMSA/IDEwIDogMDtcclxuICAgIGlmICgxID09PSBzZXBhcmF0ZWRWYWx1ZS5sZW5ndGgpIHtcclxuICAgICAgICByZXR1cm4gdmFsdWVcclxuICAgIH1cclxuICAgIGlmICghaXNFeHBvbmVudFZhbHVlKSB7XHJcbiAgICAgICAgaWYgKGlzRXhwb25lbnRpYWwoaW50ZXJ2YWwpKSB7XHJcbiAgICAgICAgICAgIHByZWNpc2lvbiA9IHNlcGFyYXRlZFZhbHVlWzBdLmxlbmd0aCArIGdldEV4cG9uZW50KGludGVydmFsKVxyXG4gICAgICAgIH1cclxuICAgICAgICB2YWx1ZSA9IGFic1ZhbHVlO1xyXG4gICAgICAgIHZhbHVlID0gdmFsdWUgLSBNYXRoLmZsb29yKHZhbHVlKSArIGludGVnZXJQYXJ0XHJcbiAgICB9XHJcbiAgICBwcmVjaXNpb24gPSBfaXNFZGdlQnVnKCkgJiYgZ2V0RXhwb25lbnQodmFsdWUpID4gNiB8fCBwcmVjaXNpb24gPiA3ID8gMTUgOiA3O1xyXG4gICAgaWYgKCFpc0V4cG9uZW50VmFsdWUpIHtcclxuICAgICAgICBzZXBhcmF0ZWRBZGp1c3RlZFZhbHVlID0gcGFyc2VGbG9hdCh2YWx1ZS50b1ByZWNpc2lvbihwcmVjaXNpb24pKS50b1N0cmluZygpLnNwbGl0KFwiLlwiKTtcclxuICAgICAgICBpZiAoc2VwYXJhdGVkQWRqdXN0ZWRWYWx1ZVswXSA9PT0gaW50ZWdlclBhcnQudG9TdHJpbmcoKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gcGFyc2VGbG9hdChzZXBhcmF0ZWRWYWx1ZVswXSArIFwiLlwiICsgc2VwYXJhdGVkQWRqdXN0ZWRWYWx1ZVsxXSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcGFyc2VGbG9hdChzb3VyY2VWYWx1ZS50b1ByZWNpc2lvbihwcmVjaXNpb24pKVxyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRQcmVjaXNpb24odmFsdWUpIHtcclxuICAgIHZhciBzdHIgPSB2YWx1ZS50b1N0cmluZygpO1xyXG4gICAgaWYgKHN0ci5pbmRleE9mKFwiLlwiKSA8IDApIHtcclxuICAgICAgICByZXR1cm4gMFxyXG4gICAgfVxyXG4gICAgdmFyIG1hbnRpc3NhID0gc3RyLnNwbGl0KFwiLlwiKTtcclxuICAgIHZhciBwb3NpdGlvbk9mRGVsaW1pdGVyID0gbWFudGlzc2FbMV0uaW5kZXhPZihcImVcIik7XHJcbiAgICByZXR1cm4gcG9zaXRpb25PZkRlbGltaXRlciA+PSAwID8gcG9zaXRpb25PZkRlbGltaXRlciA6IG1hbnRpc3NhWzFdLmxlbmd0aFxyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRSb290KHgsIG4pIHtcclxuICAgIGlmICh4IDwgMCAmJiBuICUgMiAhPT0gMSkge1xyXG4gICAgICAgIHJldHVybiBOYU5cclxuICAgIH1cclxuICAgIHZhciB5ID0gTWF0aC5wb3coTWF0aC5hYnMoeCksIDEgLyBuKTtcclxuICAgIHJldHVybiBuICUgMiA9PT0gMSAmJiB4IDwgMCA/IC15IDogeVxyXG59XHJcblxyXG5mdW5jdGlvbiBzb2x2ZUN1YmljRXF1YXRpb24oYSwgYiwgYywgZCkge1xyXG4gICAgaWYgKE1hdGguYWJzKGEpIDwgMWUtOCkge1xyXG4gICAgICAgIGEgPSBiO1xyXG4gICAgICAgIGIgPSBjO1xyXG4gICAgICAgIGMgPSBkO1xyXG4gICAgICAgIGlmIChNYXRoLmFicyhhKSA8IDFlLTgpIHtcclxuICAgICAgICAgICAgYSA9IGI7XHJcbiAgICAgICAgICAgIGIgPSBjO1xyXG4gICAgICAgICAgICBpZiAoTWF0aC5hYnMoYSkgPCAxZS04KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gW11cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gWy1iIC8gYV1cclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIEQyID0gYiAqIGIgLSA0ICogYSAqIGM7XHJcbiAgICAgICAgaWYgKE1hdGguYWJzKEQyKSA8IDFlLTgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFstYiAvICgyICogYSldXHJcbiAgICAgICAgfSBlbHNlIGlmIChEMiA+IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIFsoLWIgKyBNYXRoLnNxcnQoRDIpKSAvICgyICogYSksICgtYiAtIE1hdGguc3FydChEMikpIC8gKDIgKiBhKV1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFtdXHJcbiAgICB9XHJcbiAgICB2YXIgcCA9ICgzICogYSAqIGMgLSBiICogYikgLyAoMyAqIGEgKiBhKTtcclxuICAgIHZhciBxID0gKDIgKiBiICogYiAqIGIgLSA5ICogYSAqIGIgKiBjICsgMjcgKiBhICogYSAqIGQpIC8gKDI3ICogYSAqIGEgKiBhKTtcclxuICAgIHZhciByb290cztcclxuICAgIHZhciB1O1xyXG4gICAgaWYgKE1hdGguYWJzKHApIDwgMWUtOCkge1xyXG4gICAgICAgIHJvb3RzID0gW2dldFJvb3QoLXEsIDMpXVxyXG4gICAgfSBlbHNlIGlmIChNYXRoLmFicyhxKSA8IDFlLTgpIHtcclxuICAgICAgICByb290cyA9IFswXS5jb25jYXQocCA8IDAgPyBbTWF0aC5zcXJ0KC1wKSwgLU1hdGguc3FydCgtcCldIDogW10pXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHZhciBEMyA9IHEgKiBxIC8gNCArIHAgKiBwICogcCAvIDI3O1xyXG4gICAgICAgIGlmIChNYXRoLmFicyhEMykgPCAxZS04KSB7XHJcbiAgICAgICAgICAgIHJvb3RzID0gWy0xLjUgKiBxIC8gcCwgMyAqIHEgLyBwXVxyXG4gICAgICAgIH0gZWxzZSBpZiAoRDMgPiAwKSB7XHJcbiAgICAgICAgICAgIHUgPSBnZXRSb290KC1xIC8gMiAtIE1hdGguc3FydChEMyksIDMpO1xyXG4gICAgICAgICAgICByb290cyA9IFt1IC0gcCAvICgzICogdSldXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdSA9IDIgKiBNYXRoLnNxcnQoLXAgLyAzKTtcclxuICAgICAgICAgICAgdmFyIHQgPSBNYXRoLmFjb3MoMyAqIHEgLyBwIC8gdSkgLyAzO1xyXG4gICAgICAgICAgICB2YXIgayA9IDIgKiBNYXRoLlBJIC8gMztcclxuICAgICAgICAgICAgcm9vdHMgPSBbdSAqIE1hdGguY29zKHQpLCB1ICogTWF0aC5jb3ModCAtIGspLCB1ICogTWF0aC5jb3ModCAtIDIgKiBrKV1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvb3RzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgcm9vdHNbaV0gLT0gYiAvICgzICogYSlcclxuICAgIH1cclxuICAgIHJldHVybiByb290c1xyXG59XHJcblxyXG5mdW5jdGlvbiB0cnVuYyh2YWx1ZSkge1xyXG4gICAgcmV0dXJuIE1hdGgudHJ1bmMgPyBNYXRoLnRydW5jKHZhbHVlKSA6IHZhbHVlID4gMCA/IE1hdGguZmxvb3IodmFsdWUpIDogTWF0aC5jZWlsKHZhbHVlKVxyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRSZW1haW5kZXJCeURpdmlzaW9uKGRpdmlkZW5kLCBkaXZpZGVyLCBkaWdpdHNDb3VudCkge1xyXG4gICAgaWYgKGRpdmlkZXIgPT09IHBhcnNlSW50KGRpdmlkZXIpKSB7XHJcbiAgICAgICAgcmV0dXJuIGRpdmlkZW5kICUgZGl2aWRlclxyXG4gICAgfVxyXG4gICAgdmFyIHF1b3RpZW50ID0gcm91bmRGbG9hdFBhcnQoZGl2aWRlbmQgLyBkaXZpZGVyLCBkaWdpdHNDb3VudCk7XHJcbiAgICByZXR1cm4gKHF1b3RpZW50IC0gcGFyc2VJbnQocXVvdGllbnQpKSAqIGRpdmlkZXJcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0RXhwb25lbnRMZW5ndGgodmFsdWUpIHtcclxuICAgIHZhciBfdmFsdWVTdHJpbmckc3BsaXQkO1xyXG4gICAgdmFyIHZhbHVlU3RyaW5nID0gdmFsdWUudG9TdHJpbmcoKTtcclxuICAgIHJldHVybiAobnVsbCA9PT0gKF92YWx1ZVN0cmluZyRzcGxpdCQgPSB2YWx1ZVN0cmluZy5zcGxpdChcIi5cIilbMV0pIHx8IHZvaWQgMCA9PT0gX3ZhbHVlU3RyaW5nJHNwbGl0JCA/IHZvaWQgMCA6IF92YWx1ZVN0cmluZyRzcGxpdCQubGVuZ3RoKSB8fCBwYXJzZUludCh2YWx1ZVN0cmluZy5zcGxpdChcImUtXCIpWzFdKSB8fCAwXHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJvdW5kRmxvYXRQYXJ0KHZhbHVlKSB7XHJcbiAgICB2YXIgZGlnaXRzQ291bnQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiB2b2lkIDAgIT09IGFyZ3VtZW50c1sxXSA/IGFyZ3VtZW50c1sxXSA6IDA7XHJcbiAgICByZXR1cm4gcGFyc2VGbG9hdCh2YWx1ZS50b0ZpeGVkKGRpZ2l0c0NvdW50KSlcclxufVxyXG5leHBvcnQge1xyXG4gICAgc2lnbixcclxuICAgIGZpdEludG9SYW5nZSxcclxuICAgIGluUmFuZ2UsXHJcbiAgICBhZGp1c3QsXHJcbiAgICBnZXRQcmVjaXNpb24sXHJcbiAgICBnZXRFeHBvbmVudCxcclxuICAgIGdldFJvb3QsXHJcbiAgICBzb2x2ZUN1YmljRXF1YXRpb24sXHJcbiAgICB0cnVuYyxcclxuICAgIHJvdW5kRmxvYXRQYXJ0LFxyXG4gICAgZ2V0RXhwb25lbnRMZW5ndGgsXHJcbiAgICBnZXRSZW1haW5kZXJCeURpdmlzaW9uXHJcbn07XHJcbiIsIi8qKlxyXG4gKiBEZXZFeHRyZW1lIChlc20vY29yZS91dGlscy9vYmplY3QuanMpXHJcbiAqIFZlcnNpb246IDIxLjEuNFxyXG4gKiBCdWlsZCBkYXRlOiBNb24gSnVuIDIxIDIwMjFcclxuICpcclxuICogQ29weXJpZ2h0IChjKSAyMDEyIC0gMjAyMSBEZXZlbG9wZXIgRXhwcmVzcyBJbmMuIEFMTCBSSUdIVFMgUkVTRVJWRURcclxuICogUmVhZCBhYm91dCBEZXZFeHRyZW1lIGxpY2Vuc2luZyBoZXJlOiBodHRwczovL2pzLmRldmV4cHJlc3MuY29tL0xpY2Vuc2luZy9cclxuICovXHJcbmltcG9ydCB7XHJcbiAgICBpc051bWVyaWMsXHJcbiAgICBpc1BsYWluT2JqZWN0LFxyXG4gICAgaXNPYmplY3RcclxufSBmcm9tIFwiLi90eXBlXCI7XHJcbmltcG9ydCB2YXJpYWJsZVdyYXBwZXIgZnJvbSBcIi4vdmFyaWFibGVfd3JhcHBlclwiO1xyXG52YXIgY2xvbmUgPSBmdW5jdGlvbigpIHtcclxuICAgIGZ1bmN0aW9uIENsb25lKCkge31cclxuICAgIHJldHVybiBmdW5jdGlvbihvYmopIHtcclxuICAgICAgICBDbG9uZS5wcm90b3R5cGUgPSBvYmo7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBDbG9uZVxyXG4gICAgfVxyXG59KCk7XHJcbnZhciBvcmRlckVhY2ggPSBmdW5jdGlvbihtYXAsIGZ1bmMpIHtcclxuICAgIHZhciBrZXlzID0gW107XHJcbiAgICB2YXIga2V5O1xyXG4gICAgdmFyIGk7XHJcbiAgICBmb3IgKGtleSBpbiBtYXApIHtcclxuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1hcCwga2V5KSkge1xyXG4gICAgICAgICAgICBrZXlzLnB1c2goa2V5KVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGtleXMuc29ydCgoZnVuY3Rpb24oeCwgeSkge1xyXG4gICAgICAgIHZhciBpc051bWJlclggPSBpc051bWVyaWMoeCk7XHJcbiAgICAgICAgdmFyIGlzTnVtYmVyWSA9IGlzTnVtZXJpYyh5KTtcclxuICAgICAgICBpZiAoaXNOdW1iZXJYICYmIGlzTnVtYmVyWSkge1xyXG4gICAgICAgICAgICByZXR1cm4geCAtIHlcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlzTnVtYmVyWCAmJiAhaXNOdW1iZXJZKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAtMVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWlzTnVtYmVyWCAmJiBpc051bWJlclkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIDFcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHggPCB5KSB7XHJcbiAgICAgICAgICAgIHJldHVybiAtMVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoeCA+IHkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIDFcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIDBcclxuICAgIH0pKTtcclxuICAgIGZvciAoaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAga2V5ID0ga2V5c1tpXTtcclxuICAgICAgICBmdW5jKGtleSwgbWFwW2tleV0pXHJcbiAgICB9XHJcbn07XHJcbnZhciBhc3NpZ25WYWx1ZVRvUHJvcGVydHkgPSBmdW5jdGlvbih0YXJnZXQsIHByb3BlcnR5LCB2YWx1ZSwgYXNzaWduQnlSZWZlcmVuY2UpIHtcclxuICAgIGlmICghYXNzaWduQnlSZWZlcmVuY2UgJiYgdmFyaWFibGVXcmFwcGVyLmlzV3JhcHBlZCh0YXJnZXRbcHJvcGVydHldKSkge1xyXG4gICAgICAgIHZhcmlhYmxlV3JhcHBlci5hc3NpZ24odGFyZ2V0W3Byb3BlcnR5XSwgdmFsdWUpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRhcmdldFtwcm9wZXJ0eV0gPSB2YWx1ZVxyXG4gICAgfVxyXG59O1xyXG52YXIgZGVlcEV4dGVuZEFycmF5U2FmZSA9IGZ1bmN0aW9uIGRlZXBFeHRlbmRBcnJheVNhZmUodGFyZ2V0LCBjaGFuZ2VzLCBleHRlbmRDb21wbGV4T2JqZWN0LCBhc3NpZ25CeVJlZmVyZW5jZSkge1xyXG4gICAgdmFyIHByZXZWYWx1ZTtcclxuICAgIHZhciBuZXdWYWx1ZTtcclxuICAgIGZvciAodmFyIG5hbWUgaW4gY2hhbmdlcykge1xyXG4gICAgICAgIHByZXZWYWx1ZSA9IHRhcmdldFtuYW1lXTtcclxuICAgICAgICBuZXdWYWx1ZSA9IGNoYW5nZXNbbmFtZV07XHJcbiAgICAgICAgaWYgKFwiX19wcm90b19fXCIgPT09IG5hbWUgfHwgXCJjb25zdHJ1Y3RvclwiID09PSBuYW1lIHx8IHRhcmdldCA9PT0gbmV3VmFsdWUpIHtcclxuICAgICAgICAgICAgY29udGludWVcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlzUGxhaW5PYmplY3QobmV3VmFsdWUpKSB7XHJcbiAgICAgICAgICAgIHZhciBnb0RlZXBlciA9IGV4dGVuZENvbXBsZXhPYmplY3QgPyBpc09iamVjdChwcmV2VmFsdWUpIDogaXNQbGFpbk9iamVjdChwcmV2VmFsdWUpO1xyXG4gICAgICAgICAgICBuZXdWYWx1ZSA9IGRlZXBFeHRlbmRBcnJheVNhZmUoZ29EZWVwZXIgPyBwcmV2VmFsdWUgOiB7fSwgbmV3VmFsdWUsIGV4dGVuZENvbXBsZXhPYmplY3QsIGFzc2lnbkJ5UmVmZXJlbmNlKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodm9pZCAwICE9PSBuZXdWYWx1ZSAmJiBwcmV2VmFsdWUgIT09IG5ld1ZhbHVlKSB7XHJcbiAgICAgICAgICAgIGFzc2lnblZhbHVlVG9Qcm9wZXJ0eSh0YXJnZXQsIG5hbWUsIG5ld1ZhbHVlLCBhc3NpZ25CeVJlZmVyZW5jZSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGFyZ2V0XHJcbn07XHJcbmV4cG9ydCB7XHJcbiAgICBjbG9uZSxcclxuICAgIG9yZGVyRWFjaCxcclxuICAgIGRlZXBFeHRlbmRBcnJheVNhZmVcclxufTtcclxuIiwiLyoqXHJcbiAqIERldkV4dHJlbWUgKGVzbS9jb3JlL3V0aWxzL3NpemUuanMpXHJcbiAqIFZlcnNpb246IDIxLjEuNFxyXG4gKiBCdWlsZCBkYXRlOiBNb24gSnVuIDIxIDIwMjFcclxuICpcclxuICogQ29weXJpZ2h0IChjKSAyMDEyIC0gMjAyMSBEZXZlbG9wZXIgRXhwcmVzcyBJbmMuIEFMTCBSSUdIVFMgUkVTRVJWRURcclxuICogUmVhZCBhYm91dCBEZXZFeHRyZW1lIGxpY2Vuc2luZyBoZXJlOiBodHRwczovL2pzLmRldmV4cHJlc3MuY29tL0xpY2Vuc2luZy9cclxuICovXHJcbmltcG9ydCB7XHJcbiAgICBnZXRXaW5kb3dcclxufSBmcm9tIFwiLi4vLi4vY29yZS91dGlscy93aW5kb3dcIjtcclxuaW1wb3J0IHtcclxuICAgIGlzV2luZG93LFxyXG4gICAgaXNTdHJpbmcsXHJcbiAgICBpc051bWVyaWNcclxufSBmcm9tIFwiLi4vdXRpbHMvdHlwZVwiO1xyXG52YXIgd2luZG93ID0gZ2V0V2luZG93KCk7XHJcbnZhciBTUEVDSUFMX0hFSUdIVF9WQUxVRVMgPSBbXCJhdXRvXCIsIFwibm9uZVwiLCBcImluaGVyaXRcIiwgXCJpbml0aWFsXCJdO1xyXG52YXIgZ2V0U2l6ZUJ5U3R5bGVzID0gZnVuY3Rpb24oZWxlbWVudFN0eWxlcywgc3R5bGVzKSB7XHJcbiAgICB2YXIgcmVzdWx0ID0gMDtcclxuICAgIHN0eWxlcy5mb3JFYWNoKChmdW5jdGlvbihzdHlsZSkge1xyXG4gICAgICAgIHJlc3VsdCArPSBwYXJzZUZsb2F0KGVsZW1lbnRTdHlsZXNbc3R5bGVdKSB8fCAwXHJcbiAgICB9KSk7XHJcbiAgICByZXR1cm4gcmVzdWx0XHJcbn07XHJcbnZhciBnZXRFbGVtZW50Qm94UGFyYW1zID0gZnVuY3Rpb24obmFtZSwgZWxlbWVudFN0eWxlcykge1xyXG4gICAgdmFyIGJlZm9yZU5hbWUgPSBcIndpZHRoXCIgPT09IG5hbWUgPyBcIkxlZnRcIiA6IFwiVG9wXCI7XHJcbiAgICB2YXIgYWZ0ZXJOYW1lID0gXCJ3aWR0aFwiID09PSBuYW1lID8gXCJSaWdodFwiIDogXCJCb3R0b21cIjtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgcGFkZGluZzogZ2V0U2l6ZUJ5U3R5bGVzKGVsZW1lbnRTdHlsZXMsIFtcInBhZGRpbmdcIiArIGJlZm9yZU5hbWUsIFwicGFkZGluZ1wiICsgYWZ0ZXJOYW1lXSksXHJcbiAgICAgICAgYm9yZGVyOiBnZXRTaXplQnlTdHlsZXMoZWxlbWVudFN0eWxlcywgW1wiYm9yZGVyXCIgKyBiZWZvcmVOYW1lICsgXCJXaWR0aFwiLCBcImJvcmRlclwiICsgYWZ0ZXJOYW1lICsgXCJXaWR0aFwiXSksXHJcbiAgICAgICAgbWFyZ2luOiBnZXRTaXplQnlTdHlsZXMoZWxlbWVudFN0eWxlcywgW1wibWFyZ2luXCIgKyBiZWZvcmVOYW1lLCBcIm1hcmdpblwiICsgYWZ0ZXJOYW1lXSlcclxuICAgIH1cclxufTtcclxudmFyIGdldEJveFNpemluZ09mZnNldCA9IGZ1bmN0aW9uKG5hbWUsIGVsZW1lbnRTdHlsZXMsIGJveFBhcmFtcykge1xyXG4gICAgdmFyIHNpemUgPSBlbGVtZW50U3R5bGVzW25hbWVdO1xyXG4gICAgaWYgKFwiYm9yZGVyLWJveFwiID09PSBlbGVtZW50U3R5bGVzLmJveFNpemluZyAmJiBzaXplLmxlbmd0aCAmJiBcIiVcIiAhPT0gc2l6ZVtzaXplLmxlbmd0aCAtIDFdKSB7XHJcbiAgICAgICAgcmV0dXJuIGJveFBhcmFtcy5ib3JkZXIgKyBib3hQYXJhbXMucGFkZGluZ1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIDBcclxufTtcclxudmFyIGdldFNpemUgPSBmdW5jdGlvbihlbGVtZW50LCBuYW1lLCBpbmNsdWRlKSB7XHJcbiAgICB2YXIgZWxlbWVudFN0eWxlcyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xyXG4gICAgdmFyIGJveFBhcmFtcyA9IGdldEVsZW1lbnRCb3hQYXJhbXMobmFtZSwgZWxlbWVudFN0eWxlcyk7XHJcbiAgICB2YXIgY2xpZW50UmVjdCA9IGVsZW1lbnQuZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGg7XHJcbiAgICB2YXIgYm91bmRpbmdDbGllbnRSZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVtuYW1lXTtcclxuICAgIHZhciByZXN1bHQgPSBjbGllbnRSZWN0ID8gYm91bmRpbmdDbGllbnRSZWN0IDogMDtcclxuICAgIGlmIChyZXN1bHQgPD0gMCkge1xyXG4gICAgICAgIHJlc3VsdCA9IHBhcnNlRmxvYXQoZWxlbWVudFN0eWxlc1tuYW1lXSB8fCBlbGVtZW50LnN0eWxlW25hbWVdKSB8fCAwO1xyXG4gICAgICAgIHJlc3VsdCAtPSBnZXRCb3hTaXppbmdPZmZzZXQobmFtZSwgZWxlbWVudFN0eWxlcywgYm94UGFyYW1zKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICByZXN1bHQgLT0gYm94UGFyYW1zLnBhZGRpbmcgKyBib3hQYXJhbXMuYm9yZGVyXHJcbiAgICB9XHJcbiAgICBpZiAoaW5jbHVkZS5wYWRkaW5ncykge1xyXG4gICAgICAgIHJlc3VsdCArPSBib3hQYXJhbXMucGFkZGluZ1xyXG4gICAgfVxyXG4gICAgaWYgKGluY2x1ZGUuYm9yZGVycykge1xyXG4gICAgICAgIHJlc3VsdCArPSBib3hQYXJhbXMuYm9yZGVyXHJcbiAgICB9XHJcbiAgICBpZiAoaW5jbHVkZS5tYXJnaW5zKSB7XHJcbiAgICAgICAgcmVzdWx0ICs9IGJveFBhcmFtcy5tYXJnaW5cclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHRcclxufTtcclxudmFyIGdldENvbnRhaW5lckhlaWdodCA9IGZ1bmN0aW9uKGNvbnRhaW5lcikge1xyXG4gICAgcmV0dXJuIGlzV2luZG93KGNvbnRhaW5lcikgPyBjb250YWluZXIuaW5uZXJIZWlnaHQgOiBjb250YWluZXIub2Zmc2V0SGVpZ2h0XHJcbn07XHJcbnZhciBwYXJzZUhlaWdodCA9IGZ1bmN0aW9uKHZhbHVlLCBjb250YWluZXIpIHtcclxuICAgIGlmICh2YWx1ZS5pbmRleE9mKFwicHhcIikgPiAwKSB7XHJcbiAgICAgICAgdmFsdWUgPSBwYXJzZUludCh2YWx1ZS5yZXBsYWNlKFwicHhcIiwgXCJcIikpXHJcbiAgICB9IGVsc2UgaWYgKHZhbHVlLmluZGV4T2YoXCIlXCIpID4gMCkge1xyXG4gICAgICAgIHZhbHVlID0gcGFyc2VJbnQodmFsdWUucmVwbGFjZShcIiVcIiwgXCJcIikpICogZ2V0Q29udGFpbmVySGVpZ2h0KGNvbnRhaW5lcikgLyAxMDBcclxuICAgIH0gZWxzZSBpZiAoIWlzTmFOKHZhbHVlKSkge1xyXG4gICAgICAgIHZhbHVlID0gcGFyc2VJbnQodmFsdWUpXHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsdWVcclxufTtcclxudmFyIGdldEhlaWdodFdpdGhPZmZzZXQgPSBmdW5jdGlvbih2YWx1ZSwgb2Zmc2V0LCBjb250YWluZXIpIHtcclxuICAgIGlmICghdmFsdWUpIHtcclxuICAgICAgICByZXR1cm4gbnVsbFxyXG4gICAgfVxyXG4gICAgaWYgKFNQRUNJQUxfSEVJR0hUX1ZBTFVFUy5pbmRleE9mKHZhbHVlKSA+IC0xKSB7XHJcbiAgICAgICAgcmV0dXJuIG9mZnNldCA/IG51bGwgOiB2YWx1ZVxyXG4gICAgfVxyXG4gICAgaWYgKGlzU3RyaW5nKHZhbHVlKSkge1xyXG4gICAgICAgIHZhbHVlID0gcGFyc2VIZWlnaHQodmFsdWUsIGNvbnRhaW5lcilcclxuICAgIH1cclxuICAgIGlmIChpc051bWVyaWModmFsdWUpKSB7XHJcbiAgICAgICAgcmV0dXJuIE1hdGgubWF4KDAsIHZhbHVlICsgb2Zmc2V0KVxyXG4gICAgfVxyXG4gICAgdmFyIG9wZXJhdGlvblN0cmluZyA9IG9mZnNldCA8IDAgPyBcIiAtIFwiIDogXCIgXCI7XHJcbiAgICByZXR1cm4gXCJjYWxjKFwiICsgdmFsdWUgKyBvcGVyYXRpb25TdHJpbmcgKyBNYXRoLmFicyhvZmZzZXQpICsgXCJweClcIlxyXG59O1xyXG52YXIgYWRkT2Zmc2V0VG9NYXhIZWlnaHQgPSBmdW5jdGlvbih2YWx1ZSwgb2Zmc2V0LCBjb250YWluZXIpIHtcclxuICAgIHZhciBtYXhIZWlnaHQgPSBnZXRIZWlnaHRXaXRoT2Zmc2V0KHZhbHVlLCBvZmZzZXQsIGNvbnRhaW5lcik7XHJcbiAgICByZXR1cm4gbnVsbCAhPT0gbWF4SGVpZ2h0ID8gbWF4SGVpZ2h0IDogXCJub25lXCJcclxufTtcclxudmFyIGFkZE9mZnNldFRvTWluSGVpZ2h0ID0gZnVuY3Rpb24odmFsdWUsIG9mZnNldCwgY29udGFpbmVyKSB7XHJcbiAgICB2YXIgbWluSGVpZ2h0ID0gZ2V0SGVpZ2h0V2l0aE9mZnNldCh2YWx1ZSwgb2Zmc2V0LCBjb250YWluZXIpO1xyXG4gICAgcmV0dXJuIG51bGwgIT09IG1pbkhlaWdodCA/IG1pbkhlaWdodCA6IDBcclxufTtcclxudmFyIGdldFZlcnRpY2FsT2Zmc2V0cyA9IGZ1bmN0aW9uKGVsZW1lbnQsIHdpdGhNYXJnaW5zKSB7XHJcbiAgICBpZiAoIWVsZW1lbnQpIHtcclxuICAgICAgICByZXR1cm4gMFxyXG4gICAgfVxyXG4gICAgdmFyIGJveFBhcmFtcyA9IGdldEVsZW1lbnRCb3hQYXJhbXMoXCJoZWlnaHRcIiwgd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkpO1xyXG4gICAgcmV0dXJuIGJveFBhcmFtcy5wYWRkaW5nICsgYm94UGFyYW1zLmJvcmRlciArICh3aXRoTWFyZ2lucyA/IGJveFBhcmFtcy5tYXJnaW4gOiAwKVxyXG59O1xyXG52YXIgZ2V0VmlzaWJsZUhlaWdodCA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICAgIGlmIChlbGVtZW50KSB7XHJcbiAgICAgICAgdmFyIGJvdW5kaW5nQ2xpZW50UmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgICAgaWYgKGJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHRcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gMFxyXG59O1xyXG5leHBvcnQge1xyXG4gICAgZ2V0U2l6ZSxcclxuICAgIGdldEVsZW1lbnRCb3hQYXJhbXMsXHJcbiAgICBhZGRPZmZzZXRUb01heEhlaWdodCxcclxuICAgIGFkZE9mZnNldFRvTWluSGVpZ2h0LFxyXG4gICAgZ2V0VmVydGljYWxPZmZzZXRzLFxyXG4gICAgZ2V0VmlzaWJsZUhlaWdodCxcclxuICAgIHBhcnNlSGVpZ2h0XHJcbn07XHJcbiIsIi8qKlxyXG4gKiBEZXZFeHRyZW1lIChlc20vY29yZS91dGlscy9zdHJpbmcuanMpXHJcbiAqIFZlcnNpb246IDIxLjEuNFxyXG4gKiBCdWlsZCBkYXRlOiBNb24gSnVuIDIxIDIwMjFcclxuICpcclxuICogQ29weXJpZ2h0IChjKSAyMDEyIC0gMjAyMSBEZXZlbG9wZXIgRXhwcmVzcyBJbmMuIEFMTCBSSUdIVFMgUkVTRVJWRURcclxuICogUmVhZCBhYm91dCBEZXZFeHRyZW1lIGxpY2Vuc2luZyBoZXJlOiBodHRwczovL2pzLmRldmV4cHJlc3MuY29tL0xpY2Vuc2luZy9cclxuICovXHJcbmltcG9ydCB7XHJcbiAgICBpc0Z1bmN0aW9uLFxyXG4gICAgaXNTdHJpbmdcclxufSBmcm9tIFwiLi90eXBlXCI7XHJcbmV4cG9ydCB2YXIgZW5jb2RlSHRtbCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgdmFyIGVuY29kZVJlZ0V4cCA9IFtuZXcgUmVnRXhwKFwiJlwiLCBcImdcIiksIG5ldyBSZWdFeHAoJ1wiJywgXCJnXCIpLCBuZXcgUmVnRXhwKFwiJ1wiLCBcImdcIiksIG5ldyBSZWdFeHAoXCI8XCIsIFwiZ1wiKSwgbmV3IFJlZ0V4cChcIj5cIiwgXCJnXCIpXTtcclxuICAgIHJldHVybiBmdW5jdGlvbihzdHIpIHtcclxuICAgICAgICByZXR1cm4gU3RyaW5nKHN0cikucmVwbGFjZShlbmNvZGVSZWdFeHBbMF0sIFwiJmFtcDtcIikucmVwbGFjZShlbmNvZGVSZWdFeHBbMV0sIFwiJnF1b3Q7XCIpLnJlcGxhY2UoZW5jb2RlUmVnRXhwWzJdLCBcIiYjMzk7XCIpLnJlcGxhY2UoZW5jb2RlUmVnRXhwWzNdLCBcIiZsdDtcIikucmVwbGFjZShlbmNvZGVSZWdFeHBbNF0sIFwiJmd0O1wiKVxyXG4gICAgfVxyXG59KCk7XHJcbnZhciBzcGxpdFF1YWQgPSBmdW5jdGlvbihyYXcpIHtcclxuICAgIHN3aXRjaCAodHlwZW9mIHJhdykge1xyXG4gICAgICAgIGNhc2UgXCJzdHJpbmdcIjpcclxuICAgICAgICAgICAgcmV0dXJuIHJhdy5zcGxpdCgvXFxzKy8sIDQpO1xyXG4gICAgICAgIGNhc2UgXCJvYmplY3RcIjpcclxuICAgICAgICAgICAgcmV0dXJuIFtyYXcueCB8fCByYXcuaCB8fCByYXcubGVmdCwgcmF3LnkgfHwgcmF3LnYgfHwgcmF3LnRvcCwgcmF3LnggfHwgcmF3LmggfHwgcmF3LnJpZ2h0LCByYXcueSB8fCByYXcudiB8fCByYXcuYm90dG9tXTtcclxuICAgICAgICBjYXNlIFwibnVtYmVyXCI6XHJcbiAgICAgICAgICAgIHJldHVybiBbcmF3XTtcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICByZXR1cm4gcmF3XHJcbiAgICB9XHJcbn07XHJcbmV4cG9ydCB2YXIgcXVhZFRvT2JqZWN0ID0gZnVuY3Rpb24ocmF3KSB7XHJcbiAgICB2YXIgcXVhZCA9IHNwbGl0UXVhZChyYXcpO1xyXG4gICAgdmFyIGxlZnQgPSBwYXJzZUludChxdWFkICYmIHF1YWRbMF0sIDEwKTtcclxuICAgIHZhciB0b3AgPSBwYXJzZUludChxdWFkICYmIHF1YWRbMV0sIDEwKTtcclxuICAgIHZhciByaWdodCA9IHBhcnNlSW50KHF1YWQgJiYgcXVhZFsyXSwgMTApO1xyXG4gICAgdmFyIGJvdHRvbSA9IHBhcnNlSW50KHF1YWQgJiYgcXVhZFszXSwgMTApO1xyXG4gICAgaWYgKCFpc0Zpbml0ZShsZWZ0KSkge1xyXG4gICAgICAgIGxlZnQgPSAwXHJcbiAgICB9XHJcbiAgICBpZiAoIWlzRmluaXRlKHRvcCkpIHtcclxuICAgICAgICB0b3AgPSBsZWZ0XHJcbiAgICB9XHJcbiAgICBpZiAoIWlzRmluaXRlKHJpZ2h0KSkge1xyXG4gICAgICAgIHJpZ2h0ID0gbGVmdFxyXG4gICAgfVxyXG4gICAgaWYgKCFpc0Zpbml0ZShib3R0b20pKSB7XHJcbiAgICAgICAgYm90dG9tID0gdG9wXHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHRvcDogdG9wLFxyXG4gICAgICAgIHJpZ2h0OiByaWdodCxcclxuICAgICAgICBib3R0b206IGJvdHRvbSxcclxuICAgICAgICBsZWZ0OiBsZWZ0XHJcbiAgICB9XHJcbn07XHJcbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXQodGVtcGxhdGUpIHtcclxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCB2YWx1ZXMgPSBuZXcgQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xyXG4gICAgICAgIHZhbHVlc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV1cclxuICAgIH1cclxuICAgIGlmIChpc0Z1bmN0aW9uKHRlbXBsYXRlKSkge1xyXG4gICAgICAgIHJldHVybiB0ZW1wbGF0ZSguLi52YWx1ZXMpXHJcbiAgICB9XHJcbiAgICB2YWx1ZXMuZm9yRWFjaCgodmFsdWUsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgaWYgKGlzU3RyaW5nKHZhbHVlKSkge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoL1xcJC9nLCBcIiQkJCRcIilcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHBsYWNlaG9sZGVyUmVnID0gbmV3IFJlZ0V4cChcIlxcXFx7XCIgKyBpbmRleCArIFwiXFxcXH1cIiwgXCJnbVwiKTtcclxuICAgICAgICB0ZW1wbGF0ZSA9IHRlbXBsYXRlLnJlcGxhY2UocGxhY2Vob2xkZXJSZWcsIHZhbHVlKVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gdGVtcGxhdGVcclxufVxyXG5leHBvcnQgdmFyIHJlcGxhY2VBbGwgPSBmdW5jdGlvbih0ZXh0LCBzZWFyY2hUb2tlbiwgcmVwbGFjZW1lbnRUb2tlbikge1xyXG4gICAgcmV0dXJuIHRleHQucmVwbGFjZShuZXcgUmVnRXhwKFwiKFwiICsgKHN0ciA9IHNlYXJjaFRva2VuLCAoc3RyICsgXCJcIikucmVwbGFjZSgvKFsrKj8uW15cXF0kKCl7fT48fD0hOl0pL2csIFwiXFxcXCQxXCIpKSArIFwiKVwiLCBcImdpXCIpLCByZXBsYWNlbWVudFRva2VuKTtcclxuICAgIHZhciBzdHJcclxufTtcclxuZXhwb3J0IHZhciBpc0VtcHR5ID0gZnVuY3Rpb24oKSB7XHJcbiAgICB2YXIgU1BBQ0VfUkVHRVhQID0gL1xccy9nO1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKHRleHQpIHtcclxuICAgICAgICByZXR1cm4gIXRleHQgfHwgIXRleHQucmVwbGFjZShTUEFDRV9SRUdFWFAsIFwiXCIpXHJcbiAgICB9XHJcbn0oKTtcclxuIiwiLyoqXHJcbiAqIERldkV4dHJlbWUgKGVzbS9jb3JlL3V0aWxzL3N0eWxlLmpzKVxyXG4gKiBWZXJzaW9uOiAyMS4xLjRcclxuICogQnVpbGQgZGF0ZTogTW9uIEp1biAyMSAyMDIxXHJcbiAqXHJcbiAqIENvcHlyaWdodCAoYykgMjAxMiAtIDIwMjEgRGV2ZWxvcGVyIEV4cHJlc3MgSW5jLiBBTEwgUklHSFRTIFJFU0VSVkVEXHJcbiAqIFJlYWQgYWJvdXQgRGV2RXh0cmVtZSBsaWNlbnNpbmcgaGVyZTogaHR0cHM6Ly9qcy5kZXZleHByZXNzLmNvbS9MaWNlbnNpbmcvXHJcbiAqL1xyXG5pbXBvcnQge1xyXG4gICAgY2FtZWxpemVcclxufSBmcm9tIFwiLi9pbmZsZWN0b3JcIjtcclxuaW1wb3J0IGNhbGxPbmNlIGZyb20gXCIuL2NhbGxfb25jZVwiO1xyXG5pbXBvcnQge1xyXG4gICAgaXNOdW1lcmljXHJcbn0gZnJvbSBcIi4vdHlwZVwiO1xyXG5pbXBvcnQgZG9tQWRhcHRlciBmcm9tIFwiLi4vZG9tX2FkYXB0ZXJcIjtcclxudmFyIGpzUHJlZml4ZXMgPSBbXCJcIiwgXCJXZWJraXRcIiwgXCJNb3pcIiwgXCJPXCIsIFwiTXNcIl07XHJcbnZhciBjc3NQcmVmaXhlcyA9IHtcclxuICAgIFwiXCI6IFwiXCIsXHJcbiAgICBXZWJraXQ6IFwiLXdlYmtpdC1cIixcclxuICAgIE1vejogXCItbW96LVwiLFxyXG4gICAgTzogXCItby1cIixcclxuICAgIG1zOiBcIi1tcy1cIlxyXG59O1xyXG52YXIgZ2V0U3R5bGVzID0gY2FsbE9uY2UoKGZ1bmN0aW9uKCkge1xyXG4gICAgcmV0dXJuIGRvbUFkYXB0ZXIuY3JlYXRlRWxlbWVudChcImR4XCIpLnN0eWxlXHJcbn0pKTtcclxudmFyIGZvckVhY2hQcmVmaXhlcyA9IGZ1bmN0aW9uKHByb3AsIGNhbGxCYWNrKSB7XHJcbiAgICBwcm9wID0gY2FtZWxpemUocHJvcCwgdHJ1ZSk7XHJcbiAgICB2YXIgcmVzdWx0O1xyXG4gICAgZm9yICh2YXIgaSA9IDAsIGNzc1ByZWZpeGVzQ291bnQgPSBqc1ByZWZpeGVzLmxlbmd0aDsgaSA8IGNzc1ByZWZpeGVzQ291bnQ7IGkrKykge1xyXG4gICAgICAgIHZhciBqc1ByZWZpeCA9IGpzUHJlZml4ZXNbaV07XHJcbiAgICAgICAgdmFyIHByZWZpeGVkUHJvcCA9IGpzUHJlZml4ICsgcHJvcDtcclxuICAgICAgICB2YXIgbG93ZXJQcmVmaXhlZFByb3AgPSBjYW1lbGl6ZShwcmVmaXhlZFByb3ApO1xyXG4gICAgICAgIHJlc3VsdCA9IGNhbGxCYWNrKGxvd2VyUHJlZml4ZWRQcm9wLCBqc1ByZWZpeCk7XHJcbiAgICAgICAgaWYgKHZvaWQgMCA9PT0gcmVzdWx0KSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IGNhbGxCYWNrKHByZWZpeGVkUHJvcCwganNQcmVmaXgpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh2b2lkIDAgIT09IHJlc3VsdCkge1xyXG4gICAgICAgICAgICBicmVha1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQgfHwgXCJcIlxyXG59O1xyXG52YXIgc3R5bGVQcm9wID0gZnVuY3Rpb24obmFtZSkge1xyXG4gICAgaWYgKG5hbWUgaW4gZ2V0U3R5bGVzKCkpIHtcclxuICAgICAgICByZXR1cm4gbmFtZVxyXG4gICAgfVxyXG4gICAgdmFyIG9yaWdpbmFsTmFtZSA9IG5hbWU7XHJcbiAgICBuYW1lID0gbmFtZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIG5hbWUuc3Vic3RyKDEpO1xyXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBqc1ByZWZpeGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIHByZWZpeGVkUHJvcCA9IGpzUHJlZml4ZXNbaV0udG9Mb3dlckNhc2UoKSArIG5hbWU7XHJcbiAgICAgICAgaWYgKHByZWZpeGVkUHJvcCBpbiBnZXRTdHlsZXMoKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gcHJlZml4ZWRQcm9wXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG9yaWdpbmFsTmFtZVxyXG59O1xyXG52YXIgc3R5bGVQcm9wUHJlZml4ID0gZnVuY3Rpb24ocHJvcCkge1xyXG4gICAgcmV0dXJuIGZvckVhY2hQcmVmaXhlcyhwcm9wLCAoZnVuY3Rpb24oc3BlY2lmaWMsIGpzUHJlZml4KSB7XHJcbiAgICAgICAgaWYgKHNwZWNpZmljIGluIGdldFN0eWxlcygpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjc3NQcmVmaXhlc1tqc1ByZWZpeF1cclxuICAgICAgICB9XHJcbiAgICB9KSlcclxufTtcclxudmFyIHB4RXhjZXB0aW9ucyA9IFtcImZpbGxPcGFjaXR5XCIsIFwiY29sdW1uQ291bnRcIiwgXCJmbGV4R3Jvd1wiLCBcImZsZXhTaHJpbmtcIiwgXCJmb250V2VpZ2h0XCIsIFwibGluZUhlaWdodFwiLCBcIm9wYWNpdHlcIiwgXCJ6SW5kZXhcIiwgXCJ6b29tXCJdO1xyXG52YXIgbm9ybWFsaXplU3R5bGVQcm9wID0gZnVuY3Rpb24ocHJvcCwgdmFsdWUpIHtcclxuICAgIGlmIChpc051bWVyaWModmFsdWUpICYmIC0xID09PSBweEV4Y2VwdGlvbnMuaW5kZXhPZihwcm9wKSkge1xyXG4gICAgICAgIHZhbHVlICs9IFwicHhcIlxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZhbHVlXHJcbn07XHJcbnZhciBzZXREaW1lbnNpb25Qcm9wZXJ0eSA9IGZ1bmN0aW9uKGVsZW1lbnRzLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKSB7XHJcbiAgICBpZiAoZWxlbWVudHMpIHtcclxuICAgICAgICB2YWx1ZSA9IGlzTnVtZXJpYyh2YWx1ZSkgPyB2YWx1ZSArPSBcInB4XCIgOiB2YWx1ZTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgKytpKSB7XHJcbiAgICAgICAgICAgIGVsZW1lbnRzW2ldLnN0eWxlW3Byb3BlcnR5TmFtZV0gPSB2YWx1ZVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxudmFyIHNldFdpZHRoID0gZnVuY3Rpb24oZWxlbWVudHMsIHZhbHVlKSB7XHJcbiAgICBzZXREaW1lbnNpb25Qcm9wZXJ0eShlbGVtZW50cywgXCJ3aWR0aFwiLCB2YWx1ZSlcclxufTtcclxudmFyIHNldEhlaWdodCA9IGZ1bmN0aW9uKGVsZW1lbnRzLCB2YWx1ZSkge1xyXG4gICAgc2V0RGltZW5zaW9uUHJvcGVydHkoZWxlbWVudHMsIFwiaGVpZ2h0XCIsIHZhbHVlKVxyXG59O1xyXG5leHBvcnQge1xyXG4gICAgc3R5bGVQcm9wLFxyXG4gICAgc3R5bGVQcm9wUHJlZml4LFxyXG4gICAgbm9ybWFsaXplU3R5bGVQcm9wLFxyXG4gICAgc2V0V2lkdGgsXHJcbiAgICBzZXRIZWlnaHRcclxufTtcclxuIiwiLyoqXHJcbiAqIERldkV4dHJlbWUgKGVzbS9jb3JlL3V0aWxzL3R5cGUuanMpXHJcbiAqIFZlcnNpb246IDIxLjEuNFxyXG4gKiBCdWlsZCBkYXRlOiBNb24gSnVuIDIxIDIwMjFcclxuICpcclxuICogQ29weXJpZ2h0IChjKSAyMDEyIC0gMjAyMSBEZXZlbG9wZXIgRXhwcmVzcyBJbmMuIEFMTCBSSUdIVFMgUkVTRVJWRURcclxuICogUmVhZCBhYm91dCBEZXZFeHRyZW1lIGxpY2Vuc2luZyBoZXJlOiBodHRwczovL2pzLmRldmV4cHJlc3MuY29tL0xpY2Vuc2luZy9cclxuICovXHJcbnZhciB0eXBlcyA9IHtcclxuICAgIFwiW29iamVjdCBBcnJheV1cIjogXCJhcnJheVwiLFxyXG4gICAgXCJbb2JqZWN0IERhdGVdXCI6IFwiZGF0ZVwiLFxyXG4gICAgXCJbb2JqZWN0IE9iamVjdF1cIjogXCJvYmplY3RcIixcclxuICAgIFwiW29iamVjdCBTdHJpbmddXCI6IFwic3RyaW5nXCIsXHJcbiAgICBcIltvYmplY3QgTnVsbF1cIjogXCJudWxsXCJcclxufTtcclxudmFyIHR5cGUgPSBmdW5jdGlvbihvYmplY3QpIHtcclxuICAgIHZhciB0eXBlT2ZPYmplY3QgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqZWN0KTtcclxuICAgIHJldHVybiBcIm9iamVjdFwiID09PSB0eXBlb2Ygb2JqZWN0ID8gdHlwZXNbdHlwZU9mT2JqZWN0XSB8fCBcIm9iamVjdFwiIDogdHlwZW9mIG9iamVjdFxyXG59O1xyXG52YXIgaXNCb29sZWFuID0gZnVuY3Rpb24ob2JqZWN0KSB7XHJcbiAgICByZXR1cm4gXCJib29sZWFuXCIgPT09IHR5cGVvZiBvYmplY3RcclxufTtcclxudmFyIGlzRXhwb25lbnRpYWwgPSBmdW5jdGlvbih2YWx1ZSkge1xyXG4gICAgcmV0dXJuIGlzTnVtZXJpYyh2YWx1ZSkgJiYgLTEgIT09IHZhbHVlLnRvU3RyaW5nKCkuaW5kZXhPZihcImVcIilcclxufTtcclxudmFyIGlzRGF0ZSA9IGZ1bmN0aW9uKG9iamVjdCkge1xyXG4gICAgcmV0dXJuIFwiZGF0ZVwiID09PSB0eXBlKG9iamVjdClcclxufTtcclxudmFyIGlzRGVmaW5lZCA9IGZ1bmN0aW9uKG9iamVjdCkge1xyXG4gICAgcmV0dXJuIG51bGwgIT09IG9iamVjdCAmJiB2b2lkIDAgIT09IG9iamVjdFxyXG59O1xyXG52YXIgaXNGdW5jdGlvbiA9IGZ1bmN0aW9uKG9iamVjdCkge1xyXG4gICAgcmV0dXJuIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIG9iamVjdFxyXG59O1xyXG52YXIgaXNTdHJpbmcgPSBmdW5jdGlvbihvYmplY3QpIHtcclxuICAgIHJldHVybiBcInN0cmluZ1wiID09PSB0eXBlb2Ygb2JqZWN0XHJcbn07XHJcbnZhciBpc051bWVyaWMgPSBmdW5jdGlvbihvYmplY3QpIHtcclxuICAgIHJldHVybiBcIm51bWJlclwiID09PSB0eXBlb2Ygb2JqZWN0ICYmIGlzRmluaXRlKG9iamVjdCkgfHwgIWlzTmFOKG9iamVjdCAtIHBhcnNlRmxvYXQob2JqZWN0KSlcclxufTtcclxudmFyIGlzT2JqZWN0ID0gZnVuY3Rpb24ob2JqZWN0KSB7XHJcbiAgICByZXR1cm4gXCJvYmplY3RcIiA9PT0gdHlwZShvYmplY3QpXHJcbn07XHJcbnZhciBpc0VtcHR5T2JqZWN0ID0gZnVuY3Rpb24ob2JqZWN0KSB7XHJcbiAgICB2YXIgcHJvcGVydHk7XHJcbiAgICBmb3IgKHByb3BlcnR5IGluIG9iamVjdCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWVcclxufTtcclxudmFyIGlzUGxhaW5PYmplY3QgPSBmdW5jdGlvbihvYmplY3QpIHtcclxuICAgIGlmICghb2JqZWN0IHx8IFwiW29iamVjdCBPYmplY3RdXCIgIT09IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmplY3QpKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICB9XHJcbiAgICB2YXIgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqZWN0KTtcclxuICAgIHZhciBjdG9yID0gT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwocHJvdG8sIFwiY29uc3RydWN0b3JcIikgJiYgcHJvdG8uY29uc3RydWN0b3I7XHJcbiAgICByZXR1cm4gXCJmdW5jdGlvblwiID09PSB0eXBlb2YgY3RvciAmJiBPYmplY3QudG9TdHJpbmcuY2FsbChjdG9yKSA9PT0gT2JqZWN0LnRvU3RyaW5nLmNhbGwoT2JqZWN0KVxyXG59O1xyXG52YXIgaXNQcmltaXRpdmUgPSBmdW5jdGlvbih2YWx1ZSkge1xyXG4gICAgcmV0dXJuIC0xID09PSBbXCJvYmplY3RcIiwgXCJhcnJheVwiLCBcImZ1bmN0aW9uXCJdLmluZGV4T2YodHlwZSh2YWx1ZSkpXHJcbn07XHJcbnZhciBpc1dpbmRvdyA9IGZ1bmN0aW9uKG9iamVjdCkge1xyXG4gICAgcmV0dXJuIG51bGwgIT0gb2JqZWN0ICYmIG9iamVjdCA9PT0gb2JqZWN0LndpbmRvd1xyXG59O1xyXG52YXIgaXNSZW5kZXJlciA9IGZ1bmN0aW9uKG9iamVjdCkge1xyXG4gICAgcmV0dXJuICEhKG9iamVjdC5qcXVlcnkgfHwgb2JqZWN0LmR4UmVuZGVyZXIpXHJcbn07XHJcbnZhciBpc1Byb21pc2UgPSBmdW5jdGlvbihvYmplY3QpIHtcclxuICAgIHJldHVybiBvYmplY3QgJiYgaXNGdW5jdGlvbihvYmplY3QudGhlbilcclxufTtcclxudmFyIGlzRGVmZXJyZWQgPSBmdW5jdGlvbihvYmplY3QpIHtcclxuICAgIHJldHVybiBvYmplY3QgJiYgaXNGdW5jdGlvbihvYmplY3QuZG9uZSkgJiYgaXNGdW5jdGlvbihvYmplY3QuZmFpbClcclxufTtcclxudmFyIGlzRXZlbnQgPSBmdW5jdGlvbihvYmplY3QpIHtcclxuICAgIHJldHVybiAhIShvYmplY3QgJiYgb2JqZWN0LnByZXZlbnREZWZhdWx0KVxyXG59O1xyXG5leHBvcnQge1xyXG4gICAgaXNCb29sZWFuLFxyXG4gICAgaXNFeHBvbmVudGlhbCxcclxuICAgIGlzRGF0ZSxcclxuICAgIGlzRGVmaW5lZCxcclxuICAgIGlzRnVuY3Rpb24sXHJcbiAgICBpc1N0cmluZyxcclxuICAgIGlzTnVtZXJpYyxcclxuICAgIGlzT2JqZWN0LFxyXG4gICAgaXNFbXB0eU9iamVjdCxcclxuICAgIGlzUGxhaW5PYmplY3QsXHJcbiAgICBpc1ByaW1pdGl2ZSxcclxuICAgIGlzV2luZG93LFxyXG4gICAgaXNSZW5kZXJlcixcclxuICAgIGlzUHJvbWlzZSxcclxuICAgIGlzRGVmZXJyZWQsXHJcbiAgICB0eXBlLFxyXG4gICAgaXNFdmVudFxyXG59O1xyXG4iLCIvKipcclxuICogRGV2RXh0cmVtZSAoZXNtL2NvcmUvdXRpbHMvdmFyaWFibGVfd3JhcHBlci5qcylcclxuICogVmVyc2lvbjogMjEuMS40XHJcbiAqIEJ1aWxkIGRhdGU6IE1vbiBKdW4gMjEgMjAyMVxyXG4gKlxyXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTIgLSAyMDIxIERldmVsb3BlciBFeHByZXNzIEluYy4gQUxMIFJJR0hUUyBSRVNFUlZFRFxyXG4gKiBSZWFkIGFib3V0IERldkV4dHJlbWUgbGljZW5zaW5nIGhlcmU6IGh0dHBzOi8vanMuZGV2ZXhwcmVzcy5jb20vTGljZW5zaW5nL1xyXG4gKi9cclxuaW1wb3J0IHtcclxuICAgIGxvZ2dlclxyXG59IGZyb20gXCIuL2NvbnNvbGVcIjtcclxuaW1wb3J0IGRlcGVuZGVuY3lJbmplY3RvciBmcm9tIFwiLi9kZXBlbmRlbmN5X2luamVjdG9yXCI7XHJcbmV4cG9ydCBkZWZhdWx0IGRlcGVuZGVuY3lJbmplY3Rvcih7XHJcbiAgICBpc1dyYXBwZWQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgfSxcclxuICAgIGlzV3JpdGFibGVXcmFwcGVkOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2VcclxuICAgIH0sXHJcbiAgICB3cmFwOiBmdW5jdGlvbih2YWx1ZSkge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZVxyXG4gICAgfSxcclxuICAgIHVud3JhcDogZnVuY3Rpb24odmFsdWUpIHtcclxuICAgICAgICByZXR1cm4gdmFsdWVcclxuICAgIH0sXHJcbiAgICBhc3NpZ246IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGxvZ2dlci5lcnJvcihcIk1ldGhvZCAnYXNzaWduJyBzaG91bGQgbm90IGJlIHVzZWQgZm9yIG5vdCB3cmFwcGVkIHZhcmlhYmxlcy4gVXNlICdpc1dyYXBwZWQnIG1ldGhvZCBmb3IgZW5zdXJpbmcuXCIpXHJcbiAgICB9XHJcbn0pO1xyXG4iLCIvKipcclxuICogRGV2RXh0cmVtZSAoZXNtL2NvcmUvdXRpbHMvd2luZG93LmpzKVxyXG4gKiBWZXJzaW9uOiAyMS4xLjRcclxuICogQnVpbGQgZGF0ZTogTW9uIEp1biAyMSAyMDIxXHJcbiAqXHJcbiAqIENvcHlyaWdodCAoYykgMjAxMiAtIDIwMjEgRGV2ZWxvcGVyIEV4cHJlc3MgSW5jLiBBTEwgUklHSFRTIFJFU0VSVkVEXHJcbiAqIFJlYWQgYWJvdXQgRGV2RXh0cmVtZSBsaWNlbnNpbmcgaGVyZTogaHR0cHM6Ly9qcy5kZXZleHByZXNzLmNvbS9MaWNlbnNpbmcvXHJcbiAqL1xyXG5pbXBvcnQgZG9tQWRhcHRlciBmcm9tIFwiLi4vZG9tX2FkYXB0ZXJcIjtcclxudmFyIGhhc1dpbmRvd1ZhbHVlID0gXCJ1bmRlZmluZWRcIiAhPT0gdHlwZW9mIHdpbmRvdztcclxudmFyIGhhc1dpbmRvdyA9ICgpID0+IGhhc1dpbmRvd1ZhbHVlO1xyXG52YXIgd2luZG93T2JqZWN0ID0gaGFzV2luZG93KCkgPyB3aW5kb3cgOiB2b2lkIDA7XHJcbmlmICghd2luZG93T2JqZWN0KSB7XHJcbiAgICB3aW5kb3dPYmplY3QgPSB7fTtcclxuICAgIHdpbmRvd09iamVjdC53aW5kb3cgPSB3aW5kb3dPYmplY3RcclxufVxyXG52YXIgZ2V0V2luZG93ID0gKCkgPT4gd2luZG93T2JqZWN0O1xyXG52YXIgc2V0V2luZG93ID0gKG5ld1dpbmRvd09iamVjdCwgaGFzV2luZG93KSA9PiB7XHJcbiAgICBpZiAodm9pZCAwID09PSBoYXNXaW5kb3cpIHtcclxuICAgICAgICBoYXNXaW5kb3dWYWx1ZSA9IFwidW5kZWZpbmVkXCIgIT09IHR5cGVvZiB3aW5kb3cgJiYgd2luZG93ID09PSBuZXdXaW5kb3dPYmplY3RcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaGFzV2luZG93VmFsdWUgPSBoYXNXaW5kb3dcclxuICAgIH1cclxuICAgIHdpbmRvd09iamVjdCA9IG5ld1dpbmRvd09iamVjdFxyXG59O1xyXG52YXIgaGFzUHJvcGVydHkgPSBwcm9wID0+IGhhc1dpbmRvdygpICYmIHByb3AgaW4gd2luZG93T2JqZWN0O1xyXG52YXIgZGVmYXVsdFNjcmVlbkZhY3RvckZ1bmMgPSB3aWR0aCA9PiB7XHJcbiAgICBpZiAod2lkdGggPCA3NjgpIHtcclxuICAgICAgICByZXR1cm4gXCJ4c1wiXHJcbiAgICB9IGVsc2UgaWYgKHdpZHRoIDwgOTkyKSB7XHJcbiAgICAgICAgcmV0dXJuIFwic21cIlxyXG4gICAgfSBlbHNlIGlmICh3aWR0aCA8IDEyMDApIHtcclxuICAgICAgICByZXR1cm4gXCJtZFwiXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBcImxnXCJcclxuICAgIH1cclxufTtcclxudmFyIGdldEN1cnJlbnRTY3JlZW5GYWN0b3IgPSBzY3JlZW5GYWN0b3JDYWxsYmFjayA9PiB7XHJcbiAgICB2YXIgc2NyZWVuRmFjdG9yRnVuYyA9IHNjcmVlbkZhY3RvckNhbGxiYWNrIHx8IGRlZmF1bHRTY3JlZW5GYWN0b3JGdW5jO1xyXG4gICAgdmFyIHdpbmRvd1dpZHRoID0gZG9tQWRhcHRlci5nZXREb2N1bWVudEVsZW1lbnQoKS5jbGllbnRXaWR0aDtcclxuICAgIHJldHVybiBzY3JlZW5GYWN0b3JGdW5jKHdpbmRvd1dpZHRoKVxyXG59O1xyXG52YXIgZ2V0TmF2aWdhdG9yID0gKCkgPT4gaGFzV2luZG93KCkgPyB3aW5kb3dPYmplY3QubmF2aWdhdG9yIDoge1xyXG4gICAgdXNlckFnZW50OiBcIlwiXHJcbn07XHJcbmV4cG9ydCB7XHJcbiAgICBoYXNXaW5kb3csXHJcbiAgICBnZXRXaW5kb3csXHJcbiAgICBzZXRXaW5kb3csXHJcbiAgICBoYXNQcm9wZXJ0eSxcclxuICAgIGRlZmF1bHRTY3JlZW5GYWN0b3JGdW5jLFxyXG4gICAgZ2V0Q3VycmVudFNjcmVlbkZhY3RvcixcclxuICAgIGdldE5hdmlnYXRvclxyXG59O1xyXG4iLCIvKipcclxuICogRGV2RXh0cmVtZSAoZXNtL2NvcmUvdmVyc2lvbi5qcylcclxuICogVmVyc2lvbjogMjEuMS40XHJcbiAqIEJ1aWxkIGRhdGU6IE1vbiBKdW4gMjEgMjAyMVxyXG4gKlxyXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTIgLSAyMDIxIERldmVsb3BlciBFeHByZXNzIEluYy4gQUxMIFJJR0hUUyBSRVNFUlZFRFxyXG4gKiBSZWFkIGFib3V0IERldkV4dHJlbWUgbGljZW5zaW5nIGhlcmU6IGh0dHBzOi8vanMuZGV2ZXhwcmVzcy5jb20vTGljZW5zaW5nL1xyXG4gKi9cclxuZXhwb3J0IHZhciB2ZXJzaW9uID0gXCIyMS4xLjRcIjtcclxuIiwiLyoqXHJcbiAqIERldkV4dHJlbWUgKGVzbS9ldmVudHMvY29yZS9ldmVudF9yZWdpc3RyYXRvcl9jYWxsYmFja3MuanMpXHJcbiAqIFZlcnNpb246IDIxLjEuNFxyXG4gKiBCdWlsZCBkYXRlOiBNb24gSnVuIDIxIDIwMjFcclxuICpcclxuICogQ29weXJpZ2h0IChjKSAyMDEyIC0gMjAyMSBEZXZlbG9wZXIgRXhwcmVzcyBJbmMuIEFMTCBSSUdIVFMgUkVTRVJWRURcclxuICogUmVhZCBhYm91dCBEZXZFeHRyZW1lIGxpY2Vuc2luZyBoZXJlOiBodHRwczovL2pzLmRldmV4cHJlc3MuY29tL0xpY2Vuc2luZy9cclxuICovXHJcbmltcG9ydCBNZW1vcml6ZWRDYWxsYmFja3MgZnJvbSBcIi4uLy4uL2NvcmUvbWVtb3JpemVkX2NhbGxiYWNrc1wiO1xyXG5leHBvcnQgZGVmYXVsdCBuZXcgTWVtb3JpemVkQ2FsbGJhY2tzO1xyXG4iLCIvKipcclxuICogRGV2RXh0cmVtZSAoZXNtL2V2ZW50cy9jb3JlL2V2ZW50c19lbmdpbmUuanMpXHJcbiAqIFZlcnNpb246IDIxLjEuNFxyXG4gKiBCdWlsZCBkYXRlOiBNb24gSnVuIDIxIDIwMjFcclxuICpcclxuICogQ29weXJpZ2h0IChjKSAyMDEyIC0gMjAyMSBEZXZlbG9wZXIgRXhwcmVzcyBJbmMuIEFMTCBSSUdIVFMgUkVTRVJWRURcclxuICogUmVhZCBhYm91dCBEZXZFeHRyZW1lIGxpY2Vuc2luZyBoZXJlOiBodHRwczovL2pzLmRldmV4cHJlc3MuY29tL0xpY2Vuc2luZy9cclxuICovXHJcbmltcG9ydCByZWdpc3RlckV2ZW50Q2FsbGJhY2tzIGZyb20gXCIuL2V2ZW50X3JlZ2lzdHJhdG9yX2NhbGxiYWNrc1wiO1xyXG5pbXBvcnQge1xyXG4gICAgZXh0ZW5kXHJcbn0gZnJvbSBcIi4uLy4uL2NvcmUvdXRpbHMvZXh0ZW5kXCI7XHJcbmltcG9ydCBkb21BZGFwdGVyIGZyb20gXCIuLi8uLi9jb3JlL2RvbV9hZGFwdGVyXCI7XHJcbmltcG9ydCB7XHJcbiAgICBnZXRXaW5kb3csXHJcbiAgICBoYXNXaW5kb3dcclxufSBmcm9tIFwiLi4vLi4vY29yZS91dGlscy93aW5kb3dcIjtcclxudmFyIHdpbmRvdyA9IGdldFdpbmRvdygpO1xyXG5pbXBvcnQgaW5qZWN0b3IgZnJvbSBcIi4uLy4uL2NvcmUvdXRpbHMvZGVwZW5kZW5jeV9pbmplY3RvclwiO1xyXG5pbXBvcnQge1xyXG4gICAgaXNXaW5kb3csXHJcbiAgICBpc0Z1bmN0aW9uLFxyXG4gICAgaXNTdHJpbmdcclxufSBmcm9tIFwiLi4vLi4vY29yZS91dGlscy90eXBlXCI7XHJcbmltcG9ydCBDYWxsYmFja3MgZnJvbSBcIi4uLy4uL2NvcmUvdXRpbHMvY2FsbGJhY2tzXCI7XHJcbmltcG9ydCBlcnJvcnMgZnJvbSBcIi4uLy4uL2NvcmUvZXJyb3JzXCI7XHJcbmltcG9ydCBXZWFrTWFwIGZyb20gXCIuLi8uLi9jb3JlL3BvbHlmaWxscy93ZWFrX21hcFwiO1xyXG5pbXBvcnQgaG9va1RvdWNoUHJvcHMgZnJvbSBcIi4uLy4uL2V2ZW50cy9jb3JlL2hvb2tfdG91Y2hfcHJvcHNcIjtcclxuaW1wb3J0IGNhbGxPbmNlIGZyb20gXCIuLi8uLi9jb3JlL3V0aWxzL2NhbGxfb25jZVwiO1xyXG52YXIgRU1QVFlfRVZFTlRfTkFNRSA9IFwiZHhFbXB0eUV2ZW50VHlwZVwiO1xyXG52YXIgTkFUSVZFX0VWRU5UU19UT19TVUJTQ1JJQkUgPSB7XHJcbiAgICBtb3VzZWVudGVyOiBcIm1vdXNlb3ZlclwiLFxyXG4gICAgbW91c2VsZWF2ZTogXCJtb3VzZW91dFwiLFxyXG4gICAgcG9pbnRlcmVudGVyOiBcInBvaW50ZXJvdmVyXCIsXHJcbiAgICBwb2ludGVybGVhdmU6IFwicG9pbnRlcm91dFwiXHJcbn07XHJcbnZhciBOQVRJVkVfRVZFTlRTX1RPX1RSSUdHRVIgPSB7XHJcbiAgICBmb2N1c2luOiBcImZvY3VzXCIsXHJcbiAgICBmb2N1c291dDogXCJibHVyXCJcclxufTtcclxudmFyIE5PX0JVQkJMRV9FVkVOVFMgPSBbXCJibHVyXCIsIFwiZm9jdXNcIiwgXCJsb2FkXCJdO1xyXG52YXIgZm9yY2VQYXNzaXZlRmFsc2VFdmVudE5hbWVzID0gW1widG91Y2htb3ZlXCIsIFwid2hlZWxcIiwgXCJtb3VzZXdoZWVsXCIsIFwidG91Y2hzdGFydFwiXTtcclxuXHJcbmZ1bmN0aW9uIG1hdGNoZXNTYWZlKHRhcmdldCwgc2VsZWN0b3IpIHtcclxuICAgIHJldHVybiAhaXNXaW5kb3codGFyZ2V0KSAmJiBcIiNkb2N1bWVudFwiICE9PSB0YXJnZXQubm9kZU5hbWUgJiYgZG9tQWRhcHRlci5lbGVtZW50TWF0Y2hlcyh0YXJnZXQsIHNlbGVjdG9yKVxyXG59XHJcbnZhciBlbGVtZW50RGF0YU1hcCA9IG5ldyBXZWFrTWFwO1xyXG52YXIgZ3VpZCA9IDA7XHJcbnZhciBza2lwRXZlbnQ7XHJcbnZhciBzcGVjaWFsID0gZnVuY3Rpb24oKSB7XHJcbiAgICB2YXIgc3BlY2lhbERhdGEgPSB7fTtcclxuICAgIHJlZ2lzdGVyRXZlbnRDYWxsYmFja3MuYWRkKChmdW5jdGlvbihldmVudE5hbWUsIGV2ZW50T2JqZWN0KSB7XHJcbiAgICAgICAgc3BlY2lhbERhdGFbZXZlbnROYW1lXSA9IGV2ZW50T2JqZWN0XHJcbiAgICB9KSk7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGdldEZpZWxkOiBmdW5jdGlvbihldmVudE5hbWUsIGZpZWxkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBzcGVjaWFsRGF0YVtldmVudE5hbWVdICYmIHNwZWNpYWxEYXRhW2V2ZW50TmFtZV1bZmllbGRdXHJcbiAgICAgICAgfSxcclxuICAgICAgICBjYWxsTWV0aG9kOiBmdW5jdGlvbihldmVudE5hbWUsIG1ldGhvZE5hbWUsIGNvbnRleHQsIGFyZ3MpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHNwZWNpYWxEYXRhW2V2ZW50TmFtZV0gJiYgc3BlY2lhbERhdGFbZXZlbnROYW1lXVttZXRob2ROYW1lXSAmJiBzcGVjaWFsRGF0YVtldmVudE5hbWVdW21ldGhvZE5hbWVdLmFwcGx5KGNvbnRleHQsIGFyZ3MpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59KCk7XHJcbnZhciBldmVudHNFbmdpbmUgPSBpbmplY3Rvcih7XHJcbiAgICBvbjogZ2V0SGFuZGxlcihub3JtYWxpemVPbkFyZ3VtZW50cyhpdGVyYXRlKChmdW5jdGlvbihlbGVtZW50LCBldmVudE5hbWUsIHNlbGVjdG9yLCBkYXRhLCBoYW5kbGVyKSB7XHJcbiAgICAgICAgdmFyIGhhbmRsZXJzQ29udHJvbGxlciA9IGdldEhhbmRsZXJzQ29udHJvbGxlcihlbGVtZW50LCBldmVudE5hbWUpO1xyXG4gICAgICAgIGhhbmRsZXJzQ29udHJvbGxlci5hZGRIYW5kbGVyKGhhbmRsZXIsIHNlbGVjdG9yLCBkYXRhKVxyXG4gICAgfSkpKSksXHJcbiAgICBvbmU6IGdldEhhbmRsZXIobm9ybWFsaXplT25Bcmd1bWVudHMoKGZ1bmN0aW9uKGVsZW1lbnQsIGV2ZW50TmFtZSwgc2VsZWN0b3IsIGRhdGEsIGhhbmRsZXIpIHtcclxuICAgICAgICBldmVudHNFbmdpbmUub24oZWxlbWVudCwgZXZlbnROYW1lLCBzZWxlY3RvciwgZGF0YSwgKGZ1bmN0aW9uIG9uZVRpbWVIYW5kbGVyKCkge1xyXG4gICAgICAgICAgICBldmVudHNFbmdpbmUub2ZmKGVsZW1lbnQsIGV2ZW50TmFtZSwgc2VsZWN0b3IsIG9uZVRpbWVIYW5kbGVyKTtcclxuICAgICAgICAgICAgaGFuZGxlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpXHJcbiAgICAgICAgfSkpXHJcbiAgICB9KSkpLFxyXG4gICAgb2ZmOiBnZXRIYW5kbGVyKG5vcm1hbGl6ZU9mZkFyZ3VtZW50cyhpdGVyYXRlKChmdW5jdGlvbihlbGVtZW50LCBldmVudE5hbWUsIHNlbGVjdG9yLCBoYW5kbGVyKSB7XHJcbiAgICAgICAgdmFyIGhhbmRsZXJzQ29udHJvbGxlciA9IGdldEhhbmRsZXJzQ29udHJvbGxlcihlbGVtZW50LCBldmVudE5hbWUpO1xyXG4gICAgICAgIGhhbmRsZXJzQ29udHJvbGxlci5yZW1vdmVIYW5kbGVyKGhhbmRsZXIsIHNlbGVjdG9yKVxyXG4gICAgfSkpKSksXHJcbiAgICB0cmlnZ2VyOiBnZXRIYW5kbGVyKG5vcm1hbGl6ZVRyaWdnZXJBcmd1bWVudHMoKGZ1bmN0aW9uKGVsZW1lbnQsIGV2ZW50LCBleHRyYVBhcmFtZXRlcnMpIHtcclxuICAgICAgICB2YXIgZXZlbnROYW1lID0gZXZlbnQudHlwZTtcclxuICAgICAgICB2YXIgaGFuZGxlcnNDb250cm9sbGVyID0gZ2V0SGFuZGxlcnNDb250cm9sbGVyKGVsZW1lbnQsIGV2ZW50LnR5cGUpO1xyXG4gICAgICAgIHNwZWNpYWwuY2FsbE1ldGhvZChldmVudE5hbWUsIFwidHJpZ2dlclwiLCBlbGVtZW50LCBbZXZlbnQsIGV4dHJhUGFyYW1ldGVyc10pO1xyXG4gICAgICAgIGhhbmRsZXJzQ29udHJvbGxlci5jYWxsSGFuZGxlcnMoZXZlbnQsIGV4dHJhUGFyYW1ldGVycyk7XHJcbiAgICAgICAgdmFyIG5vQnViYmxlID0gc3BlY2lhbC5nZXRGaWVsZChldmVudE5hbWUsIFwibm9CdWJibGVcIikgfHwgZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSB8fCAtMSAhPT0gTk9fQlVCQkxFX0VWRU5UUy5pbmRleE9mKGV2ZW50TmFtZSk7XHJcbiAgICAgICAgaWYgKCFub0J1YmJsZSkge1xyXG4gICAgICAgICAgICB2YXIgcGFyZW50cyA9IFtdO1xyXG4gICAgICAgICAgICAhIGZ1bmN0aW9uIGdldFBhcmVudHMoZWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHBhcmVudCA9IGVsZW1lbnQucGFyZW50Tm9kZTtcclxuICAgICAgICAgICAgICAgIGlmIChwYXJlbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRzLnB1c2gocGFyZW50KTtcclxuICAgICAgICAgICAgICAgICAgICBnZXRQYXJlbnRzKHBhcmVudClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfShlbGVtZW50KTtcclxuICAgICAgICAgICAgcGFyZW50cy5wdXNoKHdpbmRvdyk7XHJcbiAgICAgICAgICAgIHZhciBpID0gMDtcclxuICAgICAgICAgICAgd2hpbGUgKHBhcmVudHNbaV0gJiYgIWV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpIHtcclxuICAgICAgICAgICAgICAgIHZhciBwYXJlbnREYXRhQnlFdmVudCA9IGdldEhhbmRsZXJzQ29udHJvbGxlcihwYXJlbnRzW2ldLCBldmVudC50eXBlKTtcclxuICAgICAgICAgICAgICAgIHBhcmVudERhdGFCeUV2ZW50LmNhbGxIYW5kbGVycyhleHRlbmQoZXZlbnQsIHtcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGFyZ2V0OiBwYXJlbnRzW2ldXHJcbiAgICAgICAgICAgICAgICB9KSwgZXh0cmFQYXJhbWV0ZXJzKTtcclxuICAgICAgICAgICAgICAgIGkrK1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlbGVtZW50Lm5vZGVUeXBlIHx8IGlzV2luZG93KGVsZW1lbnQpKSB7XHJcbiAgICAgICAgICAgIHNwZWNpYWwuY2FsbE1ldGhvZChldmVudE5hbWUsIFwiX2RlZmF1bHRcIiwgZWxlbWVudCwgW2V2ZW50LCBleHRyYVBhcmFtZXRlcnNdKTtcclxuICAgICAgICAgICAgY2FsbE5hdGl2ZU1ldGhvZChldmVudE5hbWUsIGVsZW1lbnQpXHJcbiAgICAgICAgfVxyXG4gICAgfSkpKSxcclxuICAgIHRyaWdnZXJIYW5kbGVyOiBnZXRIYW5kbGVyKG5vcm1hbGl6ZVRyaWdnZXJBcmd1bWVudHMoKGZ1bmN0aW9uKGVsZW1lbnQsIGV2ZW50LCBleHRyYVBhcmFtZXRlcnMpIHtcclxuICAgICAgICB2YXIgaGFuZGxlcnNDb250cm9sbGVyID0gZ2V0SGFuZGxlcnNDb250cm9sbGVyKGVsZW1lbnQsIGV2ZW50LnR5cGUpO1xyXG4gICAgICAgIGhhbmRsZXJzQ29udHJvbGxlci5jYWxsSGFuZGxlcnMoZXZlbnQsIGV4dHJhUGFyYW1ldGVycylcclxuICAgIH0pKSlcclxufSk7XHJcblxyXG5mdW5jdGlvbiBhcHBseUZvckVhY2goYXJncywgbWV0aG9kKSB7XHJcbiAgICB2YXIgZWxlbWVudCA9IGFyZ3NbMF07XHJcbiAgICBpZiAoIWVsZW1lbnQpIHtcclxuICAgICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIGlmIChkb21BZGFwdGVyLmlzTm9kZShlbGVtZW50KSB8fCBpc1dpbmRvdyhlbGVtZW50KSkge1xyXG4gICAgICAgIG1ldGhvZC5hcHBseShldmVudHNFbmdpbmUsIGFyZ3MpXHJcbiAgICB9IGVsc2UgaWYgKCFpc1N0cmluZyhlbGVtZW50KSAmJiBcImxlbmd0aFwiIGluIGVsZW1lbnQpIHtcclxuICAgICAgICB2YXIgaXRlbUFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmdzLCAwKTtcclxuICAgICAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKGVsZW1lbnQsIChmdW5jdGlvbihpdGVtRWxlbWVudCkge1xyXG4gICAgICAgICAgICBpdGVtQXJnc1swXSA9IGl0ZW1FbGVtZW50O1xyXG4gICAgICAgICAgICBhcHBseUZvckVhY2goaXRlbUFyZ3MsIG1ldGhvZClcclxuICAgICAgICB9KSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhyb3cgZXJyb3JzLkVycm9yKFwiRTAwMjVcIilcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0SGFuZGxlcihtZXRob2QpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbigpIHtcclxuICAgICAgICBhcHBseUZvckVhY2goYXJndW1lbnRzLCBtZXRob2QpXHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGRldGVjdFBhc3NpdmVFdmVudEhhbmRsZXJzU3VwcG9ydCgpIHtcclxuICAgIHZhciBpc1N1cHBvcnRlZCA9IGZhbHNlO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICB2YXIgb3B0aW9ucyA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgXCJwYXNzaXZlXCIsIHtcclxuICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgIGlzU3VwcG9ydGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInRlc3RcIiwgbnVsbCwgb3B0aW9ucylcclxuICAgIH0gY2F0Y2ggKGUpIHt9XHJcbiAgICByZXR1cm4gaXNTdXBwb3J0ZWRcclxufVxyXG52YXIgcGFzc2l2ZUV2ZW50SGFuZGxlcnNTdXBwb3J0ZWQgPSBjYWxsT25jZShkZXRlY3RQYXNzaXZlRXZlbnRIYW5kbGVyc1N1cHBvcnQpO1xyXG52YXIgY29udGFpbnMgPSAoY29udGFpbmVyLCBlbGVtZW50KSA9PiB7XHJcbiAgICBpZiAoaXNXaW5kb3coY29udGFpbmVyKSkge1xyXG4gICAgICAgIHJldHVybiBjb250YWlucyhjb250YWluZXIuZG9jdW1lbnQsIGVsZW1lbnQpXHJcbiAgICB9XHJcbiAgICByZXR1cm4gY29udGFpbmVyLmNvbnRhaW5zID8gY29udGFpbmVyLmNvbnRhaW5zKGVsZW1lbnQpIDogISEoZWxlbWVudC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihjb250YWluZXIpICYgZWxlbWVudC5ET0NVTUVOVF9QT1NJVElPTl9DT05UQUlOUylcclxufTtcclxuXHJcbmZ1bmN0aW9uIGdldEhhbmRsZXJzQ29udHJvbGxlcihlbGVtZW50LCBldmVudE5hbWUpIHtcclxuICAgIHZhciBlbGVtZW50RGF0YSA9IGVsZW1lbnREYXRhTWFwLmdldChlbGVtZW50KTtcclxuICAgIGV2ZW50TmFtZSA9IGV2ZW50TmFtZSB8fCBcIlwiO1xyXG4gICAgdmFyIGV2ZW50TmFtZVBhcnRzID0gZXZlbnROYW1lLnNwbGl0KFwiLlwiKTtcclxuICAgIHZhciBuYW1lc3BhY2VzID0gZXZlbnROYW1lUGFydHMuc2xpY2UoMSk7XHJcbiAgICB2YXIgZXZlbnROYW1lSXNEZWZpbmVkID0gISFldmVudE5hbWVQYXJ0c1swXTtcclxuICAgIGV2ZW50TmFtZSA9IGV2ZW50TmFtZVBhcnRzWzBdIHx8IEVNUFRZX0VWRU5UX05BTUU7XHJcbiAgICBpZiAoIWVsZW1lbnREYXRhKSB7XHJcbiAgICAgICAgZWxlbWVudERhdGEgPSB7fTtcclxuICAgICAgICBlbGVtZW50RGF0YU1hcC5zZXQoZWxlbWVudCwgZWxlbWVudERhdGEpXHJcbiAgICB9XHJcbiAgICBpZiAoIWVsZW1lbnREYXRhW2V2ZW50TmFtZV0pIHtcclxuICAgICAgICBlbGVtZW50RGF0YVtldmVudE5hbWVdID0ge1xyXG4gICAgICAgICAgICBoYW5kbGVPYmplY3RzOiBbXSxcclxuICAgICAgICAgICAgbmF0aXZlSGFuZGxlcjogbnVsbFxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHZhciBldmVudERhdGEgPSBlbGVtZW50RGF0YVtldmVudE5hbWVdO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBhZGRIYW5kbGVyOiBmdW5jdGlvbihoYW5kbGVyLCBzZWxlY3RvciwgZGF0YSkge1xyXG4gICAgICAgICAgICB2YXIgY2FsbEhhbmRsZXIgPSBmdW5jdGlvbihlLCBleHRyYVBhcmFtZXRlcnMpIHtcclxuICAgICAgICAgICAgICAgIHZhciBoYW5kbGVyQXJncyA9IFtlXTtcclxuICAgICAgICAgICAgICAgIHZhciB0YXJnZXQgPSBlLmN1cnJlbnRUYXJnZXQ7XHJcbiAgICAgICAgICAgICAgICB2YXIgcmVsYXRlZFRhcmdldCA9IGUucmVsYXRlZFRhcmdldDtcclxuICAgICAgICAgICAgICAgIHZhciBzZWNvbmRhcnlUYXJnZXRJc0luc2lkZTtcclxuICAgICAgICAgICAgICAgIHZhciByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnROYW1lIGluIE5BVElWRV9FVkVOVFNfVE9fU1VCU0NSSUJFKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2Vjb25kYXJ5VGFyZ2V0SXNJbnNpZGUgPSByZWxhdGVkVGFyZ2V0ICYmIHRhcmdldCAmJiAocmVsYXRlZFRhcmdldCA9PT0gdGFyZ2V0IHx8IGNvbnRhaW5zKHRhcmdldCwgcmVsYXRlZFRhcmdldCkpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAodm9pZCAwICE9PSBleHRyYVBhcmFtZXRlcnMpIHtcclxuICAgICAgICAgICAgICAgICAgICBoYW5kbGVyQXJncy5wdXNoKGV4dHJhUGFyYW1ldGVycylcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHNwZWNpYWwuY2FsbE1ldGhvZChldmVudE5hbWUsIFwiaGFuZGxlXCIsIGVsZW1lbnQsIFtlLCBkYXRhXSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXNlY29uZGFyeVRhcmdldElzSW5zaWRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gaGFuZGxlci5hcHBseSh0YXJnZXQsIGhhbmRsZXJBcmdzKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGZhbHNlID09PSByZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB2YXIgaGFuZGxlT2JqZWN0ID0ge1xyXG4gICAgICAgICAgICAgICAgaGFuZGxlcjogaGFuZGxlcixcclxuICAgICAgICAgICAgICAgIHdyYXBwZWRIYW5kbGVyOiBmdW5jdGlvbihlLCBleHRyYVBhcmFtZXRlcnMpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2tpcEV2ZW50ICYmIGUudHlwZSA9PT0gc2tpcEV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlLmRhdGEgPSBkYXRhO1xyXG4gICAgICAgICAgICAgICAgICAgIGUuZGVsZWdhdGVUYXJnZXQgPSBlbGVtZW50O1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3Rvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VycmVudFRhcmdldCA9IGUudGFyZ2V0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY3VycmVudFRhcmdldCAmJiBjdXJyZW50VGFyZ2V0ICE9PSBlbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2hlc1NhZmUoY3VycmVudFRhcmdldCwgc2VsZWN0b3IpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5jdXJyZW50VGFyZ2V0ID0gY3VycmVudFRhcmdldDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsSGFuZGxlcihlLCBleHRyYVBhcmFtZXRlcnMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGFyZ2V0ID0gY3VycmVudFRhcmdldC5wYXJlbnROb2RlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlLmN1cnJlbnRUYXJnZXQgPSBlLmRlbGVnYXRlVGFyZ2V0IHx8IGUudGFyZ2V0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsSGFuZGxlcihlLCBleHRyYVBhcmFtZXRlcnMpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiBzZWxlY3RvcixcclxuICAgICAgICAgICAgICAgIHR5cGU6IGV2ZW50TmFtZSxcclxuICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEsXHJcbiAgICAgICAgICAgICAgICBuYW1lc3BhY2U6IG5hbWVzcGFjZXMuam9pbihcIi5cIiksXHJcbiAgICAgICAgICAgICAgICBuYW1lc3BhY2VzOiBuYW1lc3BhY2VzLFxyXG4gICAgICAgICAgICAgICAgZ3VpZDogKytndWlkXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGV2ZW50RGF0YS5oYW5kbGVPYmplY3RzLnB1c2goaGFuZGxlT2JqZWN0KTtcclxuICAgICAgICAgICAgdmFyIGZpcnN0SGFuZGxlckZvclRoZVR5cGUgPSAxID09PSBldmVudERhdGEuaGFuZGxlT2JqZWN0cy5sZW5ndGg7XHJcbiAgICAgICAgICAgIHZhciBzaG91bGRBZGROYXRpdmVMaXN0ZW5lciA9IGZpcnN0SGFuZGxlckZvclRoZVR5cGUgJiYgZXZlbnROYW1lSXNEZWZpbmVkO1xyXG4gICAgICAgICAgICB2YXIgbmF0aXZlTGlzdGVuZXJPcHRpb25zO1xyXG4gICAgICAgICAgICBpZiAoc2hvdWxkQWRkTmF0aXZlTGlzdGVuZXIpIHtcclxuICAgICAgICAgICAgICAgIHNob3VsZEFkZE5hdGl2ZUxpc3RlbmVyID0gIXNwZWNpYWwuY2FsbE1ldGhvZChldmVudE5hbWUsIFwic2V0dXBcIiwgZWxlbWVudCwgW2RhdGEsIG5hbWVzcGFjZXMsIGhhbmRsZXJdKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChzaG91bGRBZGROYXRpdmVMaXN0ZW5lcikge1xyXG4gICAgICAgICAgICAgICAgZXZlbnREYXRhLm5hdGl2ZUhhbmRsZXIgPSBnZXROYXRpdmVIYW5kbGVyKGV2ZW50TmFtZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAocGFzc2l2ZUV2ZW50SGFuZGxlcnNTdXBwb3J0ZWQoKSAmJiBmb3JjZVBhc3NpdmVGYWxzZUV2ZW50TmFtZXMuaW5kZXhPZihldmVudE5hbWUpID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICBuYXRpdmVMaXN0ZW5lck9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhc3NpdmU6IGZhbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZXZlbnREYXRhLnJlbW92ZUxpc3RlbmVyID0gZG9tQWRhcHRlci5saXN0ZW4oZWxlbWVudCwgTkFUSVZFX0VWRU5UU19UT19TVUJTQ1JJQkVbZXZlbnROYW1lXSB8fCBldmVudE5hbWUsIGV2ZW50RGF0YS5uYXRpdmVIYW5kbGVyLCBuYXRpdmVMaXN0ZW5lck9wdGlvbnMpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc3BlY2lhbC5jYWxsTWV0aG9kKGV2ZW50TmFtZSwgXCJhZGRcIiwgZWxlbWVudCwgW2hhbmRsZU9iamVjdF0pXHJcbiAgICAgICAgfSxcclxuICAgICAgICByZW1vdmVIYW5kbGVyOiBmdW5jdGlvbihoYW5kbGVyLCBzZWxlY3Rvcikge1xyXG4gICAgICAgICAgICB2YXIgcmVtb3ZlQnlFdmVudE5hbWUgPSBmdW5jdGlvbihldmVudE5hbWUpIHtcclxuICAgICAgICAgICAgICAgIHZhciBldmVudERhdGEgPSBlbGVtZW50RGF0YVtldmVudE5hbWVdO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFldmVudERhdGEuaGFuZGxlT2JqZWN0cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgZWxlbWVudERhdGFbZXZlbnROYW1lXTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHZhciByZW1vdmVkSGFuZGxlcjtcclxuICAgICAgICAgICAgICAgIGV2ZW50RGF0YS5oYW5kbGVPYmplY3RzID0gZXZlbnREYXRhLmhhbmRsZU9iamVjdHMuZmlsdGVyKChmdW5jdGlvbihoYW5kbGVPYmplY3QpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgc2tpcCA9IG5hbWVzcGFjZXMubGVuZ3RoICYmICFpc1N1YnNldChoYW5kbGVPYmplY3QubmFtZXNwYWNlcywgbmFtZXNwYWNlcykgfHwgaGFuZGxlciAmJiBoYW5kbGVPYmplY3QuaGFuZGxlciAhPT0gaGFuZGxlciB8fCBzZWxlY3RvciAmJiBoYW5kbGVPYmplY3Quc2VsZWN0b3IgIT09IHNlbGVjdG9yO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghc2tpcCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVkSGFuZGxlciA9IGhhbmRsZU9iamVjdC5oYW5kbGVyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWFsLmNhbGxNZXRob2QoZXZlbnROYW1lLCBcInJlbW92ZVwiLCBlbGVtZW50LCBbaGFuZGxlT2JqZWN0XSlcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNraXBcclxuICAgICAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgICAgICAgIHZhciBsYXN0SGFuZGxlckZvclRoZVR5cGUgPSAhZXZlbnREYXRhLmhhbmRsZU9iamVjdHMubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgdmFyIHNob3VsZFJlbW92ZU5hdGl2ZUxpc3RlbmVyID0gbGFzdEhhbmRsZXJGb3JUaGVUeXBlICYmIGV2ZW50TmFtZSAhPT0gRU1QVFlfRVZFTlRfTkFNRTtcclxuICAgICAgICAgICAgICAgIGlmIChzaG91bGRSZW1vdmVOYXRpdmVMaXN0ZW5lcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHNwZWNpYWwuY2FsbE1ldGhvZChldmVudE5hbWUsIFwidGVhcmRvd25cIiwgZWxlbWVudCwgW25hbWVzcGFjZXMsIHJlbW92ZWRIYW5kbGVyXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50RGF0YS5uYXRpdmVIYW5kbGVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50RGF0YS5yZW1vdmVMaXN0ZW5lcigpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBlbGVtZW50RGF0YVtldmVudE5hbWVdXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGlmIChldmVudE5hbWVJc0RlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIHJlbW92ZUJ5RXZlbnROYW1lKGV2ZW50TmFtZSlcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIG5hbWUgaW4gZWxlbWVudERhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICByZW1vdmVCeUV2ZW50TmFtZShuYW1lKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBlbGVtZW50RGF0YUlzRW1wdHkgPSAwID09PSBPYmplY3Qua2V5cyhlbGVtZW50RGF0YSkubGVuZ3RoO1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudERhdGFJc0VtcHR5KSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50RGF0YU1hcC5kZWxldGUoZWxlbWVudClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY2FsbEhhbmRsZXJzOiBmdW5jdGlvbihldmVudCwgZXh0cmFQYXJhbWV0ZXJzKSB7XHJcbiAgICAgICAgICAgIHZhciBmb3JjZVN0b3AgPSBmYWxzZTtcclxuICAgICAgICAgICAgdmFyIGhhbmRsZUNhbGxiYWNrID0gZnVuY3Rpb24oaGFuZGxlT2JqZWN0KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZm9yY2VTdG9wKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoIW5hbWVzcGFjZXMubGVuZ3RoIHx8IGlzU3Vic2V0KGhhbmRsZU9iamVjdC5uYW1lc3BhY2VzLCBuYW1lc3BhY2VzKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZU9iamVjdC53cmFwcGVkSGFuZGxlcihldmVudCwgZXh0cmFQYXJhbWV0ZXJzKTtcclxuICAgICAgICAgICAgICAgICAgICBmb3JjZVN0b3AgPSBldmVudC5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGV2ZW50RGF0YS5oYW5kbGVPYmplY3RzLmZvckVhY2goaGFuZGxlQ2FsbGJhY2spO1xyXG4gICAgICAgICAgICBpZiAobmFtZXNwYWNlcy5sZW5ndGggJiYgZWxlbWVudERhdGFbRU1QVFlfRVZFTlRfTkFNRV0pIHtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnREYXRhW0VNUFRZX0VWRU5UX05BTUVdLmhhbmRsZU9iamVjdHMuZm9yRWFjaChoYW5kbGVDYWxsYmFjaylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0TmF0aXZlSGFuZGxlcihzdWJzY3JpYmVOYW1lKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24oZXZlbnQsIGV4dHJhUGFyYW1ldGVycykge1xyXG4gICAgICAgIHZhciBoYW5kbGVyc0NvbnRyb2xsZXIgPSBnZXRIYW5kbGVyc0NvbnRyb2xsZXIodGhpcywgc3Vic2NyaWJlTmFtZSk7XHJcbiAgICAgICAgZXZlbnQgPSBldmVudHNFbmdpbmUuRXZlbnQoZXZlbnQpO1xyXG4gICAgICAgIGhhbmRsZXJzQ29udHJvbGxlci5jYWxsSGFuZGxlcnMoZXZlbnQsIGV4dHJhUGFyYW1ldGVycylcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gaXNTdWJzZXQob3JpZ2luYWwsIGNoZWNrZWQpIHtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hlY2tlZC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGlmIChvcmlnaW5hbC5pbmRleE9mKGNoZWNrZWRbaV0pIDwgMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZVxyXG59XHJcblxyXG5mdW5jdGlvbiBub3JtYWxpemVPbkFyZ3VtZW50cyhjYWxsYmFjaykge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKGVsZW1lbnQsIGV2ZW50TmFtZSwgc2VsZWN0b3IsIGRhdGEsIGhhbmRsZXIpIHtcclxuICAgICAgICBpZiAoIWhhbmRsZXIpIHtcclxuICAgICAgICAgICAgaGFuZGxlciA9IGRhdGE7XHJcbiAgICAgICAgICAgIGRhdGEgPSB2b2lkIDBcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKFwic3RyaW5nXCIgIT09IHR5cGVvZiBzZWxlY3Rvcikge1xyXG4gICAgICAgICAgICBkYXRhID0gc2VsZWN0b3I7XHJcbiAgICAgICAgICAgIHNlbGVjdG9yID0gdm9pZCAwXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghaGFuZGxlciAmJiBcInN0cmluZ1wiID09PSB0eXBlb2YgZXZlbnROYW1lKSB7XHJcbiAgICAgICAgICAgIGhhbmRsZXIgPSBkYXRhIHx8IHNlbGVjdG9yO1xyXG4gICAgICAgICAgICBzZWxlY3RvciA9IHZvaWQgMDtcclxuICAgICAgICAgICAgZGF0YSA9IHZvaWQgMFxyXG4gICAgICAgIH1cclxuICAgICAgICBjYWxsYmFjayhlbGVtZW50LCBldmVudE5hbWUsIHNlbGVjdG9yLCBkYXRhLCBoYW5kbGVyKVxyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBub3JtYWxpemVPZmZBcmd1bWVudHMoY2FsbGJhY2spIHtcclxuICAgIHJldHVybiBmdW5jdGlvbihlbGVtZW50LCBldmVudE5hbWUsIHNlbGVjdG9yLCBoYW5kbGVyKSB7XHJcbiAgICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHNlbGVjdG9yKSB7XHJcbiAgICAgICAgICAgIGhhbmRsZXIgPSBzZWxlY3RvcjtcclxuICAgICAgICAgICAgc2VsZWN0b3IgPSB2b2lkIDBcclxuICAgICAgICB9XHJcbiAgICAgICAgY2FsbGJhY2soZWxlbWVudCwgZXZlbnROYW1lLCBzZWxlY3RvciwgaGFuZGxlcilcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gbm9ybWFsaXplVHJpZ2dlckFyZ3VtZW50cyhjYWxsYmFjaykge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKGVsZW1lbnQsIHNyYywgZXh0cmFQYXJhbWV0ZXJzKSB7XHJcbiAgICAgICAgaWYgKFwic3RyaW5nXCIgPT09IHR5cGVvZiBzcmMpIHtcclxuICAgICAgICAgICAgc3JjID0ge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogc3JjXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFzcmMudGFyZ2V0KSB7XHJcbiAgICAgICAgICAgIHNyYy50YXJnZXQgPSBlbGVtZW50XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNyYy5jdXJyZW50VGFyZ2V0ID0gZWxlbWVudDtcclxuICAgICAgICBpZiAoIXNyYy5kZWxlZ2F0ZVRhcmdldCkge1xyXG4gICAgICAgICAgICBzcmMuZGVsZWdhdGVUYXJnZXQgPSBlbGVtZW50XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghc3JjLnR5cGUgJiYgc3JjLm9yaWdpbmFsRXZlbnQpIHtcclxuICAgICAgICAgICAgc3JjLnR5cGUgPSBzcmMub3JpZ2luYWxFdmVudC50eXBlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhbGxiYWNrKGVsZW1lbnQsIHNyYyBpbnN0YW5jZW9mIGV2ZW50c0VuZ2luZS5FdmVudCA/IHNyYyA6IGV2ZW50c0VuZ2luZS5FdmVudChzcmMpLCBleHRyYVBhcmFtZXRlcnMpXHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIG5vcm1hbGl6ZUV2ZW50QXJndW1lbnRzKGNhbGxiYWNrKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24oc3JjLCBjb25maWcpIHtcclxuICAgICAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgZXZlbnRzRW5naW5lLkV2ZW50KSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IGV2ZW50c0VuZ2luZS5FdmVudChzcmMsIGNvbmZpZylcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFzcmMpIHtcclxuICAgICAgICAgICAgc3JjID0ge31cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKFwic3RyaW5nXCIgPT09IHR5cGVvZiBzcmMpIHtcclxuICAgICAgICAgICAgc3JjID0ge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogc3JjXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFjb25maWcpIHtcclxuICAgICAgICAgICAgY29uZmlnID0ge31cclxuICAgICAgICB9XHJcbiAgICAgICAgY2FsbGJhY2suY2FsbCh0aGlzLCBzcmMsIGNvbmZpZylcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gaXRlcmF0ZShjYWxsYmFjaykge1xyXG4gICAgdmFyIGl0ZXJhdGVFdmVudE5hbWVzID0gZnVuY3Rpb24oZWxlbWVudCwgZXZlbnROYW1lKSB7XHJcbiAgICAgICAgaWYgKGV2ZW50TmFtZSAmJiBldmVudE5hbWUuaW5kZXhPZihcIiBcIikgPiAtMSkge1xyXG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCk7XHJcbiAgICAgICAgICAgIGV2ZW50TmFtZS5zcGxpdChcIiBcIikuZm9yRWFjaCgoZnVuY3Rpb24oZXZlbnROYW1lKSB7XHJcbiAgICAgICAgICAgICAgICBhcmdzWzFdID0gZXZlbnROYW1lO1xyXG4gICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkodGhpcywgYXJncylcclxuICAgICAgICAgICAgfSkpXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkodGhpcywgYXJndW1lbnRzKVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICByZXR1cm4gZnVuY3Rpb24oZWxlbWVudCwgZXZlbnROYW1lKSB7XHJcbiAgICAgICAgaWYgKFwib2JqZWN0XCIgPT09IHR5cGVvZiBldmVudE5hbWUpIHtcclxuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDApO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBuYW1lIGluIGV2ZW50TmFtZSkge1xyXG4gICAgICAgICAgICAgICAgYXJnc1sxXSA9IG5hbWU7XHJcbiAgICAgICAgICAgICAgICBhcmdzW2FyZ3MubGVuZ3RoIC0gMV0gPSBldmVudE5hbWVbbmFtZV07XHJcbiAgICAgICAgICAgICAgICBpdGVyYXRlRXZlbnROYW1lcy5hcHBseSh0aGlzLCBhcmdzKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaXRlcmF0ZUV2ZW50TmFtZXMuYXBwbHkodGhpcywgYXJndW1lbnRzKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gY2FsbE5hdGl2ZU1ldGhvZChldmVudE5hbWUsIGVsZW1lbnQpIHtcclxuICAgIHZhciBuYXRpdmVNZXRob2ROYW1lID0gTkFUSVZFX0VWRU5UU19UT19UUklHR0VSW2V2ZW50TmFtZV0gfHwgZXZlbnROYW1lO1xyXG4gICAgaWYgKGZ1bmN0aW9uKGV2ZW50TmFtZSwgZWxlbWVudCkge1xyXG4gICAgICAgICAgICByZXR1cm4gXCJjbGlja1wiID09PSBldmVudE5hbWUgJiYgXCJhXCIgPT09IGVsZW1lbnQubG9jYWxOYW1lXHJcbiAgICAgICAgfShldmVudE5hbWUsIGVsZW1lbnQpKSB7XHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBpZiAoaXNGdW5jdGlvbihlbGVtZW50W25hdGl2ZU1ldGhvZE5hbWVdKSkge1xyXG4gICAgICAgIHNraXBFdmVudCA9IGV2ZW50TmFtZTtcclxuICAgICAgICBlbGVtZW50W25hdGl2ZU1ldGhvZE5hbWVdKCk7XHJcbiAgICAgICAgc2tpcEV2ZW50ID0gdm9pZCAwXHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNhbGN1bGF0ZVdoaWNoKGV2ZW50KSB7XHJcbiAgICBpZiAoZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGwgPT0gZXZlbnQud2hpY2ggJiYgMCA9PT0gZXZlbnQudHlwZS5pbmRleE9mKFwia2V5XCIpXHJcbiAgICAgICAgfShldmVudCkpIHtcclxuICAgICAgICByZXR1cm4gbnVsbCAhPSBldmVudC5jaGFyQ29kZSA/IGV2ZW50LmNoYXJDb2RlIDogZXZlbnQua2V5Q29kZVxyXG4gICAgfVxyXG4gICAgaWYgKGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybiAhZXZlbnQud2hpY2ggJiYgdm9pZCAwICE9PSBldmVudC5idXR0b24gJiYgL14oPzptb3VzZXxwb2ludGVyfGNvbnRleHRtZW51fGRyYWd8ZHJvcCl8Y2xpY2svLnRlc3QoZXZlbnQudHlwZSlcclxuICAgICAgICB9KGV2ZW50KSkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIDE6IDEsXHJcbiAgICAgICAgICAgIDI6IDMsXHJcbiAgICAgICAgICAgIDM6IDEsXHJcbiAgICAgICAgICAgIDQ6IDJcclxuICAgICAgICB9IFtldmVudC5idXR0b25dXHJcbiAgICB9XHJcbiAgICByZXR1cm4gZXZlbnQud2hpY2hcclxufVxyXG5cclxuZnVuY3Rpb24gaW5pdEV2ZW50KEV2ZW50Q2xhc3MpIHtcclxuICAgIGlmIChFdmVudENsYXNzKSB7XHJcbiAgICAgICAgZXZlbnRzRW5naW5lLkV2ZW50ID0gRXZlbnRDbGFzcztcclxuICAgICAgICBldmVudHNFbmdpbmUuRXZlbnQucHJvdG90eXBlID0gRXZlbnRDbGFzcy5wcm90b3R5cGVcclxuICAgIH1cclxufVxyXG5pbml0RXZlbnQobm9ybWFsaXplRXZlbnRBcmd1bWVudHMoKGZ1bmN0aW9uKHNyYywgY29uZmlnKSB7XHJcbiAgICB2YXIgdGhhdCA9IHRoaXM7XHJcbiAgICB2YXIgcHJvcGFnYXRpb25TdG9wcGVkID0gZmFsc2U7XHJcbiAgICB2YXIgaW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkID0gZmFsc2U7XHJcbiAgICB2YXIgZGVmYXVsdFByZXZlbnRlZCA9IGZhbHNlO1xyXG4gICAgZXh0ZW5kKHRoYXQsIHNyYyk7XHJcbiAgICBpZiAoc3JjIGluc3RhbmNlb2YgZXZlbnRzRW5naW5lLkV2ZW50IHx8IGhhc1dpbmRvdygpICYmIHNyYyBpbnN0YW5jZW9mIHdpbmRvdy5FdmVudCkge1xyXG4gICAgICAgIHRoYXQub3JpZ2luYWxFdmVudCA9IHNyYztcclxuICAgICAgICB0aGF0LmN1cnJlbnRUYXJnZXQgPSB2b2lkIDBcclxuICAgIH1cclxuICAgIGlmICghKHNyYyBpbnN0YW5jZW9mIGV2ZW50c0VuZ2luZS5FdmVudCkpIHtcclxuICAgICAgICBleHRlbmQodGhhdCwge1xyXG4gICAgICAgICAgICBpc1Byb3BhZ2F0aW9uU3RvcHBlZDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gISEocHJvcGFnYXRpb25TdG9wcGVkIHx8IHRoYXQub3JpZ2luYWxFdmVudCAmJiB0aGF0Lm9yaWdpbmFsRXZlbnQucHJvcGFnYXRpb25TdG9wcGVkKVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzdG9wUHJvcGFnYXRpb246IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgcHJvcGFnYXRpb25TdG9wcGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoYXQub3JpZ2luYWxFdmVudCAmJiB0aGF0Lm9yaWdpbmFsRXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb246IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgIGltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGF0Lm9yaWdpbmFsRXZlbnQgJiYgdGhhdC5vcmlnaW5hbEV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGlzRGVmYXVsdFByZXZlbnRlZDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gISEoZGVmYXVsdFByZXZlbnRlZCB8fCB0aGF0Lm9yaWdpbmFsRXZlbnQgJiYgdGhhdC5vcmlnaW5hbEV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHByZXZlbnREZWZhdWx0OiBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgIGRlZmF1bHRQcmV2ZW50ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhhdC5vcmlnaW5hbEV2ZW50ICYmIHRoYXQub3JpZ2luYWxFdmVudC5wcmV2ZW50RGVmYXVsdCgpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gICAgYWRkUHJvcGVydHkoXCJ3aGljaFwiLCBjYWxjdWxhdGVXaGljaCwgdGhhdCk7XHJcbiAgICBpZiAoMCA9PT0gc3JjLnR5cGUuaW5kZXhPZihcInRvdWNoXCIpKSB7XHJcbiAgICAgICAgZGVsZXRlIGNvbmZpZy5wYWdlWDtcclxuICAgICAgICBkZWxldGUgY29uZmlnLnBhZ2VZXHJcbiAgICB9XHJcbiAgICBleHRlbmQodGhhdCwgY29uZmlnKTtcclxuICAgIHRoYXQuZ3VpZCA9ICsrZ3VpZFxyXG59KSkpO1xyXG5cclxuZnVuY3Rpb24gYWRkUHJvcGVydHkocHJvcE5hbWUsIGhvb2ssIGV2ZW50SW5zdGFuY2UpIHtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShldmVudEluc3RhbmNlIHx8IGV2ZW50c0VuZ2luZS5FdmVudC5wcm90b3R5cGUsIHByb3BOYW1lLCB7XHJcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcclxuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxFdmVudCAmJiBob29rKHRoaXMub3JpZ2luYWxFdmVudClcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNldDogZnVuY3Rpb24odmFsdWUpIHtcclxuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIHByb3BOYW1lLCB7XHJcbiAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWVcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICB9KVxyXG59XHJcbmhvb2tUb3VjaFByb3BzKGFkZFByb3BlcnR5KTtcclxudmFyIGJlZm9yZVNldFN0cmF0ZWd5ID0gQ2FsbGJhY2tzKCk7XHJcbnZhciBhZnRlclNldFN0cmF0ZWd5ID0gQ2FsbGJhY2tzKCk7XHJcbmV2ZW50c0VuZ2luZS5zZXQgPSBmdW5jdGlvbihlbmdpbmUpIHtcclxuICAgIGJlZm9yZVNldFN0cmF0ZWd5LmZpcmUoKTtcclxuICAgIGV2ZW50c0VuZ2luZS5pbmplY3QoZW5naW5lKTtcclxuICAgIGluaXRFdmVudChlbmdpbmUuRXZlbnQpO1xyXG4gICAgYWZ0ZXJTZXRTdHJhdGVneS5maXJlKClcclxufTtcclxuZXZlbnRzRW5naW5lLnN1YnNjcmliZUdsb2JhbCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgYXBwbHlGb3JFYWNoKGFyZ3VtZW50cywgbm9ybWFsaXplT25Bcmd1bWVudHMoKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzO1xyXG4gICAgICAgIGV2ZW50c0VuZ2luZS5vbi5hcHBseSh0aGlzLCBhcmdzKTtcclxuICAgICAgICBiZWZvcmVTZXRTdHJhdGVneS5hZGQoKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICB2YXIgb2ZmQXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3MsIDApO1xyXG4gICAgICAgICAgICBvZmZBcmdzLnNwbGljZSgzLCAxKTtcclxuICAgICAgICAgICAgZXZlbnRzRW5naW5lLm9mZi5hcHBseSh0aGlzLCBvZmZBcmdzKVxyXG4gICAgICAgIH0pKTtcclxuICAgICAgICBhZnRlclNldFN0cmF0ZWd5LmFkZCgoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIGV2ZW50c0VuZ2luZS5vbi5hcHBseSh0aGlzLCBhcmdzKVxyXG4gICAgICAgIH0pKVxyXG4gICAgfSkpKVxyXG59O1xyXG5ldmVudHNFbmdpbmUuZm9yY2VQYXNzaXZlRmFsc2VFdmVudE5hbWVzID0gZm9yY2VQYXNzaXZlRmFsc2VFdmVudE5hbWVzO1xyXG5ldmVudHNFbmdpbmUucGFzc2l2ZUV2ZW50SGFuZGxlcnNTdXBwb3J0ZWQgPSBwYXNzaXZlRXZlbnRIYW5kbGVyc1N1cHBvcnRlZDtcclxuZXhwb3J0IGRlZmF1bHQgZXZlbnRzRW5naW5lO1xyXG4iLCIvKipcclxuICogRGV2RXh0cmVtZSAoZXNtL2V2ZW50cy9jb3JlL2hvb2tfdG91Y2hfcHJvcHMuanMpXHJcbiAqIFZlcnNpb246IDIxLjEuNFxyXG4gKiBCdWlsZCBkYXRlOiBNb24gSnVuIDIxIDIwMjFcclxuICpcclxuICogQ29weXJpZ2h0IChjKSAyMDEyIC0gMjAyMSBEZXZlbG9wZXIgRXhwcmVzcyBJbmMuIEFMTCBSSUdIVFMgUkVTRVJWRURcclxuICogUmVhZCBhYm91dCBEZXZFeHRyZW1lIGxpY2Vuc2luZyBoZXJlOiBodHRwczovL2pzLmRldmV4cHJlc3MuY29tL0xpY2Vuc2luZy9cclxuICovXHJcbnZhciB0b3VjaFByb3BzVG9Ib29rID0gW1wicGFnZVhcIiwgXCJwYWdlWVwiLCBcInNjcmVlblhcIiwgXCJzY3JlZW5ZXCIsIFwiY2xpZW50WFwiLCBcImNsaWVudFlcIl07XHJcbnZhciB0b3VjaFByb3BIb29rID0gZnVuY3Rpb24obmFtZSwgZXZlbnQpIHtcclxuICAgIGlmIChldmVudFtuYW1lXSAmJiAhZXZlbnQudG91Y2hlcyB8fCAhZXZlbnQudG91Y2hlcykge1xyXG4gICAgICAgIHJldHVybiBldmVudFtuYW1lXVxyXG4gICAgfVxyXG4gICAgdmFyIHRvdWNoZXMgPSBldmVudC50b3VjaGVzLmxlbmd0aCA/IGV2ZW50LnRvdWNoZXMgOiBldmVudC5jaGFuZ2VkVG91Y2hlcztcclxuICAgIGlmICghdG91Y2hlcy5sZW5ndGgpIHtcclxuICAgICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIHJldHVybiB0b3VjaGVzWzBdW25hbWVdXHJcbn07XHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XHJcbiAgICB0b3VjaFByb3BzVG9Ib29rLmZvckVhY2goKGZ1bmN0aW9uKG5hbWUpIHtcclxuICAgICAgICBjYWxsYmFjayhuYW1lLCAoZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRvdWNoUHJvcEhvb2sobmFtZSwgZXZlbnQpXHJcbiAgICAgICAgfSkpXHJcbiAgICB9KSwgdGhpcylcclxufVxyXG4iLCIvKipcclxuICogRGV2RXh0cmVtZSAoZXNtL2xvY2FsaXphdGlvbi9jbGRyLWRhdGEvYWNjb3VudGluZ19mb3JtYXRzLmpzKVxyXG4gKiBWZXJzaW9uOiAyMS4xLjRcclxuICogQnVpbGQgZGF0ZTogTW9uIEp1biAyMSAyMDIxXHJcbiAqXHJcbiAqIENvcHlyaWdodCAoYykgMjAxMiAtIDIwMjEgRGV2ZWxvcGVyIEV4cHJlc3MgSW5jLiBBTEwgUklHSFRTIFJFU0VSVkVEXHJcbiAqIFJlYWQgYWJvdXQgRGV2RXh0cmVtZSBsaWNlbnNpbmcgaGVyZTogaHR0cHM6Ly9qcy5kZXZleHByZXNzLmNvbS9MaWNlbnNpbmcvXHJcbiAqL1xyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgICBhZjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJhZi1OQVwiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBhZ3E6IFwiIywjIzAuMDBcXHhhNFwiLFxyXG4gICAgYWs6IFwiXFx4YTQjLCMjMC4wMFwiLFxyXG4gICAgYW06IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIGFyOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcImFyLUFFXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiYXItQkhcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJhci1ESlwiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcImFyLURaXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiYXItRUdcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJhci1FSFwiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcImFyLUVSXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiYXItSUxcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJhci1JUVwiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcImFyLUpPXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiYXItS01cIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJhci1LV1wiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcImFyLUxCXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiYXItTFlcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJhci1NQVwiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcImFyLU1SXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiYXItT01cIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJhci1QU1wiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcImFyLVFBXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiYXItU0FcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJhci1TRFwiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcImFyLVNPXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiYXItU1NcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJhci1TWVwiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcImFyLVREXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiYXItVE5cIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJhci1ZRVwiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBhczogXCJcXHhhNFxceGEwIywjIywjIzAuMDBcIixcclxuICAgIGFzYTogXCIjLCMjMC4wMFxceGEwXFx4YTRcIixcclxuICAgIGFzdDogXCIjLCMjMC4wMFxceGEwXFx4YTRcIixcclxuICAgIGF6OiBcIiMsIyMwLjAwXFx4YTBcXHhhNFwiLFxyXG4gICAgXCJhei1DeXJsXCI6IFwiIywjIzAuMDBcXHhhMFxceGE0XCIsXHJcbiAgICBcImF6LUxhdG5cIjogXCIjLCMjMC4wMFxceGEwXFx4YTRcIixcclxuICAgIGJhczogXCIjLCMjMC4wMFxceGEwXFx4YTRcIixcclxuICAgIGJlOiBcIiMsIyMwLjAwXFx4YTBcXHhhNFwiLFxyXG4gICAgYmVtOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBiZXo6IFwiIywjIzAuMDBcXHhhNFwiLFxyXG4gICAgYmc6IFwiMC4wMFxceGEwXFx4YTQ7KDAuMDBcXHhhMFxceGE0KVwiLFxyXG4gICAgYm06IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIGJuOiBcIiMsIyMsIyMwLjAwXFx4YTQ7KCMsIyMsIyMwLjAwXFx4YTQpXCIsXHJcbiAgICBcImJuLUlOXCI6IFwiIywjIywjIzAuMDBcXHhhNDsoIywjIywjIzAuMDBcXHhhNClcIixcclxuICAgIGJvOiBcIlxceGE0XFx4YTAjLCMjMC4wMFwiLFxyXG4gICAgXCJiby1JTlwiOiBcIlxceGE0XFx4YTAjLCMjMC4wMFwiLFxyXG4gICAgYnI6IFwiIywjIzAuMDBcXHhhMFxceGE0XCIsXHJcbiAgICBicng6IFwiXFx4YTRcXHhhMCMsIyMsIyMwLjAwXCIsXHJcbiAgICBiczogXCIjLCMjMC4wMFxceGEwXFx4YTRcIixcclxuICAgIFwiYnMtQ3lybFwiOiBcIiMsIyMwLjAwXFx4YTBcXHhhNFwiLFxyXG4gICAgXCJicy1MYXRuXCI6IFwiIywjIzAuMDBcXHhhMFxceGE0XCIsXHJcbiAgICBjYTogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiY2EtQURcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiY2EtRVMtVkFMRU5DSUFcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiY2EtRlJcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiY2EtSVRcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIGNjcDogXCIjLCMjLCMjMC4wMFxceGE0OygjLCMjLCMjMC4wMFxceGE0KVwiLFxyXG4gICAgXCJjY3AtSU5cIjogXCIjLCMjLCMjMC4wMFxceGE0OygjLCMjLCMjMC4wMFxceGE0KVwiLFxyXG4gICAgY2U6IFwiIywjIzAuMDBcXHhhMFxceGE0XCIsXHJcbiAgICBjZWI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIGNnZzogXCJcXHhhNCMsIyMwLjAwXCIsXHJcbiAgICBjaHI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIGNrYjogXCJcXHhhNFxceGEwIywjIzAuMDBcIixcclxuICAgIFwiY2tiLUlSXCI6IFwiXFx4YTRcXHhhMCMsIyMwLjAwXCIsXHJcbiAgICBjczogXCIjLCMjMC4wMFxceGEwXFx4YTRcIixcclxuICAgIGN5OiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBkYTogXCIjLCMjMC4wMFxceGEwXFx4YTRcIixcclxuICAgIFwiZGEtR0xcIjogXCIjLCMjMC4wMFxceGEwXFx4YTRcIixcclxuICAgIGRhdjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgZGU6IFwiIywjIzAuMDBcXHhhMFxceGE0XCIsXHJcbiAgICBcImRlLUFUXCI6IFwiIywjIzAuMDBcXHhhMFxceGE0XCIsXHJcbiAgICBcImRlLUJFXCI6IFwiIywjIzAuMDBcXHhhMFxceGE0XCIsXHJcbiAgICBcImRlLUNIXCI6IFwiIywjIzAuMDBcXHhhMFxceGE0XCIsXHJcbiAgICBcImRlLUlUXCI6IFwiIywjIzAuMDBcXHhhMFxceGE0XCIsXHJcbiAgICBcImRlLUxJXCI6IFwiIywjIzAuMDBcXHhhMFxceGE0XCIsXHJcbiAgICBcImRlLUxVXCI6IFwiIywjIzAuMDBcXHhhMFxceGE0XCIsXHJcbiAgICBkamU6IFwiIywjIzAuMDBcXHhhNFwiLFxyXG4gICAgZG9pOiBcIlxceGE0IywjIzAuMDBcIixcclxuICAgIGRzYjogXCIjLCMjMC4wMFxceGEwXFx4YTRcIixcclxuICAgIGR1YTogXCIjLCMjMC4wMFxceGEwXFx4YTRcIixcclxuICAgIGR5bzogXCIjLCMjMC4wMFxceGEwXFx4YTRcIixcclxuICAgIGR6OiBcIlxceGE0IywjIywjIzAuMDBcIixcclxuICAgIGVidTogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgZWU6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiZWUtVEdcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgZWw6IFwiIywjIzAuMDBcXHhhMFxceGE0XCIsXHJcbiAgICBcImVsLUNZXCI6IFwiIywjIzAuMDBcXHhhMFxceGE0XCIsXHJcbiAgICBlbjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJlbi0wMDFcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJlbi0xNTBcIjogXCIjLCMjMC4wMFxceGEwXFx4YTRcIixcclxuICAgIFwiZW4tQUVcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJlbi1BR1wiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcImVuLUFJXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiZW4tQVNcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJlbi1BVFwiOiBcIlxceGE0XFx4YTAjLCMjMC4wMFwiLFxyXG4gICAgXCJlbi1BVVwiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcImVuLUJCXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiZW4tQkVcIjogXCIjLCMjMC4wMFxceGEwXFx4YTRcIixcclxuICAgIFwiZW4tQklcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJlbi1CTVwiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcImVuLUJTXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiZW4tQldcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJlbi1CWlwiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcImVuLUNBXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiZW4tQ0NcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJlbi1DSFwiOiBcIlxceGE0XFx4YTAjLCMjMC4wMDtcXHhhNC0jLCMjMC4wMFwiLFxyXG4gICAgXCJlbi1DS1wiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcImVuLUNNXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiZW4tQ1hcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJlbi1DWVwiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcImVuLURFXCI6IFwiIywjIzAuMDBcXHhhMFxceGE0XCIsXHJcbiAgICBcImVuLURHXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiZW4tREtcIjogXCIjLCMjMC4wMFxceGEwXFx4YTRcIixcclxuICAgIFwiZW4tRE1cIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJlbi1FUlwiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcImVuLUZJXCI6IFwiIywjIzAuMDBcXHhhMFxceGE0XCIsXHJcbiAgICBcImVuLUZKXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiZW4tRktcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJlbi1GTVwiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcImVuLUdCXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiZW4tR0RcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJlbi1HR1wiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcImVuLUdIXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiZW4tR0lcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJlbi1HTVwiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcImVuLUdVXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiZW4tR1lcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJlbi1IS1wiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcImVuLUlFXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiZW4tSUxcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJlbi1JTVwiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcImVuLUlOXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiZW4tSU9cIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJlbi1KRVwiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcImVuLUpNXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiZW4tS0VcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJlbi1LSVwiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcImVuLUtOXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiZW4tS1lcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJlbi1MQ1wiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcImVuLUxSXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiZW4tTFNcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJlbi1NR1wiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcImVuLU1IXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiZW4tTU9cIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJlbi1NUFwiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcImVuLU1TXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiZW4tTVRcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJlbi1NVVwiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcImVuLU1XXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiZW4tTVlcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJlbi1OQVwiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcImVuLU5GXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiZW4tTkdcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJlbi1OTFwiOiBcIlxceGE0XFx4YTAjLCMjMC4wMDsoXFx4YTRcXHhhMCMsIyMwLjAwKVwiLFxyXG4gICAgXCJlbi1OUlwiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcImVuLU5VXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiZW4tTlpcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJlbi1QR1wiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcImVuLVBIXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiZW4tUEtcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJlbi1QTlwiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcImVuLVBSXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiZW4tUFdcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJlbi1SV1wiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcImVuLVNCXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiZW4tU0NcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJlbi1TRFwiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcImVuLVNFXCI6IFwiIywjIzAuMDBcXHhhMFxceGE0XCIsXHJcbiAgICBcImVuLVNHXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiZW4tU0hcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJlbi1TSVwiOiBcIiMsIyMwLjAwXFx4YTBcXHhhNDsoIywjIzAuMDBcXHhhMFxceGE0KVwiLFxyXG4gICAgXCJlbi1TTFwiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcImVuLVNTXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiZW4tU1hcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJlbi1TWlwiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcImVuLVRDXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiZW4tVEtcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJlbi1UT1wiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcImVuLVRUXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiZW4tVFZcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJlbi1UWlwiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcImVuLVVHXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiZW4tVU1cIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJlbi1VUy1QT1NJWFwiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcImVuLVZDXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiZW4tVkdcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJlbi1WSVwiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcImVuLVZVXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiZW4tV1NcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJlbi1aQVwiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcImVuLVpNXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiZW4tWldcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgZW86IFwiXFx4YTRcXHhhMCMsIyMwLjAwXCIsXHJcbiAgICBlczogXCIjLCMjMC4wMFxceGEwXFx4YTRcIixcclxuICAgIFwiZXMtNDE5XCI6IFwiXFx4YTQjLCMjMC4wMFwiLFxyXG4gICAgXCJlcy1BUlwiOiBcIlxceGE0XFx4YTAjLCMjMC4wMDsoXFx4YTRcXHhhMCMsIyMwLjAwKVwiLFxyXG4gICAgXCJlcy1CT1wiOiBcIlxceGE0IywjIzAuMDBcIixcclxuICAgIFwiZXMtQlJcIjogXCJcXHhhNCMsIyMwLjAwXCIsXHJcbiAgICBcImVzLUJaXCI6IFwiXFx4YTQjLCMjMC4wMFwiLFxyXG4gICAgXCJlcy1DTFwiOiBcIlxceGE0IywjIzAuMDBcIixcclxuICAgIFwiZXMtQ09cIjogXCJcXHhhNCMsIyMwLjAwXCIsXHJcbiAgICBcImVzLUNSXCI6IFwiXFx4YTQjLCMjMC4wMFwiLFxyXG4gICAgXCJlcy1DVVwiOiBcIlxceGE0IywjIzAuMDBcIixcclxuICAgIFwiZXMtRE9cIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJlcy1FQVwiOiBcIiMsIyMwLjAwXFx4YTBcXHhhNFwiLFxyXG4gICAgXCJlcy1FQ1wiOiBcIlxceGE0IywjIzAuMDBcIixcclxuICAgIFwiZXMtR1FcIjogXCIjLCMjMC4wMFxceGEwXFx4YTRcIixcclxuICAgIFwiZXMtR1RcIjogXCJcXHhhNCMsIyMwLjAwXCIsXHJcbiAgICBcImVzLUhOXCI6IFwiXFx4YTQjLCMjMC4wMFwiLFxyXG4gICAgXCJlcy1JQ1wiOiBcIiMsIyMwLjAwXFx4YTBcXHhhNFwiLFxyXG4gICAgXCJlcy1NWFwiOiBcIlxceGE0IywjIzAuMDBcIixcclxuICAgIFwiZXMtTklcIjogXCJcXHhhNCMsIyMwLjAwXCIsXHJcbiAgICBcImVzLVBBXCI6IFwiXFx4YTQjLCMjMC4wMFwiLFxyXG4gICAgXCJlcy1QRVwiOiBcIlxceGE0IywjIzAuMDBcIixcclxuICAgIFwiZXMtUEhcIjogXCIjLCMjMC4wMFxceGEwXFx4YTRcIixcclxuICAgIFwiZXMtUFJcIjogXCJcXHhhNCMsIyMwLjAwXCIsXHJcbiAgICBcImVzLVBZXCI6IFwiXFx4YTQjLCMjMC4wMFwiLFxyXG4gICAgXCJlcy1TVlwiOiBcIlxceGE0IywjIzAuMDBcIixcclxuICAgIFwiZXMtVVNcIjogXCJcXHhhNCMsIyMwLjAwXCIsXHJcbiAgICBcImVzLVVZXCI6IFwiXFx4YTRcXHhhMCMsIyMwLjAwOyhcXHhhNFxceGEwIywjIzAuMDApXCIsXHJcbiAgICBcImVzLVZFXCI6IFwiXFx4YTQjLCMjMC4wMFwiLFxyXG4gICAgZXQ6IFwiIywjIzAuMDBcXHhhMFxceGE0OygjLCMjMC4wMFxceGEwXFx4YTQpXCIsXHJcbiAgICBldTogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIGV3bzogXCIjLCMjMC4wMFxceGEwXFx4YTRcIixcclxuICAgIGZhOiBcIlxcdTIwMGVcXHhhNFxceGEwIywjIzAuMDA7XFx1MjAwZShcXHhhNFxceGEwIywjIzAuMDApXCIsXHJcbiAgICBcImZhLUFGXCI6IFwiXFx4YTRcXHhhMCMsIyMwLjAwO1xcdTIwMGUoXFx4YTRcXHhhMCMsIyMwLjAwKVwiLFxyXG4gICAgZmY6IFwiIywjIzAuMDBcXHhhMFxceGE0XCIsXHJcbiAgICBcImZmLUFkbG1cIjogXCJcXHhhNFxceGEwIywjIzAuMDBcIixcclxuICAgIFwiZmYtQWRsbS1CRlwiOiBcIlxceGE0XFx4YTAjLCMjMC4wMFwiLFxyXG4gICAgXCJmZi1BZGxtLUNNXCI6IFwiXFx4YTRcXHhhMCMsIyMwLjAwXCIsXHJcbiAgICBcImZmLUFkbG0tR0hcIjogXCJcXHhhNFxceGEwIywjIzAuMDBcIixcclxuICAgIFwiZmYtQWRsbS1HTVwiOiBcIlxceGE0XFx4YTAjLCMjMC4wMFwiLFxyXG4gICAgXCJmZi1BZGxtLUdXXCI6IFwiXFx4YTRcXHhhMCMsIyMwLjAwXCIsXHJcbiAgICBcImZmLUFkbG0tTFJcIjogXCJcXHhhNFxceGEwIywjIzAuMDBcIixcclxuICAgIFwiZmYtQWRsbS1NUlwiOiBcIlxceGE0XFx4YTAjLCMjMC4wMFwiLFxyXG4gICAgXCJmZi1BZGxtLU5FXCI6IFwiXFx4YTRcXHhhMCMsIyMwLjAwXCIsXHJcbiAgICBcImZmLUFkbG0tTkdcIjogXCJcXHhhNFxceGEwIywjIzAuMDBcIixcclxuICAgIFwiZmYtQWRsbS1TTFwiOiBcIlxceGE0XFx4YTAjLCMjMC4wMFwiLFxyXG4gICAgXCJmZi1BZGxtLVNOXCI6IFwiXFx4YTRcXHhhMCMsIyMwLjAwXCIsXHJcbiAgICBcImZmLUxhdG5cIjogXCIjLCMjMC4wMFxceGEwXFx4YTRcIixcclxuICAgIFwiZmYtTGF0bi1CRlwiOiBcIiMsIyMwLjAwXFx4YTBcXHhhNFwiLFxyXG4gICAgXCJmZi1MYXRuLUNNXCI6IFwiIywjIzAuMDBcXHhhMFxceGE0XCIsXHJcbiAgICBcImZmLUxhdG4tR0hcIjogXCIjLCMjMC4wMFxceGEwXFx4YTRcIixcclxuICAgIFwiZmYtTGF0bi1HTVwiOiBcIiMsIyMwLjAwXFx4YTBcXHhhNFwiLFxyXG4gICAgXCJmZi1MYXRuLUdOXCI6IFwiIywjIzAuMDBcXHhhMFxceGE0XCIsXHJcbiAgICBcImZmLUxhdG4tR1dcIjogXCIjLCMjMC4wMFxceGEwXFx4YTRcIixcclxuICAgIFwiZmYtTGF0bi1MUlwiOiBcIiMsIyMwLjAwXFx4YTBcXHhhNFwiLFxyXG4gICAgXCJmZi1MYXRuLU1SXCI6IFwiIywjIzAuMDBcXHhhMFxceGE0XCIsXHJcbiAgICBcImZmLUxhdG4tTkVcIjogXCIjLCMjMC4wMFxceGEwXFx4YTRcIixcclxuICAgIFwiZmYtTGF0bi1OR1wiOiBcIiMsIyMwLjAwXFx4YTBcXHhhNFwiLFxyXG4gICAgXCJmZi1MYXRuLVNMXCI6IFwiIywjIzAuMDBcXHhhMFxceGE0XCIsXHJcbiAgICBmaTogXCIjLCMjMC4wMFxceGEwXFx4YTRcIixcclxuICAgIGZpbDogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgZm86IFwiIywjIzAuMDBcXHhhMFxceGE0OygjLCMjMC4wMFxceGEwXFx4YTQpXCIsXHJcbiAgICBcImZvLURLXCI6IFwiIywjIzAuMDBcXHhhMFxceGE0OygjLCMjMC4wMFxceGEwXFx4YTQpXCIsXHJcbiAgICBmcjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItQkVcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItQkZcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItQklcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItQkpcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItQkxcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItQ0FcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItQ0RcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItQ0ZcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItQ0dcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItQ0hcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItQ0lcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItQ01cIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItREpcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItRFpcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItR0FcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItR0ZcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItR05cIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItR1BcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItR1FcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItSFRcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItS01cIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItTFVcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItTUFcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItTUNcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItTUZcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItTUdcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItTUxcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItTVFcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItTVJcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItTVVcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItTkNcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItTkVcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItUEZcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItUE1cIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItUkVcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItUldcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItU0NcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItU05cIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItU1lcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItVERcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItVEdcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItVE5cIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItVlVcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItV0ZcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwiZnItWVRcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIGZ1cjogXCJcXHhhNFxceGEwIywjIzAuMDBcIixcclxuICAgIGZ5OiBcIlxceGE0XFx4YTAjLCMjMC4wMDsoXFx4YTRcXHhhMCMsIyMwLjAwKVwiLFxyXG4gICAgZ2E6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiZ2EtR0JcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgZ2Q6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIGdsOiBcIiMsIyMwLjAwXFx4YTBcXHhhNFwiLFxyXG4gICAgZ3N3OiBcIiMsIyMwLjAwXFx4YTBcXHhhNFwiLFxyXG4gICAgXCJnc3ctRlJcIjogXCIjLCMjMC4wMFxceGEwXFx4YTRcIixcclxuICAgIFwiZ3N3LUxJXCI6IFwiIywjIzAuMDBcXHhhMFxceGE0XCIsXHJcbiAgICBndTogXCJcXHhhNCMsIyMsIyMwLjAwOyhcXHhhNCMsIyMsIyMwLjAwKVwiLFxyXG4gICAgZ3V6OiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBndjogXCJcXHhhNCMsIyMwLjAwXCIsXHJcbiAgICBoYTogXCJcXHhhNFxceGEwIywjIzAuMDBcIixcclxuICAgIFwiaGEtR0hcIjogXCJcXHhhNFxceGEwIywjIzAuMDBcIixcclxuICAgIFwiaGEtTkVcIjogXCJcXHhhNFxceGEwIywjIzAuMDBcIixcclxuICAgIGhhdzogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgaGU6IFwiIywjIzAuMDBcXHhhMFxceGE0XCIsXHJcbiAgICBoaTogXCJcXHhhNCMsIyMsIyMwLjAwXCIsXHJcbiAgICBocjogXCIjLCMjMC4wMFxceGEwXFx4YTRcIixcclxuICAgIFwiaHItQkFcIjogXCIjLCMjMC4wMFxceGEwXFx4YTRcIixcclxuICAgIGhzYjogXCIjLCMjMC4wMFxceGEwXFx4YTRcIixcclxuICAgIGh1OiBcIiMsIyMwLjAwXFx4YTBcXHhhNFwiLFxyXG4gICAgaHk6IFwiIywjIzAuMDBcXHhhMFxceGE0XCIsXHJcbiAgICBpYTogXCJcXHhhNFxceGEwIywjIzAuMDA7KFxceGE0XFx4YTAjLCMjMC4wMClcIixcclxuICAgIGlkOiBcIlxceGE0IywjIzAuMDBcIixcclxuICAgIGlnOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBpaTogXCJcXHhhNFxceGEwIywjIzAuMDBcIixcclxuICAgIGlzOiBcIiMsIyMwLjAwXFx4YTBcXHhhNFwiLFxyXG4gICAgaXQ6IFwiIywjIzAuMDBcXHhhMFxceGE0XCIsXHJcbiAgICBcIml0LUNIXCI6IFwiIywjIzAuMDBcXHhhMFxceGE0XCIsXHJcbiAgICBcIml0LVNNXCI6IFwiIywjIzAuMDBcXHhhMFxceGE0XCIsXHJcbiAgICBcIml0LVZBXCI6IFwiIywjIzAuMDBcXHhhMFxceGE0XCIsXHJcbiAgICBqYTogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgamdvOiBcIlxceGE0XFx4YTAjLCMjMC4wMFwiLFxyXG4gICAgam1jOiBcIlxceGE0IywjIzAuMDBcIixcclxuICAgIGp2OiBcIlxceGE0XFx4YTAjLCMjMC4wMFwiLFxyXG4gICAga2E6IFwiIywjIzAuMDBcXHhhMFxceGE0XCIsXHJcbiAgICBrYWI6IFwiIywjIzAuMDBcXHhhNFwiLFxyXG4gICAga2FtOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBrZGU6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIGtlYTogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIGtocTogXCIjLCMjMC4wMFxceGE0XCIsXHJcbiAgICBraTogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAga2s6IFwiIywjIzAuMDBcXHhhMFxceGE0XCIsXHJcbiAgICBra2o6IFwiXFx4YTRcXHhhMCMsIyMwLjAwXCIsXHJcbiAgICBrbDogXCJcXHhhNCMsIyMwLjAwO1xceGE0LSMsIyMwLjAwXCIsXHJcbiAgICBrbG46IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIGttOiBcIiMsIyMwLjAwXFx4YTQ7KCMsIyMwLjAwXFx4YTQpXCIsXHJcbiAgICBrbjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAga286IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwia28tS1BcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAga29rOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBrczogXCJcXHhhNFxceGEwIywjIywjIzAuMDBcIixcclxuICAgIFwia3MtQXJhYlwiOiBcIlxceGE0XFx4YTAjLCMjLCMjMC4wMFwiLFxyXG4gICAga3NiOiBcIiMsIyMwLjAwXFx4YTRcIixcclxuICAgIGtzZjogXCIjLCMjMC4wMFxceGEwXFx4YTRcIixcclxuICAgIGtzaDogXCIjLCMjMC4wMFxceGEwXFx4YTRcIixcclxuICAgIGt1OiBcIiMsIyMwLjAwXFx4YTBcXHhhNDsoIywjIzAuMDBcXHhhMFxceGE0KVwiLFxyXG4gICAga3c6IFwiXFx4YTQjLCMjMC4wMFwiLFxyXG4gICAga3k6IFwiIywjIzAuMDBcXHhhMFxceGE0XCIsXHJcbiAgICBsYWc6IFwiXFx4YTRcXHhhMCMsIyMwLjAwXCIsXHJcbiAgICBsYjogXCIjLCMjMC4wMFxceGEwXFx4YTRcIixcclxuICAgIGxnOiBcIiMsIyMwLjAwXFx4YTRcIixcclxuICAgIGxrdDogXCJcXHhhNFxceGEwIywjIzAuMDBcIixcclxuICAgIGxuOiBcIiMsIyMwLjAwXFx4YTBcXHhhNFwiLFxyXG4gICAgXCJsbi1BT1wiOiBcIiMsIyMwLjAwXFx4YTBcXHhhNFwiLFxyXG4gICAgXCJsbi1DRlwiOiBcIiMsIyMwLjAwXFx4YTBcXHhhNFwiLFxyXG4gICAgXCJsbi1DR1wiOiBcIiMsIyMwLjAwXFx4YTBcXHhhNFwiLFxyXG4gICAgbG86IFwiXFx4YTQjLCMjMC4wMDtcXHhhNC0jLCMjMC4wMFwiLFxyXG4gICAgbHJjOiBcIlxceGE0XFx4YTAjLCMjMC4wMFwiLFxyXG4gICAgXCJscmMtSVFcIjogXCJcXHhhNFxceGEwIywjIzAuMDBcIixcclxuICAgIGx0OiBcIiMsIyMwLjAwXFx4YTBcXHhhNFwiLFxyXG4gICAgbHU6IFwiIywjIzAuMDBcXHhhNFwiLFxyXG4gICAgbHVvOiBcIiMsIyMwLjAwXFx4YTRcIixcclxuICAgIGx1eTogXCJcXHhhNCMsIyMwLjAwO1xceGE0LVxceGEwIywjIzAuMDBcIixcclxuICAgIGx2OiBcIiMsIyMwLjAwXFx4YTBcXHhhNFwiLFxyXG4gICAgbWFpOiBcIlxceGE0XFx4YTAjLCMjMC4wMFwiLFxyXG4gICAgbWFzOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcIm1hcy1UWlwiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBtZXI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIG1mZTogXCJcXHhhNFxceGEwIywjIzAuMDBcIixcclxuICAgIG1nOiBcIlxceGE0IywjIzAuMDBcIixcclxuICAgIG1naDogXCJcXHhhNFxceGEwIywjIzAuMDBcIixcclxuICAgIG1nbzogXCJcXHhhNFxceGEwIywjIzAuMDBcIixcclxuICAgIG1pOiBcIlxceGE0XFx4YTAjLCMjMC4wMFwiLFxyXG4gICAgbWs6IFwiIywjIzAuMDBcXHhhMFxceGE0XCIsXHJcbiAgICBtbDogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgbW46IFwiXFx4YTRcXHhhMCMsIyMwLjAwXCIsXHJcbiAgICBtbmk6IFwiXFx4YTRcXHhhMCMsIyMwLjAwXCIsXHJcbiAgICBcIm1uaS1CZW5nXCI6IFwiXFx4YTRcXHhhMCMsIyMwLjAwXCIsXHJcbiAgICBtcjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgbXM6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwibXMtQk5cIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJtcy1JRFwiOiBcIlxceGE0IywjIzAuMDBcIixcclxuICAgIFwibXMtU0dcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgbXQ6IFwiXFx4YTQjLCMjMC4wMFwiLFxyXG4gICAgbXVhOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBteTogXCJcXHhhNFxceGEwIywjIzAuMDBcIixcclxuICAgIG16bjogXCJcXHhhNFxceGEwIywjIzAuMDBcIixcclxuICAgIG5hcTogXCJcXHhhNCMsIyMwLjAwXCIsXHJcbiAgICBuYjogXCJcXHhhNFxceGEwIywjIzAuMDBcIixcclxuICAgIFwibmItU0pcIjogXCJcXHhhNFxceGEwIywjIzAuMDBcIixcclxuICAgIG5kOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBuZHM6IFwiXFx4YTRcXHhhMCMsIyMwLjAwXCIsXHJcbiAgICBcIm5kcy1OTFwiOiBcIlxceGE0XFx4YTAjLCMjMC4wMFwiLFxyXG4gICAgbmU6IFwiXFx4YTRcXHhhMCMsIyMsIyMwLjAwXCIsXHJcbiAgICBcIm5lLUlOXCI6IFwiXFx4YTRcXHhhMCMsIyMsIyMwLjAwXCIsXHJcbiAgICBubDogXCJcXHhhNFxceGEwIywjIzAuMDA7KFxceGE0XFx4YTAjLCMjMC4wMClcIixcclxuICAgIFwibmwtQVdcIjogXCJcXHhhNFxceGEwIywjIzAuMDA7KFxceGE0XFx4YTAjLCMjMC4wMClcIixcclxuICAgIFwibmwtQkVcIjogXCJcXHhhNFxceGEwIywjIzAuMDA7KFxceGE0XFx4YTAjLCMjMC4wMClcIixcclxuICAgIFwibmwtQlFcIjogXCJcXHhhNFxceGEwIywjIzAuMDA7KFxceGE0XFx4YTAjLCMjMC4wMClcIixcclxuICAgIFwibmwtQ1dcIjogXCJcXHhhNFxceGEwIywjIzAuMDA7KFxceGE0XFx4YTAjLCMjMC4wMClcIixcclxuICAgIFwibmwtU1JcIjogXCJcXHhhNFxceGEwIywjIzAuMDA7KFxceGE0XFx4YTAjLCMjMC4wMClcIixcclxuICAgIFwibmwtU1hcIjogXCJcXHhhNFxceGEwIywjIzAuMDA7KFxceGE0XFx4YTAjLCMjMC4wMClcIixcclxuICAgIG5tZzogXCIjLCMjMC4wMFxceGEwXFx4YTRcIixcclxuICAgIG5uOiBcIiMsIyMwLjAwXFx4YTBcXHhhNFwiLFxyXG4gICAgbm5oOiBcIlxceGE0XFx4YTAjLCMjMC4wMFwiLFxyXG4gICAgbm86IFwiXFx4YTRcXHhhMCMsIyMwLjAwXCIsXHJcbiAgICBudXM6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIG55bjogXCJcXHhhNCMsIyMwLjAwXCIsXHJcbiAgICBvbTogXCJcXHhhNCMsIyMwLjAwXCIsXHJcbiAgICBcIm9tLUtFXCI6IFwiXFx4YTQjLCMjMC4wMFwiLFxyXG4gICAgb3I6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIG9zOiBcIlxceGE0XFx4YTAjLCMjMC4wMFwiLFxyXG4gICAgXCJvcy1SVVwiOiBcIlxceGE0XFx4YTAjLCMjMC4wMFwiLFxyXG4gICAgcGE6IFwiXFx4YTRcXHhhMCMsIyMwLjAwXCIsXHJcbiAgICBcInBhLUFyYWJcIjogXCJcXHhhNFxceGEwIywjIzAuMDBcIixcclxuICAgIFwicGEtR3VydVwiOiBcIlxceGE0XFx4YTAjLCMjMC4wMFwiLFxyXG4gICAgcGNtOiBcIlxceGE0IywjIzAuMDBcIixcclxuICAgIHBsOiBcIiMsIyMwLjAwXFx4YTBcXHhhNDsoIywjIzAuMDBcXHhhMFxceGE0KVwiLFxyXG4gICAgcHM6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwicHMtUEtcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgcHQ6IFwiXFx4YTRcXHhhMCMsIyMwLjAwXCIsXHJcbiAgICBcInB0LUFPXCI6IFwiIywjIzAuMDBcXHhhMFxceGE0OygjLCMjMC4wMFxceGEwXFx4YTQpXCIsXHJcbiAgICBcInB0LUNIXCI6IFwiIywjIzAuMDBcXHhhMFxceGE0OygjLCMjMC4wMFxceGEwXFx4YTQpXCIsXHJcbiAgICBcInB0LUNWXCI6IFwiIywjIzAuMDBcXHhhMFxceGE0OygjLCMjMC4wMFxceGEwXFx4YTQpXCIsXHJcbiAgICBcInB0LUdRXCI6IFwiIywjIzAuMDBcXHhhMFxceGE0OygjLCMjMC4wMFxceGEwXFx4YTQpXCIsXHJcbiAgICBcInB0LUdXXCI6IFwiIywjIzAuMDBcXHhhMFxceGE0OygjLCMjMC4wMFxceGEwXFx4YTQpXCIsXHJcbiAgICBcInB0LUxVXCI6IFwiIywjIzAuMDBcXHhhMFxceGE0OygjLCMjMC4wMFxceGEwXFx4YTQpXCIsXHJcbiAgICBcInB0LU1PXCI6IFwiIywjIzAuMDBcXHhhMFxceGE0OygjLCMjMC4wMFxceGEwXFx4YTQpXCIsXHJcbiAgICBcInB0LU1aXCI6IFwiIywjIzAuMDBcXHhhMFxceGE0OygjLCMjMC4wMFxceGEwXFx4YTQpXCIsXHJcbiAgICBcInB0LVBUXCI6IFwiIywjIzAuMDBcXHhhMFxceGE0OygjLCMjMC4wMFxceGEwXFx4YTQpXCIsXHJcbiAgICBcInB0LVNUXCI6IFwiIywjIzAuMDBcXHhhMFxceGE0OygjLCMjMC4wMFxceGEwXFx4YTQpXCIsXHJcbiAgICBcInB0LVRMXCI6IFwiIywjIzAuMDBcXHhhMFxceGE0OygjLCMjMC4wMFxceGEwXFx4YTQpXCIsXHJcbiAgICBxdTogXCJcXHhhNFxceGEwIywjIzAuMDBcIixcclxuICAgIFwicXUtQk9cIjogXCJcXHhhNFxceGEwIywjIzAuMDBcIixcclxuICAgIFwicXUtRUNcIjogXCJcXHhhNFxceGEwIywjIzAuMDBcIixcclxuICAgIHJtOiBcIiMsIyMwLjAwXFx4YTBcXHhhNFwiLFxyXG4gICAgcm46IFwiIywjIzAuMDBcXHhhNFwiLFxyXG4gICAgcm86IFwiIywjIzAuMDBcXHhhMFxceGE0OygjLCMjMC4wMFxceGEwXFx4YTQpXCIsXHJcbiAgICBcInJvLU1EXCI6IFwiIywjIzAuMDBcXHhhMFxceGE0OygjLCMjMC4wMFxceGEwXFx4YTQpXCIsXHJcbiAgICByb2Y6IFwiXFx4YTQjLCMjMC4wMFwiLFxyXG4gICAgcm9vdDogXCJcXHhhNFxceGEwIywjIzAuMDBcIixcclxuICAgIHJ1OiBcIiMsIyMwLjAwXFx4YTBcXHhhNFwiLFxyXG4gICAgXCJydS1CWVwiOiBcIiMsIyMwLjAwXFx4YTBcXHhhNFwiLFxyXG4gICAgXCJydS1LR1wiOiBcIiMsIyMwLjAwXFx4YTBcXHhhNFwiLFxyXG4gICAgXCJydS1LWlwiOiBcIiMsIyMwLjAwXFx4YTBcXHhhNFwiLFxyXG4gICAgXCJydS1NRFwiOiBcIiMsIyMwLjAwXFx4YTBcXHhhNFwiLFxyXG4gICAgXCJydS1VQVwiOiBcIiMsIyMwLjAwXFx4YTBcXHhhNFwiLFxyXG4gICAgcnc6IFwiXFx4YTRcXHhhMCMsIyMwLjAwXCIsXHJcbiAgICByd2s6IFwiIywjIzAuMDBcXHhhNFwiLFxyXG4gICAgc2E6IFwiXFx4YTRcXHhhMCMsIyMwLjAwXCIsXHJcbiAgICBzYWg6IFwiIywjIzAuMDBcXHhhMFxceGE0XCIsXHJcbiAgICBzYXE6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIHNhdDogXCJcXHhhNFxceGEwIywjIzAuMDBcIixcclxuICAgIFwic2F0LU9sY2tcIjogXCJcXHhhNFxceGEwIywjIzAuMDBcIixcclxuICAgIHNicDogXCIjLCMjMC4wMFxceGE0XCIsXHJcbiAgICBzZDogXCJcXHhhNFxceGEwIywjIzAuMDBcIixcclxuICAgIFwic2QtQXJhYlwiOiBcIlxceGE0XFx4YTAjLCMjMC4wMFwiLFxyXG4gICAgXCJzZC1EZXZhXCI6IFwiXFx4YTRcXHhhMCMsIyMwLjAwXCIsXHJcbiAgICBzZTogXCIjLCMjMC4wMFxceGEwXFx4YTRcIixcclxuICAgIFwic2UtRklcIjogXCIjLCMjMC4wMFxceGEwXFx4YTRcIixcclxuICAgIFwic2UtU0VcIjogXCIjLCMjMC4wMFxceGEwXFx4YTRcIixcclxuICAgIHNlaDogXCIjLCMjMC4wMFxceGE0XCIsXHJcbiAgICBzZXM6IFwiIywjIzAuMDBcXHhhNFwiLFxyXG4gICAgc2c6IFwiXFx4YTQjLCMjMC4wMDtcXHhhNC0jLCMjMC4wMFwiLFxyXG4gICAgc2hpOiBcIiMsIyMwLjAwXFx4YTRcIixcclxuICAgIFwic2hpLUxhdG5cIjogXCIjLCMjMC4wMFxceGE0XCIsXHJcbiAgICBcInNoaS1UZm5nXCI6IFwiIywjIzAuMDBcXHhhNFwiLFxyXG4gICAgc2k6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIHNrOiBcIiMsIyMwLjAwXFx4YTBcXHhhNDsoIywjIzAuMDBcXHhhMFxceGE0KVwiLFxyXG4gICAgc2w6IFwiIywjIzAuMDBcXHhhMFxceGE0OygjLCMjMC4wMFxceGEwXFx4YTQpXCIsXHJcbiAgICBzbW46IFwiIywjIzAuMDBcXHhhMFxceGE0XCIsXHJcbiAgICBzbjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgc286IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwic28tREpcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJzby1FVFwiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcInNvLUtFXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIHNxOiBcIiMsIyMwLjAwXFx4YTBcXHhhNDsoIywjIzAuMDBcXHhhMFxceGE0KVwiLFxyXG4gICAgXCJzcS1NS1wiOiBcIiMsIyMwLjAwXFx4YTBcXHhhNDsoIywjIzAuMDBcXHhhMFxceGE0KVwiLFxyXG4gICAgXCJzcS1YS1wiOiBcIiMsIyMwLjAwXFx4YTBcXHhhNDsoIywjIzAuMDBcXHhhMFxceGE0KVwiLFxyXG4gICAgc3I6IFwiIywjIzAuMDBcXHhhMFxceGE0OygjLCMjMC4wMFxceGEwXFx4YTQpXCIsXHJcbiAgICBcInNyLUN5cmxcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwic3ItQ3lybC1CQVwiOiBcIiMsIyMwLjAwXFx4YTBcXHhhNDsoIywjIzAuMDBcXHhhMFxceGE0KVwiLFxyXG4gICAgXCJzci1DeXJsLU1FXCI6IFwiIywjIzAuMDBcXHhhMFxceGE0OygjLCMjMC4wMFxceGEwXFx4YTQpXCIsXHJcbiAgICBcInNyLUN5cmwtWEtcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwic3ItTGF0blwiOiBcIiMsIyMwLjAwXFx4YTBcXHhhNDsoIywjIzAuMDBcXHhhMFxceGE0KVwiLFxyXG4gICAgXCJzci1MYXRuLUJBXCI6IFwiIywjIzAuMDBcXHhhMFxceGE0OygjLCMjMC4wMFxceGEwXFx4YTQpXCIsXHJcbiAgICBcInNyLUxhdG4tTUVcIjogXCIjLCMjMC4wMFxceGEwXFx4YTQ7KCMsIyMwLjAwXFx4YTBcXHhhNClcIixcclxuICAgIFwic3ItTGF0bi1YS1wiOiBcIiMsIyMwLjAwXFx4YTBcXHhhNDsoIywjIzAuMDBcXHhhMFxceGE0KVwiLFxyXG4gICAgc3U6IFwiXFx4YTQjLCMjMC4wMFwiLFxyXG4gICAgXCJzdS1MYXRuXCI6IFwiXFx4YTQjLCMjMC4wMFwiLFxyXG4gICAgc3Y6IFwiIywjIzAuMDBcXHhhMFxceGE0XCIsXHJcbiAgICBcInN2LUFYXCI6IFwiIywjIzAuMDBcXHhhMFxceGE0XCIsXHJcbiAgICBcInN2LUZJXCI6IFwiIywjIzAuMDBcXHhhMFxceGE0XCIsXHJcbiAgICBzdzogXCJcXHhhNFxceGEwIywjIzAuMDBcIixcclxuICAgIFwic3ctQ0RcIjogXCJcXHhhNFxceGEwIywjIzAuMDBcIixcclxuICAgIFwic3ctS0VcIjogXCJcXHhhNFxceGEwIywjIzAuMDBcIixcclxuICAgIFwic3ctVUdcIjogXCJcXHhhNFxceGEwIywjIzAuMDBcIixcclxuICAgIHRhOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcInRhLUxLXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwidGEtTVlcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJ0YS1TR1wiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICB0ZTogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgdGVvOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcInRlby1LRVwiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICB0ZzogXCIjLCMjMC4wMFxceGEwXFx4YTRcIixcclxuICAgIHRoOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICB0aTogXCJcXHhhNCMsIyMwLjAwXCIsXHJcbiAgICBcInRpLUVSXCI6IFwiXFx4YTQjLCMjMC4wMFwiLFxyXG4gICAgdGs6IFwiIywjIzAuMDBcXHhhMFxceGE0XCIsXHJcbiAgICB0bzogXCJcXHhhNFxceGEwIywjIzAuMDBcIixcclxuICAgIHRyOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcInRyLUNZXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIHR0OiBcIiMsIyMwLjAwXFx4YTBcXHhhNFwiLFxyXG4gICAgdHdxOiBcIiMsIyMwLjAwXFx4YTRcIixcclxuICAgIHR6bTogXCIjLCMjMC4wMFxceGEwXFx4YTRcIixcclxuICAgIHVnOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICB1azogXCIjLCMjMC4wMFxceGEwXFx4YTRcIixcclxuICAgIHVyOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcInVyLUlOXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIHV6OiBcIiMsIyMwLjAwXFx4YTBcXHhhNFwiLFxyXG4gICAgXCJ1ei1BcmFiXCI6IFwiXFx4YTRcXHhhMCMsIyMwLjAwXCIsXHJcbiAgICBcInV6LUN5cmxcIjogXCIjLCMjMC4wMFxceGEwXFx4YTRcIixcclxuICAgIFwidXotTGF0blwiOiBcIiMsIyMwLjAwXFx4YTBcXHhhNFwiLFxyXG4gICAgdmFpOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcInZhaS1MYXRuXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwidmFpLVZhaWlcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgdmk6IFwiIywjIzAuMDBcXHhhMFxceGE0XCIsXHJcbiAgICB2dW46IFwiXFx4YTQjLCMjMC4wMFwiLFxyXG4gICAgd2FlOiBcIlxceGE0XFx4YTAjLCMjMC4wMFwiLFxyXG4gICAgd286IFwiXFx4YTRcXHhhMCMsIyMwLjAwXCIsXHJcbiAgICB4aDogXCJcXHhhNCMsIyMwLjAwXCIsXHJcbiAgICB4b2c6IFwiIywjIzAuMDBcXHhhMFxceGE0XCIsXHJcbiAgICB5YXY6IFwiIywjIzAuMDBcXHhhMFxceGE0OygjLCMjMC4wMFxceGEwXFx4YTQpXCIsXHJcbiAgICB5aTogXCJcXHhhNFxceGEwIywjIzAuMDBcIixcclxuICAgIHlvOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcInlvLUJKXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIHl1ZTogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJ5dWUtSGFuc1wiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcInl1ZS1IYW50XCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIHpnaDogXCIjLCMjMC4wMFxceGE0XCIsXHJcbiAgICB6aDogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJ6aC1IYW5zXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiemgtSGFucy1IS1wiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcInpoLUhhbnMtTU9cIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJ6aC1IYW5zLVNHXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIFwiemgtSGFudFwiOiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCIsXHJcbiAgICBcInpoLUhhbnQtSEtcIjogXCJcXHhhNCMsIyMwLjAwOyhcXHhhNCMsIyMwLjAwKVwiLFxyXG4gICAgXCJ6aC1IYW50LU1PXCI6IFwiXFx4YTQjLCMjMC4wMDsoXFx4YTQjLCMjMC4wMClcIixcclxuICAgIHp1OiBcIlxceGE0IywjIzAuMDA7KFxceGE0IywjIzAuMDApXCJcclxufTtcclxuIiwiLyoqXHJcbiAqIERldkV4dHJlbWUgKGVzbS9sb2NhbGl6YXRpb24vY2xkci1kYXRhL3BhcmVudF9sb2NhbGVzLmpzKVxyXG4gKiBWZXJzaW9uOiAyMS4xLjRcclxuICogQnVpbGQgZGF0ZTogTW9uIEp1biAyMSAyMDIxXHJcbiAqXHJcbiAqIENvcHlyaWdodCAoYykgMjAxMiAtIDIwMjEgRGV2ZWxvcGVyIEV4cHJlc3MgSW5jLiBBTEwgUklHSFRTIFJFU0VSVkVEXHJcbiAqIFJlYWQgYWJvdXQgRGV2RXh0cmVtZSBsaWNlbnNpbmcgaGVyZTogaHR0cHM6Ly9qcy5kZXZleHByZXNzLmNvbS9MaWNlbnNpbmcvXHJcbiAqL1xyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgICBcImVuLTE1MFwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1BR1wiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1BSVwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1BVVwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1CQlwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1CTVwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1CU1wiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1CV1wiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1CWlwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1DQVwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1DQ1wiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1DS1wiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1DTVwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1DWFwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1DWVwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1ER1wiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1ETVwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1FUlwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1GSlwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1GS1wiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1GTVwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1HQlwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1HRFwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1HR1wiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1HSFwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1HSVwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1HTVwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1HWVwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1IS1wiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1JRVwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1JTFwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1JTVwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1JTlwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1JT1wiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1KRVwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1KTVwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1LRVwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1LSVwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1LTlwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1LWVwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1MQ1wiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1MUlwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1MU1wiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1NR1wiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1NT1wiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1NU1wiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1NVFwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1NVVwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1NV1wiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1NWVwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1OQVwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1ORlwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1OR1wiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1OUlwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1OVVwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1OWlwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1QR1wiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1QSFwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1QS1wiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1QTlwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1QV1wiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1SV1wiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1TQlwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1TQ1wiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1TRFwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1TR1wiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1TSFwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1TTFwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1TU1wiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1TWFwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1TWlwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1UQ1wiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1US1wiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1UT1wiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1UVFwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1UVlwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1UWlwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1VR1wiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1WQ1wiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1WR1wiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1WVVwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1XU1wiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1aQVwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1aTVwiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1aV1wiOiBcImVuLTAwMVwiLFxyXG4gICAgXCJlbi1BVFwiOiBcImVuLTE1MFwiLFxyXG4gICAgXCJlbi1CRVwiOiBcImVuLTE1MFwiLFxyXG4gICAgXCJlbi1DSFwiOiBcImVuLTE1MFwiLFxyXG4gICAgXCJlbi1ERVwiOiBcImVuLTE1MFwiLFxyXG4gICAgXCJlbi1ES1wiOiBcImVuLTE1MFwiLFxyXG4gICAgXCJlbi1GSVwiOiBcImVuLTE1MFwiLFxyXG4gICAgXCJlbi1OTFwiOiBcImVuLTE1MFwiLFxyXG4gICAgXCJlbi1TRVwiOiBcImVuLTE1MFwiLFxyXG4gICAgXCJlbi1TSVwiOiBcImVuLTE1MFwiLFxyXG4gICAgXCJlcy1BUlwiOiBcImVzLTQxOVwiLFxyXG4gICAgXCJlcy1CT1wiOiBcImVzLTQxOVwiLFxyXG4gICAgXCJlcy1CUlwiOiBcImVzLTQxOVwiLFxyXG4gICAgXCJlcy1CWlwiOiBcImVzLTQxOVwiLFxyXG4gICAgXCJlcy1DTFwiOiBcImVzLTQxOVwiLFxyXG4gICAgXCJlcy1DT1wiOiBcImVzLTQxOVwiLFxyXG4gICAgXCJlcy1DUlwiOiBcImVzLTQxOVwiLFxyXG4gICAgXCJlcy1DVVwiOiBcImVzLTQxOVwiLFxyXG4gICAgXCJlcy1ET1wiOiBcImVzLTQxOVwiLFxyXG4gICAgXCJlcy1FQ1wiOiBcImVzLTQxOVwiLFxyXG4gICAgXCJlcy1HVFwiOiBcImVzLTQxOVwiLFxyXG4gICAgXCJlcy1ITlwiOiBcImVzLTQxOVwiLFxyXG4gICAgXCJlcy1NWFwiOiBcImVzLTQxOVwiLFxyXG4gICAgXCJlcy1OSVwiOiBcImVzLTQxOVwiLFxyXG4gICAgXCJlcy1QQVwiOiBcImVzLTQxOVwiLFxyXG4gICAgXCJlcy1QRVwiOiBcImVzLTQxOVwiLFxyXG4gICAgXCJlcy1QUlwiOiBcImVzLTQxOVwiLFxyXG4gICAgXCJlcy1QWVwiOiBcImVzLTQxOVwiLFxyXG4gICAgXCJlcy1TVlwiOiBcImVzLTQxOVwiLFxyXG4gICAgXCJlcy1VU1wiOiBcImVzLTQxOVwiLFxyXG4gICAgXCJlcy1VWVwiOiBcImVzLTQxOVwiLFxyXG4gICAgXCJlcy1WRVwiOiBcImVzLTQxOVwiLFxyXG4gICAgbmI6IFwibm9cIixcclxuICAgIG5uOiBcIm5vXCIsXHJcbiAgICBcInB0LUFPXCI6IFwicHQtUFRcIixcclxuICAgIFwicHQtQ0hcIjogXCJwdC1QVFwiLFxyXG4gICAgXCJwdC1DVlwiOiBcInB0LVBUXCIsXHJcbiAgICBcInB0LUZSXCI6IFwicHQtUFRcIixcclxuICAgIFwicHQtR1FcIjogXCJwdC1QVFwiLFxyXG4gICAgXCJwdC1HV1wiOiBcInB0LVBUXCIsXHJcbiAgICBcInB0LUxVXCI6IFwicHQtUFRcIixcclxuICAgIFwicHQtTU9cIjogXCJwdC1QVFwiLFxyXG4gICAgXCJwdC1NWlwiOiBcInB0LVBUXCIsXHJcbiAgICBcInB0LVNUXCI6IFwicHQtUFRcIixcclxuICAgIFwicHQtVExcIjogXCJwdC1QVFwiLFxyXG4gICAgXCJhei1BcmFiXCI6IFwicm9vdFwiLFxyXG4gICAgXCJhei1DeXJsXCI6IFwicm9vdFwiLFxyXG4gICAgXCJibHQtTGF0blwiOiBcInJvb3RcIixcclxuICAgIFwiYm0tTmtvb1wiOiBcInJvb3RcIixcclxuICAgIFwiYnMtQ3lybFwiOiBcInJvb3RcIixcclxuICAgIFwiYnluLUxhdG5cIjogXCJyb290XCIsXHJcbiAgICBcImN1LUdsYWdcIjogXCJyb290XCIsXHJcbiAgICBcImRqZS1BcmFiXCI6IFwicm9vdFwiLFxyXG4gICAgXCJkeW8tQXJhYlwiOiBcInJvb3RcIixcclxuICAgIFwiZW4tRHNydFwiOiBcInJvb3RcIixcclxuICAgIFwiZW4tU2hhd1wiOiBcInJvb3RcIixcclxuICAgIFwiZmYtQWRsbVwiOiBcInJvb3RcIixcclxuICAgIFwiZmYtQXJhYlwiOiBcInJvb3RcIixcclxuICAgIFwiaGEtQXJhYlwiOiBcInJvb3RcIixcclxuICAgIFwiaGktTGF0blwiOiBcInJvb3RcIixcclxuICAgIFwiaXUtTGF0blwiOiBcInJvb3RcIixcclxuICAgIFwia2stQXJhYlwiOiBcInJvb3RcIixcclxuICAgIFwia3MtRGV2YVwiOiBcInJvb3RcIixcclxuICAgIFwia3UtQXJhYlwiOiBcInJvb3RcIixcclxuICAgIFwia3ktQXJhYlwiOiBcInJvb3RcIixcclxuICAgIFwia3ktTGF0blwiOiBcInJvb3RcIixcclxuICAgIFwibWwtQXJhYlwiOiBcInJvb3RcIixcclxuICAgIFwibW4tTW9uZ1wiOiBcInJvb3RcIixcclxuICAgIFwibW5pLU10ZWlcIjogXCJyb290XCIsXHJcbiAgICBcIm1zLUFyYWJcIjogXCJyb290XCIsXHJcbiAgICBcInBhLUFyYWJcIjogXCJyb290XCIsXHJcbiAgICBcInNhdC1EZXZhXCI6IFwicm9vdFwiLFxyXG4gICAgXCJzZC1EZXZhXCI6IFwicm9vdFwiLFxyXG4gICAgXCJzZC1LaG9qXCI6IFwicm9vdFwiLFxyXG4gICAgXCJzZC1TaW5kXCI6IFwicm9vdFwiLFxyXG4gICAgXCJzaGktTGF0blwiOiBcInJvb3RcIixcclxuICAgIFwic28tQXJhYlwiOiBcInJvb3RcIixcclxuICAgIFwic3ItTGF0blwiOiBcInJvb3RcIixcclxuICAgIFwic3ctQXJhYlwiOiBcInJvb3RcIixcclxuICAgIFwidGctQXJhYlwiOiBcInJvb3RcIixcclxuICAgIFwidWctQ3lybFwiOiBcInJvb3RcIixcclxuICAgIFwidXotQXJhYlwiOiBcInJvb3RcIixcclxuICAgIFwidXotQ3lybFwiOiBcInJvb3RcIixcclxuICAgIFwidmFpLUxhdG5cIjogXCJyb290XCIsXHJcbiAgICBcIndvLUFyYWJcIjogXCJyb290XCIsXHJcbiAgICBcInlvLUFyYWJcIjogXCJyb290XCIsXHJcbiAgICBcInl1ZS1IYW5zXCI6IFwicm9vdFwiLFxyXG4gICAgXCJ6aC1IYW50XCI6IFwicm9vdFwiLFxyXG4gICAgXCJ6aC1IYW50LU1PXCI6IFwiemgtSGFudC1IS1wiXHJcbn07XHJcbiIsIi8qKlxyXG4gKiBEZXZFeHRyZW1lIChlc20vbG9jYWxpemF0aW9uL2NvcmUuanMpXHJcbiAqIFZlcnNpb246IDIxLjEuNFxyXG4gKiBCdWlsZCBkYXRlOiBNb24gSnVuIDIxIDIwMjFcclxuICpcclxuICogQ29weXJpZ2h0IChjKSAyMDEyIC0gMjAyMSBEZXZlbG9wZXIgRXhwcmVzcyBJbmMuIEFMTCBSSUdIVFMgUkVTRVJWRURcclxuICogUmVhZCBhYm91dCBEZXZFeHRyZW1lIGxpY2Vuc2luZyBoZXJlOiBodHRwczovL2pzLmRldmV4cHJlc3MuY29tL0xpY2Vuc2luZy9cclxuICovXHJcbmltcG9ydCBkZXBlbmRlbmN5SW5qZWN0b3IgZnJvbSBcIi4uL2NvcmUvdXRpbHMvZGVwZW5kZW5jeV9pbmplY3RvclwiO1xyXG5pbXBvcnQgcGFyZW50TG9jYWxlcyBmcm9tIFwiLi9jbGRyLWRhdGEvcGFyZW50X2xvY2FsZXNcIjtcclxuaW1wb3J0IGdldFBhcmVudExvY2FsZSBmcm9tIFwiLi9wYXJlbnRMb2NhbGVcIjtcclxudmFyIERFRkFVTFRfTE9DQUxFID0gXCJlblwiO1xyXG5leHBvcnQgZGVmYXVsdCBkZXBlbmRlbmN5SW5qZWN0b3Ioe1xyXG4gICAgbG9jYWxlOiAoKCkgPT4ge1xyXG4gICAgICAgIHZhciBjdXJyZW50TG9jYWxlID0gREVGQVVMVF9MT0NBTEU7XHJcbiAgICAgICAgcmV0dXJuIGxvY2FsZSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghbG9jYWxlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudExvY2FsZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGN1cnJlbnRMb2NhbGUgPSBsb2NhbGVcclxuICAgICAgICB9XHJcbiAgICB9KSgpLFxyXG4gICAgZ2V0VmFsdWVCeUNsb3Nlc3RMb2NhbGU6IGZ1bmN0aW9uKGdldHRlcikge1xyXG4gICAgICAgIHZhciBsb2NhbGUgPSB0aGlzLmxvY2FsZSgpO1xyXG4gICAgICAgIHZhciB2YWx1ZSA9IGdldHRlcihsb2NhbGUpO1xyXG4gICAgICAgIHZhciBpc1Jvb3RMb2NhbGU7XHJcbiAgICAgICAgd2hpbGUgKCF2YWx1ZSAmJiAhaXNSb290TG9jYWxlKSB7XHJcbiAgICAgICAgICAgIGxvY2FsZSA9IGdldFBhcmVudExvY2FsZShwYXJlbnRMb2NhbGVzLCBsb2NhbGUpO1xyXG4gICAgICAgICAgICBpZiAobG9jYWxlKSB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGdldHRlcihsb2NhbGUpXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpc1Jvb3RMb2NhbGUgPSB0cnVlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHZvaWQgMCA9PT0gdmFsdWUgJiYgbG9jYWxlICE9PSBERUZBVUxUX0xPQ0FMRSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZ2V0dGVyKERFRkFVTFRfTE9DQUxFKVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdmFsdWVcclxuICAgIH1cclxufSk7XHJcbiIsIi8qKlxyXG4gKiBEZXZFeHRyZW1lIChlc20vbG9jYWxpemF0aW9uL2N1cnJlbmN5LmpzKVxyXG4gKiBWZXJzaW9uOiAyMS4xLjRcclxuICogQnVpbGQgZGF0ZTogTW9uIEp1biAyMSAyMDIxXHJcbiAqXHJcbiAqIENvcHlyaWdodCAoYykgMjAxMiAtIDIwMjEgRGV2ZWxvcGVyIEV4cHJlc3MgSW5jLiBBTEwgUklHSFRTIFJFU0VSVkVEXHJcbiAqIFJlYWQgYWJvdXQgRGV2RXh0cmVtZSBsaWNlbnNpbmcgaGVyZTogaHR0cHM6Ly9qcy5kZXZleHByZXNzLmNvbS9MaWNlbnNpbmcvXHJcbiAqL1xyXG5pbXBvcnQge1xyXG4gICAgZXh0ZW5kXHJcbn0gZnJvbSBcIi4uL2NvcmUvdXRpbHMvZXh0ZW5kXCI7XHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICAgIF9mb3JtYXROdW1iZXJDb3JlOiBmdW5jdGlvbih2YWx1ZSwgZm9ybWF0LCBmb3JtYXRDb25maWcpIHtcclxuICAgICAgICBpZiAoXCJjdXJyZW5jeVwiID09PSBmb3JtYXQpIHtcclxuICAgICAgICAgICAgZm9ybWF0Q29uZmlnLnByZWNpc2lvbiA9IGZvcm1hdENvbmZpZy5wcmVjaXNpb24gfHwgMDtcclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHRoaXMuZm9ybWF0KHZhbHVlLCBleHRlbmQoe30sIGZvcm1hdENvbmZpZywge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogXCJmaXhlZHBvaW50XCJcclxuICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgICB2YXIgY3VycmVuY3lQYXJ0ID0gdGhpcy5nZXRDdXJyZW5jeVN5bWJvbCgpLnN5bWJvbC5yZXBsYWNlKC9cXCQvZywgXCIkJCQkXCIpO1xyXG4gICAgICAgICAgICByZXN1bHQgPSByZXN1bHQucmVwbGFjZSgvXihcXEQqKShcXGQuKikvLCBcIiQxXCIgKyBjdXJyZW5jeVBhcnQgKyBcIiQyXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLmNhbGxCYXNlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcclxuICAgIH0sXHJcbiAgICBnZXRDdXJyZW5jeVN5bWJvbDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgc3ltYm9sOiBcIiRcIlxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICBnZXRPcGVuWG1sQ3VycmVuY3lGb3JtYXQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBcIiQjLCMjMHswfV8pO1xcXFwoJCMsIyMwezB9XFxcXClcIlxyXG4gICAgfVxyXG59O1xyXG4iLCIvKipcclxuICogRGV2RXh0cmVtZSAoZXNtL2xvY2FsaXphdGlvbi9kZWZhdWx0X21lc3NhZ2VzLmpzKVxyXG4gKiBWZXJzaW9uOiAyMS4xLjRcclxuICogQnVpbGQgZGF0ZTogTW9uIEp1biAyMSAyMDIxXHJcbiAqXHJcbiAqIENvcHlyaWdodCAoYykgMjAxMiAtIDIwMjEgRGV2ZWxvcGVyIEV4cHJlc3MgSW5jLiBBTEwgUklHSFRTIFJFU0VSVkVEXHJcbiAqIFJlYWQgYWJvdXQgRGV2RXh0cmVtZSBsaWNlbnNpbmcgaGVyZTogaHR0cHM6Ly9qcy5kZXZleHByZXNzLmNvbS9MaWNlbnNpbmcvXHJcbiAqL1xyXG5leHBvcnQgdmFyIGRlZmF1bHRNZXNzYWdlcyA9IHtcclxuICAgIGVuOiB7XHJcbiAgICAgICAgWWVzOiBcIlllc1wiLFxyXG4gICAgICAgIE5vOiBcIk5vXCIsXHJcbiAgICAgICAgQ2FuY2VsOiBcIkNhbmNlbFwiLFxyXG4gICAgICAgIENsZWFyOiBcIkNsZWFyXCIsXHJcbiAgICAgICAgRG9uZTogXCJEb25lXCIsXHJcbiAgICAgICAgTG9hZGluZzogXCJMb2FkaW5nLi4uXCIsXHJcbiAgICAgICAgU2VsZWN0OiBcIlNlbGVjdC4uLlwiLFxyXG4gICAgICAgIFNlYXJjaDogXCJTZWFyY2hcIixcclxuICAgICAgICBCYWNrOiBcIkJhY2tcIixcclxuICAgICAgICBPSzogXCJPS1wiLFxyXG4gICAgICAgIFwiZHhDb2xsZWN0aW9uV2lkZ2V0LW5vRGF0YVRleHRcIjogXCJObyBkYXRhIHRvIGRpc3BsYXlcIixcclxuICAgICAgICBcImR4RHJvcERvd25FZGl0b3Itc2VsZWN0TGFiZWxcIjogXCJTZWxlY3RcIixcclxuICAgICAgICBcInZhbGlkYXRpb24tcmVxdWlyZWRcIjogXCJSZXF1aXJlZFwiLFxyXG4gICAgICAgIFwidmFsaWRhdGlvbi1yZXF1aXJlZC1mb3JtYXR0ZWRcIjogXCJ7MH0gaXMgcmVxdWlyZWRcIixcclxuICAgICAgICBcInZhbGlkYXRpb24tbnVtZXJpY1wiOiBcIlZhbHVlIG11c3QgYmUgYSBudW1iZXJcIixcclxuICAgICAgICBcInZhbGlkYXRpb24tbnVtZXJpYy1mb3JtYXR0ZWRcIjogXCJ7MH0gbXVzdCBiZSBhIG51bWJlclwiLFxyXG4gICAgICAgIFwidmFsaWRhdGlvbi1yYW5nZVwiOiBcIlZhbHVlIGlzIG91dCBvZiByYW5nZVwiLFxyXG4gICAgICAgIFwidmFsaWRhdGlvbi1yYW5nZS1mb3JtYXR0ZWRcIjogXCJ7MH0gaXMgb3V0IG9mIHJhbmdlXCIsXHJcbiAgICAgICAgXCJ2YWxpZGF0aW9uLXN0cmluZ0xlbmd0aFwiOiBcIlRoZSBsZW5ndGggb2YgdGhlIHZhbHVlIGlzIG5vdCBjb3JyZWN0XCIsXHJcbiAgICAgICAgXCJ2YWxpZGF0aW9uLXN0cmluZ0xlbmd0aC1mb3JtYXR0ZWRcIjogXCJUaGUgbGVuZ3RoIG9mIHswfSBpcyBub3QgY29ycmVjdFwiLFxyXG4gICAgICAgIFwidmFsaWRhdGlvbi1jdXN0b21cIjogXCJWYWx1ZSBpcyBpbnZhbGlkXCIsXHJcbiAgICAgICAgXCJ2YWxpZGF0aW9uLWN1c3RvbS1mb3JtYXR0ZWRcIjogXCJ7MH0gaXMgaW52YWxpZFwiLFxyXG4gICAgICAgIFwidmFsaWRhdGlvbi1hc3luY1wiOiBcIlZhbHVlIGlzIGludmFsaWRcIixcclxuICAgICAgICBcInZhbGlkYXRpb24tYXN5bmMtZm9ybWF0dGVkXCI6IFwiezB9IGlzIGludmFsaWRcIixcclxuICAgICAgICBcInZhbGlkYXRpb24tY29tcGFyZVwiOiBcIlZhbHVlcyBkbyBub3QgbWF0Y2hcIixcclxuICAgICAgICBcInZhbGlkYXRpb24tY29tcGFyZS1mb3JtYXR0ZWRcIjogXCJ7MH0gZG9lcyBub3QgbWF0Y2hcIixcclxuICAgICAgICBcInZhbGlkYXRpb24tcGF0dGVyblwiOiBcIlZhbHVlIGRvZXMgbm90IG1hdGNoIHBhdHRlcm5cIixcclxuICAgICAgICBcInZhbGlkYXRpb24tcGF0dGVybi1mb3JtYXR0ZWRcIjogXCJ7MH0gZG9lcyBub3QgbWF0Y2ggcGF0dGVyblwiLFxyXG4gICAgICAgIFwidmFsaWRhdGlvbi1lbWFpbFwiOiBcIkVtYWlsIGlzIGludmFsaWRcIixcclxuICAgICAgICBcInZhbGlkYXRpb24tZW1haWwtZm9ybWF0dGVkXCI6IFwiezB9IGlzIGludmFsaWRcIixcclxuICAgICAgICBcInZhbGlkYXRpb24tbWFza1wiOiBcIlZhbHVlIGlzIGludmFsaWRcIixcclxuICAgICAgICBcImR4TG9va3VwLXNlYXJjaFBsYWNlaG9sZGVyXCI6IFwiTWluaW11bSBjaGFyYWN0ZXIgbnVtYmVyOiB7MH1cIixcclxuICAgICAgICBcImR4TGlzdC1wdWxsaW5nRG93blRleHRcIjogXCJQdWxsIGRvd24gdG8gcmVmcmVzaC4uLlwiLFxyXG4gICAgICAgIFwiZHhMaXN0LXB1bGxlZERvd25UZXh0XCI6IFwiUmVsZWFzZSB0byByZWZyZXNoLi4uXCIsXHJcbiAgICAgICAgXCJkeExpc3QtcmVmcmVzaGluZ1RleHRcIjogXCJSZWZyZXNoaW5nLi4uXCIsXHJcbiAgICAgICAgXCJkeExpc3QtcGFnZUxvYWRpbmdUZXh0XCI6IFwiTG9hZGluZy4uLlwiLFxyXG4gICAgICAgIFwiZHhMaXN0LW5leHRCdXR0b25UZXh0XCI6IFwiTW9yZVwiLFxyXG4gICAgICAgIFwiZHhMaXN0LXNlbGVjdEFsbFwiOiBcIlNlbGVjdCBBbGxcIixcclxuICAgICAgICBcImR4TGlzdEVkaXREZWNvcmF0b3ItZGVsZXRlXCI6IFwiRGVsZXRlXCIsXHJcbiAgICAgICAgXCJkeExpc3RFZGl0RGVjb3JhdG9yLW1vcmVcIjogXCJNb3JlXCIsXHJcbiAgICAgICAgXCJkeFNjcm9sbFZpZXctcHVsbGluZ0Rvd25UZXh0XCI6IFwiUHVsbCBkb3duIHRvIHJlZnJlc2guLi5cIixcclxuICAgICAgICBcImR4U2Nyb2xsVmlldy1wdWxsZWREb3duVGV4dFwiOiBcIlJlbGVhc2UgdG8gcmVmcmVzaC4uLlwiLFxyXG4gICAgICAgIFwiZHhTY3JvbGxWaWV3LXJlZnJlc2hpbmdUZXh0XCI6IFwiUmVmcmVzaGluZy4uLlwiLFxyXG4gICAgICAgIFwiZHhTY3JvbGxWaWV3LXJlYWNoQm90dG9tVGV4dFwiOiBcIkxvYWRpbmcuLi5cIixcclxuICAgICAgICBcImR4RGF0ZUJveC1zaW11bGF0ZWREYXRhUGlja2VyVGl0bGVUaW1lXCI6IFwiU2VsZWN0IHRpbWVcIixcclxuICAgICAgICBcImR4RGF0ZUJveC1zaW11bGF0ZWREYXRhUGlja2VyVGl0bGVEYXRlXCI6IFwiU2VsZWN0IGRhdGVcIixcclxuICAgICAgICBcImR4RGF0ZUJveC1zaW11bGF0ZWREYXRhUGlja2VyVGl0bGVEYXRlVGltZVwiOiBcIlNlbGVjdCBkYXRlIGFuZCB0aW1lXCIsXHJcbiAgICAgICAgXCJkeERhdGVCb3gtdmFsaWRhdGlvbi1kYXRldGltZVwiOiBcIlZhbHVlIG11c3QgYmUgYSBkYXRlIG9yIHRpbWVcIixcclxuICAgICAgICBcImR4RmlsZVVwbG9hZGVyLXNlbGVjdEZpbGVcIjogXCJTZWxlY3QgZmlsZVwiLFxyXG4gICAgICAgIFwiZHhGaWxlVXBsb2FkZXItZHJvcEZpbGVcIjogXCJvciBEcm9wIGZpbGUgaGVyZVwiLFxyXG4gICAgICAgIFwiZHhGaWxlVXBsb2FkZXItYnl0ZXNcIjogXCJieXRlc1wiLFxyXG4gICAgICAgIFwiZHhGaWxlVXBsb2FkZXIta2JcIjogXCJrYlwiLFxyXG4gICAgICAgIFwiZHhGaWxlVXBsb2FkZXItTWJcIjogXCJNYlwiLFxyXG4gICAgICAgIFwiZHhGaWxlVXBsb2FkZXItR2JcIjogXCJHYlwiLFxyXG4gICAgICAgIFwiZHhGaWxlVXBsb2FkZXItdXBsb2FkXCI6IFwiVXBsb2FkXCIsXHJcbiAgICAgICAgXCJkeEZpbGVVcGxvYWRlci11cGxvYWRlZFwiOiBcIlVwbG9hZGVkXCIsXHJcbiAgICAgICAgXCJkeEZpbGVVcGxvYWRlci1yZWFkeVRvVXBsb2FkXCI6IFwiUmVhZHkgdG8gdXBsb2FkXCIsXHJcbiAgICAgICAgXCJkeEZpbGVVcGxvYWRlci11cGxvYWRBYm9ydGVkTWVzc2FnZVwiOiBcIlVwbG9hZCBjYW5jZWxsZWRcIixcclxuICAgICAgICBcImR4RmlsZVVwbG9hZGVyLXVwbG9hZEZhaWxlZE1lc3NhZ2VcIjogXCJVcGxvYWQgZmFpbGVkXCIsXHJcbiAgICAgICAgXCJkeEZpbGVVcGxvYWRlci1pbnZhbGlkRmlsZUV4dGVuc2lvblwiOiBcIkZpbGUgdHlwZSBpcyBub3QgYWxsb3dlZFwiLFxyXG4gICAgICAgIFwiZHhGaWxlVXBsb2FkZXItaW52YWxpZE1heEZpbGVTaXplXCI6IFwiRmlsZSBpcyB0b28gbGFyZ2VcIixcclxuICAgICAgICBcImR4RmlsZVVwbG9hZGVyLWludmFsaWRNaW5GaWxlU2l6ZVwiOiBcIkZpbGUgaXMgdG9vIHNtYWxsXCIsXHJcbiAgICAgICAgXCJkeFJhbmdlU2xpZGVyLWFyaWFGcm9tXCI6IFwiRnJvbVwiLFxyXG4gICAgICAgIFwiZHhSYW5nZVNsaWRlci1hcmlhVGlsbFwiOiBcIlRpbGxcIixcclxuICAgICAgICBcImR4U3dpdGNoLXN3aXRjaGVkT25UZXh0XCI6IFwiT05cIixcclxuICAgICAgICBcImR4U3dpdGNoLXN3aXRjaGVkT2ZmVGV4dFwiOiBcIk9GRlwiLFxyXG4gICAgICAgIFwiZHhGb3JtLW9wdGlvbmFsTWFya1wiOiBcIm9wdGlvbmFsXCIsXHJcbiAgICAgICAgXCJkeEZvcm0tcmVxdWlyZWRNZXNzYWdlXCI6IFwiezB9IGlzIHJlcXVpcmVkXCIsXHJcbiAgICAgICAgXCJkeE51bWJlckJveC1pbnZhbGlkVmFsdWVNZXNzYWdlXCI6IFwiVmFsdWUgbXVzdCBiZSBhIG51bWJlclwiLFxyXG4gICAgICAgIFwiZHhOdW1iZXJCb3gtbm9EYXRhVGV4dFwiOiBcIk5vIGRhdGFcIixcclxuICAgICAgICBcImR4RGF0YUdyaWQtY29sdW1uQ2hvb3NlclRpdGxlXCI6IFwiQ29sdW1uIENob29zZXJcIixcclxuICAgICAgICBcImR4RGF0YUdyaWQtY29sdW1uQ2hvb3NlckVtcHR5VGV4dFwiOiBcIkRyYWcgYSBjb2x1bW4gaGVyZSB0byBoaWRlIGl0XCIsXHJcbiAgICAgICAgXCJkeERhdGFHcmlkLWdyb3VwQ29udGludWVzTWVzc2FnZVwiOiBcIkNvbnRpbnVlcyBvbiB0aGUgbmV4dCBwYWdlXCIsXHJcbiAgICAgICAgXCJkeERhdGFHcmlkLWdyb3VwQ29udGludWVkTWVzc2FnZVwiOiBcIkNvbnRpbnVlZCBmcm9tIHRoZSBwcmV2aW91cyBwYWdlXCIsXHJcbiAgICAgICAgXCJkeERhdGFHcmlkLWdyb3VwSGVhZGVyVGV4dFwiOiBcIkdyb3VwIGJ5IFRoaXMgQ29sdW1uXCIsXHJcbiAgICAgICAgXCJkeERhdGFHcmlkLXVuZ3JvdXBIZWFkZXJUZXh0XCI6IFwiVW5ncm91cFwiLFxyXG4gICAgICAgIFwiZHhEYXRhR3JpZC11bmdyb3VwQWxsVGV4dFwiOiBcIlVuZ3JvdXAgQWxsXCIsXHJcbiAgICAgICAgXCJkeERhdGFHcmlkLWVkaXRpbmdFZGl0Um93XCI6IFwiRWRpdFwiLFxyXG4gICAgICAgIFwiZHhEYXRhR3JpZC1lZGl0aW5nU2F2ZVJvd0NoYW5nZXNcIjogXCJTYXZlXCIsXHJcbiAgICAgICAgXCJkeERhdGFHcmlkLWVkaXRpbmdDYW5jZWxSb3dDaGFuZ2VzXCI6IFwiQ2FuY2VsXCIsXHJcbiAgICAgICAgXCJkeERhdGFHcmlkLWVkaXRpbmdEZWxldGVSb3dcIjogXCJEZWxldGVcIixcclxuICAgICAgICBcImR4RGF0YUdyaWQtZWRpdGluZ1VuZGVsZXRlUm93XCI6IFwiVW5kZWxldGVcIixcclxuICAgICAgICBcImR4RGF0YUdyaWQtZWRpdGluZ0NvbmZpcm1EZWxldGVNZXNzYWdlXCI6IFwiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIHJlY29yZD9cIixcclxuICAgICAgICBcImR4RGF0YUdyaWQtdmFsaWRhdGlvbkNhbmNlbENoYW5nZXNcIjogXCJDYW5jZWwgY2hhbmdlc1wiLFxyXG4gICAgICAgIFwiZHhEYXRhR3JpZC1ncm91cFBhbmVsRW1wdHlUZXh0XCI6IFwiRHJhZyBhIGNvbHVtbiBoZWFkZXIgaGVyZSB0byBncm91cCBieSB0aGF0IGNvbHVtblwiLFxyXG4gICAgICAgIFwiZHhEYXRhR3JpZC1ub0RhdGFUZXh0XCI6IFwiTm8gZGF0YVwiLFxyXG4gICAgICAgIFwiZHhEYXRhR3JpZC1zZWFyY2hQYW5lbFBsYWNlaG9sZGVyXCI6IFwiU2VhcmNoLi4uXCIsXHJcbiAgICAgICAgXCJkeERhdGFHcmlkLWZpbHRlclJvd1Nob3dBbGxUZXh0XCI6IFwiKEFsbClcIixcclxuICAgICAgICBcImR4RGF0YUdyaWQtZmlsdGVyUm93UmVzZXRPcGVyYXRpb25UZXh0XCI6IFwiUmVzZXRcIixcclxuICAgICAgICBcImR4RGF0YUdyaWQtZmlsdGVyUm93T3BlcmF0aW9uRXF1YWxzXCI6IFwiRXF1YWxzXCIsXHJcbiAgICAgICAgXCJkeERhdGFHcmlkLWZpbHRlclJvd09wZXJhdGlvbk5vdEVxdWFsc1wiOiBcIkRvZXMgbm90IGVxdWFsXCIsXHJcbiAgICAgICAgXCJkeERhdGFHcmlkLWZpbHRlclJvd09wZXJhdGlvbkxlc3NcIjogXCJMZXNzIHRoYW5cIixcclxuICAgICAgICBcImR4RGF0YUdyaWQtZmlsdGVyUm93T3BlcmF0aW9uTGVzc09yRXF1YWxzXCI6IFwiTGVzcyB0aGFuIG9yIGVxdWFsIHRvXCIsXHJcbiAgICAgICAgXCJkeERhdGFHcmlkLWZpbHRlclJvd09wZXJhdGlvbkdyZWF0ZXJcIjogXCJHcmVhdGVyIHRoYW5cIixcclxuICAgICAgICBcImR4RGF0YUdyaWQtZmlsdGVyUm93T3BlcmF0aW9uR3JlYXRlck9yRXF1YWxzXCI6IFwiR3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvXCIsXHJcbiAgICAgICAgXCJkeERhdGFHcmlkLWZpbHRlclJvd09wZXJhdGlvblN0YXJ0c1dpdGhcIjogXCJTdGFydHMgd2l0aFwiLFxyXG4gICAgICAgIFwiZHhEYXRhR3JpZC1maWx0ZXJSb3dPcGVyYXRpb25Db250YWluc1wiOiBcIkNvbnRhaW5zXCIsXHJcbiAgICAgICAgXCJkeERhdGFHcmlkLWZpbHRlclJvd09wZXJhdGlvbk5vdENvbnRhaW5zXCI6IFwiRG9lcyBub3QgY29udGFpblwiLFxyXG4gICAgICAgIFwiZHhEYXRhR3JpZC1maWx0ZXJSb3dPcGVyYXRpb25FbmRzV2l0aFwiOiBcIkVuZHMgd2l0aFwiLFxyXG4gICAgICAgIFwiZHhEYXRhR3JpZC1maWx0ZXJSb3dPcGVyYXRpb25CZXR3ZWVuXCI6IFwiQmV0d2VlblwiLFxyXG4gICAgICAgIFwiZHhEYXRhR3JpZC1maWx0ZXJSb3dPcGVyYXRpb25CZXR3ZWVuU3RhcnRUZXh0XCI6IFwiU3RhcnRcIixcclxuICAgICAgICBcImR4RGF0YUdyaWQtZmlsdGVyUm93T3BlcmF0aW9uQmV0d2VlbkVuZFRleHRcIjogXCJFbmRcIixcclxuICAgICAgICBcImR4RGF0YUdyaWQtYXBwbHlGaWx0ZXJUZXh0XCI6IFwiQXBwbHkgZmlsdGVyXCIsXHJcbiAgICAgICAgXCJkeERhdGFHcmlkLXRydWVUZXh0XCI6IFwidHJ1ZVwiLFxyXG4gICAgICAgIFwiZHhEYXRhR3JpZC1mYWxzZVRleHRcIjogXCJmYWxzZVwiLFxyXG4gICAgICAgIFwiZHhEYXRhR3JpZC1zb3J0aW5nQXNjZW5kaW5nVGV4dFwiOiBcIlNvcnQgQXNjZW5kaW5nXCIsXHJcbiAgICAgICAgXCJkeERhdGFHcmlkLXNvcnRpbmdEZXNjZW5kaW5nVGV4dFwiOiBcIlNvcnQgRGVzY2VuZGluZ1wiLFxyXG4gICAgICAgIFwiZHhEYXRhR3JpZC1zb3J0aW5nQ2xlYXJUZXh0XCI6IFwiQ2xlYXIgU29ydGluZ1wiLFxyXG4gICAgICAgIFwiZHhEYXRhR3JpZC1lZGl0aW5nU2F2ZUFsbENoYW5nZXNcIjogXCJTYXZlIGNoYW5nZXNcIixcclxuICAgICAgICBcImR4RGF0YUdyaWQtZWRpdGluZ0NhbmNlbEFsbENoYW5nZXNcIjogXCJEaXNjYXJkIGNoYW5nZXNcIixcclxuICAgICAgICBcImR4RGF0YUdyaWQtZWRpdGluZ0FkZFJvd1wiOiBcIkFkZCBhIHJvd1wiLFxyXG4gICAgICAgIFwiZHhEYXRhR3JpZC1zdW1tYXJ5TWluXCI6IFwiTWluOiB7MH1cIixcclxuICAgICAgICBcImR4RGF0YUdyaWQtc3VtbWFyeU1pbk90aGVyQ29sdW1uXCI6IFwiTWluIG9mIHsxfSBpcyB7MH1cIixcclxuICAgICAgICBcImR4RGF0YUdyaWQtc3VtbWFyeU1heFwiOiBcIk1heDogezB9XCIsXHJcbiAgICAgICAgXCJkeERhdGFHcmlkLXN1bW1hcnlNYXhPdGhlckNvbHVtblwiOiBcIk1heCBvZiB7MX0gaXMgezB9XCIsXHJcbiAgICAgICAgXCJkeERhdGFHcmlkLXN1bW1hcnlBdmdcIjogXCJBdmc6IHswfVwiLFxyXG4gICAgICAgIFwiZHhEYXRhR3JpZC1zdW1tYXJ5QXZnT3RoZXJDb2x1bW5cIjogXCJBdmcgb2YgezF9IGlzIHswfVwiLFxyXG4gICAgICAgIFwiZHhEYXRhR3JpZC1zdW1tYXJ5U3VtXCI6IFwiU3VtOiB7MH1cIixcclxuICAgICAgICBcImR4RGF0YUdyaWQtc3VtbWFyeVN1bU90aGVyQ29sdW1uXCI6IFwiU3VtIG9mIHsxfSBpcyB7MH1cIixcclxuICAgICAgICBcImR4RGF0YUdyaWQtc3VtbWFyeUNvdW50XCI6IFwiQ291bnQ6IHswfVwiLFxyXG4gICAgICAgIFwiZHhEYXRhR3JpZC1jb2x1bW5GaXhpbmdGaXhcIjogXCJGaXhcIixcclxuICAgICAgICBcImR4RGF0YUdyaWQtY29sdW1uRml4aW5nVW5maXhcIjogXCJVbmZpeFwiLFxyXG4gICAgICAgIFwiZHhEYXRhR3JpZC1jb2x1bW5GaXhpbmdMZWZ0UG9zaXRpb25cIjogXCJUbyB0aGUgbGVmdFwiLFxyXG4gICAgICAgIFwiZHhEYXRhR3JpZC1jb2x1bW5GaXhpbmdSaWdodFBvc2l0aW9uXCI6IFwiVG8gdGhlIHJpZ2h0XCIsXHJcbiAgICAgICAgXCJkeERhdGFHcmlkLWV4cG9ydFRvXCI6IFwiRXhwb3J0XCIsXHJcbiAgICAgICAgXCJkeERhdGFHcmlkLWV4cG9ydFRvRXhjZWxcIjogXCJFeHBvcnQgdG8gRXhjZWwgZmlsZVwiLFxyXG4gICAgICAgIFwiZHhEYXRhR3JpZC1leHBvcnRpbmdcIjogXCJFeHBvcnRpbmcuLi5cIixcclxuICAgICAgICBcImR4RGF0YUdyaWQtZXhjZWxGb3JtYXRcIjogXCJFeGNlbCBmaWxlXCIsXHJcbiAgICAgICAgXCJkeERhdGFHcmlkLXNlbGVjdGVkUm93c1wiOiBcIlNlbGVjdGVkIHJvd3NcIixcclxuICAgICAgICBcImR4RGF0YUdyaWQtZXhwb3J0U2VsZWN0ZWRSb3dzXCI6IFwiRXhwb3J0IHNlbGVjdGVkIHJvd3NcIixcclxuICAgICAgICBcImR4RGF0YUdyaWQtZXhwb3J0QWxsXCI6IFwiRXhwb3J0IGFsbCBkYXRhXCIsXHJcbiAgICAgICAgXCJkeERhdGFHcmlkLWhlYWRlckZpbHRlckVtcHR5VmFsdWVcIjogXCIoQmxhbmtzKVwiLFxyXG4gICAgICAgIFwiZHhEYXRhR3JpZC1oZWFkZXJGaWx0ZXJPS1wiOiBcIk9LXCIsXHJcbiAgICAgICAgXCJkeERhdGFHcmlkLWhlYWRlckZpbHRlckNhbmNlbFwiOiBcIkNhbmNlbFwiLFxyXG4gICAgICAgIFwiZHhEYXRhR3JpZC1hcmlhQWRhcHRpdmVDb2xsYXBzZVwiOiBcIkhpZGUgYWRkaXRpb25hbCBkYXRhXCIsXHJcbiAgICAgICAgXCJkeERhdGFHcmlkLWFyaWFBZGFwdGl2ZUV4cGFuZFwiOiBcIkRpc3BsYXkgYWRkaXRpb25hbCBkYXRhXCIsXHJcbiAgICAgICAgXCJkeERhdGFHcmlkLWFyaWFDb2x1bW5cIjogXCJDb2x1bW5cIixcclxuICAgICAgICBcImR4RGF0YUdyaWQtYXJpYVZhbHVlXCI6IFwiVmFsdWVcIixcclxuICAgICAgICBcImR4RGF0YUdyaWQtYXJpYUZpbHRlckNlbGxcIjogXCJGaWx0ZXIgY2VsbFwiLFxyXG4gICAgICAgIFwiZHhEYXRhR3JpZC1hcmlhQ29sbGFwc2VcIjogXCJDb2xsYXBzZVwiLFxyXG4gICAgICAgIFwiZHhEYXRhR3JpZC1hcmlhRXhwYW5kXCI6IFwiRXhwYW5kXCIsXHJcbiAgICAgICAgXCJkeERhdGFHcmlkLWFyaWFEYXRhR3JpZFwiOiBcIkRhdGEgZ3JpZFwiLFxyXG4gICAgICAgIFwiZHhEYXRhR3JpZC1hcmlhU2VhcmNoSW5HcmlkXCI6IFwiU2VhcmNoIGluIHRoZSBkYXRhIGdyaWRcIixcclxuICAgICAgICBcImR4RGF0YUdyaWQtYXJpYVNlbGVjdEFsbFwiOiBcIlNlbGVjdCBhbGxcIixcclxuICAgICAgICBcImR4RGF0YUdyaWQtYXJpYVNlbGVjdFJvd1wiOiBcIlNlbGVjdCByb3dcIixcclxuICAgICAgICBcImR4RGF0YUdyaWQtYXJpYVRvb2xiYXJcIjogXCJEYXRhIGdyaWQgdG9vbGJhclwiLFxyXG4gICAgICAgIFwiZHhEYXRhR3JpZC1maWx0ZXJCdWlsZGVyUG9wdXBUaXRsZVwiOiBcIkZpbHRlciBCdWlsZGVyXCIsXHJcbiAgICAgICAgXCJkeERhdGFHcmlkLWZpbHRlclBhbmVsQ3JlYXRlRmlsdGVyXCI6IFwiQ3JlYXRlIEZpbHRlclwiLFxyXG4gICAgICAgIFwiZHhEYXRhR3JpZC1maWx0ZXJQYW5lbENsZWFyRmlsdGVyXCI6IFwiQ2xlYXJcIixcclxuICAgICAgICBcImR4RGF0YUdyaWQtZmlsdGVyUGFuZWxGaWx0ZXJFbmFibGVkSGludFwiOiBcIkVuYWJsZSB0aGUgZmlsdGVyXCIsXHJcbiAgICAgICAgXCJkeFRyZWVMaXN0LWFyaWFUcmVlTGlzdFwiOiBcIlRyZWUgbGlzdFwiLFxyXG4gICAgICAgIFwiZHhUcmVlTGlzdC1hcmlhU2VhcmNoSW5HcmlkXCI6IFwiU2VhcmNoIGluIHRoZSB0cmVlIGxpc3RcIixcclxuICAgICAgICBcImR4VHJlZUxpc3QtYXJpYVRvb2xiYXJcIjogXCJUcmVlIGxpc3QgdG9vbGJhclwiLFxyXG4gICAgICAgIFwiZHhUcmVlTGlzdC1lZGl0aW5nQWRkUm93VG9Ob2RlXCI6IFwiQWRkXCIsXHJcbiAgICAgICAgXCJkeFBhZ2VyLWluZm9UZXh0XCI6IFwiUGFnZSB7MH0gb2YgezF9ICh7Mn0gaXRlbXMpXCIsXHJcbiAgICAgICAgXCJkeFBhZ2VyLXBhZ2VzQ291bnRUZXh0XCI6IFwib2ZcIixcclxuICAgICAgICBcImR4UGFnZXItcGFnZVNpemVzQWxsVGV4dFwiOiBcIkFsbFwiLFxyXG4gICAgICAgIFwiZHhQaXZvdEdyaWQtZ3JhbmRUb3RhbFwiOiBcIkdyYW5kIFRvdGFsXCIsXHJcbiAgICAgICAgXCJkeFBpdm90R3JpZC10b3RhbFwiOiBcInswfSBUb3RhbFwiLFxyXG4gICAgICAgIFwiZHhQaXZvdEdyaWQtZmllbGRDaG9vc2VyVGl0bGVcIjogXCJGaWVsZCBDaG9vc2VyXCIsXHJcbiAgICAgICAgXCJkeFBpdm90R3JpZC1zaG93RmllbGRDaG9vc2VyXCI6IFwiU2hvdyBGaWVsZCBDaG9vc2VyXCIsXHJcbiAgICAgICAgXCJkeFBpdm90R3JpZC1leHBhbmRBbGxcIjogXCJFeHBhbmQgQWxsXCIsXHJcbiAgICAgICAgXCJkeFBpdm90R3JpZC1jb2xsYXBzZUFsbFwiOiBcIkNvbGxhcHNlIEFsbFwiLFxyXG4gICAgICAgIFwiZHhQaXZvdEdyaWQtc29ydENvbHVtbkJ5U3VtbWFyeVwiOiAnU29ydCBcInswfVwiIGJ5IFRoaXMgQ29sdW1uJyxcclxuICAgICAgICBcImR4UGl2b3RHcmlkLXNvcnRSb3dCeVN1bW1hcnlcIjogJ1NvcnQgXCJ7MH1cIiBieSBUaGlzIFJvdycsXHJcbiAgICAgICAgXCJkeFBpdm90R3JpZC1yZW1vdmVBbGxTb3J0aW5nXCI6IFwiUmVtb3ZlIEFsbCBTb3J0aW5nXCIsXHJcbiAgICAgICAgXCJkeFBpdm90R3JpZC1kYXRhTm90QXZhaWxhYmxlXCI6IFwiTi9BXCIsXHJcbiAgICAgICAgXCJkeFBpdm90R3JpZC1yb3dGaWVsZHNcIjogXCJSb3cgRmllbGRzXCIsXHJcbiAgICAgICAgXCJkeFBpdm90R3JpZC1jb2x1bW5GaWVsZHNcIjogXCJDb2x1bW4gRmllbGRzXCIsXHJcbiAgICAgICAgXCJkeFBpdm90R3JpZC1kYXRhRmllbGRzXCI6IFwiRGF0YSBGaWVsZHNcIixcclxuICAgICAgICBcImR4UGl2b3RHcmlkLWZpbHRlckZpZWxkc1wiOiBcIkZpbHRlciBGaWVsZHNcIixcclxuICAgICAgICBcImR4UGl2b3RHcmlkLWFsbEZpZWxkc1wiOiBcIkFsbCBGaWVsZHNcIixcclxuICAgICAgICBcImR4UGl2b3RHcmlkLWNvbHVtbkZpZWxkQXJlYVwiOiBcIkRyb3AgQ29sdW1uIEZpZWxkcyBIZXJlXCIsXHJcbiAgICAgICAgXCJkeFBpdm90R3JpZC1kYXRhRmllbGRBcmVhXCI6IFwiRHJvcCBEYXRhIEZpZWxkcyBIZXJlXCIsXHJcbiAgICAgICAgXCJkeFBpdm90R3JpZC1yb3dGaWVsZEFyZWFcIjogXCJEcm9wIFJvdyBGaWVsZHMgSGVyZVwiLFxyXG4gICAgICAgIFwiZHhQaXZvdEdyaWQtZmlsdGVyRmllbGRBcmVhXCI6IFwiRHJvcCBGaWx0ZXIgRmllbGRzIEhlcmVcIixcclxuICAgICAgICBcImR4U2NoZWR1bGVyLWVkaXRvckxhYmVsVGl0bGVcIjogXCJTdWJqZWN0XCIsXHJcbiAgICAgICAgXCJkeFNjaGVkdWxlci1lZGl0b3JMYWJlbFN0YXJ0RGF0ZVwiOiBcIlN0YXJ0IERhdGVcIixcclxuICAgICAgICBcImR4U2NoZWR1bGVyLWVkaXRvckxhYmVsRW5kRGF0ZVwiOiBcIkVuZCBEYXRlXCIsXHJcbiAgICAgICAgXCJkeFNjaGVkdWxlci1lZGl0b3JMYWJlbERlc2NyaXB0aW9uXCI6IFwiRGVzY3JpcHRpb25cIixcclxuICAgICAgICBcImR4U2NoZWR1bGVyLWVkaXRvckxhYmVsUmVjdXJyZW5jZVwiOiBcIlJlcGVhdFwiLFxyXG4gICAgICAgIFwiZHhTY2hlZHVsZXItb3BlbkFwcG9pbnRtZW50XCI6IFwiT3BlbiBhcHBvaW50bWVudFwiLFxyXG4gICAgICAgIFwiZHhTY2hlZHVsZXItcmVjdXJyZW5jZU5ldmVyXCI6IFwiTmV2ZXJcIixcclxuICAgICAgICBcImR4U2NoZWR1bGVyLXJlY3VycmVuY2VNaW51dGVseVwiOiBcIkV2ZXJ5IG1pbnV0ZVwiLFxyXG4gICAgICAgIFwiZHhTY2hlZHVsZXItcmVjdXJyZW5jZUhvdXJseVwiOiBcIkhvdXJseVwiLFxyXG4gICAgICAgIFwiZHhTY2hlZHVsZXItcmVjdXJyZW5jZURhaWx5XCI6IFwiRGFpbHlcIixcclxuICAgICAgICBcImR4U2NoZWR1bGVyLXJlY3VycmVuY2VXZWVrbHlcIjogXCJXZWVrbHlcIixcclxuICAgICAgICBcImR4U2NoZWR1bGVyLXJlY3VycmVuY2VNb250aGx5XCI6IFwiTW9udGhseVwiLFxyXG4gICAgICAgIFwiZHhTY2hlZHVsZXItcmVjdXJyZW5jZVllYXJseVwiOiBcIlllYXJseVwiLFxyXG4gICAgICAgIFwiZHhTY2hlZHVsZXItcmVjdXJyZW5jZVJlcGVhdEV2ZXJ5XCI6IFwiUmVwZWF0IEV2ZXJ5XCIsXHJcbiAgICAgICAgXCJkeFNjaGVkdWxlci1yZWN1cnJlbmNlUmVwZWF0T25cIjogXCJSZXBlYXQgT25cIixcclxuICAgICAgICBcImR4U2NoZWR1bGVyLXJlY3VycmVuY2VFbmRcIjogXCJFbmQgcmVwZWF0XCIsXHJcbiAgICAgICAgXCJkeFNjaGVkdWxlci1yZWN1cnJlbmNlQWZ0ZXJcIjogXCJBZnRlclwiLFxyXG4gICAgICAgIFwiZHhTY2hlZHVsZXItcmVjdXJyZW5jZU9uXCI6IFwiT25cIixcclxuICAgICAgICBcImR4U2NoZWR1bGVyLXJlY3VycmVuY2VSZXBlYXRNaW51dGVseVwiOiBcIm1pbnV0ZShzKVwiLFxyXG4gICAgICAgIFwiZHhTY2hlZHVsZXItcmVjdXJyZW5jZVJlcGVhdEhvdXJseVwiOiBcImhvdXIocylcIixcclxuICAgICAgICBcImR4U2NoZWR1bGVyLXJlY3VycmVuY2VSZXBlYXREYWlseVwiOiBcImRheShzKVwiLFxyXG4gICAgICAgIFwiZHhTY2hlZHVsZXItcmVjdXJyZW5jZVJlcGVhdFdlZWtseVwiOiBcIndlZWsocylcIixcclxuICAgICAgICBcImR4U2NoZWR1bGVyLXJlY3VycmVuY2VSZXBlYXRNb250aGx5XCI6IFwibW9udGgocylcIixcclxuICAgICAgICBcImR4U2NoZWR1bGVyLXJlY3VycmVuY2VSZXBlYXRZZWFybHlcIjogXCJ5ZWFyKHMpXCIsXHJcbiAgICAgICAgXCJkeFNjaGVkdWxlci1zd2l0Y2hlckRheVwiOiBcIkRheVwiLFxyXG4gICAgICAgIFwiZHhTY2hlZHVsZXItc3dpdGNoZXJXZWVrXCI6IFwiV2Vla1wiLFxyXG4gICAgICAgIFwiZHhTY2hlZHVsZXItc3dpdGNoZXJXb3JrV2Vla1wiOiBcIldvcmsgV2Vla1wiLFxyXG4gICAgICAgIFwiZHhTY2hlZHVsZXItc3dpdGNoZXJNb250aFwiOiBcIk1vbnRoXCIsXHJcbiAgICAgICAgXCJkeFNjaGVkdWxlci1zd2l0Y2hlckFnZW5kYVwiOiBcIkFnZW5kYVwiLFxyXG4gICAgICAgIFwiZHhTY2hlZHVsZXItc3dpdGNoZXJUaW1lbGluZURheVwiOiBcIlRpbWVsaW5lIERheVwiLFxyXG4gICAgICAgIFwiZHhTY2hlZHVsZXItc3dpdGNoZXJUaW1lbGluZVdlZWtcIjogXCJUaW1lbGluZSBXZWVrXCIsXHJcbiAgICAgICAgXCJkeFNjaGVkdWxlci1zd2l0Y2hlclRpbWVsaW5lV29ya1dlZWtcIjogXCJUaW1lbGluZSBXb3JrIFdlZWtcIixcclxuICAgICAgICBcImR4U2NoZWR1bGVyLXN3aXRjaGVyVGltZWxpbmVNb250aFwiOiBcIlRpbWVsaW5lIE1vbnRoXCIsXHJcbiAgICAgICAgXCJkeFNjaGVkdWxlci1yZWN1cnJlbmNlUmVwZWF0T25EYXRlXCI6IFwib24gZGF0ZVwiLFxyXG4gICAgICAgIFwiZHhTY2hlZHVsZXItcmVjdXJyZW5jZVJlcGVhdENvdW50XCI6IFwib2NjdXJyZW5jZShzKVwiLFxyXG4gICAgICAgIFwiZHhTY2hlZHVsZXItYWxsRGF5XCI6IFwiQWxsIGRheVwiLFxyXG4gICAgICAgIFwiZHhTY2hlZHVsZXItY29uZmlybVJlY3VycmVuY2VFZGl0TWVzc2FnZVwiOiBcIkRvIHlvdSB3YW50IHRvIGVkaXQgb25seSB0aGlzIGFwcG9pbnRtZW50IG9yIHRoZSB3aG9sZSBzZXJpZXM/XCIsXHJcbiAgICAgICAgXCJkeFNjaGVkdWxlci1jb25maXJtUmVjdXJyZW5jZURlbGV0ZU1lc3NhZ2VcIjogXCJEbyB5b3Ugd2FudCB0byBkZWxldGUgb25seSB0aGlzIGFwcG9pbnRtZW50IG9yIHRoZSB3aG9sZSBzZXJpZXM/XCIsXHJcbiAgICAgICAgXCJkeFNjaGVkdWxlci1jb25maXJtUmVjdXJyZW5jZUVkaXRTZXJpZXNcIjogXCJFZGl0IHNlcmllc1wiLFxyXG4gICAgICAgIFwiZHhTY2hlZHVsZXItY29uZmlybVJlY3VycmVuY2VEZWxldGVTZXJpZXNcIjogXCJEZWxldGUgc2VyaWVzXCIsXHJcbiAgICAgICAgXCJkeFNjaGVkdWxlci1jb25maXJtUmVjdXJyZW5jZUVkaXRPY2N1cnJlbmNlXCI6IFwiRWRpdCBhcHBvaW50bWVudFwiLFxyXG4gICAgICAgIFwiZHhTY2hlZHVsZXItY29uZmlybVJlY3VycmVuY2VEZWxldGVPY2N1cnJlbmNlXCI6IFwiRGVsZXRlIGFwcG9pbnRtZW50XCIsXHJcbiAgICAgICAgXCJkeFNjaGVkdWxlci1ub1RpbWV6b25lVGl0bGVcIjogXCJObyB0aW1lem9uZVwiLFxyXG4gICAgICAgIFwiZHhTY2hlZHVsZXItbW9yZUFwcG9pbnRtZW50c1wiOiBcInswfSBtb3JlXCIsXHJcbiAgICAgICAgXCJkeENhbGVuZGFyLXRvZGF5QnV0dG9uVGV4dFwiOiBcIlRvZGF5XCIsXHJcbiAgICAgICAgXCJkeENhbGVuZGFyLWFyaWFXaWRnZXROYW1lXCI6IFwiQ2FsZW5kYXJcIixcclxuICAgICAgICBcImR4Q29sb3JWaWV3LWFyaWFSZWRcIjogXCJSZWRcIixcclxuICAgICAgICBcImR4Q29sb3JWaWV3LWFyaWFHcmVlblwiOiBcIkdyZWVuXCIsXHJcbiAgICAgICAgXCJkeENvbG9yVmlldy1hcmlhQmx1ZVwiOiBcIkJsdWVcIixcclxuICAgICAgICBcImR4Q29sb3JWaWV3LWFyaWFBbHBoYVwiOiBcIlRyYW5zcGFyZW5jeVwiLFxyXG4gICAgICAgIFwiZHhDb2xvclZpZXctYXJpYUhleFwiOiBcIkNvbG9yIGNvZGVcIixcclxuICAgICAgICBcImR4VGFnQm94LXNlbGVjdGVkXCI6IFwiezB9IHNlbGVjdGVkXCIsXHJcbiAgICAgICAgXCJkeFRhZ0JveC1hbGxTZWxlY3RlZFwiOiBcIkFsbCBzZWxlY3RlZCAoezB9KVwiLFxyXG4gICAgICAgIFwiZHhUYWdCb3gtbW9yZVNlbGVjdGVkXCI6IFwiezB9IG1vcmVcIixcclxuICAgICAgICBcInZpekV4cG9ydC1wcmludGluZ0J1dHRvblRleHRcIjogXCJQcmludFwiLFxyXG4gICAgICAgIFwidml6RXhwb3J0LXRpdGxlTWVudVRleHRcIjogXCJFeHBvcnRpbmcvUHJpbnRpbmdcIixcclxuICAgICAgICBcInZpekV4cG9ydC1leHBvcnRCdXR0b25UZXh0XCI6IFwiezB9IGZpbGVcIixcclxuICAgICAgICBcImR4RmlsdGVyQnVpbGRlci1hbmRcIjogXCJBbmRcIixcclxuICAgICAgICBcImR4RmlsdGVyQnVpbGRlci1vclwiOiBcIk9yXCIsXHJcbiAgICAgICAgXCJkeEZpbHRlckJ1aWxkZXItbm90QW5kXCI6IFwiTm90IEFuZFwiLFxyXG4gICAgICAgIFwiZHhGaWx0ZXJCdWlsZGVyLW5vdE9yXCI6IFwiTm90IE9yXCIsXHJcbiAgICAgICAgXCJkeEZpbHRlckJ1aWxkZXItYWRkQ29uZGl0aW9uXCI6IFwiQWRkIENvbmRpdGlvblwiLFxyXG4gICAgICAgIFwiZHhGaWx0ZXJCdWlsZGVyLWFkZEdyb3VwXCI6IFwiQWRkIEdyb3VwXCIsXHJcbiAgICAgICAgXCJkeEZpbHRlckJ1aWxkZXItZW50ZXJWYWx1ZVRleHRcIjogXCI8ZW50ZXIgYSB2YWx1ZT5cIixcclxuICAgICAgICBcImR4RmlsdGVyQnVpbGRlci1maWx0ZXJPcGVyYXRpb25FcXVhbHNcIjogXCJFcXVhbHNcIixcclxuICAgICAgICBcImR4RmlsdGVyQnVpbGRlci1maWx0ZXJPcGVyYXRpb25Ob3RFcXVhbHNcIjogXCJEb2VzIG5vdCBlcXVhbFwiLFxyXG4gICAgICAgIFwiZHhGaWx0ZXJCdWlsZGVyLWZpbHRlck9wZXJhdGlvbkxlc3NcIjogXCJJcyBsZXNzIHRoYW5cIixcclxuICAgICAgICBcImR4RmlsdGVyQnVpbGRlci1maWx0ZXJPcGVyYXRpb25MZXNzT3JFcXVhbHNcIjogXCJJcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG9cIixcclxuICAgICAgICBcImR4RmlsdGVyQnVpbGRlci1maWx0ZXJPcGVyYXRpb25HcmVhdGVyXCI6IFwiSXMgZ3JlYXRlciB0aGFuXCIsXHJcbiAgICAgICAgXCJkeEZpbHRlckJ1aWxkZXItZmlsdGVyT3BlcmF0aW9uR3JlYXRlck9yRXF1YWxzXCI6IFwiSXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvXCIsXHJcbiAgICAgICAgXCJkeEZpbHRlckJ1aWxkZXItZmlsdGVyT3BlcmF0aW9uU3RhcnRzV2l0aFwiOiBcIlN0YXJ0cyB3aXRoXCIsXHJcbiAgICAgICAgXCJkeEZpbHRlckJ1aWxkZXItZmlsdGVyT3BlcmF0aW9uQ29udGFpbnNcIjogXCJDb250YWluc1wiLFxyXG4gICAgICAgIFwiZHhGaWx0ZXJCdWlsZGVyLWZpbHRlck9wZXJhdGlvbk5vdENvbnRhaW5zXCI6IFwiRG9lcyBub3QgY29udGFpblwiLFxyXG4gICAgICAgIFwiZHhGaWx0ZXJCdWlsZGVyLWZpbHRlck9wZXJhdGlvbkVuZHNXaXRoXCI6IFwiRW5kcyB3aXRoXCIsXHJcbiAgICAgICAgXCJkeEZpbHRlckJ1aWxkZXItZmlsdGVyT3BlcmF0aW9uSXNCbGFua1wiOiBcIklzIGJsYW5rXCIsXHJcbiAgICAgICAgXCJkeEZpbHRlckJ1aWxkZXItZmlsdGVyT3BlcmF0aW9uSXNOb3RCbGFua1wiOiBcIklzIG5vdCBibGFua1wiLFxyXG4gICAgICAgIFwiZHhGaWx0ZXJCdWlsZGVyLWZpbHRlck9wZXJhdGlvbkJldHdlZW5cIjogXCJJcyBiZXR3ZWVuXCIsXHJcbiAgICAgICAgXCJkeEZpbHRlckJ1aWxkZXItZmlsdGVyT3BlcmF0aW9uQW55T2ZcIjogXCJJcyBhbnkgb2ZcIixcclxuICAgICAgICBcImR4RmlsdGVyQnVpbGRlci1maWx0ZXJPcGVyYXRpb25Ob25lT2ZcIjogXCJJcyBub25lIG9mXCIsXHJcbiAgICAgICAgXCJkeEh0bWxFZGl0b3ItZGlhbG9nQ29sb3JDYXB0aW9uXCI6IFwiQ2hhbmdlIEZvbnQgQ29sb3JcIixcclxuICAgICAgICBcImR4SHRtbEVkaXRvci1kaWFsb2dCYWNrZ3JvdW5kQ2FwdGlvblwiOiBcIkNoYW5nZSBCYWNrZ3JvdW5kIENvbG9yXCIsXHJcbiAgICAgICAgXCJkeEh0bWxFZGl0b3ItZGlhbG9nTGlua0NhcHRpb25cIjogXCJBZGQgTGlua1wiLFxyXG4gICAgICAgIFwiZHhIdG1sRWRpdG9yLWRpYWxvZ0xpbmtVcmxGaWVsZFwiOiBcIlVSTFwiLFxyXG4gICAgICAgIFwiZHhIdG1sRWRpdG9yLWRpYWxvZ0xpbmtUZXh0RmllbGRcIjogXCJUZXh0XCIsXHJcbiAgICAgICAgXCJkeEh0bWxFZGl0b3ItZGlhbG9nTGlua1RhcmdldEZpZWxkXCI6IFwiT3BlbiBsaW5rIGluIG5ldyB3aW5kb3dcIixcclxuICAgICAgICBcImR4SHRtbEVkaXRvci1kaWFsb2dJbWFnZUNhcHRpb25cIjogXCJBZGQgSW1hZ2VcIixcclxuICAgICAgICBcImR4SHRtbEVkaXRvci1kaWFsb2dJbWFnZVVybEZpZWxkXCI6IFwiVVJMXCIsXHJcbiAgICAgICAgXCJkeEh0bWxFZGl0b3ItZGlhbG9nSW1hZ2VBbHRGaWVsZFwiOiBcIkFsdGVybmF0ZSB0ZXh0XCIsXHJcbiAgICAgICAgXCJkeEh0bWxFZGl0b3ItZGlhbG9nSW1hZ2VXaWR0aEZpZWxkXCI6IFwiV2lkdGggKHB4KVwiLFxyXG4gICAgICAgIFwiZHhIdG1sRWRpdG9yLWRpYWxvZ0ltYWdlSGVpZ2h0RmllbGRcIjogXCJIZWlnaHQgKHB4KVwiLFxyXG4gICAgICAgIFwiZHhIdG1sRWRpdG9yLWRpYWxvZ0luc2VydFRhYmxlUm93c0ZpZWxkXCI6IFwiUm93c1wiLFxyXG4gICAgICAgIFwiZHhIdG1sRWRpdG9yLWRpYWxvZ0luc2VydFRhYmxlQ29sdW1uc0ZpZWxkXCI6IFwiQ29sdW1uc1wiLFxyXG4gICAgICAgIFwiZHhIdG1sRWRpdG9yLWRpYWxvZ0luc2VydFRhYmxlQ2FwdGlvblwiOiBcIkluc2VydCBUYWJsZVwiLFxyXG4gICAgICAgIFwiZHhIdG1sRWRpdG9yLWhlYWRpbmdcIjogXCJIZWFkaW5nXCIsXHJcbiAgICAgICAgXCJkeEh0bWxFZGl0b3Itbm9ybWFsVGV4dFwiOiBcIk5vcm1hbCB0ZXh0XCIsXHJcbiAgICAgICAgXCJkeEh0bWxFZGl0b3ItYmFja2dyb3VuZFwiOiBcIkJhY2tncm91bmQgQ29sb3JcIixcclxuICAgICAgICBcImR4SHRtbEVkaXRvci1ib2xkXCI6IFwiQm9sZFwiLFxyXG4gICAgICAgIFwiZHhIdG1sRWRpdG9yLWNvbG9yXCI6IFwiRm9udCBDb2xvclwiLFxyXG4gICAgICAgIFwiZHhIdG1sRWRpdG9yLWZvbnRcIjogXCJGb250XCIsXHJcbiAgICAgICAgXCJkeEh0bWxFZGl0b3ItaXRhbGljXCI6IFwiSXRhbGljXCIsXHJcbiAgICAgICAgXCJkeEh0bWxFZGl0b3ItbGlua1wiOiBcIkFkZCBMaW5rXCIsXHJcbiAgICAgICAgXCJkeEh0bWxFZGl0b3ItaW1hZ2VcIjogXCJBZGQgSW1hZ2VcIixcclxuICAgICAgICBcImR4SHRtbEVkaXRvci1zaXplXCI6IFwiU2l6ZVwiLFxyXG4gICAgICAgIFwiZHhIdG1sRWRpdG9yLXN0cmlrZVwiOiBcIlN0cmlrZXRocm91Z2hcIixcclxuICAgICAgICBcImR4SHRtbEVkaXRvci1zdWJzY3JpcHRcIjogXCJTdWJzY3JpcHRcIixcclxuICAgICAgICBcImR4SHRtbEVkaXRvci1zdXBlcnNjcmlwdFwiOiBcIlN1cGVyc2NyaXB0XCIsXHJcbiAgICAgICAgXCJkeEh0bWxFZGl0b3ItdW5kZXJsaW5lXCI6IFwiVW5kZXJsaW5lXCIsXHJcbiAgICAgICAgXCJkeEh0bWxFZGl0b3ItYmxvY2txdW90ZVwiOiBcIkJsb2NrcXVvdGVcIixcclxuICAgICAgICBcImR4SHRtbEVkaXRvci1oZWFkZXJcIjogXCJIZWFkZXJcIixcclxuICAgICAgICBcImR4SHRtbEVkaXRvci1pbmNyZWFzZUluZGVudFwiOiBcIkluY3JlYXNlIEluZGVudFwiLFxyXG4gICAgICAgIFwiZHhIdG1sRWRpdG9yLWRlY3JlYXNlSW5kZW50XCI6IFwiRGVjcmVhc2UgSW5kZW50XCIsXHJcbiAgICAgICAgXCJkeEh0bWxFZGl0b3Itb3JkZXJlZExpc3RcIjogXCJPcmRlcmVkIExpc3RcIixcclxuICAgICAgICBcImR4SHRtbEVkaXRvci1idWxsZXRMaXN0XCI6IFwiQnVsbGV0IExpc3RcIixcclxuICAgICAgICBcImR4SHRtbEVkaXRvci1hbGlnbkxlZnRcIjogXCJBbGlnbiBMZWZ0XCIsXHJcbiAgICAgICAgXCJkeEh0bWxFZGl0b3ItYWxpZ25DZW50ZXJcIjogXCJBbGlnbiBDZW50ZXJcIixcclxuICAgICAgICBcImR4SHRtbEVkaXRvci1hbGlnblJpZ2h0XCI6IFwiQWxpZ24gUmlnaHRcIixcclxuICAgICAgICBcImR4SHRtbEVkaXRvci1hbGlnbkp1c3RpZnlcIjogXCJBbGlnbiBKdXN0aWZ5XCIsXHJcbiAgICAgICAgXCJkeEh0bWxFZGl0b3ItY29kZUJsb2NrXCI6IFwiQ29kZSBCbG9ja1wiLFxyXG4gICAgICAgIFwiZHhIdG1sRWRpdG9yLXZhcmlhYmxlXCI6IFwiQWRkIFZhcmlhYmxlXCIsXHJcbiAgICAgICAgXCJkeEh0bWxFZGl0b3ItdW5kb1wiOiBcIlVuZG9cIixcclxuICAgICAgICBcImR4SHRtbEVkaXRvci1yZWRvXCI6IFwiUmVkb1wiLFxyXG4gICAgICAgIFwiZHhIdG1sRWRpdG9yLWNsZWFyXCI6IFwiQ2xlYXIgRm9ybWF0dGluZ1wiLFxyXG4gICAgICAgIFwiZHhIdG1sRWRpdG9yLWluc2VydFRhYmxlXCI6IFwiSW5zZXJ0IFRhYmxlXCIsXHJcbiAgICAgICAgXCJkeEh0bWxFZGl0b3ItaW5zZXJ0Um93QWJvdmVcIjogXCJJbnNlcnQgUm93IEFib3ZlXCIsXHJcbiAgICAgICAgXCJkeEh0bWxFZGl0b3ItaW5zZXJ0Um93QmVsb3dcIjogXCJJbnNlcnQgUm93IEJlbG93XCIsXHJcbiAgICAgICAgXCJkeEh0bWxFZGl0b3ItaW5zZXJ0Q29sdW1uTGVmdFwiOiBcIkluc2VydCBDb2x1bW4gTGVmdFwiLFxyXG4gICAgICAgIFwiZHhIdG1sRWRpdG9yLWluc2VydENvbHVtblJpZ2h0XCI6IFwiSW5zZXJ0IENvbHVtbiBSaWdodFwiLFxyXG4gICAgICAgIFwiZHhIdG1sRWRpdG9yLWRlbGV0ZUNvbHVtblwiOiBcIkRlbGV0ZSBDb2x1bW5cIixcclxuICAgICAgICBcImR4SHRtbEVkaXRvci1kZWxldGVSb3dcIjogXCJEZWxldGUgUm93XCIsXHJcbiAgICAgICAgXCJkeEh0bWxFZGl0b3ItZGVsZXRlVGFibGVcIjogXCJEZWxldGUgVGFibGVcIixcclxuICAgICAgICBcImR4SHRtbEVkaXRvci1saXN0XCI6IFwiTGlzdFwiLFxyXG4gICAgICAgIFwiZHhIdG1sRWRpdG9yLW9yZGVyZWRcIjogXCJPcmRlcmVkXCIsXHJcbiAgICAgICAgXCJkeEh0bWxFZGl0b3ItYnVsbGV0XCI6IFwiQnVsbGV0XCIsXHJcbiAgICAgICAgXCJkeEh0bWxFZGl0b3ItYWxpZ25cIjogXCJBbGlnblwiLFxyXG4gICAgICAgIFwiZHhIdG1sRWRpdG9yLWNlbnRlclwiOiBcIkNlbnRlclwiLFxyXG4gICAgICAgIFwiZHhIdG1sRWRpdG9yLWxlZnRcIjogXCJMZWZ0XCIsXHJcbiAgICAgICAgXCJkeEh0bWxFZGl0b3ItcmlnaHRcIjogXCJSaWdodFwiLFxyXG4gICAgICAgIFwiZHhIdG1sRWRpdG9yLWluZGVudFwiOiBcIkluZGVudFwiLFxyXG4gICAgICAgIFwiZHhIdG1sRWRpdG9yLWp1c3RpZnlcIjogXCJKdXN0aWZ5XCIsXHJcbiAgICAgICAgXCJkeEZpbGVNYW5hZ2VyLW5ld0RpcmVjdG9yeU5hbWVcIjogXCJVbnRpdGxlZCBkaXJlY3RvcnlcIixcclxuICAgICAgICBcImR4RmlsZU1hbmFnZXItcm9vdERpcmVjdG9yeU5hbWVcIjogXCJGaWxlc1wiLFxyXG4gICAgICAgIFwiZHhGaWxlTWFuYWdlci1lcnJvck5vQWNjZXNzXCI6IFwiQWNjZXNzIERlbmllZC4gT3BlcmF0aW9uIGNvdWxkIG5vdCBiZSBjb21wbGV0ZWQuXCIsXHJcbiAgICAgICAgXCJkeEZpbGVNYW5hZ2VyLWVycm9yRGlyZWN0b3J5RXhpc3RzRm9ybWF0XCI6IFwiRGlyZWN0b3J5ICd7MH0nIGFscmVhZHkgZXhpc3RzLlwiLFxyXG4gICAgICAgIFwiZHhGaWxlTWFuYWdlci1lcnJvckZpbGVFeGlzdHNGb3JtYXRcIjogXCJGaWxlICd7MH0nIGFscmVhZHkgZXhpc3RzLlwiLFxyXG4gICAgICAgIFwiZHhGaWxlTWFuYWdlci1lcnJvckZpbGVOb3RGb3VuZEZvcm1hdFwiOiBcIkZpbGUgJ3swfScgbm90IGZvdW5kLlwiLFxyXG4gICAgICAgIFwiZHhGaWxlTWFuYWdlci1lcnJvckRpcmVjdG9yeU5vdEZvdW5kRm9ybWF0XCI6IFwiRGlyZWN0b3J5ICd7MH0nIG5vdCBmb3VuZC5cIixcclxuICAgICAgICBcImR4RmlsZU1hbmFnZXItZXJyb3JXcm9uZ0ZpbGVFeHRlbnNpb25cIjogXCJGaWxlIGV4dGVuc2lvbiBpcyBub3QgYWxsb3dlZC5cIixcclxuICAgICAgICBcImR4RmlsZU1hbmFnZXItZXJyb3JNYXhGaWxlU2l6ZUV4Y2VlZGVkXCI6IFwiRmlsZSBzaXplIGV4Y2VlZHMgdGhlIG1heGltdW0gYWxsb3dlZCBzaXplLlwiLFxyXG4gICAgICAgIFwiZHhGaWxlTWFuYWdlci1lcnJvckludmFsaWRTeW1ib2xzXCI6IFwiVGhpcyBuYW1lIGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVycy5cIixcclxuICAgICAgICBcImR4RmlsZU1hbmFnZXItZXJyb3JEZWZhdWx0XCI6IFwiVW5zcGVjaWZpZWQgZXJyb3IuXCIsXHJcbiAgICAgICAgXCJkeEZpbGVNYW5hZ2VyLWVycm9yRGlyZWN0b3J5T3BlbkZhaWxlZFwiOiBcIlRoZSBkaXJlY3RvcnkgY2Fubm90IGJlIG9wZW5lZFwiLFxyXG4gICAgICAgIFwiZHhGaWxlTWFuYWdlci1jb21tYW5kQ3JlYXRlXCI6IFwiTmV3IGRpcmVjdG9yeVwiLFxyXG4gICAgICAgIFwiZHhGaWxlTWFuYWdlci1jb21tYW5kUmVuYW1lXCI6IFwiUmVuYW1lXCIsXHJcbiAgICAgICAgXCJkeEZpbGVNYW5hZ2VyLWNvbW1hbmRNb3ZlXCI6IFwiTW92ZSB0b1wiLFxyXG4gICAgICAgIFwiZHhGaWxlTWFuYWdlci1jb21tYW5kQ29weVwiOiBcIkNvcHkgdG9cIixcclxuICAgICAgICBcImR4RmlsZU1hbmFnZXItY29tbWFuZERlbGV0ZVwiOiBcIkRlbGV0ZVwiLFxyXG4gICAgICAgIFwiZHhGaWxlTWFuYWdlci1jb21tYW5kRG93bmxvYWRcIjogXCJEb3dubG9hZFwiLFxyXG4gICAgICAgIFwiZHhGaWxlTWFuYWdlci1jb21tYW5kVXBsb2FkXCI6IFwiVXBsb2FkIGZpbGVzXCIsXHJcbiAgICAgICAgXCJkeEZpbGVNYW5hZ2VyLWNvbW1hbmRSZWZyZXNoXCI6IFwiUmVmcmVzaFwiLFxyXG4gICAgICAgIFwiZHhGaWxlTWFuYWdlci1jb21tYW5kVGh1bWJuYWlsc1wiOiBcIlRodW1ibmFpbHMgVmlld1wiLFxyXG4gICAgICAgIFwiZHhGaWxlTWFuYWdlci1jb21tYW5kRGV0YWlsc1wiOiBcIkRldGFpbHMgVmlld1wiLFxyXG4gICAgICAgIFwiZHhGaWxlTWFuYWdlci1jb21tYW5kQ2xlYXJTZWxlY3Rpb25cIjogXCJDbGVhciBzZWxlY3Rpb25cIixcclxuICAgICAgICBcImR4RmlsZU1hbmFnZXItY29tbWFuZFNob3dOYXZQYW5lXCI6IFwiVG9nZ2xlIG5hdmlnYXRpb24gcGFuZVwiLFxyXG4gICAgICAgIFwiZHhGaWxlTWFuYWdlci1kaWFsb2dEaXJlY3RvcnlDaG9vc2VyTW92ZVRpdGxlXCI6IFwiTW92ZSB0b1wiLFxyXG4gICAgICAgIFwiZHhGaWxlTWFuYWdlci1kaWFsb2dEaXJlY3RvcnlDaG9vc2VyTW92ZUJ1dHRvblRleHRcIjogXCJNb3ZlXCIsXHJcbiAgICAgICAgXCJkeEZpbGVNYW5hZ2VyLWRpYWxvZ0RpcmVjdG9yeUNob29zZXJDb3B5VGl0bGVcIjogXCJDb3B5IHRvXCIsXHJcbiAgICAgICAgXCJkeEZpbGVNYW5hZ2VyLWRpYWxvZ0RpcmVjdG9yeUNob29zZXJDb3B5QnV0dG9uVGV4dFwiOiBcIkNvcHlcIixcclxuICAgICAgICBcImR4RmlsZU1hbmFnZXItZGlhbG9nUmVuYW1lSXRlbVRpdGxlXCI6IFwiUmVuYW1lXCIsXHJcbiAgICAgICAgXCJkeEZpbGVNYW5hZ2VyLWRpYWxvZ1JlbmFtZUl0ZW1CdXR0b25UZXh0XCI6IFwiU2F2ZVwiLFxyXG4gICAgICAgIFwiZHhGaWxlTWFuYWdlci1kaWFsb2dDcmVhdGVEaXJlY3RvcnlUaXRsZVwiOiBcIk5ldyBkaXJlY3RvcnlcIixcclxuICAgICAgICBcImR4RmlsZU1hbmFnZXItZGlhbG9nQ3JlYXRlRGlyZWN0b3J5QnV0dG9uVGV4dFwiOiBcIkNyZWF0ZVwiLFxyXG4gICAgICAgIFwiZHhGaWxlTWFuYWdlci1kaWFsb2dEZWxldGVJdGVtVGl0bGVcIjogXCJEZWxldGVcIixcclxuICAgICAgICBcImR4RmlsZU1hbmFnZXItZGlhbG9nRGVsZXRlSXRlbUJ1dHRvblRleHRcIjogXCJEZWxldGVcIixcclxuICAgICAgICBcImR4RmlsZU1hbmFnZXItZGlhbG9nRGVsZXRlSXRlbVNpbmdsZUl0ZW1Db25maXJtYXRpb25cIjogXCJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHswfT9cIixcclxuICAgICAgICBcImR4RmlsZU1hbmFnZXItZGlhbG9nRGVsZXRlSXRlbU11bHRpcGxlSXRlbXNDb25maXJtYXRpb25cIjogXCJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHswfSBpdGVtcz9cIixcclxuICAgICAgICBcImR4RmlsZU1hbmFnZXItZGlhbG9nQnV0dG9uQ2FuY2VsXCI6IFwiQ2FuY2VsXCIsXHJcbiAgICAgICAgXCJkeEZpbGVNYW5hZ2VyLWVkaXRpbmdDcmVhdGVTaW5nbGVJdGVtUHJvY2Vzc2luZ01lc3NhZ2VcIjogXCJDcmVhdGluZyBhIGRpcmVjdG9yeSBpbnNpZGUgezB9XCIsXHJcbiAgICAgICAgXCJkeEZpbGVNYW5hZ2VyLWVkaXRpbmdDcmVhdGVTaW5nbGVJdGVtU3VjY2Vzc01lc3NhZ2VcIjogXCJDcmVhdGVkIGEgZGlyZWN0b3J5IGluc2lkZSB7MH1cIixcclxuICAgICAgICBcImR4RmlsZU1hbmFnZXItZWRpdGluZ0NyZWF0ZVNpbmdsZUl0ZW1FcnJvck1lc3NhZ2VcIjogXCJEaXJlY3Rvcnkgd2FzIG5vdCBjcmVhdGVkXCIsXHJcbiAgICAgICAgXCJkeEZpbGVNYW5hZ2VyLWVkaXRpbmdDcmVhdGVDb21tb25FcnJvck1lc3NhZ2VcIjogXCJEaXJlY3Rvcnkgd2FzIG5vdCBjcmVhdGVkXCIsXHJcbiAgICAgICAgXCJkeEZpbGVNYW5hZ2VyLWVkaXRpbmdSZW5hbWVTaW5nbGVJdGVtUHJvY2Vzc2luZ01lc3NhZ2VcIjogXCJSZW5hbWluZyBhbiBpdGVtIGluc2lkZSB7MH1cIixcclxuICAgICAgICBcImR4RmlsZU1hbmFnZXItZWRpdGluZ1JlbmFtZVNpbmdsZUl0ZW1TdWNjZXNzTWVzc2FnZVwiOiBcIlJlbmFtZWQgYW4gaXRlbSBpbnNpZGUgezB9XCIsXHJcbiAgICAgICAgXCJkeEZpbGVNYW5hZ2VyLWVkaXRpbmdSZW5hbWVTaW5nbGVJdGVtRXJyb3JNZXNzYWdlXCI6IFwiSXRlbSB3YXMgbm90IHJlbmFtZWRcIixcclxuICAgICAgICBcImR4RmlsZU1hbmFnZXItZWRpdGluZ1JlbmFtZUNvbW1vbkVycm9yTWVzc2FnZVwiOiBcIkl0ZW0gd2FzIG5vdCByZW5hbWVkXCIsXHJcbiAgICAgICAgXCJkeEZpbGVNYW5hZ2VyLWVkaXRpbmdEZWxldGVTaW5nbGVJdGVtUHJvY2Vzc2luZ01lc3NhZ2VcIjogXCJEZWxldGluZyBhbiBpdGVtIGZyb20gezB9XCIsXHJcbiAgICAgICAgXCJkeEZpbGVNYW5hZ2VyLWVkaXRpbmdEZWxldGVNdWx0aXBsZUl0ZW1zUHJvY2Vzc2luZ01lc3NhZ2VcIjogXCJEZWxldGluZyB7MH0gaXRlbXMgZnJvbSB7MX1cIixcclxuICAgICAgICBcImR4RmlsZU1hbmFnZXItZWRpdGluZ0RlbGV0ZVNpbmdsZUl0ZW1TdWNjZXNzTWVzc2FnZVwiOiBcIkRlbGV0ZWQgYW4gaXRlbSBmcm9tIHswfVwiLFxyXG4gICAgICAgIFwiZHhGaWxlTWFuYWdlci1lZGl0aW5nRGVsZXRlTXVsdGlwbGVJdGVtc1N1Y2Nlc3NNZXNzYWdlXCI6IFwiRGVsZXRlZCB7MH0gaXRlbXMgZnJvbSB7MX1cIixcclxuICAgICAgICBcImR4RmlsZU1hbmFnZXItZWRpdGluZ0RlbGV0ZVNpbmdsZUl0ZW1FcnJvck1lc3NhZ2VcIjogXCJJdGVtIHdhcyBub3QgZGVsZXRlZFwiLFxyXG4gICAgICAgIFwiZHhGaWxlTWFuYWdlci1lZGl0aW5nRGVsZXRlTXVsdGlwbGVJdGVtc0Vycm9yTWVzc2FnZVwiOiBcInswfSBpdGVtcyB3ZXJlIG5vdCBkZWxldGVkXCIsXHJcbiAgICAgICAgXCJkeEZpbGVNYW5hZ2VyLWVkaXRpbmdEZWxldGVDb21tb25FcnJvck1lc3NhZ2VcIjogXCJTb21lIGl0ZW1zIHdlcmUgbm90IGRlbGV0ZWRcIixcclxuICAgICAgICBcImR4RmlsZU1hbmFnZXItZWRpdGluZ01vdmVTaW5nbGVJdGVtUHJvY2Vzc2luZ01lc3NhZ2VcIjogXCJNb3ZpbmcgYW4gaXRlbSB0byB7MH1cIixcclxuICAgICAgICBcImR4RmlsZU1hbmFnZXItZWRpdGluZ01vdmVNdWx0aXBsZUl0ZW1zUHJvY2Vzc2luZ01lc3NhZ2VcIjogXCJNb3ZpbmcgezB9IGl0ZW1zIHRvIHsxfVwiLFxyXG4gICAgICAgIFwiZHhGaWxlTWFuYWdlci1lZGl0aW5nTW92ZVNpbmdsZUl0ZW1TdWNjZXNzTWVzc2FnZVwiOiBcIk1vdmVkIGFuIGl0ZW0gdG8gezB9XCIsXHJcbiAgICAgICAgXCJkeEZpbGVNYW5hZ2VyLWVkaXRpbmdNb3ZlTXVsdGlwbGVJdGVtc1N1Y2Nlc3NNZXNzYWdlXCI6IFwiTW92ZWQgezB9IGl0ZW1zIHRvIHsxfVwiLFxyXG4gICAgICAgIFwiZHhGaWxlTWFuYWdlci1lZGl0aW5nTW92ZVNpbmdsZUl0ZW1FcnJvck1lc3NhZ2VcIjogXCJJdGVtIHdhcyBub3QgbW92ZWRcIixcclxuICAgICAgICBcImR4RmlsZU1hbmFnZXItZWRpdGluZ01vdmVNdWx0aXBsZUl0ZW1zRXJyb3JNZXNzYWdlXCI6IFwiezB9IGl0ZW1zIHdlcmUgbm90IG1vdmVkXCIsXHJcbiAgICAgICAgXCJkeEZpbGVNYW5hZ2VyLWVkaXRpbmdNb3ZlQ29tbW9uRXJyb3JNZXNzYWdlXCI6IFwiU29tZSBpdGVtcyB3ZXJlIG5vdCBtb3ZlZFwiLFxyXG4gICAgICAgIFwiZHhGaWxlTWFuYWdlci1lZGl0aW5nQ29weVNpbmdsZUl0ZW1Qcm9jZXNzaW5nTWVzc2FnZVwiOiBcIkNvcHlpbmcgYW4gaXRlbSB0byB7MH1cIixcclxuICAgICAgICBcImR4RmlsZU1hbmFnZXItZWRpdGluZ0NvcHlNdWx0aXBsZUl0ZW1zUHJvY2Vzc2luZ01lc3NhZ2VcIjogXCJDb3B5aW5nIHswfSBpdGVtcyB0byB7MX1cIixcclxuICAgICAgICBcImR4RmlsZU1hbmFnZXItZWRpdGluZ0NvcHlTaW5nbGVJdGVtU3VjY2Vzc01lc3NhZ2VcIjogXCJDb3BpZWQgYW4gaXRlbSB0byB7MH1cIixcclxuICAgICAgICBcImR4RmlsZU1hbmFnZXItZWRpdGluZ0NvcHlNdWx0aXBsZUl0ZW1zU3VjY2Vzc01lc3NhZ2VcIjogXCJDb3BpZWQgezB9IGl0ZW1zIHRvIHsxfVwiLFxyXG4gICAgICAgIFwiZHhGaWxlTWFuYWdlci1lZGl0aW5nQ29weVNpbmdsZUl0ZW1FcnJvck1lc3NhZ2VcIjogXCJJdGVtIHdhcyBub3QgY29waWVkXCIsXHJcbiAgICAgICAgXCJkeEZpbGVNYW5hZ2VyLWVkaXRpbmdDb3B5TXVsdGlwbGVJdGVtc0Vycm9yTWVzc2FnZVwiOiBcInswfSBpdGVtcyB3ZXJlIG5vdCBjb3BpZWRcIixcclxuICAgICAgICBcImR4RmlsZU1hbmFnZXItZWRpdGluZ0NvcHlDb21tb25FcnJvck1lc3NhZ2VcIjogXCJTb21lIGl0ZW1zIHdlcmUgbm90IGNvcGllZFwiLFxyXG4gICAgICAgIFwiZHhGaWxlTWFuYWdlci1lZGl0aW5nVXBsb2FkU2luZ2xlSXRlbVByb2Nlc3NpbmdNZXNzYWdlXCI6IFwiVXBsb2FkaW5nIGFuIGl0ZW0gdG8gezB9XCIsXHJcbiAgICAgICAgXCJkeEZpbGVNYW5hZ2VyLWVkaXRpbmdVcGxvYWRNdWx0aXBsZUl0ZW1zUHJvY2Vzc2luZ01lc3NhZ2VcIjogXCJVcGxvYWRpbmcgezB9IGl0ZW1zIHRvIHsxfVwiLFxyXG4gICAgICAgIFwiZHhGaWxlTWFuYWdlci1lZGl0aW5nVXBsb2FkU2luZ2xlSXRlbVN1Y2Nlc3NNZXNzYWdlXCI6IFwiVXBsb2FkZWQgYW4gaXRlbSB0byB7MH1cIixcclxuICAgICAgICBcImR4RmlsZU1hbmFnZXItZWRpdGluZ1VwbG9hZE11bHRpcGxlSXRlbXNTdWNjZXNzTWVzc2FnZVwiOiBcIlVwbG9hZGVkIHswfSBpdGVtcyB0byB7MX1cIixcclxuICAgICAgICBcImR4RmlsZU1hbmFnZXItZWRpdGluZ1VwbG9hZFNpbmdsZUl0ZW1FcnJvck1lc3NhZ2VcIjogXCJJdGVtIHdhcyBub3QgdXBsb2FkZWRcIixcclxuICAgICAgICBcImR4RmlsZU1hbmFnZXItZWRpdGluZ1VwbG9hZE11bHRpcGxlSXRlbXNFcnJvck1lc3NhZ2VcIjogXCJ7MH0gaXRlbXMgd2VyZSBub3QgdXBsb2FkZWRcIixcclxuICAgICAgICBcImR4RmlsZU1hbmFnZXItZWRpdGluZ1VwbG9hZENhbmNlbGVkTWVzc2FnZVwiOiBcIkNhbmNlbGVkXCIsXHJcbiAgICAgICAgXCJkeEZpbGVNYW5hZ2VyLWxpc3REZXRhaWxzQ29sdW1uQ2FwdGlvbk5hbWVcIjogXCJOYW1lXCIsXHJcbiAgICAgICAgXCJkeEZpbGVNYW5hZ2VyLWxpc3REZXRhaWxzQ29sdW1uQ2FwdGlvbkRhdGVNb2RpZmllZFwiOiBcIkRhdGUgTW9kaWZpZWRcIixcclxuICAgICAgICBcImR4RmlsZU1hbmFnZXItbGlzdERldGFpbHNDb2x1bW5DYXB0aW9uRmlsZVNpemVcIjogXCJGaWxlIFNpemVcIixcclxuICAgICAgICBcImR4RmlsZU1hbmFnZXItbGlzdFRodW1ibmFpbHNUb29sdGlwVGV4dFNpemVcIjogXCJTaXplXCIsXHJcbiAgICAgICAgXCJkeEZpbGVNYW5hZ2VyLWxpc3RUaHVtYm5haWxzVG9vbHRpcFRleHREYXRlTW9kaWZpZWRcIjogXCJEYXRlIE1vZGlmaWVkXCIsXHJcbiAgICAgICAgXCJkeEZpbGVNYW5hZ2VyLW5vdGlmaWNhdGlvblByb2dyZXNzUGFuZWxUaXRsZVwiOiBcIlByb2dyZXNzXCIsXHJcbiAgICAgICAgXCJkeEZpbGVNYW5hZ2VyLW5vdGlmaWNhdGlvblByb2dyZXNzUGFuZWxFbXB0eUxpc3RUZXh0XCI6IFwiTm8gb3BlcmF0aW9uc1wiLFxyXG4gICAgICAgIFwiZHhGaWxlTWFuYWdlci1ub3RpZmljYXRpb25Qcm9ncmVzc1BhbmVsT3BlcmF0aW9uQ2FuY2VsZWRcIjogXCJDYW5jZWxlZFwiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLWNhdGVnb3J5R2VuZXJhbFwiOiBcIkdlbmVyYWxcIixcclxuICAgICAgICBcImR4RGlhZ3JhbS1jYXRlZ29yeUZsb3djaGFydFwiOiBcIkZsb3djaGFydFwiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLWNhdGVnb3J5T3JnQ2hhcnRcIjogXCJPcmcgQ2hhcnRcIixcclxuICAgICAgICBcImR4RGlhZ3JhbS1jYXRlZ29yeUNvbnRhaW5lcnNcIjogXCJDb250YWluZXJzXCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tY2F0ZWdvcnlDdXN0b21cIjogXCJDdXN0b21cIixcclxuICAgICAgICBcImR4RGlhZ3JhbS1jb21tYW5kRXhwb3J0VG9TdmdcIjogXCJFeHBvcnQgdG8gU1ZHXCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tY29tbWFuZEV4cG9ydFRvUG5nXCI6IFwiRXhwb3J0IHRvIFBOR1wiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLWNvbW1hbmRFeHBvcnRUb0pwZ1wiOiBcIkV4cG9ydCB0byBKUEVHXCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tY29tbWFuZFVuZG9cIjogXCJVbmRvXCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tY29tbWFuZFJlZG9cIjogXCJSZWRvXCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tY29tbWFuZEZvbnROYW1lXCI6IFwiRm9udCBOYW1lXCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tY29tbWFuZEZvbnRTaXplXCI6IFwiRm9udCBTaXplXCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tY29tbWFuZEJvbGRcIjogXCJCb2xkXCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tY29tbWFuZEl0YWxpY1wiOiBcIkl0YWxpY1wiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLWNvbW1hbmRVbmRlcmxpbmVcIjogXCJVbmRlcmxpbmVcIixcclxuICAgICAgICBcImR4RGlhZ3JhbS1jb21tYW5kVGV4dENvbG9yXCI6IFwiRm9udCBDb2xvclwiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLWNvbW1hbmRMaW5lQ29sb3JcIjogXCJMaW5lIENvbG9yXCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tY29tbWFuZExpbmVXaWR0aFwiOiBcIkxpbmUgV2lkdGhcIixcclxuICAgICAgICBcImR4RGlhZ3JhbS1jb21tYW5kTGluZVN0eWxlXCI6IFwiTGluZSBTdHlsZVwiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLWNvbW1hbmRMaW5lU3R5bGVTb2xpZFwiOiBcIlNvbGlkXCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tY29tbWFuZExpbmVTdHlsZURvdHRlZFwiOiBcIkRvdHRlZFwiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLWNvbW1hbmRMaW5lU3R5bGVEYXNoZWRcIjogXCJEYXNoZWRcIixcclxuICAgICAgICBcImR4RGlhZ3JhbS1jb21tYW5kRmlsbENvbG9yXCI6IFwiRmlsbCBDb2xvclwiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLWNvbW1hbmRBbGlnbkxlZnRcIjogXCJBbGlnbiBMZWZ0XCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tY29tbWFuZEFsaWduQ2VudGVyXCI6IFwiQWxpZ24gQ2VudGVyXCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tY29tbWFuZEFsaWduUmlnaHRcIjogXCJBbGlnbiBSaWdodFwiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLWNvbW1hbmRDb25uZWN0b3JMaW5lVHlwZVwiOiBcIkNvbm5lY3RvciBMaW5lIFR5cGVcIixcclxuICAgICAgICBcImR4RGlhZ3JhbS1jb21tYW5kQ29ubmVjdG9yTGluZVN0cmFpZ2h0XCI6IFwiU3RyYWlnaHRcIixcclxuICAgICAgICBcImR4RGlhZ3JhbS1jb21tYW5kQ29ubmVjdG9yTGluZU9ydGhvZ29uYWxcIjogXCJPcnRob2dvbmFsXCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tY29tbWFuZENvbm5lY3RvckxpbmVTdGFydFwiOiBcIkNvbm5lY3RvciBMaW5lIFN0YXJ0XCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tY29tbWFuZENvbm5lY3RvckxpbmVFbmRcIjogXCJDb25uZWN0b3IgTGluZSBFbmRcIixcclxuICAgICAgICBcImR4RGlhZ3JhbS1jb21tYW5kQ29ubmVjdG9yTGluZU5vbmVcIjogXCJOb25lXCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tY29tbWFuZENvbm5lY3RvckxpbmVBcnJvd1wiOiBcIkFycm93XCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tY29tbWFuZEZ1bGxzY3JlZW5cIjogXCJGdWxsIFNjcmVlblwiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLWNvbW1hbmRVbml0c1wiOiBcIlVuaXRzXCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tY29tbWFuZFBhZ2VTaXplXCI6IFwiUGFnZSBTaXplXCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tY29tbWFuZFBhZ2VPcmllbnRhdGlvblwiOiBcIlBhZ2UgT3JpZW50YXRpb25cIixcclxuICAgICAgICBcImR4RGlhZ3JhbS1jb21tYW5kUGFnZU9yaWVudGF0aW9uTGFuZHNjYXBlXCI6IFwiTGFuZHNjYXBlXCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tY29tbWFuZFBhZ2VPcmllbnRhdGlvblBvcnRyYWl0XCI6IFwiUG9ydHJhaXRcIixcclxuICAgICAgICBcImR4RGlhZ3JhbS1jb21tYW5kUGFnZUNvbG9yXCI6IFwiUGFnZSBDb2xvclwiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLWNvbW1hbmRTaG93R3JpZFwiOiBcIlNob3cgR3JpZFwiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLWNvbW1hbmRTbmFwVG9HcmlkXCI6IFwiU25hcCB0byBHcmlkXCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tY29tbWFuZEdyaWRTaXplXCI6IFwiR3JpZCBTaXplXCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tY29tbWFuZFpvb21MZXZlbFwiOiBcIlpvb20gTGV2ZWxcIixcclxuICAgICAgICBcImR4RGlhZ3JhbS1jb21tYW5kQXV0b1pvb21cIjogXCJBdXRvIFpvb21cIixcclxuICAgICAgICBcImR4RGlhZ3JhbS1jb21tYW5kRml0VG9Db250ZW50XCI6IFwiRml0IHRvIENvbnRlbnRcIixcclxuICAgICAgICBcImR4RGlhZ3JhbS1jb21tYW5kRml0VG9XaWR0aFwiOiBcIkZpdCB0byBXaWR0aFwiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLWNvbW1hbmRBdXRvWm9vbUJ5Q29udGVudFwiOiBcIkF1dG8gWm9vbSBieSBDb250ZW50XCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tY29tbWFuZEF1dG9ab29tQnlXaWR0aFwiOiBcIkF1dG8gWm9vbSBieSBXaWR0aFwiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLWNvbW1hbmRTaW1wbGVWaWV3XCI6IFwiU2ltcGxlIFZpZXdcIixcclxuICAgICAgICBcImR4RGlhZ3JhbS1jb21tYW5kQ3V0XCI6IFwiQ3V0XCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tY29tbWFuZENvcHlcIjogXCJDb3B5XCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tY29tbWFuZFBhc3RlXCI6IFwiUGFzdGVcIixcclxuICAgICAgICBcImR4RGlhZ3JhbS1jb21tYW5kU2VsZWN0QWxsXCI6IFwiU2VsZWN0IEFsbFwiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLWNvbW1hbmREZWxldGVcIjogXCJEZWxldGVcIixcclxuICAgICAgICBcImR4RGlhZ3JhbS1jb21tYW5kQnJpbmdUb0Zyb250XCI6IFwiQnJpbmcgdG8gRnJvbnRcIixcclxuICAgICAgICBcImR4RGlhZ3JhbS1jb21tYW5kU2VuZFRvQmFja1wiOiBcIlNlbmQgdG8gQmFja1wiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLWNvbW1hbmRMb2NrXCI6IFwiTG9ja1wiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLWNvbW1hbmRVbmxvY2tcIjogXCJVbmxvY2tcIixcclxuICAgICAgICBcImR4RGlhZ3JhbS1jb21tYW5kSW5zZXJ0U2hhcGVJbWFnZVwiOiBcIkluc2VydCBJbWFnZS4uLlwiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLWNvbW1hbmRFZGl0U2hhcGVJbWFnZVwiOiBcIkNoYW5nZSBJbWFnZS4uLlwiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLWNvbW1hbmREZWxldGVTaGFwZUltYWdlXCI6IFwiRGVsZXRlIEltYWdlXCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tY29tbWFuZExheW91dExlZnRUb1JpZ2h0XCI6IFwiTGVmdC10by1yaWdodFwiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLWNvbW1hbmRMYXlvdXRSaWdodFRvTGVmdFwiOiBcIlJpZ2h0LXRvLWxlZnRcIixcclxuICAgICAgICBcImR4RGlhZ3JhbS1jb21tYW5kTGF5b3V0VG9wVG9Cb3R0b21cIjogXCJUb3AtdG8tYm90dG9tXCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tY29tbWFuZExheW91dEJvdHRvbVRvVG9wXCI6IFwiQm90dG9tLXRvLXRvcFwiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLXVuaXRJblwiOiBcImluXCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tdW5pdENtXCI6IFwiY21cIixcclxuICAgICAgICBcImR4RGlhZ3JhbS11bml0UHhcIjogXCJweFwiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLWRpYWxvZ0J1dHRvbk9LXCI6IFwiT0tcIixcclxuICAgICAgICBcImR4RGlhZ3JhbS1kaWFsb2dCdXR0b25DYW5jZWxcIjogXCJDYW5jZWxcIixcclxuICAgICAgICBcImR4RGlhZ3JhbS1kaWFsb2dJbnNlcnRTaGFwZUltYWdlVGl0bGVcIjogXCJJbnNlcnQgSW1hZ2VcIixcclxuICAgICAgICBcImR4RGlhZ3JhbS1kaWFsb2dFZGl0U2hhcGVJbWFnZVRpdGxlXCI6IFwiQ2hhbmdlIEltYWdlXCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tZGlhbG9nRWRpdFNoYXBlSW1hZ2VTZWxlY3RCdXR0b25cIjogXCJTZWxlY3QgaW1hZ2VcIixcclxuICAgICAgICBcImR4RGlhZ3JhbS1kaWFsb2dFZGl0U2hhcGVJbWFnZUxhYmVsVGV4dFwiOiBcIm9yIGRyb3AgZmlsZSBoZXJlXCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tdWlFeHBvcnRcIjogXCJFeHBvcnRcIixcclxuICAgICAgICBcImR4RGlhZ3JhbS11aVByb3BlcnRpZXNcIjogXCJQcm9wZXJ0aWVzXCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tdWlTZXR0aW5nc1wiOiBcIlNldHRpbmdzXCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tdWlTaG93VG9vbGJveFwiOiBcIlNob3cgVG9vbGJveFwiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLXVpU2VhcmNoXCI6IFwiU2VhcmNoXCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tdWlTdHlsZVwiOiBcIlN0eWxlXCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tdWlMYXlvdXRcIjogXCJMYXlvdXRcIixcclxuICAgICAgICBcImR4RGlhZ3JhbS11aUxheW91dFRyZWVcIjogXCJUcmVlXCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tdWlMYXlvdXRMYXllcmVkXCI6IFwiTGF5ZXJlZFwiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLXVpRGlhZ3JhbVwiOiBcIkRpYWdyYW1cIixcclxuICAgICAgICBcImR4RGlhZ3JhbS11aVRleHRcIjogXCJUZXh0XCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tdWlPYmplY3RcIjogXCJPYmplY3RcIixcclxuICAgICAgICBcImR4RGlhZ3JhbS11aUNvbm5lY3RvclwiOiBcIkNvbm5lY3RvclwiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLXVpUGFnZVwiOiBcIlBhZ2VcIixcclxuICAgICAgICBcImR4RGlhZ3JhbS1zaGFwZVRleHRcIjogXCJUZXh0XCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tc2hhcGVSZWN0YW5nbGVcIjogXCJSZWN0YW5nbGVcIixcclxuICAgICAgICBcImR4RGlhZ3JhbS1zaGFwZUVsbGlwc2VcIjogXCJFbGxpcHNlXCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tc2hhcGVDcm9zc1wiOiBcIkNyb3NzXCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tc2hhcGVUcmlhbmdsZVwiOiBcIlRyaWFuZ2xlXCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tc2hhcGVEaWFtb25kXCI6IFwiRGlhbW9uZFwiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLXNoYXBlSGVhcnRcIjogXCJIZWFydFwiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLXNoYXBlUGVudGFnb25cIjogXCJQZW50YWdvblwiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLXNoYXBlSGV4YWdvblwiOiBcIkhleGFnb25cIixcclxuICAgICAgICBcImR4RGlhZ3JhbS1zaGFwZU9jdGFnb25cIjogXCJPY3RhZ29uXCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tc2hhcGVTdGFyXCI6IFwiU3RhclwiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLXNoYXBlQXJyb3dMZWZ0XCI6IFwiTGVmdCBBcnJvd1wiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLXNoYXBlQXJyb3dVcFwiOiBcIlVwIEFycm93XCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tc2hhcGVBcnJvd1JpZ2h0XCI6IFwiUmlnaHQgQXJyb3dcIixcclxuICAgICAgICBcImR4RGlhZ3JhbS1zaGFwZUFycm93RG93blwiOiBcIkRvd24gQXJyb3dcIixcclxuICAgICAgICBcImR4RGlhZ3JhbS1zaGFwZUFycm93VXBEb3duXCI6IFwiVXAgRG93biBBcnJvd1wiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLXNoYXBlQXJyb3dMZWZ0UmlnaHRcIjogXCJMZWZ0IFJpZ2h0IEFycm93XCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tc2hhcGVQcm9jZXNzXCI6IFwiUHJvY2Vzc1wiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLXNoYXBlRGVjaXNpb25cIjogXCJEZWNpc2lvblwiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLXNoYXBlVGVybWluYXRvclwiOiBcIlRlcm1pbmF0b3JcIixcclxuICAgICAgICBcImR4RGlhZ3JhbS1zaGFwZVByZWRlZmluZWRQcm9jZXNzXCI6IFwiUHJlZGVmaW5lZCBQcm9jZXNzXCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tc2hhcGVEb2N1bWVudFwiOiBcIkRvY3VtZW50XCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tc2hhcGVNdWx0aXBsZURvY3VtZW50c1wiOiBcIk11bHRpcGxlIERvY3VtZW50c1wiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLXNoYXBlTWFudWFsSW5wdXRcIjogXCJNYW51YWwgSW5wdXRcIixcclxuICAgICAgICBcImR4RGlhZ3JhbS1zaGFwZVByZXBhcmF0aW9uXCI6IFwiUHJlcGFyYXRpb25cIixcclxuICAgICAgICBcImR4RGlhZ3JhbS1zaGFwZURhdGFcIjogXCJEYXRhXCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tc2hhcGVEYXRhYmFzZVwiOiBcIkRhdGFiYXNlXCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tc2hhcGVIYXJkRGlza1wiOiBcIkhhcmQgRGlza1wiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLXNoYXBlSW50ZXJuYWxTdG9yYWdlXCI6IFwiSW50ZXJuYWwgU3RvcmFnZVwiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLXNoYXBlUGFwZXJUYXBlXCI6IFwiUGFwZXIgVGFwZVwiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLXNoYXBlTWFudWFsT3BlcmF0aW9uXCI6IFwiTWFudWFsIE9wZXJhdGlvblwiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLXNoYXBlRGVsYXlcIjogXCJEZWxheVwiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLXNoYXBlU3RvcmVkRGF0YVwiOiBcIlN0b3JlZCBEYXRhXCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tc2hhcGVEaXNwbGF5XCI6IFwiRGlzcGxheVwiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLXNoYXBlTWVyZ2VcIjogXCJNZXJnZVwiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLXNoYXBlQ29ubmVjdG9yXCI6IFwiQ29ubmVjdG9yXCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tc2hhcGVPclwiOiBcIk9yXCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tc2hhcGVTdW1taW5nSnVuY3Rpb25cIjogXCJTdW1taW5nIEp1bmN0aW9uXCIsXHJcbiAgICAgICAgXCJkeERpYWdyYW0tc2hhcGVDb250YWluZXJEZWZhdWx0VGV4dFwiOiBcIkNvbnRhaW5lclwiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLXNoYXBlVmVydGljYWxDb250YWluZXJcIjogXCJWZXJ0aWNhbCBDb250YWluZXJcIixcclxuICAgICAgICBcImR4RGlhZ3JhbS1zaGFwZUhvcml6b250YWxDb250YWluZXJcIjogXCJIb3Jpem9udGFsIENvbnRhaW5lclwiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLXNoYXBlQ2FyZERlZmF1bHRUZXh0XCI6IFwiUGVyc29uJ3MgTmFtZVwiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLXNoYXBlQ2FyZFdpdGhJbWFnZU9uTGVmdFwiOiBcIkNhcmQgd2l0aCBJbWFnZSBvbiB0aGUgTGVmdFwiLFxyXG4gICAgICAgIFwiZHhEaWFncmFtLXNoYXBlQ2FyZFdpdGhJbWFnZU9uVG9wXCI6IFwiQ2FyZCB3aXRoIEltYWdlIG9uIHRoZSBUb3BcIixcclxuICAgICAgICBcImR4RGlhZ3JhbS1zaGFwZUNhcmRXaXRoSW1hZ2VPblJpZ2h0XCI6IFwiQ2FyZCB3aXRoIEltYWdlIG9uIHRoZSBSaWdodFwiLFxyXG4gICAgICAgIFwiZHhHYW50dC1kaWFsb2dUaXRsZVwiOiBcIlRpdGxlXCIsXHJcbiAgICAgICAgXCJkeEdhbnR0LWRpYWxvZ1N0YXJ0VGl0bGVcIjogXCJTdGFydFwiLFxyXG4gICAgICAgIFwiZHhHYW50dC1kaWFsb2dFbmRUaXRsZVwiOiBcIkVuZFwiLFxyXG4gICAgICAgIFwiZHhHYW50dC1kaWFsb2dQcm9ncmVzc1RpdGxlXCI6IFwiUHJvZ3Jlc3NcIixcclxuICAgICAgICBcImR4R2FudHQtZGlhbG9nUmVzb3VyY2VzVGl0bGVcIjogXCJSZXNvdXJjZXNcIixcclxuICAgICAgICBcImR4R2FudHQtZGlhbG9nUmVzb3VyY2VNYW5hZ2VyVGl0bGVcIjogXCJSZXNvdXJjZSBNYW5hZ2VyXCIsXHJcbiAgICAgICAgXCJkeEdhbnR0LWRpYWxvZ1Rhc2tEZXRhaWxzVGl0bGVcIjogXCJUYXNrIERldGFpbHNcIixcclxuICAgICAgICBcImR4R2FudHQtZGlhbG9nRWRpdFJlc291cmNlTGlzdEhpbnRcIjogXCJFZGl0IFJlc291cmNlIExpc3RcIixcclxuICAgICAgICBcImR4R2FudHQtZGlhbG9nRWRpdE5vUmVzb3VyY2VzXCI6IFwiTm8gcmVzb3VyY2VzXCIsXHJcbiAgICAgICAgXCJkeEdhbnR0LWRpYWxvZ0J1dHRvbkFkZFwiOiBcIkFkZFwiLFxyXG4gICAgICAgIFwiZHhHYW50dC1jb250ZXh0TWVudU5ld1Rhc2tcIjogXCJOZXcgVGFza1wiLFxyXG4gICAgICAgIFwiZHhHYW50dC1jb250ZXh0TWVudU5ld1N1YnRhc2tcIjogXCJOZXcgU3VidGFza1wiLFxyXG4gICAgICAgIFwiZHhHYW50dC1jb250ZXh0TWVudURlbGV0ZVRhc2tcIjogXCJEZWxldGUgVGFza1wiLFxyXG4gICAgICAgIFwiZHhHYW50dC1jb250ZXh0TWVudURlbGV0ZURlcGVuZGVuY3lcIjogXCJEZWxldGUgRGVwZW5kZW5jeVwiLFxyXG4gICAgICAgIFwiZHhHYW50dC1kaWFsb2dUYXNrRGVsZXRlQ29uZmlybWF0aW9uXCI6IFwiRGVsZXRpbmcgYSB0YXNrIGFsc28gZGVsZXRlcyBhbGwgaXRzIGRlcGVuZGVuY2llcyBhbmQgc3VidGFza3MuIEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyB0YXNrP1wiLFxyXG4gICAgICAgIFwiZHhHYW50dC1kaWFsb2dEZXBlbmRlbmN5RGVsZXRlQ29uZmlybWF0aW9uXCI6IFwiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGUgZGVwZW5kZW5jeSBmcm9tIHRoZSB0YXNrP1wiLFxyXG4gICAgICAgIFwiZHhHYW50dC1kaWFsb2dSZXNvdXJjZXNEZWxldGVDb25maXJtYXRpb25cIjogXCJEZWxldGluZyBhIHJlc291cmNlIGFsc28gZGVsZXRlcyBpdCBmcm9tIHRhc2tzIHRvIHdoaWNoIHRoaXMgcmVzb3VyY2UgaXMgYXNzaWduZWQuIEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhlc2UgcmVzb3VyY2VzPyBSZXNvdXJjZXM6IHswfVwiLFxyXG4gICAgICAgIFwiZHhHYW50dC1kaWFsb2dDb25zdHJhaW50Q3JpdGljYWxWaW9sYXRpb25NZXNzYWdlXCI6IFwiVGhlIHRhc2sgeW91IGFyZSBhdHRlbXB0aW5nIHRvIG1vdmUgaXMgbGlua2VkIHRvIGEgc2Vjb25kIHRhc2sgYnkgYSBkZXBlbmRlbmN5IHJlbGF0aW9uLiBUaGlzIGNoYW5nZSB3b3VsZCBjb25mbGljdCB3aXRoIGRlcGVuZGVuY3kgcnVsZXMuIEhvdyB3b3VsZCB5b3UgbGlrZSB0byBwcm9jZWVkP1wiLFxyXG4gICAgICAgIFwiZHhHYW50dC1kaWFsb2dDb25zdHJhaW50VmlvbGF0aW9uTWVzc2FnZVwiOiBcIlRoZSB0YXNrIHlvdSBhcmUgYXR0ZW1wdGluZyB0byBtb3ZlIGlzIGxpbmtlZCB0byBhIHNlY29uZCB0YXNrIGJ5IGEgZGVwZW5kZW5jeSByZWxhdGlvbi4gSG93IHdvdWxkIHlvdSBsaWtlIHRvIHByb2NlZWQ/XCIsXHJcbiAgICAgICAgXCJkeEdhbnR0LWRpYWxvZ0NhbmNlbE9wZXJhdGlvbk1lc3NhZ2VcIjogXCJDYW5jZWwgdGhlIG9wZXJhdGlvblwiLFxyXG4gICAgICAgIFwiZHhHYW50dC1kaWFsb2dEZWxldGVEZXBlbmRlbmN5TWVzc2FnZVwiOiBcIkRlbGV0ZSB0aGUgZGVwZW5kZW5jeVwiLFxyXG4gICAgICAgIFwiZHhHYW50dC1kaWFsb2dNb3ZlVGFza0FuZEtlZXBEZXBlbmRlbmN5TWVzc2FnZVwiOiBcIk1vdmUgdGhlIHRhc2sgYW5kIGtlZXAgdGhlIGRlcGVuZGVuY3lcIixcclxuICAgICAgICBcImR4R2FudHQtdW5kb1wiOiBcIlVuZG9cIixcclxuICAgICAgICBcImR4R2FudHQtcmVkb1wiOiBcIlJlZG9cIixcclxuICAgICAgICBcImR4R2FudHQtZXhwYW5kQWxsXCI6IFwiRXhwYW5kIEFsbFwiLFxyXG4gICAgICAgIFwiZHhHYW50dC1jb2xsYXBzZUFsbFwiOiBcIkNvbGxhcHNlIEFsbFwiLFxyXG4gICAgICAgIFwiZHhHYW50dC1hZGROZXdUYXNrXCI6IFwiQWRkIE5ldyBUYXNrXCIsXHJcbiAgICAgICAgXCJkeEdhbnR0LWRlbGV0ZVNlbGVjdGVkVGFza1wiOiBcIkRlbGV0ZSBTZWxlY3RlZCBUYXNrXCIsXHJcbiAgICAgICAgXCJkeEdhbnR0LXpvb21JblwiOiBcIlpvb20gSW5cIixcclxuICAgICAgICBcImR4R2FudHQtem9vbU91dFwiOiBcIlpvb20gT3V0XCIsXHJcbiAgICAgICAgXCJkeEdhbnR0LWZ1bGxTY3JlZW5cIjogXCJGdWxsIFNjcmVlblwiLFxyXG4gICAgICAgIFwiZHhHYW50dC1xdWFydGVyXCI6IFwiUXswfVwiXHJcbiAgICB9XHJcbn07XHJcbiIsIi8qKlxyXG4gKiBEZXZFeHRyZW1lIChlc20vbG9jYWxpemF0aW9uL2ludGwvbnVtYmVyLmpzKVxyXG4gKiBWZXJzaW9uOiAyMS4xLjRcclxuICogQnVpbGQgZGF0ZTogTW9uIEp1biAyMSAyMDIxXHJcbiAqXHJcbiAqIENvcHlyaWdodCAoYykgMjAxMiAtIDIwMjEgRGV2ZWxvcGVyIEV4cHJlc3MgSW5jLiBBTEwgUklHSFRTIFJFU0VSVkVEXHJcbiAqIFJlYWQgYWJvdXQgRGV2RXh0cmVtZSBsaWNlbnNpbmcgaGVyZTogaHR0cHM6Ly9qcy5kZXZleHByZXNzLmNvbS9MaWNlbnNpbmcvXHJcbiAqL1xyXG5pbXBvcnQgZHhDb25maWcgZnJvbSBcIi4uLy4uL2NvcmUvY29uZmlnXCI7XHJcbmltcG9ydCBsb2NhbGl6YXRpb25Db3JlVXRpbHMgZnJvbSBcIi4uL2NvcmVcIjtcclxuaW1wb3J0IG9wZW5YbWxDdXJyZW5jeUZvcm1hdCBmcm9tIFwiLi4vb3Blbl94bWxfY3VycmVuY3lfZm9ybWF0XCI7XHJcbmltcG9ydCBhY2NvdW50aW5nRm9ybWF0cyBmcm9tIFwiLi4vY2xkci1kYXRhL2FjY291bnRpbmdfZm9ybWF0c1wiO1xyXG52YXIgZGV0ZWN0Q3VycmVuY3lTeW1ib2xSZWdleCA9IC8oW15cXHMwXSspPyhcXHMqKTAqWy4sXSowKihcXHMqKShbXlxcczBdKyk/LztcclxudmFyIGZvcm1hdHRlcnNDYWNoZSA9IHt9O1xyXG52YXIgZ2V0Rm9ybWF0dGVyID0gZm9ybWF0ID0+IHtcclxuICAgIHZhciBrZXkgPSBsb2NhbGl6YXRpb25Db3JlVXRpbHMubG9jYWxlKCkgKyBcIi9cIiArIEpTT04uc3RyaW5naWZ5KGZvcm1hdCk7XHJcbiAgICBpZiAoIWZvcm1hdHRlcnNDYWNoZVtrZXldKSB7XHJcbiAgICAgICAgZm9ybWF0dGVyc0NhY2hlW2tleV0gPSBuZXcgSW50bC5OdW1iZXJGb3JtYXQobG9jYWxpemF0aW9uQ29yZVV0aWxzLmxvY2FsZSgpLCBmb3JtYXQpLmZvcm1hdFxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZvcm1hdHRlcnNDYWNoZVtrZXldXHJcbn07XHJcbnZhciBnZXRDdXJyZW5jeUZvcm1hdHRlciA9IGN1cnJlbmN5ID0+IG5ldyBJbnRsLk51bWJlckZvcm1hdChsb2NhbGl6YXRpb25Db3JlVXRpbHMubG9jYWxlKCksIHtcclxuICAgIHN0eWxlOiBcImN1cnJlbmN5XCIsXHJcbiAgICBjdXJyZW5jeTogY3VycmVuY3lcclxufSk7XHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICAgIGVuZ2luZTogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIFwiaW50bFwiXHJcbiAgICB9LFxyXG4gICAgX2Zvcm1hdE51bWJlckNvcmU6IGZ1bmN0aW9uKHZhbHVlLCBmb3JtYXQsIGZvcm1hdENvbmZpZykge1xyXG4gICAgICAgIGlmIChcImV4cG9uZW50aWFsXCIgPT09IGZvcm1hdCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYWxsQmFzZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBnZXRGb3JtYXR0ZXIodGhpcy5fbm9ybWFsaXplRm9ybWF0Q29uZmlnKGZvcm1hdCwgZm9ybWF0Q29uZmlnLCB2YWx1ZSkpKHZhbHVlKVxyXG4gICAgfSxcclxuICAgIF9ub3JtYWxpemVGb3JtYXRDb25maWc6IGZ1bmN0aW9uKGZvcm1hdCwgZm9ybWF0Q29uZmlnLCB2YWx1ZSkge1xyXG4gICAgICAgIHZhciBjb25maWc7XHJcbiAgICAgICAgaWYgKFwiZGVjaW1hbFwiID09PSBmb3JtYXQpIHtcclxuICAgICAgICAgICAgY29uZmlnID0ge1xyXG4gICAgICAgICAgICAgICAgbWluaW11bUludGVnZXJEaWdpdHM6IGZvcm1hdENvbmZpZy5wcmVjaXNpb24gfHwgdm9pZCAwLFxyXG4gICAgICAgICAgICAgICAgdXNlR3JvdXBpbmc6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgbWF4aW11bUZyYWN0aW9uRGlnaXRzOiBTdHJpbmcodmFsdWUpLmxlbmd0aCxcclxuICAgICAgICAgICAgICAgIHJvdW5kOiB2YWx1ZSA8IDAgPyBcImNlaWxcIiA6IFwiZmxvb3JcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uZmlnID0gdGhpcy5fZ2V0UHJlY2lzaW9uQ29uZmlnKGZvcm1hdENvbmZpZy5wcmVjaXNpb24pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChcInBlcmNlbnRcIiA9PT0gZm9ybWF0KSB7XHJcbiAgICAgICAgICAgIGNvbmZpZy5zdHlsZSA9IFwicGVyY2VudFwiXHJcbiAgICAgICAgfSBlbHNlIGlmIChcImN1cnJlbmN5XCIgPT09IGZvcm1hdCkge1xyXG4gICAgICAgICAgICBjb25maWcuc3R5bGUgPSBcImN1cnJlbmN5XCI7XHJcbiAgICAgICAgICAgIGNvbmZpZy5jdXJyZW5jeSA9IGZvcm1hdENvbmZpZy5jdXJyZW5jeSB8fCBkeENvbmZpZygpLmRlZmF1bHRDdXJyZW5jeVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY29uZmlnXHJcbiAgICB9LFxyXG4gICAgX2dldFByZWNpc2lvbkNvbmZpZzogZnVuY3Rpb24ocHJlY2lzaW9uKSB7XHJcbiAgICAgICAgdmFyIGNvbmZpZztcclxuICAgICAgICBpZiAobnVsbCA9PT0gcHJlY2lzaW9uKSB7XHJcbiAgICAgICAgICAgIGNvbmZpZyA9IHtcclxuICAgICAgICAgICAgICAgIG1pbmltdW1GcmFjdGlvbkRpZ2l0czogMCxcclxuICAgICAgICAgICAgICAgIG1heGltdW1GcmFjdGlvbkRpZ2l0czogMjBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbmZpZyA9IHtcclxuICAgICAgICAgICAgICAgIG1pbmltdW1GcmFjdGlvbkRpZ2l0czogcHJlY2lzaW9uIHx8IDAsXHJcbiAgICAgICAgICAgICAgICBtYXhpbXVtRnJhY3Rpb25EaWdpdHM6IHByZWNpc2lvbiB8fCAwXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNvbmZpZ1xyXG4gICAgfSxcclxuICAgIGZvcm1hdDogZnVuY3Rpb24odmFsdWUsIF9mb3JtYXQpIHtcclxuICAgICAgICBpZiAoXCJudW1iZXJcIiAhPT0gdHlwZW9mIHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZVxyXG4gICAgICAgIH1cclxuICAgICAgICBfZm9ybWF0ID0gdGhpcy5fbm9ybWFsaXplRm9ybWF0KF9mb3JtYXQpO1xyXG4gICAgICAgIGlmIChcImRlZmF1bHRcIiA9PT0gX2Zvcm1hdC5jdXJyZW5jeSkge1xyXG4gICAgICAgICAgICBfZm9ybWF0LmN1cnJlbmN5ID0gZHhDb25maWcoKS5kZWZhdWx0Q3VycmVuY3lcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFfZm9ybWF0IHx8IFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIF9mb3JtYXQgJiYgIV9mb3JtYXQudHlwZSAmJiAhX2Zvcm1hdC5mb3JtYXR0ZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGdldEZvcm1hdHRlcihfZm9ybWF0KSh2YWx1ZSlcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsbEJhc2UuYXBwbHkodGhpcywgYXJndW1lbnRzKVxyXG4gICAgfSxcclxuICAgIF9nZXRDdXJyZW5jeVN5bWJvbEluZm86IGZ1bmN0aW9uKGN1cnJlbmN5KSB7XHJcbiAgICAgICAgdmFyIGZvcm1hdHRlciA9IGdldEN1cnJlbmN5Rm9ybWF0dGVyKGN1cnJlbmN5KTtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZXh0cmFjdEN1cnJlbmN5U3ltYm9sSW5mbyhmb3JtYXR0ZXIuZm9ybWF0KDApKVxyXG4gICAgfSxcclxuICAgIF9leHRyYWN0Q3VycmVuY3lTeW1ib2xJbmZvOiBmdW5jdGlvbihjdXJyZW5jeVZhbHVlU3RyaW5nKSB7XHJcbiAgICAgICAgdmFyIG1hdGNoID0gZGV0ZWN0Q3VycmVuY3lTeW1ib2xSZWdleC5leGVjKGN1cnJlbmN5VmFsdWVTdHJpbmcpIHx8IFtdO1xyXG4gICAgICAgIHZhciBwb3NpdGlvbiA9IG1hdGNoWzFdID8gXCJiZWZvcmVcIiA6IFwiYWZ0ZXJcIjtcclxuICAgICAgICB2YXIgc3ltYm9sID0gbWF0Y2hbMV0gfHwgbWF0Y2hbNF0gfHwgXCJcIjtcclxuICAgICAgICB2YXIgZGVsaW1pdGVyID0gbWF0Y2hbMl0gfHwgbWF0Y2hbM10gfHwgXCJcIjtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBwb3NpdGlvbjogcG9zaXRpb24sXHJcbiAgICAgICAgICAgIHN5bWJvbDogc3ltYm9sLFxyXG4gICAgICAgICAgICBkZWxpbWl0ZXI6IGRlbGltaXRlclxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICBnZXRDdXJyZW5jeVN5bWJvbDogZnVuY3Rpb24oY3VycmVuY3kpIHtcclxuICAgICAgICBpZiAoIWN1cnJlbmN5KSB7XHJcbiAgICAgICAgICAgIGN1cnJlbmN5ID0gZHhDb25maWcoKS5kZWZhdWx0Q3VycmVuY3lcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHN5bWJvbEluZm8gPSB0aGlzLl9nZXRDdXJyZW5jeVN5bWJvbEluZm8oY3VycmVuY3kpO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHN5bWJvbDogc3ltYm9sSW5mby5zeW1ib2xcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgZ2V0T3BlblhtbEN1cnJlbmN5Rm9ybWF0OiBmdW5jdGlvbihjdXJyZW5jeSkge1xyXG4gICAgICAgIHZhciB0YXJnZXRDdXJyZW5jeSA9IGN1cnJlbmN5IHx8IGR4Q29uZmlnKCkuZGVmYXVsdEN1cnJlbmN5O1xyXG4gICAgICAgIHZhciBjdXJyZW5jeVN5bWJvbCA9IHRoaXMuX2dldEN1cnJlbmN5U3ltYm9sSW5mbyh0YXJnZXRDdXJyZW5jeSkuc3ltYm9sO1xyXG4gICAgICAgIHZhciBjbG9zZXN0QWNjb3VudGluZ0Zvcm1hdCA9IGxvY2FsaXphdGlvbkNvcmVVdGlscy5nZXRWYWx1ZUJ5Q2xvc2VzdExvY2FsZShsb2NhbGUgPT4gYWNjb3VudGluZ0Zvcm1hdHNbbG9jYWxlXSk7XHJcbiAgICAgICAgcmV0dXJuIG9wZW5YbWxDdXJyZW5jeUZvcm1hdChjdXJyZW5jeVN5bWJvbCwgY2xvc2VzdEFjY291bnRpbmdGb3JtYXQpXHJcbiAgICB9XHJcbn07XHJcbiIsIi8qKlxyXG4gKiBEZXZFeHRyZW1lIChlc20vbG9jYWxpemF0aW9uL2xkbWwvbnVtYmVyLmpzKVxyXG4gKiBWZXJzaW9uOiAyMS4xLjRcclxuICogQnVpbGQgZGF0ZTogTW9uIEp1biAyMSAyMDIxXHJcbiAqXHJcbiAqIENvcHlyaWdodCAoYykgMjAxMiAtIDIwMjEgRGV2ZWxvcGVyIEV4cHJlc3MgSW5jLiBBTEwgUklHSFRTIFJFU0VSVkVEXHJcbiAqIFJlYWQgYWJvdXQgRGV2RXh0cmVtZSBsaWNlbnNpbmcgaGVyZTogaHR0cHM6Ly9qcy5kZXZleHByZXNzLmNvbS9MaWNlbnNpbmcvXHJcbiAqL1xyXG5pbXBvcnQge1xyXG4gICAgZml0SW50b1JhbmdlXHJcbn0gZnJvbSBcIi4uLy4uL2NvcmUvdXRpbHMvbWF0aFwiO1xyXG5pbXBvcnQge1xyXG4gICAgdG9GaXhlZFxyXG59IGZyb20gXCIuLi91dGlsc1wiO1xyXG52YXIgREVGQVVMVF9DT05GSUcgPSB7XHJcbiAgICB0aG91c2FuZHNTZXBhcmF0b3I6IFwiLFwiLFxyXG4gICAgZGVjaW1hbFNlcGFyYXRvcjogXCIuXCJcclxufTtcclxudmFyIEVTQ0FQSU5HX0NIQVIgPSBcIidcIjtcclxudmFyIE1BWElNVU1fTlVNQkVSX0xFTkdUSCA9IDE1O1xyXG5cclxuZnVuY3Rpb24gZ2V0R3JvdXBTaXplcyhmb3JtYXRTdHJpbmcpIHtcclxuICAgIHJldHVybiBmb3JtYXRTdHJpbmcuc3BsaXQoXCIsXCIpLnNsaWNlKDEpLm1hcCgoZnVuY3Rpb24oc3RyKSB7XHJcbiAgICAgICAgcmV0dXJuIHN0ci5zcGxpdChcIlwiKS5maWx0ZXIoKGZ1bmN0aW9uKGNoYXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwiI1wiID09PSBjaGFyIHx8IFwiMFwiID09PSBjaGFyXHJcbiAgICAgICAgfSkpLmxlbmd0aFxyXG4gICAgfSkpXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldFNpZ25QYXJ0cyhmb3JtYXQpIHtcclxuICAgIHZhciBzaWduUGFydHMgPSBmb3JtYXQuc3BsaXQoXCI7XCIpO1xyXG4gICAgaWYgKDEgPT09IHNpZ25QYXJ0cy5sZW5ndGgpIHtcclxuICAgICAgICBzaWduUGFydHMucHVzaChcIi1cIiArIHNpZ25QYXJ0c1swXSlcclxuICAgIH1cclxuICAgIHJldHVybiBzaWduUGFydHNcclxufVxyXG5cclxuZnVuY3Rpb24gcmV2ZXJzZVN0cmluZyhzdHIpIHtcclxuICAgIHJldHVybiBzdHIudG9TdHJpbmcoKS5zcGxpdChcIlwiKS5yZXZlcnNlKCkuam9pbihcIlwiKVxyXG59XHJcblxyXG5mdW5jdGlvbiBpc1BlcmNlbnRGb3JtYXQoZm9ybWF0KSB7XHJcbiAgICByZXR1cm4gLTEgIT09IGZvcm1hdC5pbmRleE9mKFwiJVwiKSAmJiAhZm9ybWF0Lm1hdGNoKC8nW14nXSolW14nXSonL2cpXHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlbW92ZVN0dWJzKHN0cikge1xyXG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlKC8nLisnL2csIFwiXCIpXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldE5vblJlcXVpcmVkRGlnaXRDb3VudChmbG9hdEZvcm1hdCkge1xyXG4gICAgaWYgKCFmbG9hdEZvcm1hdCkge1xyXG4gICAgICAgIHJldHVybiAwXHJcbiAgICB9XHJcbiAgICB2YXIgZm9ybWF0ID0gcmVtb3ZlU3R1YnMoZmxvYXRGb3JtYXQpO1xyXG4gICAgcmV0dXJuIGZvcm1hdC5sZW5ndGggLSBmb3JtYXQucmVwbGFjZSgvWyNdL2csIFwiXCIpLmxlbmd0aFxyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRSZXF1aXJlZERpZ2l0Q291bnQoZmxvYXRGb3JtYXQpIHtcclxuICAgIGlmICghZmxvYXRGb3JtYXQpIHtcclxuICAgICAgICByZXR1cm4gMFxyXG4gICAgfVxyXG4gICAgdmFyIGZvcm1hdCA9IHJlbW92ZVN0dWJzKGZsb2F0Rm9ybWF0KTtcclxuICAgIHJldHVybiBmb3JtYXQubGVuZ3RoIC0gZm9ybWF0LnJlcGxhY2UoL1swXS9nLCBcIlwiKS5sZW5ndGhcclxufVxyXG5cclxuZnVuY3Rpb24gbm9ybWFsaXplVmFsdWVTdHJpbmcodmFsdWVQYXJ0LCBtaW5EaWdpdENvdW50LCBtYXhEaWdpdENvdW50KSB7XHJcbiAgICBpZiAoIXZhbHVlUGFydCkge1xyXG4gICAgICAgIHJldHVybiBcIlwiXHJcbiAgICB9XHJcbiAgICBpZiAodmFsdWVQYXJ0Lmxlbmd0aCA+IG1heERpZ2l0Q291bnQpIHtcclxuICAgICAgICB2YWx1ZVBhcnQgPSB2YWx1ZVBhcnQuc3Vic3RyKDAsIG1heERpZ2l0Q291bnQpXHJcbiAgICB9XHJcbiAgICB3aGlsZSAodmFsdWVQYXJ0Lmxlbmd0aCA+IG1pbkRpZ2l0Q291bnQgJiYgXCIwXCIgPT09IHZhbHVlUGFydC5zbGljZSgtMSkpIHtcclxuICAgICAgICB2YWx1ZVBhcnQgPSB2YWx1ZVBhcnQuc3Vic3RyKDAsIHZhbHVlUGFydC5sZW5ndGggLSAxKVxyXG4gICAgfVxyXG4gICAgd2hpbGUgKHZhbHVlUGFydC5sZW5ndGggPCBtaW5EaWdpdENvdW50KSB7XHJcbiAgICAgICAgdmFsdWVQYXJ0ICs9IFwiMFwiXHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsdWVQYXJ0XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGFwcGx5R3JvdXBzKHZhbHVlU3RyaW5nLCBncm91cFNpemVzLCB0aG91c2FuZHNTZXBhcmF0b3IpIHtcclxuICAgIGlmICghZ3JvdXBTaXplcy5sZW5ndGgpIHtcclxuICAgICAgICByZXR1cm4gdmFsdWVTdHJpbmdcclxuICAgIH1cclxuICAgIHZhciBncm91cHMgPSBbXTtcclxuICAgIHZhciBpbmRleCA9IDA7XHJcbiAgICB3aGlsZSAodmFsdWVTdHJpbmcpIHtcclxuICAgICAgICB2YXIgZ3JvdXBTaXplID0gZ3JvdXBTaXplc1tpbmRleF07XHJcbiAgICAgICAgaWYgKCFncm91cFNpemUpIHtcclxuICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICB9XHJcbiAgICAgICAgZ3JvdXBzLnB1c2godmFsdWVTdHJpbmcuc2xpY2UoMCwgZ3JvdXBTaXplKSk7XHJcbiAgICAgICAgdmFsdWVTdHJpbmcgPSB2YWx1ZVN0cmluZy5zbGljZShncm91cFNpemUpO1xyXG4gICAgICAgIGlmIChpbmRleCA8IGdyb3VwU2l6ZXMubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgICBpbmRleCsrXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGdyb3Vwcy5qb2luKHRob3VzYW5kc1NlcGFyYXRvcilcclxufVxyXG5cclxuZnVuY3Rpb24gZm9ybWF0TnVtYmVyUGFydChmb3JtYXQsIHZhbHVlU3RyaW5nKSB7XHJcbiAgICByZXR1cm4gZm9ybWF0LnNwbGl0KEVTQ0FQSU5HX0NIQVIpLm1hcCgoZnVuY3Rpb24oZm9ybWF0UGFydCwgZXNjYXBlSW5kZXgpIHtcclxuICAgICAgICB2YXIgaXNFc2NhcGUgPSBlc2NhcGVJbmRleCAlIDI7XHJcbiAgICAgICAgaWYgKCFmb3JtYXRQYXJ0ICYmIGlzRXNjYXBlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBFU0NBUElOR19DSEFSXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBpc0VzY2FwZSA/IGZvcm1hdFBhcnQgOiBmb3JtYXRQYXJ0LnJlcGxhY2UoL1ssIzBdKy8sIHZhbHVlU3RyaW5nKVxyXG4gICAgfSkpLmpvaW4oXCJcIilcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0RmxvYXRQb2ludEluZGV4KGZvcm1hdCkge1xyXG4gICAgdmFyIGlzRXNjYXBlID0gZmFsc2U7XHJcbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgZm9ybWF0Lmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgIGlmIChcIidcIiA9PT0gZm9ybWF0W2luZGV4XSkge1xyXG4gICAgICAgICAgICBpc0VzY2FwZSA9ICFpc0VzY2FwZVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoXCIuXCIgPT09IGZvcm1hdFtpbmRleF0gJiYgIWlzRXNjYXBlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBpbmRleFxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmb3JtYXQubGVuZ3RoXHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEZvcm1hdHRlcihmb3JtYXQsIGNvbmZpZykge1xyXG4gICAgY29uZmlnID0gY29uZmlnIHx8IERFRkFVTFRfQ09ORklHO1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKFwibnVtYmVyXCIgIT09IHR5cGVvZiB2YWx1ZSB8fCBpc05hTih2YWx1ZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwiXCJcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHNpZ25Gb3JtYXRQYXJ0cyA9IGdldFNpZ25QYXJ0cyhmb3JtYXQpO1xyXG4gICAgICAgIHZhciBpc1Bvc2l0aXZlWmVybyA9IDEgLyB2YWx1ZSA9PT0gMSAvIDA7XHJcbiAgICAgICAgdmFyIGlzUG9zaXRpdmUgPSB2YWx1ZSA+IDAgfHwgaXNQb3NpdGl2ZVplcm87XHJcbiAgICAgICAgdmFyIG51bWJlckZvcm1hdCA9IHNpZ25Gb3JtYXRQYXJ0c1tpc1Bvc2l0aXZlID8gMCA6IDFdO1xyXG4gICAgICAgIGlmIChpc1BlcmNlbnRGb3JtYXQobnVtYmVyRm9ybWF0KSkge1xyXG4gICAgICAgICAgICB2YWx1ZSAqPSAxMDBcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFpc1Bvc2l0aXZlKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gLXZhbHVlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBmbG9hdFBvaW50SW5kZXggPSBnZXRGbG9hdFBvaW50SW5kZXgobnVtYmVyRm9ybWF0KTtcclxuICAgICAgICB2YXIgZmxvYXRGb3JtYXRQYXJ0cyA9IFtudW1iZXJGb3JtYXQuc3Vic3RyKDAsIGZsb2F0UG9pbnRJbmRleCksIG51bWJlckZvcm1hdC5zdWJzdHIoZmxvYXRQb2ludEluZGV4ICsgMSldO1xyXG4gICAgICAgIHZhciBtaW5GbG9hdFByZWNpc2lvbiA9IGdldFJlcXVpcmVkRGlnaXRDb3VudChmbG9hdEZvcm1hdFBhcnRzWzFdKTtcclxuICAgICAgICB2YXIgbWF4RmxvYXRQcmVjaXNpb24gPSBtaW5GbG9hdFByZWNpc2lvbiArIGdldE5vblJlcXVpcmVkRGlnaXRDb3VudChmbG9hdEZvcm1hdFBhcnRzWzFdKTtcclxuICAgICAgICB2YXIgbWluSW50ZWdlclByZWNpc2lvbiA9IGdldFJlcXVpcmVkRGlnaXRDb3VudChmbG9hdEZvcm1hdFBhcnRzWzBdKTtcclxuICAgICAgICB2YXIgbWF4SW50ZWdlclByZWNpc2lvbiA9IGdldE5vblJlcXVpcmVkRGlnaXRDb3VudChmbG9hdEZvcm1hdFBhcnRzWzBdKSB8fCBjb25maWcudW5saW1pdGVkSW50ZWdlckRpZ2l0cyA/IHZvaWQgMCA6IG1pbkludGVnZXJQcmVjaXNpb247XHJcbiAgICAgICAgdmFyIGludGVnZXJMZW5ndGggPSBNYXRoLmZsb29yKHZhbHVlKS50b1N0cmluZygpLmxlbmd0aDtcclxuICAgICAgICB2YXIgZmxvYXRQcmVjaXNpb24gPSBmaXRJbnRvUmFuZ2UobWF4RmxvYXRQcmVjaXNpb24sIDAsIE1BWElNVU1fTlVNQkVSX0xFTkdUSCAtIGludGVnZXJMZW5ndGgpO1xyXG4gICAgICAgIHZhciBncm91cFNpemVzID0gZ2V0R3JvdXBTaXplcyhmbG9hdEZvcm1hdFBhcnRzWzBdKS5yZXZlcnNlKCk7XHJcbiAgICAgICAgdmFyIHZhbHVlUGFydHMgPSB0b0ZpeGVkKHZhbHVlLCBmbG9hdFByZWNpc2lvbiA8IDAgPyAwIDogZmxvYXRQcmVjaXNpb24pLnNwbGl0KFwiLlwiKTtcclxuICAgICAgICB2YXIgdmFsdWVJbnRlZ2VyUGFydCA9IG5vcm1hbGl6ZVZhbHVlU3RyaW5nKHJldmVyc2VTdHJpbmcodmFsdWVQYXJ0c1swXSksIG1pbkludGVnZXJQcmVjaXNpb24sIG1heEludGVnZXJQcmVjaXNpb24pO1xyXG4gICAgICAgIHZhciB2YWx1ZUZsb2F0UGFydCA9IG5vcm1hbGl6ZVZhbHVlU3RyaW5nKHZhbHVlUGFydHNbMV0sIG1pbkZsb2F0UHJlY2lzaW9uLCBtYXhGbG9hdFByZWNpc2lvbik7XHJcbiAgICAgICAgdmFsdWVJbnRlZ2VyUGFydCA9IGFwcGx5R3JvdXBzKHZhbHVlSW50ZWdlclBhcnQsIGdyb3VwU2l6ZXMsIGNvbmZpZy50aG91c2FuZHNTZXBhcmF0b3IpO1xyXG4gICAgICAgIHZhciBpbnRlZ2VyU3RyaW5nID0gcmV2ZXJzZVN0cmluZyhmb3JtYXROdW1iZXJQYXJ0KHJldmVyc2VTdHJpbmcoZmxvYXRGb3JtYXRQYXJ0c1swXSksIHZhbHVlSW50ZWdlclBhcnQpKTtcclxuICAgICAgICB2YXIgZmxvYXRTdHJpbmcgPSBtYXhGbG9hdFByZWNpc2lvbiA/IGZvcm1hdE51bWJlclBhcnQoZmxvYXRGb3JtYXRQYXJ0c1sxXSwgdmFsdWVGbG9hdFBhcnQpIDogXCJcIjtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gaW50ZWdlclN0cmluZyArIChmbG9hdFN0cmluZy5tYXRjaCgvXFxkLykgPyBjb25maWcuZGVjaW1hbFNlcGFyYXRvciA6IFwiXCIpICsgZmxvYXRTdHJpbmc7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdFxyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBwYXJzZVZhbHVlKHRleHQsIGlzUGVyY2VudCwgaXNOZWdhdGl2ZSkge1xyXG4gICAgdmFyIHZhbHVlID0gKGlzUGVyY2VudCA/IC4wMSA6IDEpICogcGFyc2VGbG9hdCh0ZXh0KSB8fCAwO1xyXG4gICAgcmV0dXJuIGlzTmVnYXRpdmUgPyAtdmFsdWUgOiB2YWx1ZVxyXG59XHJcblxyXG5mdW5jdGlvbiBwcmVwYXJlVmFsdWVUZXh0KHZhbHVlVGV4dCwgZm9ybWF0dGVyLCBpc1BlcmNlbnQsIGlzSW50ZWdlclBhcnQpIHtcclxuICAgIHZhciBuZXh0VmFsdWVUZXh0ID0gdmFsdWVUZXh0O1xyXG4gICAgdmFyIGNoYXI7XHJcbiAgICB2YXIgdGV4dDtcclxuICAgIHZhciBuZXh0VGV4dDtcclxuICAgIGRvIHtcclxuICAgICAgICBpZiAobmV4dFRleHQpIHtcclxuICAgICAgICAgICAgY2hhciA9IHRleHQubGVuZ3RoID09PSBuZXh0VGV4dC5sZW5ndGggPyBcIjBcIiA6IFwiMVwiO1xyXG4gICAgICAgICAgICB2YWx1ZVRleHQgPSBpc0ludGVnZXJQYXJ0ID8gY2hhciArIHZhbHVlVGV4dCA6IHZhbHVlVGV4dCArIGNoYXJcclxuICAgICAgICB9XHJcbiAgICAgICAgdGV4dCA9IG5leHRUZXh0IHx8IGZvcm1hdHRlcihwYXJzZVZhbHVlKG5leHRWYWx1ZVRleHQsIGlzUGVyY2VudCkpO1xyXG4gICAgICAgIG5leHRWYWx1ZVRleHQgPSBpc0ludGVnZXJQYXJ0ID8gXCIxXCIgKyBuZXh0VmFsdWVUZXh0IDogbmV4dFZhbHVlVGV4dCArIFwiMVwiO1xyXG4gICAgICAgIG5leHRUZXh0ID0gZm9ybWF0dGVyKHBhcnNlVmFsdWUobmV4dFZhbHVlVGV4dCwgaXNQZXJjZW50KSlcclxuICAgIH0gd2hpbGUgKHRleHQgIT09IG5leHRUZXh0ICYmIChpc0ludGVnZXJQYXJ0ID8gdGV4dC5sZW5ndGggPT09IG5leHRUZXh0Lmxlbmd0aCA6IHRleHQubGVuZ3RoIDw9IG5leHRUZXh0Lmxlbmd0aCkpO1xyXG4gICAgaWYgKGlzSW50ZWdlclBhcnQgJiYgbmV4dFRleHQubGVuZ3RoID4gdGV4dC5sZW5ndGgpIHtcclxuICAgICAgICB2YXIgaGFzR3JvdXBzID0gLTEgPT09IGZvcm1hdHRlcigxMjM0NSkuaW5kZXhPZihcIjEyMzQ1XCIpO1xyXG4gICAgICAgIGRvIHtcclxuICAgICAgICAgICAgdmFsdWVUZXh0ID0gXCIxXCIgKyB2YWx1ZVRleHRcclxuICAgICAgICB9IHdoaWxlIChoYXNHcm91cHMgJiYgcGFyc2VWYWx1ZSh2YWx1ZVRleHQsIGlzUGVyY2VudCkgPCAxZTUpXHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsdWVUZXh0XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldEZvcm1hdEJ5VmFsdWVUZXh0KHZhbHVlVGV4dCwgZm9ybWF0dGVyLCBpc1BlcmNlbnQsIGlzTmVnYXRpdmUpIHtcclxuICAgIHZhciBmb3JtYXQgPSBmb3JtYXR0ZXIocGFyc2VWYWx1ZSh2YWx1ZVRleHQsIGlzUGVyY2VudCwgaXNOZWdhdGl2ZSkpO1xyXG4gICAgdmFyIHZhbHVlVGV4dFBhcnRzID0gdmFsdWVUZXh0LnNwbGl0KFwiLlwiKTtcclxuICAgIHZhciB2YWx1ZVRleHRXaXRoTW9kaWZpZWRGbG9hdCA9IHZhbHVlVGV4dFBhcnRzWzBdICsgXCIuM1wiICsgdmFsdWVUZXh0UGFydHNbMV0uc2xpY2UoMSk7XHJcbiAgICB2YXIgdmFsdWVXaXRoTW9kaWZpZWRGbG9hdCA9IHBhcnNlVmFsdWUodmFsdWVUZXh0V2l0aE1vZGlmaWVkRmxvYXQsIGlzUGVyY2VudCwgaXNOZWdhdGl2ZSk7XHJcbiAgICB2YXIgZGVjaW1hbFNlcGFyYXRvckluZGV4ID0gZm9ybWF0dGVyKHZhbHVlV2l0aE1vZGlmaWVkRmxvYXQpLmluZGV4T2YoXCIzXCIpIC0gMTtcclxuICAgIGZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlKC8oXFxkKVxcRChcXGQpL2csIFwiJDEsJDJcIik7XHJcbiAgICBpZiAoZGVjaW1hbFNlcGFyYXRvckluZGV4ID49IDApIHtcclxuICAgICAgICBmb3JtYXQgPSBmb3JtYXQuc2xpY2UoMCwgZGVjaW1hbFNlcGFyYXRvckluZGV4KSArIFwiLlwiICsgZm9ybWF0LnNsaWNlKGRlY2ltYWxTZXBhcmF0b3JJbmRleCArIDEpXHJcbiAgICB9XHJcbiAgICBmb3JtYXQgPSBmb3JtYXQucmVwbGFjZSgvMSsvLCBcIjFcIikucmVwbGFjZSgvMS9nLCBcIiNcIik7XHJcbiAgICBpZiAoIWlzUGVyY2VudCkge1xyXG4gICAgICAgIGZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlKFwiJVwiLCBcIiclJ1wiKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZvcm1hdFxyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JtYXQoZm9ybWF0dGVyKSB7XHJcbiAgICB2YXIgdmFsdWVUZXh0ID0gXCIuXCI7XHJcbiAgICB2YXIgaXNQZXJjZW50ID0gZm9ybWF0dGVyKDEpLmluZGV4T2YoXCIxMDBcIikgPj0gMDtcclxuICAgIHZhbHVlVGV4dCA9IHByZXBhcmVWYWx1ZVRleHQodmFsdWVUZXh0LCBmb3JtYXR0ZXIsIGlzUGVyY2VudCwgdHJ1ZSk7XHJcbiAgICB2YWx1ZVRleHQgPSBwcmVwYXJlVmFsdWVUZXh0KHZhbHVlVGV4dCwgZm9ybWF0dGVyLCBpc1BlcmNlbnQsIGZhbHNlKTtcclxuICAgIHZhciBwb3NpdGl2ZUZvcm1hdCA9IGdldEZvcm1hdEJ5VmFsdWVUZXh0KHZhbHVlVGV4dCwgZm9ybWF0dGVyLCBpc1BlcmNlbnQsIGZhbHNlKTtcclxuICAgIHZhciBuZWdhdGl2ZUZvcm1hdCA9IGdldEZvcm1hdEJ5VmFsdWVUZXh0KHZhbHVlVGV4dCwgZm9ybWF0dGVyLCBpc1BlcmNlbnQsIHRydWUpO1xyXG4gICAgcmV0dXJuIG5lZ2F0aXZlRm9ybWF0ID09PSBcIi1cIiArIHBvc2l0aXZlRm9ybWF0ID8gcG9zaXRpdmVGb3JtYXQgOiBwb3NpdGl2ZUZvcm1hdCArIFwiO1wiICsgbmVnYXRpdmVGb3JtYXRcclxufVxyXG4iLCIvKipcclxuICogRGV2RXh0cmVtZSAoZXNtL2xvY2FsaXphdGlvbi9tZXNzYWdlLmpzKVxyXG4gKiBWZXJzaW9uOiAyMS4xLjRcclxuICogQnVpbGQgZGF0ZTogTW9uIEp1biAyMSAyMDIxXHJcbiAqXHJcbiAqIENvcHlyaWdodCAoYykgMjAxMiAtIDIwMjEgRGV2ZWxvcGVyIEV4cHJlc3MgSW5jLiBBTEwgUklHSFRTIFJFU0VSVkVEXHJcbiAqIFJlYWQgYWJvdXQgRGV2RXh0cmVtZSBsaWNlbnNpbmcgaGVyZTogaHR0cHM6Ly9qcy5kZXZleHByZXNzLmNvbS9MaWNlbnNpbmcvXHJcbiAqL1xyXG5pbXBvcnQgJCBmcm9tIFwiLi4vY29yZS9yZW5kZXJlclwiO1xyXG5pbXBvcnQgZGVwZW5kZW5jeUluamVjdG9yIGZyb20gXCIuLi9jb3JlL3V0aWxzL2RlcGVuZGVuY3lfaW5qZWN0b3JcIjtcclxuaW1wb3J0IHtcclxuICAgIGV4dGVuZFxyXG59IGZyb20gXCIuLi9jb3JlL3V0aWxzL2V4dGVuZFwiO1xyXG5pbXBvcnQge1xyXG4gICAgZWFjaFxyXG59IGZyb20gXCIuLi9jb3JlL3V0aWxzL2l0ZXJhdG9yXCI7XHJcbmltcG9ydCB7XHJcbiAgICBmb3JtYXQgYXMgc3RyaW5nRm9ybWF0XHJcbn0gZnJvbSBcIi4uL2NvcmUvdXRpbHMvc3RyaW5nXCI7XHJcbmltcG9ydCB7XHJcbiAgICBodW1hbml6ZVxyXG59IGZyb20gXCIuLi9jb3JlL3V0aWxzL2luZmxlY3RvclwiO1xyXG5pbXBvcnQgY29yZUxvY2FsaXphdGlvbiBmcm9tIFwiLi9jb3JlXCI7XHJcbmltcG9ydCB7XHJcbiAgICBkZWZhdWx0TWVzc2FnZXNcclxufSBmcm9tIFwiLi9kZWZhdWx0X21lc3NhZ2VzXCI7XHJcbnZhciBiYXNlRGljdGlvbmFyeSA9IGV4dGVuZCh0cnVlLCB7fSwgZGVmYXVsdE1lc3NhZ2VzKTtcclxudmFyIGdldERhdGFCeUxvY2FsZSA9IChsb2NhbGVEYXRhLCBsb2NhbGUpID0+IGxvY2FsZURhdGFbbG9jYWxlXSB8fCB7fTtcclxudmFyIG5ld01lc3NhZ2VzID0ge307XHJcbnZhciBtZXNzYWdlTG9jYWxpemF0aW9uID0gZGVwZW5kZW5jeUluamVjdG9yKHtcclxuICAgIGVuZ2luZTogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIFwiYmFzZVwiXHJcbiAgICB9LFxyXG4gICAgX2RpY3Rpb25hcnk6IGJhc2VEaWN0aW9uYXJ5LFxyXG4gICAgbG9hZDogZnVuY3Rpb24obWVzc2FnZXMpIHtcclxuICAgICAgICBleHRlbmQodHJ1ZSwgdGhpcy5fZGljdGlvbmFyeSwgbWVzc2FnZXMpXHJcbiAgICB9LFxyXG4gICAgX2xvY2FsaXphYmxlUHJlZml4OiBcIkBcIixcclxuICAgIHNldHVwOiBmdW5jdGlvbihsb2NhbGl6YWJsZVByZWZpeCkge1xyXG4gICAgICAgIHRoaXMuX2xvY2FsaXphYmxlUHJlZml4ID0gbG9jYWxpemFibGVQcmVmaXhcclxuICAgIH0sXHJcbiAgICBsb2NhbGl6ZVN0cmluZzogZnVuY3Rpb24odGV4dCkge1xyXG4gICAgICAgIHZhciB0aGF0ID0gdGhpcztcclxuICAgICAgICB2YXIgcmVnZXggPSBuZXcgUmVnRXhwKFwiKF58W15hLXpBLVpfMC05XCIgKyB0aGF0Ll9sb2NhbGl6YWJsZVByZWZpeCArIFwiLV0rKShcIiArIHRoYXQuX2xvY2FsaXphYmxlUHJlZml4ICsgXCJ7MSwyfSkoW2EtekEtWl8wLTktXSspXCIsIFwiZ1wiKTtcclxuICAgICAgICB2YXIgZXNjYXBlU3RyaW5nID0gdGhhdC5fbG9jYWxpemFibGVQcmVmaXggKyB0aGF0Ll9sb2NhbGl6YWJsZVByZWZpeDtcclxuICAgICAgICByZXR1cm4gdGV4dC5yZXBsYWNlKHJlZ2V4LCAoc3RyLCBwcmVmaXgsIGVzY2FwZSwgbG9jYWxpemF0aW9uS2V5KSA9PiB7XHJcbiAgICAgICAgICAgIHZhciBkZWZhdWx0UmVzdWx0ID0gdGhhdC5fbG9jYWxpemFibGVQcmVmaXggKyBsb2NhbGl6YXRpb25LZXk7XHJcbiAgICAgICAgICAgIHZhciByZXN1bHQ7XHJcbiAgICAgICAgICAgIGlmIChlc2NhcGUgIT09IGVzY2FwZVN0cmluZykge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gdGhhdC5mb3JtYXQobG9jYWxpemF0aW9uS2V5KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghcmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICBuZXdNZXNzYWdlc1tsb2NhbGl6YXRpb25LZXldID0gaHVtYW5pemUobG9jYWxpemF0aW9uS2V5KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBwcmVmaXggKyAocmVzdWx0IHx8IGRlZmF1bHRSZXN1bHQpXHJcbiAgICAgICAgfSlcclxuICAgIH0sXHJcbiAgICBsb2NhbGl6ZU5vZGU6IGZ1bmN0aW9uKG5vZGUpIHtcclxuICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XHJcbiAgICAgICAgJChub2RlKS5lYWNoKChpbmRleCwgbm9kZUl0ZW0pID0+IHtcclxuICAgICAgICAgICAgaWYgKCFub2RlSXRlbS5ub2RlVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKDMgPT09IG5vZGVJdGVtLm5vZGVUeXBlKSB7XHJcbiAgICAgICAgICAgICAgICBub2RlSXRlbS5ub2RlVmFsdWUgPSB0aGF0LmxvY2FsaXplU3RyaW5nKG5vZGVJdGVtLm5vZGVWYWx1ZSlcclxuICAgICAgICAgICAgfSBlbHNlIGlmICghJChub2RlSXRlbSkuaXMoXCJpZnJhbWVcIikpIHtcclxuICAgICAgICAgICAgICAgIGVhY2gobm9kZUl0ZW0uYXR0cmlidXRlcyB8fCBbXSwgKGluZGV4LCBhdHRyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKFwic3RyaW5nXCIgPT09IHR5cGVvZiBhdHRyLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsb2NhbGl6ZWRWYWx1ZSA9IHRoYXQubG9jYWxpemVTdHJpbmcoYXR0ci52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhdHRyLnZhbHVlICE9PSBsb2NhbGl6ZWRWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0ci52YWx1ZSA9IGxvY2FsaXplZFZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICQobm9kZUl0ZW0pLmNvbnRlbnRzKCkuZWFjaCgoaW5kZXgsIG5vZGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGF0LmxvY2FsaXplTm9kZShub2RlKVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICB9LFxyXG4gICAgZ2V0TWVzc2FnZXNCeUxvY2FsZXM6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9kaWN0aW9uYXJ5XHJcbiAgICB9LFxyXG4gICAgZ2V0RGljdGlvbmFyeTogZnVuY3Rpb24ob25seU5ldykge1xyXG4gICAgICAgIGlmIChvbmx5TmV3KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXdNZXNzYWdlc1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZXh0ZW5kKHt9LCBuZXdNZXNzYWdlcywgdGhpcy5nZXRNZXNzYWdlc0J5TG9jYWxlcygpW2NvcmVMb2NhbGl6YXRpb24ubG9jYWxlKCldKVxyXG4gICAgfSxcclxuICAgIGdldEZvcm1hdHRlcjogZnVuY3Rpb24oa2V5KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldEZvcm1hdHRlckJhc2Uoa2V5KSB8fCB0aGlzLl9nZXRGb3JtYXR0ZXJCYXNlKGtleSwgXCJlblwiKVxyXG4gICAgfSxcclxuICAgIF9nZXRGb3JtYXR0ZXJCYXNlOiBmdW5jdGlvbihrZXksIGxvY2FsZSkge1xyXG4gICAgICAgIHZhciBtZXNzYWdlID0gY29yZUxvY2FsaXphdGlvbi5nZXRWYWx1ZUJ5Q2xvc2VzdExvY2FsZShsb2NhbGUgPT4gZ2V0RGF0YUJ5TG9jYWxlKHRoaXMuX2RpY3Rpb25hcnksIGxvY2FsZSlba2V5XSk7XHJcbiAgICAgICAgaWYgKG1lc3NhZ2UpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSAxID09PSBhcmd1bWVudHMubGVuZ3RoICYmIEFycmF5LmlzQXJyYXkoYXJndW1lbnRzWzBdKSA/IGFyZ3VtZW50c1swXS5zbGljZSgwKSA6IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCk7XHJcbiAgICAgICAgICAgICAgICBhcmdzLnVuc2hpZnQobWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RyaW5nRm9ybWF0LmFwcGx5KHRoaXMsIGFyZ3MpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgZm9ybWF0OiBmdW5jdGlvbihrZXkpIHtcclxuICAgICAgICB2YXIgZm9ybWF0dGVyID0gdGhpcy5nZXRGb3JtYXR0ZXIoa2V5KTtcclxuICAgICAgICB2YXIgdmFsdWVzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcclxuICAgICAgICByZXR1cm4gZm9ybWF0dGVyICYmIGZvcm1hdHRlci5hcHBseSh0aGlzLCB2YWx1ZXMpIHx8IFwiXCJcclxuICAgIH1cclxufSk7XHJcbmV4cG9ydCBkZWZhdWx0IG1lc3NhZ2VMb2NhbGl6YXRpb247XHJcbiIsIi8qKlxyXG4gKiBEZXZFeHRyZW1lIChlc20vbG9jYWxpemF0aW9uL251bWJlci5qcylcclxuICogVmVyc2lvbjogMjEuMS40XHJcbiAqIEJ1aWxkIGRhdGU6IE1vbiBKdW4gMjEgMjAyMVxyXG4gKlxyXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTIgLSAyMDIxIERldmVsb3BlciBFeHByZXNzIEluYy4gQUxMIFJJR0hUUyBSRVNFUlZFRFxyXG4gKiBSZWFkIGFib3V0IERldkV4dHJlbWUgbGljZW5zaW5nIGhlcmU6IGh0dHBzOi8vanMuZGV2ZXhwcmVzcy5jb20vTGljZW5zaW5nL1xyXG4gKi9cclxuaW1wb3J0IGRlcGVuZGVuY3lJbmplY3RvciBmcm9tIFwiLi4vY29yZS91dGlscy9kZXBlbmRlbmN5X2luamVjdG9yXCI7XHJcbmltcG9ydCB7XHJcbiAgICBpbkFycmF5LFxyXG4gICAgZmluZFxyXG59IGZyb20gXCIuLi9jb3JlL3V0aWxzL2FycmF5XCI7XHJcbmltcG9ydCB7XHJcbiAgICBlc2NhcGVSZWdFeHBcclxufSBmcm9tIFwiLi4vY29yZS91dGlscy9jb21tb25cIjtcclxuaW1wb3J0IHtcclxuICAgIGVhY2hcclxufSBmcm9tIFwiLi4vY29yZS91dGlscy9pdGVyYXRvclwiO1xyXG5pbXBvcnQge1xyXG4gICAgaXNQbGFpbk9iamVjdFxyXG59IGZyb20gXCIuLi9jb3JlL3V0aWxzL3R5cGVcIjtcclxuaW1wb3J0IHtcclxuICAgIGdldEZvcm1hdHRlclxyXG59IGZyb20gXCIuL2xkbWwvbnVtYmVyXCI7XHJcbmltcG9ydCBjb25maWcgZnJvbSBcIi4uL2NvcmUvY29uZmlnXCI7XHJcbmltcG9ydCBlcnJvcnMgZnJvbSBcIi4uL2NvcmUvZXJyb3JzXCI7XHJcbmltcG9ydCB7XHJcbiAgICB0b0ZpeGVkXHJcbn0gZnJvbSBcIi4vdXRpbHNcIjtcclxuaW1wb3J0IGN1cnJlbmN5TG9jYWxpemF0aW9uIGZyb20gXCIuL2N1cnJlbmN5XCI7XHJcbmltcG9ydCBpbnRsTnVtYmVyTG9jYWxpemF0aW9uIGZyb20gXCIuL2ludGwvbnVtYmVyXCI7XHJcbnZhciBoYXNJbnRsID0gXCJ1bmRlZmluZWRcIiAhPT0gdHlwZW9mIEludGw7XHJcbnZhciBNQVhfTEFSR0VfTlVNQkVSX1BPV0VSID0gNDtcclxudmFyIERFQ0lNQUxfQkFTRSA9IDEwO1xyXG52YXIgTlVNRVJJQ19GT1JNQVRTID0gW1wiY3VycmVuY3lcIiwgXCJmaXhlZHBvaW50XCIsIFwiZXhwb25lbnRpYWxcIiwgXCJwZXJjZW50XCIsIFwiZGVjaW1hbFwiXTtcclxudmFyIExhcmdlTnVtYmVyRm9ybWF0UG9zdGZpeGVzID0ge1xyXG4gICAgMTogXCJLXCIsXHJcbiAgICAyOiBcIk1cIixcclxuICAgIDM6IFwiQlwiLFxyXG4gICAgNDogXCJUXCJcclxufTtcclxudmFyIExhcmdlTnVtYmVyRm9ybWF0UG93ZXJzID0ge1xyXG4gICAgbGFyZ2VudW1iZXI6IFwiYXV0b1wiLFxyXG4gICAgdGhvdXNhbmRzOiAxLFxyXG4gICAgbWlsbGlvbnM6IDIsXHJcbiAgICBiaWxsaW9uczogMyxcclxuICAgIHRyaWxsaW9uczogNFxyXG59O1xyXG52YXIgbnVtYmVyTG9jYWxpemF0aW9uID0gZGVwZW5kZW5jeUluamVjdG9yKHtcclxuICAgIGVuZ2luZTogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIFwiYmFzZVwiXHJcbiAgICB9LFxyXG4gICAgbnVtZXJpY0Zvcm1hdHM6IE5VTUVSSUNfRk9STUFUUyxcclxuICAgIGRlZmF1bHRMYXJnZU51bWJlckZvcm1hdFBvc3RmaXhlczogTGFyZ2VOdW1iZXJGb3JtYXRQb3N0Zml4ZXMsXHJcbiAgICBfcGFyc2VOdW1iZXJGb3JtYXRTdHJpbmc6IGZ1bmN0aW9uKGZvcm1hdFR5cGUpIHtcclxuICAgICAgICB2YXIgZm9ybWF0T2JqZWN0ID0ge307XHJcbiAgICAgICAgaWYgKCFmb3JtYXRUeXBlIHx8IFwic3RyaW5nXCIgIT09IHR5cGVvZiBmb3JtYXRUeXBlKSB7XHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgZm9ybWF0TGlzdCA9IGZvcm1hdFR5cGUudG9Mb3dlckNhc2UoKS5zcGxpdChcIiBcIik7XHJcbiAgICAgICAgZWFjaChmb3JtYXRMaXN0LCAoaW5kZXgsIHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChpbkFycmF5KHZhbHVlLCBOVU1FUklDX0ZPUk1BVFMpID4gLTEpIHtcclxuICAgICAgICAgICAgICAgIGZvcm1hdE9iamVjdC5mb3JtYXRUeXBlID0gdmFsdWVcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSBpbiBMYXJnZU51bWJlckZvcm1hdFBvd2Vycykge1xyXG4gICAgICAgICAgICAgICAgZm9ybWF0T2JqZWN0LnBvd2VyID0gTGFyZ2VOdW1iZXJGb3JtYXRQb3dlcnNbdmFsdWVdXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoZm9ybWF0T2JqZWN0LnBvd2VyICYmICFmb3JtYXRPYmplY3QuZm9ybWF0VHlwZSkge1xyXG4gICAgICAgICAgICBmb3JtYXRPYmplY3QuZm9ybWF0VHlwZSA9IFwiZml4ZWRwb2ludFwiXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChmb3JtYXRPYmplY3QuZm9ybWF0VHlwZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZm9ybWF0T2JqZWN0XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIF9jYWxjdWxhdGVOdW1iZXJQb3dlcjogZnVuY3Rpb24odmFsdWUsIGJhc2UsIG1pblBvd2VyLCBtYXhQb3dlcikge1xyXG4gICAgICAgIHZhciBudW1iZXIgPSBNYXRoLmFicyh2YWx1ZSk7XHJcbiAgICAgICAgdmFyIHBvd2VyID0gMDtcclxuICAgICAgICBpZiAobnVtYmVyID4gMSkge1xyXG4gICAgICAgICAgICB3aGlsZSAobnVtYmVyICYmIG51bWJlciA+PSBiYXNlICYmICh2b2lkIDAgPT09IG1heFBvd2VyIHx8IHBvd2VyIDwgbWF4UG93ZXIpKSB7XHJcbiAgICAgICAgICAgICAgICBwb3dlcisrO1xyXG4gICAgICAgICAgICAgICAgbnVtYmVyIC89IGJhc2VcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAobnVtYmVyID4gMCAmJiBudW1iZXIgPCAxKSB7XHJcbiAgICAgICAgICAgIHdoaWxlIChudW1iZXIgPCAxICYmICh2b2lkIDAgPT09IG1pblBvd2VyIHx8IHBvd2VyID4gbWluUG93ZXIpKSB7XHJcbiAgICAgICAgICAgICAgICBwb3dlci0tO1xyXG4gICAgICAgICAgICAgICAgbnVtYmVyICo9IGJhc2VcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcG93ZXJcclxuICAgIH0sXHJcbiAgICBfZ2V0TnVtYmVyQnlQb3dlcjogZnVuY3Rpb24obnVtYmVyLCBwb3dlciwgYmFzZSkge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBudW1iZXI7XHJcbiAgICAgICAgd2hpbGUgKHBvd2VyID4gMCkge1xyXG4gICAgICAgICAgICByZXN1bHQgLz0gYmFzZTtcclxuICAgICAgICAgICAgcG93ZXItLVxyXG4gICAgICAgIH1cclxuICAgICAgICB3aGlsZSAocG93ZXIgPCAwKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCAqPSBiYXNlO1xyXG4gICAgICAgICAgICBwb3dlcisrXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHRcclxuICAgIH0sXHJcbiAgICBfZm9ybWF0TnVtYmVyOiBmdW5jdGlvbih2YWx1ZSwgZm9ybWF0T2JqZWN0LCBmb3JtYXRDb25maWcpIHtcclxuICAgICAgICBpZiAoXCJhdXRvXCIgPT09IGZvcm1hdE9iamVjdC5wb3dlcikge1xyXG4gICAgICAgICAgICBmb3JtYXRPYmplY3QucG93ZXIgPSB0aGlzLl9jYWxjdWxhdGVOdW1iZXJQb3dlcih2YWx1ZSwgMWUzLCAwLCBNQVhfTEFSR0VfTlVNQkVSX1BPV0VSKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZm9ybWF0T2JqZWN0LnBvd2VyKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gdGhpcy5fZ2V0TnVtYmVyQnlQb3dlcih2YWx1ZSwgZm9ybWF0T2JqZWN0LnBvd2VyLCAxZTMpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBwb3dlclBvc3RmaXggPSB0aGlzLmRlZmF1bHRMYXJnZU51bWJlckZvcm1hdFBvc3RmaXhlc1tmb3JtYXRPYmplY3QucG93ZXJdIHx8IFwiXCI7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IHRoaXMuX2Zvcm1hdE51bWJlckNvcmUodmFsdWUsIGZvcm1hdE9iamVjdC5mb3JtYXRUeXBlLCBmb3JtYXRDb25maWcpO1xyXG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKC8oXFxkfC4kKShcXEQqKSQvLCBcIiQxXCIgKyBwb3dlclBvc3RmaXggKyBcIiQyXCIpO1xyXG4gICAgICAgIHJldHVybiByZXN1bHRcclxuICAgIH0sXHJcbiAgICBfZm9ybWF0TnVtYmVyRXhwb25lbnRpYWw6IGZ1bmN0aW9uKHZhbHVlLCBmb3JtYXRDb25maWcpIHtcclxuICAgICAgICB2YXIgcG93ZXIgPSB0aGlzLl9jYWxjdWxhdGVOdW1iZXJQb3dlcih2YWx1ZSwgREVDSU1BTF9CQVNFKTtcclxuICAgICAgICB2YXIgbnVtYmVyID0gdGhpcy5fZ2V0TnVtYmVyQnlQb3dlcih2YWx1ZSwgcG93ZXIsIERFQ0lNQUxfQkFTRSk7XHJcbiAgICAgICAgaWYgKHZvaWQgMCA9PT0gZm9ybWF0Q29uZmlnLnByZWNpc2lvbikge1xyXG4gICAgICAgICAgICBmb3JtYXRDb25maWcucHJlY2lzaW9uID0gMVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobnVtYmVyLnRvRml4ZWQoZm9ybWF0Q29uZmlnLnByZWNpc2lvbiB8fCAwKSA+PSBERUNJTUFMX0JBU0UpIHtcclxuICAgICAgICAgICAgcG93ZXIrKztcclxuICAgICAgICAgICAgbnVtYmVyIC89IERFQ0lNQUxfQkFTRVxyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgcG93U3RyaW5nID0gKHBvd2VyID49IDAgPyBcIitcIiA6IFwiXCIpICsgcG93ZXIudG9TdHJpbmcoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZm9ybWF0TnVtYmVyQ29yZShudW1iZXIsIFwiZml4ZWRwb2ludFwiLCBmb3JtYXRDb25maWcpICsgXCJFXCIgKyBwb3dTdHJpbmdcclxuICAgIH0sXHJcbiAgICBfYWRkWmVyb2VzOiBmdW5jdGlvbih2YWx1ZSwgcHJlY2lzaW9uKSB7XHJcbiAgICAgICAgdmFyIG11bHRpcGxpZXIgPSBNYXRoLnBvdygxMCwgcHJlY2lzaW9uKTtcclxuICAgICAgICB2YXIgc2lnbiA9IHZhbHVlIDwgMCA/IFwiLVwiIDogXCJcIjtcclxuICAgICAgICB2YWx1ZSA9IChNYXRoLmFicyh2YWx1ZSkgKiBtdWx0aXBsaWVyID4+PiAwKSAvIG11bHRpcGxpZXI7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IHZhbHVlLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgd2hpbGUgKHJlc3VsdC5sZW5ndGggPCBwcmVjaXNpb24pIHtcclxuICAgICAgICAgICAgcmVzdWx0ID0gXCIwXCIgKyByZXN1bHRcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHNpZ24gKyByZXN1bHRcclxuICAgIH0sXHJcbiAgICBfYWRkR3JvdXBTZXBhcmF0b3JzOiBmdW5jdGlvbih2YWx1ZSkge1xyXG4gICAgICAgIHZhciBwYXJ0cyA9IHZhbHVlLnRvU3RyaW5nKCkuc3BsaXQoXCIuXCIpO1xyXG4gICAgICAgIHJldHVybiBwYXJ0c1swXS5yZXBsYWNlKC9cXEIoPz0oXFxkezN9KSsoPyFcXGQpKS9nLCBjb25maWcoKS50aG91c2FuZHNTZXBhcmF0b3IpICsgKHBhcnRzWzFdID8gY29uZmlnKCkuZGVjaW1hbFNlcGFyYXRvciArIHBhcnRzWzFdIDogXCJcIilcclxuICAgIH0sXHJcbiAgICBfZm9ybWF0TnVtYmVyQ29yZTogZnVuY3Rpb24odmFsdWUsIGZvcm1hdCwgZm9ybWF0Q29uZmlnKSB7XHJcbiAgICAgICAgaWYgKFwiZXhwb25lbnRpYWxcIiA9PT0gZm9ybWF0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9mb3JtYXROdW1iZXJFeHBvbmVudGlhbCh2YWx1ZSwgZm9ybWF0Q29uZmlnKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoXCJkZWNpbWFsXCIgIT09IGZvcm1hdCAmJiBudWxsICE9PSBmb3JtYXRDb25maWcucHJlY2lzaW9uKSB7XHJcbiAgICAgICAgICAgIGZvcm1hdENvbmZpZy5wcmVjaXNpb24gPSBmb3JtYXRDb25maWcucHJlY2lzaW9uIHx8IDBcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKFwicGVyY2VudFwiID09PSBmb3JtYXQpIHtcclxuICAgICAgICAgICAgdmFsdWUgKj0gMTAwXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh2b2lkIDAgIT09IGZvcm1hdENvbmZpZy5wcmVjaXNpb24pIHtcclxuICAgICAgICAgICAgaWYgKFwiZGVjaW1hbFwiID09PSBmb3JtYXQpIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlID0gdGhpcy5fYWRkWmVyb2VzKHZhbHVlLCBmb3JtYXRDb25maWcucHJlY2lzaW9uKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdmFsdWUgPSBudWxsID09PSBmb3JtYXRDb25maWcucHJlY2lzaW9uID8gdmFsdWUudG9QcmVjaXNpb24oKSA6IHRvRml4ZWQodmFsdWUsIGZvcm1hdENvbmZpZy5wcmVjaXNpb24pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKFwiZGVjaW1hbFwiICE9PSBmb3JtYXQpIHtcclxuICAgICAgICAgICAgdmFsdWUgPSB0aGlzLl9hZGRHcm91cFNlcGFyYXRvcnModmFsdWUpXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS50b1N0cmluZygpLnJlcGxhY2UoXCIuXCIsIGNvbmZpZygpLmRlY2ltYWxTZXBhcmF0b3IpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChcInBlcmNlbnRcIiA9PT0gZm9ybWF0KSB7XHJcbiAgICAgICAgICAgIHZhbHVlICs9IFwiJVwiXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB2YWx1ZVxyXG4gICAgfSxcclxuICAgIF9ub3JtYWxpemVGb3JtYXQ6IGZ1bmN0aW9uKGZvcm1hdCkge1xyXG4gICAgICAgIGlmICghZm9ybWF0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7fVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgZm9ybWF0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXRcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFpc1BsYWluT2JqZWN0KGZvcm1hdCkpIHtcclxuICAgICAgICAgICAgZm9ybWF0ID0ge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogZm9ybWF0XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZvcm1hdFxyXG4gICAgfSxcclxuICAgIF9nZXRTZXBhcmF0b3JzOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBkZWNpbWFsU2VwYXJhdG9yOiB0aGlzLmdldERlY2ltYWxTZXBhcmF0b3IoKSxcclxuICAgICAgICAgICAgdGhvdXNhbmRzU2VwYXJhdG9yOiB0aGlzLmdldFRob3VzYW5kc1NlcGFyYXRvcigpXHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIGdldFRob3VzYW5kc1NlcGFyYXRvcjogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0KDFlNCwgXCJmaXhlZFBvaW50XCIpWzJdXHJcbiAgICB9LFxyXG4gICAgZ2V0RGVjaW1hbFNlcGFyYXRvcjogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0KDEuMiwge1xyXG4gICAgICAgICAgICB0eXBlOiBcImZpeGVkUG9pbnRcIixcclxuICAgICAgICAgICAgcHJlY2lzaW9uOiAxXHJcbiAgICAgICAgfSlbMV1cclxuICAgIH0sXHJcbiAgICBjb252ZXJ0RGlnaXRzOiBmdW5jdGlvbih2YWx1ZSwgdG9TdGFuZGFyZCkge1xyXG4gICAgICAgIHZhciBkaWdpdHMgPSB0aGlzLmZvcm1hdCg5MCwgXCJkZWNpbWFsXCIpO1xyXG4gICAgICAgIGlmIChcInN0cmluZ1wiICE9PSB0eXBlb2YgdmFsdWUgfHwgXCIwXCIgPT09IGRpZ2l0c1sxXSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWVcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGZyb21GaXJzdERpZ2l0ID0gdG9TdGFuZGFyZCA/IGRpZ2l0c1sxXSA6IFwiMFwiO1xyXG4gICAgICAgIHZhciB0b0ZpcnN0RGlnaXQgPSB0b1N0YW5kYXJkID8gXCIwXCIgOiBkaWdpdHNbMV07XHJcbiAgICAgICAgdmFyIGZyb21MYXN0RGlnaXQgPSB0b1N0YW5kYXJkID8gZGlnaXRzWzBdIDogXCI5XCI7XHJcbiAgICAgICAgdmFyIHJlZ0V4cCA9IG5ldyBSZWdFeHAoXCJbXCIgKyBmcm9tRmlyc3REaWdpdCArIFwiLVwiICsgZnJvbUxhc3REaWdpdCArIFwiXVwiLCBcImdcIik7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlLnJlcGxhY2UocmVnRXhwLCBjaGFyID0+IFN0cmluZy5mcm9tQ2hhckNvZGUoY2hhci5jaGFyQ29kZUF0KDApICsgKHRvRmlyc3REaWdpdC5jaGFyQ29kZUF0KDApIC0gZnJvbUZpcnN0RGlnaXQuY2hhckNvZGVBdCgwKSkpKVxyXG4gICAgfSxcclxuICAgIGdldE5lZ2F0aXZlRXRhbG9uUmVnRXhwOiBmdW5jdGlvbihmb3JtYXQpIHtcclxuICAgICAgICB2YXIgc2VwYXJhdG9ycyA9IHRoaXMuX2dldFNlcGFyYXRvcnMoKTtcclxuICAgICAgICB2YXIgZGlnaXRhbFJlZ0V4cCA9IG5ldyBSZWdFeHAoXCJbMC05XCIgKyBlc2NhcGVSZWdFeHAoc2VwYXJhdG9ycy5kZWNpbWFsU2VwYXJhdG9yICsgc2VwYXJhdG9ycy50aG91c2FuZHNTZXBhcmF0b3IpICsgXCJdK1wiLCBcImdcIik7XHJcbiAgICAgICAgdmFyIG5lZ2F0aXZlRXRhbG9uID0gdGhpcy5mb3JtYXQoLTEsIGZvcm1hdCkucmVwbGFjZShkaWdpdGFsUmVnRXhwLCBcIjFcIik7XHJcbiAgICAgICAgW1wiXFxcXFwiLCBcIihcIiwgXCIpXCIsIFwiW1wiLCBcIl1cIiwgXCIqXCIsIFwiK1wiLCBcIiRcIiwgXCJeXCIsIFwiP1wiLCBcInxcIiwgXCJ7XCIsIFwifVwiXS5mb3JFYWNoKGNoYXIgPT4ge1xyXG4gICAgICAgICAgICBuZWdhdGl2ZUV0YWxvbiA9IG5lZ2F0aXZlRXRhbG9uLnJlcGxhY2UoY2hhciwgXCJcXFxcXCIuY29uY2F0KGNoYXIpKVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIG5lZ2F0aXZlRXRhbG9uID0gbmVnYXRpdmVFdGFsb24ucmVwbGFjZShcIiBcIiwgXCJcXFxcc1wiKTtcclxuICAgICAgICBuZWdhdGl2ZUV0YWxvbiA9IG5lZ2F0aXZlRXRhbG9uLnJlcGxhY2UoXCIxXCIsIFwiLitcIik7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAobmVnYXRpdmVFdGFsb24sIFwiZ1wiKVxyXG4gICAgfSxcclxuICAgIGdldFNpZ246IGZ1bmN0aW9uKHRleHQsIGZvcm1hdCkge1xyXG4gICAgICAgIGlmIChcIi1cIiA9PT0gdGV4dC5yZXBsYWNlKC9bXjAtOS1dL2csIFwiXCIpLmNoYXJBdCgwKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gLTFcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFmb3JtYXQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIDFcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIG5lZ2F0aXZlRXRhbG9uID0gdGhpcy5nZXROZWdhdGl2ZUV0YWxvblJlZ0V4cChmb3JtYXQpO1xyXG4gICAgICAgIHJldHVybiB0ZXh0Lm1hdGNoKG5lZ2F0aXZlRXRhbG9uKSA/IC0xIDogMVxyXG4gICAgfSxcclxuICAgIGZvcm1hdDogZnVuY3Rpb24odmFsdWUsIF9mb3JtYXQpIHtcclxuICAgICAgICBpZiAoXCJudW1iZXJcIiAhPT0gdHlwZW9mIHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoXCJudW1iZXJcIiA9PT0gdHlwZW9mIF9mb3JtYXQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIF9mb3JtYXQgPSBfZm9ybWF0ICYmIF9mb3JtYXQuZm9ybWF0dGVyIHx8IF9mb3JtYXQ7XHJcbiAgICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIF9mb3JtYXQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIF9mb3JtYXQodmFsdWUpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIF9mb3JtYXQgPSB0aGlzLl9ub3JtYWxpemVGb3JtYXQoX2Zvcm1hdCk7XHJcbiAgICAgICAgaWYgKCFfZm9ybWF0LnR5cGUpIHtcclxuICAgICAgICAgICAgX2Zvcm1hdC50eXBlID0gXCJkZWNpbWFsXCJcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIG51bWJlckNvbmZpZyA9IHRoaXMuX3BhcnNlTnVtYmVyRm9ybWF0U3RyaW5nKF9mb3JtYXQudHlwZSk7XHJcbiAgICAgICAgaWYgKCFudW1iZXJDb25maWcpIHtcclxuICAgICAgICAgICAgdmFyIGZvcm1hdHRlckNvbmZpZyA9IHRoaXMuX2dldFNlcGFyYXRvcnMoKTtcclxuICAgICAgICAgICAgZm9ybWF0dGVyQ29uZmlnLnVubGltaXRlZEludGVnZXJEaWdpdHMgPSBfZm9ybWF0LnVubGltaXRlZEludGVnZXJEaWdpdHM7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnZlcnREaWdpdHMoZ2V0Rm9ybWF0dGVyKF9mb3JtYXQudHlwZSwgZm9ybWF0dGVyQ29uZmlnKSh2YWx1ZSkpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLl9mb3JtYXROdW1iZXIodmFsdWUsIG51bWJlckNvbmZpZywgX2Zvcm1hdClcclxuICAgIH0sXHJcbiAgICBwYXJzZTogZnVuY3Rpb24odGV4dCwgZm9ybWF0KSB7XHJcbiAgICAgICAgaWYgKCF0ZXh0KSB7XHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZm9ybWF0ICYmIGZvcm1hdC5wYXJzZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdC5wYXJzZXIodGV4dClcclxuICAgICAgICB9XHJcbiAgICAgICAgdGV4dCA9IHRoaXMuY29udmVydERpZ2l0cyh0ZXh0LCB0cnVlKTtcclxuICAgICAgICBpZiAoZm9ybWF0ICYmIFwic3RyaW5nXCIgIT09IHR5cGVvZiBmb3JtYXQpIHtcclxuICAgICAgICAgICAgZXJyb3JzLmxvZyhcIlcwMDExXCIpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBkZWNpbWFsU2VwYXJhdG9yID0gdGhpcy5nZXREZWNpbWFsU2VwYXJhdG9yKCk7XHJcbiAgICAgICAgdmFyIHJlZ0V4cCA9IG5ldyBSZWdFeHAoXCJbXjAtOVwiICsgZXNjYXBlUmVnRXhwKGRlY2ltYWxTZXBhcmF0b3IpICsgXCJdXCIsIFwiZ1wiKTtcclxuICAgICAgICB2YXIgY2xlYW5lZFRleHQgPSB0ZXh0LnJlcGxhY2UocmVnRXhwLCBcIlwiKS5yZXBsYWNlKGRlY2ltYWxTZXBhcmF0b3IsIFwiLlwiKS5yZXBsYWNlKC9cXC4kL2csIFwiXCIpO1xyXG4gICAgICAgIGlmIChcIi5cIiA9PT0gY2xlYW5lZFRleHQgfHwgXCJcIiA9PT0gY2xlYW5lZFRleHQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGxcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuX2NhbGNTaWduaWZpY2FudERpZ2l0cyhjbGVhbmVkVGV4dCkgPiAxNSkge1xyXG4gICAgICAgICAgICByZXR1cm4gTmFOXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBwYXJzZWQgPSArY2xlYW5lZFRleHQgKiB0aGlzLmdldFNpZ24odGV4dCwgZm9ybWF0KTtcclxuICAgICAgICBmb3JtYXQgPSB0aGlzLl9ub3JtYWxpemVGb3JtYXQoZm9ybWF0KTtcclxuICAgICAgICB2YXIgZm9ybWF0Q29uZmlnID0gdGhpcy5fcGFyc2VOdW1iZXJGb3JtYXRTdHJpbmcoZm9ybWF0LnR5cGUpO1xyXG4gICAgICAgIHZhciBwb3dlciA9IG51bGwgPT09IGZvcm1hdENvbmZpZyB8fCB2b2lkIDAgPT09IGZvcm1hdENvbmZpZyA/IHZvaWQgMCA6IGZvcm1hdENvbmZpZy5wb3dlcjtcclxuICAgICAgICBpZiAocG93ZXIpIHtcclxuICAgICAgICAgICAgaWYgKFwiYXV0b1wiID09PSBwb3dlcikge1xyXG4gICAgICAgICAgICAgICAgdmFyIG1hdGNoID0gdGV4dC5tYXRjaCgvXFxkKEt8TXxCfFQpLyk7XHJcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2gpIHtcclxuICAgICAgICAgICAgICAgICAgICBwb3dlciA9IGZpbmQoT2JqZWN0LmtleXMoTGFyZ2VOdW1iZXJGb3JtYXRQb3N0Zml4ZXMpLCBwb3dlciA9PiBMYXJnZU51bWJlckZvcm1hdFBvc3RmaXhlc1twb3dlcl0gPT09IG1hdGNoWzFdKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHBhcnNlZCAqPSBNYXRoLnBvdygxMCwgMyAqIHBvd2VyKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoXCJwZXJjZW50XCIgPT09IChudWxsID09PSBmb3JtYXRDb25maWcgfHwgdm9pZCAwID09PSBmb3JtYXRDb25maWcgPyB2b2lkIDAgOiBmb3JtYXRDb25maWcuZm9ybWF0VHlwZSkpIHtcclxuICAgICAgICAgICAgcGFyc2VkIC89IDEwMFxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcGFyc2VkXHJcbiAgICB9LFxyXG4gICAgX2NhbGNTaWduaWZpY2FudERpZ2l0czogZnVuY3Rpb24odGV4dCkge1xyXG4gICAgICAgIHZhciBbaW50ZWdlciwgZnJhY3Rpb25hbF0gPSB0ZXh0LnNwbGl0KFwiLlwiKTtcclxuICAgICAgICB2YXIgY2FsY0RpZ2l0c0FmdGVyTGVhZGluZ1plcm9zID0gZGlnaXRzID0+IHtcclxuICAgICAgICAgICAgdmFyIGluZGV4ID0gLTE7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGlnaXRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoXCIwXCIgIT09IGRpZ2l0c1tpXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGluZGV4ID0gaTtcclxuICAgICAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBpbmRleCA+IC0xID8gZGlnaXRzLmxlbmd0aCAtIGluZGV4IDogMFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IDA7XHJcbiAgICAgICAgaWYgKGludGVnZXIpIHtcclxuICAgICAgICAgICAgcmVzdWx0ICs9IGNhbGNEaWdpdHNBZnRlckxlYWRpbmdaZXJvcyhpbnRlZ2VyLnNwbGl0KFwiXCIpKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZnJhY3Rpb25hbCkge1xyXG4gICAgICAgICAgICByZXN1bHQgKz0gY2FsY0RpZ2l0c0FmdGVyTGVhZGluZ1plcm9zKGZyYWN0aW9uYWwuc3BsaXQoXCJcIikucmV2ZXJzZSgpKVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0XHJcbiAgICB9XHJcbn0pO1xyXG5udW1iZXJMb2NhbGl6YXRpb24uaW5qZWN0KGN1cnJlbmN5TG9jYWxpemF0aW9uKTtcclxuaWYgKGhhc0ludGwpIHtcclxuICAgIG51bWJlckxvY2FsaXphdGlvbi5pbmplY3QoaW50bE51bWJlckxvY2FsaXphdGlvbilcclxufVxyXG5leHBvcnQgZGVmYXVsdCBudW1iZXJMb2NhbGl6YXRpb247XHJcbiIsIi8qKlxyXG4gKiBEZXZFeHRyZW1lIChlc20vbG9jYWxpemF0aW9uL29wZW5feG1sX2N1cnJlbmN5X2Zvcm1hdC5qcylcclxuICogVmVyc2lvbjogMjEuMS40XHJcbiAqIEJ1aWxkIGRhdGU6IE1vbiBKdW4gMjEgMjAyMVxyXG4gKlxyXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTIgLSAyMDIxIERldmVsb3BlciBFeHByZXNzIEluYy4gQUxMIFJJR0hUUyBSRVNFUlZFRFxyXG4gKiBSZWFkIGFib3V0IERldkV4dHJlbWUgbGljZW5zaW5nIGhlcmU6IGh0dHBzOi8vanMuZGV2ZXhwcmVzcy5jb20vTGljZW5zaW5nL1xyXG4gKi9cclxuZXhwb3J0IGRlZmF1bHQgKGN1cnJlbmN5U3ltYm9sLCBhY2NvdW50aW5nRm9ybWF0KSA9PiB7XHJcbiAgICBpZiAoIWFjY291bnRpbmdGb3JtYXQpIHtcclxuICAgICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIHZhciBlbmNvZGVkQ3VycmVuY3lTeW1ib2wgPSBjdXJyZW5jeVN5bWJvbDtcclxuICAgIGlmIChcInN0cmluZ1wiID09PSB0eXBlb2YgY3VycmVuY3lTeW1ib2wpIHtcclxuICAgICAgICBlbmNvZGVkQ3VycmVuY3lTeW1ib2wgPSBcIlwiO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY3VycmVuY3lTeW1ib2wubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKFwiJFwiICE9PSBjdXJyZW5jeVN5bWJvbFtpXSkge1xyXG4gICAgICAgICAgICAgICAgZW5jb2RlZEN1cnJlbmN5U3ltYm9sICs9IFwiXFxcXFwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZW5jb2RlZEN1cnJlbmN5U3ltYm9sICs9IGN1cnJlbmN5U3ltYm9sW2ldXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgdmFyIGVuY29kZVN5bWJvbHMgPSB7XHJcbiAgICAgICAgXCIuMDBcIjogXCJ7MH1cIixcclxuICAgICAgICBcIidcIjogXCJcXFxcJ1wiLFxyXG4gICAgICAgIFwiXFxcXChcIjogXCJcXFxcKFwiLFxyXG4gICAgICAgIFwiXFxcXClcIjogXCJcXFxcKVwiLFxyXG4gICAgICAgIFwiIFwiOiBcIlxcXFwgXCIsXHJcbiAgICAgICAgJ1wiJzogXCImcXVvdDtcIixcclxuICAgICAgICBcIlxcXFxcXHhhNFwiOiBlbmNvZGVkQ3VycmVuY3lTeW1ib2xcclxuICAgIH07XHJcbiAgICB2YXIgcmVzdWx0ID0gYWNjb3VudGluZ0Zvcm1hdC5zcGxpdChcIjtcIik7XHJcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgcmVzdWx0Lmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgIGZvciAodmFyIHN5bWJvbCBpbiBlbmNvZGVTeW1ib2xzKSB7XHJcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZW5jb2RlU3ltYm9scywgc3ltYm9sKSkge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0W19pXSA9IHJlc3VsdFtfaV0ucmVwbGFjZShuZXcgUmVnRXhwKHN5bWJvbCwgXCJnXCIpLCBlbmNvZGVTeW1ib2xzW3N5bWJvbF0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gMiA9PT0gcmVzdWx0Lmxlbmd0aCA/IHJlc3VsdFswXSArIFwiXyk7XCIgKyByZXN1bHRbMV0gOiByZXN1bHRbMF1cclxufTtcclxuIiwiLyoqXHJcbiAqIERldkV4dHJlbWUgKGVzbS9sb2NhbGl6YXRpb24vcGFyZW50TG9jYWxlLmpzKVxyXG4gKiBWZXJzaW9uOiAyMS4xLjRcclxuICogQnVpbGQgZGF0ZTogTW9uIEp1biAyMSAyMDIxXHJcbiAqXHJcbiAqIENvcHlyaWdodCAoYykgMjAxMiAtIDIwMjEgRGV2ZWxvcGVyIEV4cHJlc3MgSW5jLiBBTEwgUklHSFRTIFJFU0VSVkVEXHJcbiAqIFJlYWQgYWJvdXQgRGV2RXh0cmVtZSBsaWNlbnNpbmcgaGVyZTogaHR0cHM6Ly9qcy5kZXZleHByZXNzLmNvbS9MaWNlbnNpbmcvXHJcbiAqL1xyXG52YXIgUEFSRU5UX0xPQ0FMRV9TRVBBUkFUT1IgPSBcIi1cIjtcclxuZXhwb3J0IGRlZmF1bHQgKHBhcmVudExvY2FsZXMsIGxvY2FsZSkgPT4ge1xyXG4gICAgdmFyIHBhcmVudExvY2FsZSA9IHBhcmVudExvY2FsZXNbbG9jYWxlXTtcclxuICAgIGlmIChwYXJlbnRMb2NhbGUpIHtcclxuICAgICAgICByZXR1cm4gXCJyb290XCIgIT09IHBhcmVudExvY2FsZSAmJiBwYXJlbnRMb2NhbGVcclxuICAgIH1cclxuICAgIHJldHVybiBsb2NhbGUuc3Vic3RyKDAsIGxvY2FsZS5sYXN0SW5kZXhPZihQQVJFTlRfTE9DQUxFX1NFUEFSQVRPUikpXHJcbn07XHJcbiIsIi8qKlxyXG4gKiBEZXZFeHRyZW1lIChlc20vbG9jYWxpemF0aW9uL3V0aWxzLmpzKVxyXG4gKiBWZXJzaW9uOiAyMS4xLjRcclxuICogQnVpbGQgZGF0ZTogTW9uIEp1biAyMSAyMDIxXHJcbiAqXHJcbiAqIENvcHlyaWdodCAoYykgMjAxMiAtIDIwMjEgRGV2ZWxvcGVyIEV4cHJlc3MgSW5jLiBBTEwgUklHSFRTIFJFU0VSVkVEXHJcbiAqIFJlYWQgYWJvdXQgRGV2RXh0cmVtZSBsaWNlbnNpbmcgaGVyZTogaHR0cHM6Ly9qcy5kZXZleHByZXNzLmNvbS9MaWNlbnNpbmcvXHJcbiAqL1xyXG5pbXBvcnQge1xyXG4gICAgc2lnblxyXG59IGZyb20gXCIuLi9jb3JlL3V0aWxzL21hdGhcIjtcclxudmFyIERFQ0lNQUxfQkFTRSA9IDEwO1xyXG5cclxuZnVuY3Rpb24gcm91bmRCeUFicyh2YWx1ZSkge1xyXG4gICAgdmFyIHZhbHVlU2lnbiA9IHNpZ24odmFsdWUpO1xyXG4gICAgcmV0dXJuIHZhbHVlU2lnbiAqIE1hdGgucm91bmQoTWF0aC5hYnModmFsdWUpKVxyXG59XHJcblxyXG5mdW5jdGlvbiBhZGp1c3RWYWx1ZSh2YWx1ZSwgcHJlY2lzaW9uKSB7XHJcbiAgICB2YXIgcHJlY2lzaW9uTXVsdGlwbGllciA9IE1hdGgucG93KERFQ0lNQUxfQkFTRSwgcHJlY2lzaW9uKTtcclxuICAgIHZhciByb3VuZE11bHRpcGxpZXIgPSBwcmVjaXNpb25NdWx0aXBsaWVyICogREVDSU1BTF9CQVNFO1xyXG4gICAgdmFyIGludGVybWVkaWF0ZVZhbHVlID0gdmFsdWUgKiByb3VuZE11bHRpcGxpZXIgLyBERUNJTUFMX0JBU0U7XHJcbiAgICByZXR1cm4gcm91bmRCeUFicyhpbnRlcm1lZGlhdGVWYWx1ZSkgLyBwcmVjaXNpb25NdWx0aXBsaWVyXHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIHRvRml4ZWQodmFsdWUsIHByZWNpc2lvbikge1xyXG4gICAgdmFyIHZhbHVlUHJlY2lzaW9uID0gcHJlY2lzaW9uIHx8IDA7XHJcbiAgICB2YXIgYWRqdXN0ZWRWYWx1ZSA9IHZhbHVlUHJlY2lzaW9uID4gMCA/IGFkanVzdFZhbHVlKC4uLmFyZ3VtZW50cykgOiB2YWx1ZTtcclxuICAgIHJldHVybiBhZGp1c3RlZFZhbHVlLnRvRml4ZWQodmFsdWVQcmVjaXNpb24pXHJcbn1cclxuIl0sInNvdXJjZVJvb3QiOiIifQ==", "@public_path/build/vendors-node_modules_devextreme_esm_localization_message_js-node_modules_devextreme_esm_local-2a9609.js", "/builds/dev/refonte_sav/public/build/vendors-node_modules_devextreme_esm_localization_message_js-node_modules_devextreme_esm_local-2a9609.js");
    }
}
