{"mappings":"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","sources":["<anon>","node_modules/jquery/dist/jquery.js","src/public.js","node_modules/bootstrap/dist/js/bootstrap.bundle.js","node_modules/bootstrap/js/src/util.js","node_modules/bootstrap/js/src/alert.js","node_modules/bootstrap/js/src/button.js","node_modules/bootstrap/js/src/carousel.js","node_modules/bootstrap/js/src/collapse.js","node_modules/bootstrap/node_modules/popper.js/dist/esm/popper.js","node_modules/bootstrap/js/src/dropdown.js","node_modules/bootstrap/js/src/modal.js","node_modules/bootstrap/js/src/tools/sanitizer.js","node_modules/bootstrap/js/src/tooltip.js","node_modules/bootstrap/js/src/popover.js","node_modules/bootstrap/js/src/scrollspy.js","node_modules/bootstrap/js/src/tab.js","node_modules/bootstrap/js/src/toast.js"],"sourcesContent":["(() => {\n\nfunction $parcel$interopDefault(a) {\n  return a && a.__esModule ? a.default : a;\n}\n\n      var $parcel$global = globalThis;\n    \nvar $parcel$modules = {};\nvar $parcel$inits = {};\n\nvar parcelRequire = $parcel$global[\"parcelRequire94c2\"];\n\nif (parcelRequire == null) {\n  parcelRequire = function(id) {\n    if (id in $parcel$modules) {\n      return $parcel$modules[id].exports;\n    }\n    if (id in $parcel$inits) {\n      var init = $parcel$inits[id];\n      delete $parcel$inits[id];\n      var module = {id: id, exports: {}};\n      $parcel$modules[id] = module;\n      init.call(module.exports, module, module.exports);\n      return module.exports;\n    }\n    var err = new Error(\"Cannot find module '\" + id + \"'\");\n    err.code = 'MODULE_NOT_FOUND';\n    throw err;\n  };\n\n  parcelRequire.register = function register(id, init) {\n    $parcel$inits[id] = init;\n  };\n\n  $parcel$global[\"parcelRequire94c2\"] = parcelRequire;\n}\n\nvar parcelRegister = parcelRequire.register;\nparcelRegister(\"iUSsr\", function(module, exports) {\n/*!\n * jQuery JavaScript Library v3.7.1\n * https://jquery.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2023-08-28T13:37Z\n */ (function(global, factory) {\n    \"use strict\";\n    if (typeof module.exports === \"object\") // For CommonJS and CommonJS-like environments where a proper `window`\n    // is present, execute the factory and get jQuery.\n    // For environments that do not have a `window` with a `document`\n    // (such as Node.js), expose a factory as module.exports.\n    // This accentuates the need for the creation of a real `window`.\n    // e.g. var jQuery = require(\"jquery\")(window);\n    // See ticket trac-14549 for more info.\n    module.exports = global.document ? factory(global, true) : function(w) {\n        if (!w.document) throw new Error(\"jQuery requires a window with a document\");\n        return factory(w);\n    };\n    else factory(global);\n// Pass this if window is not defined yet\n})(typeof window !== \"undefined\" ? window : module.exports, function(window1, noGlobal) {\n    // Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n    // throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n    // arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n    // enough that all such attempts are guarded in a try block.\n    \"use strict\";\n    var arr = [];\n    var getProto = Object.getPrototypeOf;\n    var slice = arr.slice;\n    var flat = arr.flat ? function(array) {\n        return arr.flat.call(array);\n    } : function(array) {\n        return arr.concat.apply([], array);\n    };\n    var push = arr.push;\n    var indexOf = arr.indexOf;\n    var class2type = {};\n    var toString = class2type.toString;\n    var hasOwn = class2type.hasOwnProperty;\n    var fnToString = hasOwn.toString;\n    var ObjectFunctionString = fnToString.call(Object);\n    var support = {};\n    var isFunction = function isFunction(obj) {\n        // Support: Chrome <=57, Firefox <=52\n        // In some browsers, typeof returns \"function\" for HTML <object> elements\n        // (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n        // We don't want to classify *any* DOM node as a function.\n        // Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5\n        // Plus for old WebKit, typeof returns \"function\" for HTML collections\n        // (e.g., `typeof document.getElementsByTagName(\"div\") === \"function\"`). (gh-4756)\n        return typeof obj === \"function\" && typeof obj.nodeType !== \"number\" && typeof obj.item !== \"function\";\n    };\n    var isWindow = function isWindow(obj) {\n        return obj != null && obj === obj.window;\n    };\n    var document = window1.document;\n    var preservedScriptAttributes = {\n        type: true,\n        src: true,\n        nonce: true,\n        noModule: true\n    };\n    function DOMEval(code, node, doc) {\n        doc = doc || document;\n        var i, val, script = doc.createElement(\"script\");\n        script.text = code;\n        if (node) for(i in preservedScriptAttributes){\n            // Support: Firefox 64+, Edge 18+\n            // Some browsers don't support the \"nonce\" property on scripts.\n            // On the other hand, just using `getAttribute` is not enough as\n            // the `nonce` attribute is reset to an empty string whenever it\n            // becomes browsing-context connected.\n            // See https://github.com/whatwg/html/issues/2369\n            // See https://html.spec.whatwg.org/#nonce-attributes\n            // The `node.getAttribute` check was added for the sake of\n            // `jQuery.globalEval` so that it can fake a nonce-containing node\n            // via an object.\n            val = node[i] || node.getAttribute && node.getAttribute(i);\n            if (val) script.setAttribute(i, val);\n        }\n        doc.head.appendChild(script).parentNode.removeChild(script);\n    }\n    function toType(obj) {\n        if (obj == null) return obj + \"\";\n        // Support: Android <=2.3 only (functionish RegExp)\n        return typeof obj === \"object\" || typeof obj === \"function\" ? class2type[toString.call(obj)] || \"object\" : typeof obj;\n    }\n    /* global Symbol */ // Defining this global in .eslintrc.json would create a danger of using the global\n    // unguarded in another place, it seems safer to define global only for this module\n    var version = \"3.7.1\", rhtmlSuffix = /HTML$/i, // Define a local copy of jQuery\n    jQuery = function(selector, context) {\n        // The jQuery object is actually just the init constructor 'enhanced'\n        // Need init if jQuery is called (just allow error to be thrown if not included)\n        return new jQuery.fn.init(selector, context);\n    };\n    jQuery.fn = jQuery.prototype = {\n        // The current version of jQuery being used\n        jquery: version,\n        constructor: jQuery,\n        // The default length of a jQuery object is 0\n        length: 0,\n        toArray: function() {\n            return slice.call(this);\n        },\n        // Get the Nth element in the matched element set OR\n        // Get the whole matched element set as a clean array\n        get: function(num) {\n            // Return all the elements in a clean array\n            if (num == null) return slice.call(this);\n            // Return just the one element from the set\n            return num < 0 ? this[num + this.length] : this[num];\n        },\n        // Take an array of elements and push it onto the stack\n        // (returning the new matched element set)\n        pushStack: function(elems) {\n            // Build a new jQuery matched element set\n            var ret = jQuery.merge(this.constructor(), elems);\n            // Add the old object onto the stack (as a reference)\n            ret.prevObject = this;\n            // Return the newly-formed element set\n            return ret;\n        },\n        // Execute a callback for every element in the matched set.\n        each: function(callback) {\n            return jQuery.each(this, callback);\n        },\n        map: function(callback) {\n            return this.pushStack(jQuery.map(this, function(elem, i) {\n                return callback.call(elem, i, elem);\n            }));\n        },\n        slice: function() {\n            return this.pushStack(slice.apply(this, arguments));\n        },\n        first: function() {\n            return this.eq(0);\n        },\n        last: function() {\n            return this.eq(-1);\n        },\n        even: function() {\n            return this.pushStack(jQuery.grep(this, function(_elem, i) {\n                return (i + 1) % 2;\n            }));\n        },\n        odd: function() {\n            return this.pushStack(jQuery.grep(this, function(_elem, i) {\n                return i % 2;\n            }));\n        },\n        eq: function(i) {\n            var len = this.length, j = +i + (i < 0 ? len : 0);\n            return this.pushStack(j >= 0 && j < len ? [\n                this[j]\n            ] : []);\n        },\n        end: function() {\n            return this.prevObject || this.constructor();\n        },\n        // For internal use only.\n        // Behaves like an Array's method, not like a jQuery method.\n        push: push,\n        sort: arr.sort,\n        splice: arr.splice\n    };\n    jQuery.extend = jQuery.fn.extend = function() {\n        var options, name, src, copy, copyIsArray, clone, target = arguments[0] || {}, i = 1, length = arguments.length, deep = false;\n        // Handle a deep copy situation\n        if (typeof target === \"boolean\") {\n            deep = target;\n            // Skip the boolean and the target\n            target = arguments[i] || {};\n            i++;\n        }\n        // Handle case when target is a string or something (possible in deep copy)\n        if (typeof target !== \"object\" && !isFunction(target)) target = {};\n        // Extend jQuery itself if only one argument is passed\n        if (i === length) {\n            target = this;\n            i--;\n        }\n        for(; i < length; i++){\n            // Only deal with non-null/undefined values\n            if ((options = arguments[i]) != null) // Extend the base object\n            for(name in options){\n                copy = options[name];\n                // Prevent Object.prototype pollution\n                // Prevent never-ending loop\n                if (name === \"__proto__\" || target === copy) continue;\n                // Recurse if we're merging plain objects or arrays\n                if (deep && copy && (jQuery.isPlainObject(copy) || (copyIsArray = Array.isArray(copy)))) {\n                    src = target[name];\n                    // Ensure proper type for the source value\n                    if (copyIsArray && !Array.isArray(src)) clone = [];\n                    else if (!copyIsArray && !jQuery.isPlainObject(src)) clone = {};\n                    else clone = src;\n                    copyIsArray = false;\n                    // Never move original objects, clone them\n                    target[name] = jQuery.extend(deep, clone, copy);\n                // Don't bring in undefined values\n                } else if (copy !== undefined) target[name] = copy;\n            }\n        }\n        // Return the modified object\n        return target;\n    };\n    jQuery.extend({\n        // Unique for each copy of jQuery on the page\n        expando: \"jQuery\" + (version + Math.random()).replace(/\\D/g, \"\"),\n        // Assume jQuery is ready without the ready module\n        isReady: true,\n        error: function(msg) {\n            throw new Error(msg);\n        },\n        noop: function() {},\n        isPlainObject: function(obj) {\n            var proto, Ctor;\n            // Detect obvious negatives\n            // Use toString instead of jQuery.type to catch host objects\n            if (!obj || toString.call(obj) !== \"[object Object]\") return false;\n            proto = getProto(obj);\n            // Objects with no prototype (e.g., `Object.create( null )`) are plain\n            if (!proto) return true;\n            // Objects with prototype are plain iff they were constructed by a global Object function\n            Ctor = hasOwn.call(proto, \"constructor\") && proto.constructor;\n            return typeof Ctor === \"function\" && fnToString.call(Ctor) === ObjectFunctionString;\n        },\n        isEmptyObject: function(obj) {\n            var name;\n            for(name in obj)return false;\n            return true;\n        },\n        // Evaluates a script in a provided context; falls back to the global one\n        // if not specified.\n        globalEval: function(code, options, doc) {\n            DOMEval(code, {\n                nonce: options && options.nonce\n            }, doc);\n        },\n        each: function(obj, callback) {\n            var length, i = 0;\n            if (isArrayLike(obj)) {\n                length = obj.length;\n                for(; i < length; i++){\n                    if (callback.call(obj[i], i, obj[i]) === false) break;\n                }\n            } else for(i in obj){\n                if (callback.call(obj[i], i, obj[i]) === false) break;\n            }\n            return obj;\n        },\n        // Retrieve the text value of an array of DOM nodes\n        text: function(elem) {\n            var node, ret = \"\", i = 0, nodeType = elem.nodeType;\n            if (!nodeType) // If no nodeType, this is expected to be an array\n            while(node = elem[i++])// Do not traverse comment nodes\n            ret += jQuery.text(node);\n            if (nodeType === 1 || nodeType === 11) return elem.textContent;\n            if (nodeType === 9) return elem.documentElement.textContent;\n            if (nodeType === 3 || nodeType === 4) return elem.nodeValue;\n            // Do not include comment or processing instruction nodes\n            return ret;\n        },\n        // results is for internal usage only\n        makeArray: function(arr, results) {\n            var ret = results || [];\n            if (arr != null) {\n                if (isArrayLike(Object(arr))) jQuery.merge(ret, typeof arr === \"string\" ? [\n                    arr\n                ] : arr);\n                else push.call(ret, arr);\n            }\n            return ret;\n        },\n        inArray: function(elem, arr, i) {\n            return arr == null ? -1 : indexOf.call(arr, elem, i);\n        },\n        isXMLDoc: function(elem) {\n            var namespace = elem && elem.namespaceURI, docElem = elem && (elem.ownerDocument || elem).documentElement;\n            // Assume HTML when documentElement doesn't yet exist, such as inside\n            // document fragments.\n            return !rhtmlSuffix.test(namespace || docElem && docElem.nodeName || \"HTML\");\n        },\n        // Support: Android <=4.0 only, PhantomJS 1 only\n        // push.apply(_, arraylike) throws on ancient WebKit\n        merge: function(first, second) {\n            var len = +second.length, j = 0, i = first.length;\n            for(; j < len; j++)first[i++] = second[j];\n            first.length = i;\n            return first;\n        },\n        grep: function(elems, callback, invert) {\n            var callbackInverse, matches = [], i = 0, length = elems.length, callbackExpect = !invert;\n            // Go through the array, only saving the items\n            // that pass the validator function\n            for(; i < length; i++){\n                callbackInverse = !callback(elems[i], i);\n                if (callbackInverse !== callbackExpect) matches.push(elems[i]);\n            }\n            return matches;\n        },\n        // arg is for internal usage only\n        map: function(elems, callback, arg) {\n            var length, value, i = 0, ret = [];\n            // Go through the array, translating each of the items to their new values\n            if (isArrayLike(elems)) {\n                length = elems.length;\n                for(; i < length; i++){\n                    value = callback(elems[i], i, arg);\n                    if (value != null) ret.push(value);\n                }\n            // Go through every key on the object,\n            } else for(i in elems){\n                value = callback(elems[i], i, arg);\n                if (value != null) ret.push(value);\n            }\n            // Flatten any nested arrays\n            return flat(ret);\n        },\n        // A global GUID counter for objects\n        guid: 1,\n        // jQuery.support is not used in Core but other projects attach their\n        // properties to it so it needs to exist.\n        support: support\n    });\n    if (typeof Symbol === \"function\") jQuery.fn[Symbol.iterator] = arr[Symbol.iterator];\n    // Populate the class2type map\n    jQuery.each(\"Boolean Number String Function Array Date RegExp Object Error Symbol\".split(\" \"), function(_i, name) {\n        class2type[\"[object \" + name + \"]\"] = name.toLowerCase();\n    });\n    function isArrayLike(obj) {\n        // Support: real iOS 8.2 only (not reproducible in simulator)\n        // `in` check used to prevent JIT error (gh-2145)\n        // hasOwn isn't used here due to false negatives\n        // regarding Nodelist length in IE\n        var length = !!obj && \"length\" in obj && obj.length, type = toType(obj);\n        if (isFunction(obj) || isWindow(obj)) return false;\n        return type === \"array\" || length === 0 || typeof length === \"number\" && length > 0 && length - 1 in obj;\n    }\n    function nodeName(elem, name) {\n        return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n    }\n    var pop = arr.pop;\n    var sort = arr.sort;\n    var splice = arr.splice;\n    var whitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\";\n    var rtrimCSS = new RegExp(\"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\");\n    // Note: an element does not contain itself\n    jQuery.contains = function(a, b) {\n        var bup = b && b.parentNode;\n        return a === bup || !!(bup && bup.nodeType === 1 && // Support: IE 9 - 11+\n        // IE doesn't have `contains` on SVG.\n        (a.contains ? a.contains(bup) : a.compareDocumentPosition && a.compareDocumentPosition(bup) & 16));\n    };\n    // CSS string/identifier serialization\n    // https://drafts.csswg.org/cssom/#common-serializing-idioms\n    var rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;\n    function fcssescape(ch, asCodePoint) {\n        if (asCodePoint) {\n            // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n            if (ch === \"\\0\") return \"\\uFFFD\";\n            // Control characters and (dependent upon position) numbers get escaped as code points\n            return ch.slice(0, -1) + \"\\\\\" + ch.charCodeAt(ch.length - 1).toString(16) + \" \";\n        }\n        // Other potentially-special ASCII characters get backslash-escaped\n        return \"\\\\\" + ch;\n    }\n    jQuery.escapeSelector = function(sel) {\n        return (sel + \"\").replace(rcssescape, fcssescape);\n    };\n    var preferredDoc = document, pushNative = push;\n    (function() {\n        var i, Expr, outermostContext, sortInput, hasDuplicate, push = pushNative, // Local document vars\n        document, documentElement, documentIsHTML, rbuggyQSA, matches, // Instance-specific data\n        expando = jQuery.expando, dirruns = 0, done = 0, classCache = createCache(), tokenCache = createCache(), compilerCache = createCache(), nonnativeSelectorCache = createCache(), sortOrder = function(a, b) {\n            if (a === b) hasDuplicate = true;\n            return 0;\n        }, booleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\", // Regular expressions\n        // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\n        identifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace + \"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\", // Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors\n        attributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace + // Operator (capture 2)\n        \"*([*^$|!~]?=)\" + whitespace + // \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n        \"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" + whitespace + \"*\\\\]\", pseudos = \":(\" + identifier + \")(?:\\\\((\" + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n        // 1. quoted (capture 3; capture 4 or capture 5)\n        \"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" + // 2. simple (capture 6)\n        \"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" + // 3. anything else (capture 2)\n        \".*\" + \")\\\\)|)\", // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n        rwhitespace = new RegExp(whitespace + \"+\", \"g\"), rcomma = new RegExp(\"^\" + whitespace + \"*,\" + whitespace + \"*\"), rleadingCombinator = new RegExp(\"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\"), rdescend = new RegExp(whitespace + \"|>\"), rpseudo = new RegExp(pseudos), ridentifier = new RegExp(\"^\" + identifier + \"$\"), matchExpr = {\n            ID: new RegExp(\"^#(\" + identifier + \")\"),\n            CLASS: new RegExp(\"^\\\\.(\" + identifier + \")\"),\n            TAG: new RegExp(\"^(\" + identifier + \"|[*])\"),\n            ATTR: new RegExp(\"^\" + attributes),\n            PSEUDO: new RegExp(\"^\" + pseudos),\n            CHILD: new RegExp(\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\"),\n            bool: new RegExp(\"^(?:\" + booleans + \")$\", \"i\"),\n            // For use in libraries implementing .is()\n            // We use this for POS matching in `select`\n            needsContext: new RegExp(\"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\")\n        }, rinputs = /^(?:input|select|textarea|button)$/i, rheader = /^h\\d$/i, // Easily-parseable/retrievable ID or TAG or CLASS selectors\n        rquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/, rsibling = /[+~]/, // CSS escapes\n        // https://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n        runescape = new RegExp(\"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace + \"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\"), funescape = function(escape, nonHex) {\n            var high = \"0x\" + escape.slice(1) - 0x10000;\n            if (nonHex) // Strip the backslash prefix from a non-hex escape sequence\n            return nonHex;\n            // Replace a hexadecimal escape sequence with the encoded Unicode code point\n            // Support: IE <=11+\n            // For values outside the Basic Multilingual Plane (BMP), manually construct a\n            // surrogate pair\n            return high < 0 ? String.fromCharCode(high + 0x10000) : String.fromCharCode(high >> 10 | 0xD800, high & 0x3FF | 0xDC00);\n        }, // Used for iframes; see `setDocument`.\n        // Support: IE 9 - 11+, Edge 12 - 18+\n        // Removing the function wrapper causes a \"Permission Denied\"\n        // error in IE/Edge.\n        unloadHandler = function() {\n            setDocument();\n        }, inDisabledFieldset = addCombinator(function(elem) {\n            return elem.disabled === true && nodeName(elem, \"fieldset\");\n        }, {\n            dir: \"parentNode\",\n            next: \"legend\"\n        });\n        // Support: IE <=9 only\n        // Accessing document.activeElement can throw unexpectedly\n        // https://bugs.jquery.com/ticket/13393\n        function safeActiveElement() {\n            try {\n                return document.activeElement;\n            } catch (err) {}\n        }\n        // Optimize for push.apply( _, NodeList )\n        try {\n            push.apply(arr = slice.call(preferredDoc.childNodes), preferredDoc.childNodes);\n            // Support: Android <=4.0\n            // Detect silently failing push.apply\n            // eslint-disable-next-line no-unused-expressions\n            arr[preferredDoc.childNodes.length].nodeType;\n        } catch (e) {\n            push = {\n                apply: function(target, els) {\n                    pushNative.apply(target, slice.call(els));\n                },\n                call: function(target) {\n                    pushNative.apply(target, slice.call(arguments, 1));\n                }\n            };\n        }\n        function find(selector, context, results, seed) {\n            var m, i, elem, nid, match, groups, newSelector, newContext = context && context.ownerDocument, // nodeType defaults to 9, since context defaults to document\n            nodeType = context ? context.nodeType : 9;\n            results = results || [];\n            // Return early from calls with invalid selector or context\n            if (typeof selector !== \"string\" || !selector || nodeType !== 1 && nodeType !== 9 && nodeType !== 11) return results;\n            // Try to shortcut find operations (as opposed to filters) in HTML documents\n            if (!seed) {\n                setDocument(context);\n                context = context || document;\n                if (documentIsHTML) {\n                    // If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n                    // (excepting DocumentFragment context, where the methods don't exist)\n                    if (nodeType !== 11 && (match = rquickExpr.exec(selector))) {\n                        // ID selector\n                        if (m = match[1]) {\n                            // Document context\n                            if (nodeType === 9) {\n                                if (elem = context.getElementById(m)) // Support: IE 9 only\n                                // getElementById can match elements by name instead of ID\n                                {\n                                    if (elem.id === m) {\n                                        push.call(results, elem);\n                                        return results;\n                                    }\n                                } else return results;\n                            // Element context\n                            } else // Support: IE 9 only\n                            // getElementById can match elements by name instead of ID\n                            if (newContext && (elem = newContext.getElementById(m)) && find.contains(context, elem) && elem.id === m) {\n                                push.call(results, elem);\n                                return results;\n                            }\n                        // Type selector\n                        } else if (match[2]) {\n                            push.apply(results, context.getElementsByTagName(selector));\n                            return results;\n                        // Class selector\n                        } else if ((m = match[3]) && context.getElementsByClassName) {\n                            push.apply(results, context.getElementsByClassName(m));\n                            return results;\n                        }\n                    }\n                    // Take advantage of querySelectorAll\n                    if (!nonnativeSelectorCache[selector + \" \"] && (!rbuggyQSA || !rbuggyQSA.test(selector))) {\n                        newSelector = selector;\n                        newContext = context;\n                        // qSA considers elements outside a scoping root when evaluating child or\n                        // descendant combinators, which is not what we want.\n                        // In such cases, we work around the behavior by prefixing every selector in the\n                        // list with an ID selector referencing the scope context.\n                        // The technique has to be used as well when a leading combinator is used\n                        // as such selectors are not recognized by querySelectorAll.\n                        // Thanks to Andrew Dupont for this technique.\n                        if (nodeType === 1 && (rdescend.test(selector) || rleadingCombinator.test(selector))) {\n                            // Expand context for sibling selectors\n                            newContext = rsibling.test(selector) && testContext(context.parentNode) || context;\n                            // We can use :scope instead of the ID hack if the browser\n                            // supports it & if we're not changing the context.\n                            // Support: IE 11+, Edge 17 - 18+\n                            // IE/Edge sometimes throw a \"Permission denied\" error when\n                            // strict-comparing two documents; shallow comparisons work.\n                            // eslint-disable-next-line eqeqeq\n                            if (newContext != context || !support.scope) {\n                                // Capture the context ID, setting it first if necessary\n                                if (nid = context.getAttribute(\"id\")) nid = jQuery.escapeSelector(nid);\n                                else context.setAttribute(\"id\", nid = expando);\n                            }\n                            // Prefix every selector in the list\n                            groups = tokenize(selector);\n                            i = groups.length;\n                            while(i--)groups[i] = (nid ? \"#\" + nid : \":scope\") + \" \" + toSelector(groups[i]);\n                            newSelector = groups.join(\",\");\n                        }\n                        try {\n                            push.apply(results, newContext.querySelectorAll(newSelector));\n                            return results;\n                        } catch (qsaError) {\n                            nonnativeSelectorCache(selector, true);\n                        } finally{\n                            if (nid === expando) context.removeAttribute(\"id\");\n                        }\n                    }\n                }\n            }\n            // All others\n            return select(selector.replace(rtrimCSS, \"$1\"), context, results, seed);\n        }\n        /**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */ function createCache() {\n            var keys = [];\n            function cache(key, value) {\n                // Use (key + \" \") to avoid collision with native prototype properties\n                // (see https://github.com/jquery/sizzle/issues/157)\n                if (keys.push(key + \" \") > Expr.cacheLength) // Only keep the most recent entries\n                delete cache[keys.shift()];\n                return cache[key + \" \"] = value;\n            }\n            return cache;\n        }\n        /**\n * Mark a function for special use by jQuery selector module\n * @param {Function} fn The function to mark\n */ function markFunction(fn) {\n            fn[expando] = true;\n            return fn;\n        }\n        /**\n * Support testing using an element\n * @param {Function} fn Passed the created element and returns a boolean result\n */ function assert(fn) {\n            var el = document.createElement(\"fieldset\");\n            try {\n                return !!fn(el);\n            } catch (e) {\n                return false;\n            } finally{\n                // Remove from its parent by default\n                if (el.parentNode) el.parentNode.removeChild(el);\n                // release memory in IE\n                el = null;\n            }\n        }\n        /**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */ function createInputPseudo(type) {\n            return function(elem) {\n                return nodeName(elem, \"input\") && elem.type === type;\n            };\n        }\n        /**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */ function createButtonPseudo(type) {\n            return function(elem) {\n                return (nodeName(elem, \"input\") || nodeName(elem, \"button\")) && elem.type === type;\n            };\n        }\n        /**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */ function createDisabledPseudo(disabled) {\n            // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n            return function(elem) {\n                // Only certain elements can match :enabled or :disabled\n                // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n                // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n                if (\"form\" in elem) {\n                    // Check for inherited disabledness on relevant non-disabled elements:\n                    // * listed form-associated elements in a disabled fieldset\n                    //   https://html.spec.whatwg.org/multipage/forms.html#category-listed\n                    //   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n                    // * option elements in a disabled optgroup\n                    //   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n                    // All such elements have a \"form\" property.\n                    if (elem.parentNode && elem.disabled === false) {\n                        // Option elements defer to a parent optgroup if present\n                        if (\"label\" in elem) {\n                            if (\"label\" in elem.parentNode) return elem.parentNode.disabled === disabled;\n                            else return elem.disabled === disabled;\n                        }\n                        // Support: IE 6 - 11+\n                        // Use the isDisabled shortcut property to check for disabled fieldset ancestors\n                        return elem.isDisabled === disabled || // Where there is no isDisabled, check manually\n                        elem.isDisabled !== !disabled && inDisabledFieldset(elem) === disabled;\n                    }\n                    return elem.disabled === disabled;\n                // Try to winnow out elements that can't be disabled before trusting the disabled property.\n                // Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n                // even exist on them, let alone have a boolean value.\n                } else if (\"label\" in elem) return elem.disabled === disabled;\n                // Remaining elements are neither :enabled nor :disabled\n                return false;\n            };\n        }\n        /**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */ function createPositionalPseudo(fn) {\n            return markFunction(function(argument) {\n                argument = +argument;\n                return markFunction(function(seed, matches) {\n                    var j, matchIndexes = fn([], seed.length, argument), i = matchIndexes.length;\n                    // Match elements found at the specified indexes\n                    while(i--)if (seed[j = matchIndexes[i]]) seed[j] = !(matches[j] = seed[j]);\n                });\n            });\n        }\n        /**\n * Checks a node for validity as a jQuery selector context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */ function testContext(context) {\n            return context && typeof context.getElementsByTagName !== \"undefined\" && context;\n        }\n        /**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [node] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */ function setDocument(node) {\n            var subWindow, doc = node ? node.ownerDocument || node : preferredDoc;\n            // Return early if doc is invalid or already selected\n            // Support: IE 11+, Edge 17 - 18+\n            // IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n            // two documents; shallow comparisons work.\n            // eslint-disable-next-line eqeqeq\n            if (doc == document || doc.nodeType !== 9 || !doc.documentElement) return document;\n            // Update global variables\n            document = doc;\n            documentElement = document.documentElement;\n            documentIsHTML = !jQuery.isXMLDoc(document);\n            // Support: iOS 7 only, IE 9 - 11+\n            // Older browsers didn't support unprefixed `matches`.\n            matches = documentElement.matches || documentElement.webkitMatchesSelector || documentElement.msMatchesSelector;\n            // Support: IE 9 - 11+, Edge 12 - 18+\n            // Accessing iframe documents after unload throws \"permission denied\" errors\n            // (see trac-13936).\n            // Limit the fix to IE & Edge Legacy; despite Edge 15+ implementing `matches`,\n            // all IE 9+ and Edge Legacy versions implement `msMatchesSelector` as well.\n            if (documentElement.msMatchesSelector && // Support: IE 11+, Edge 17 - 18+\n            // IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n            // two documents; shallow comparisons work.\n            // eslint-disable-next-line eqeqeq\n            preferredDoc != document && (subWindow = document.defaultView) && subWindow.top !== subWindow) // Support: IE 9 - 11+, Edge 12 - 18+\n            subWindow.addEventListener(\"unload\", unloadHandler);\n            // Support: IE <10\n            // Check if getElementById returns elements by name\n            // The broken getElementById methods don't pick up programmatically-set names,\n            // so use a roundabout getElementsByName test\n            support.getById = assert(function(el) {\n                documentElement.appendChild(el).id = jQuery.expando;\n                return !document.getElementsByName || !document.getElementsByName(jQuery.expando).length;\n            });\n            // Support: IE 9 only\n            // Check to see if it's possible to do matchesSelector\n            // on a disconnected node.\n            support.disconnectedMatch = assert(function(el) {\n                return matches.call(el, \"*\");\n            });\n            // Support: IE 9 - 11+, Edge 12 - 18+\n            // IE/Edge don't support the :scope pseudo-class.\n            support.scope = assert(function() {\n                return document.querySelectorAll(\":scope\");\n            });\n            // Support: Chrome 105 - 111 only, Safari 15.4 - 16.3 only\n            // Make sure the `:has()` argument is parsed unforgivingly.\n            // We include `*` in the test to detect buggy implementations that are\n            // _selectively_ forgiving (specifically when the list includes at least\n            // one valid selector).\n            // Note that we treat complete lack of support for `:has()` as if it were\n            // spec-compliant support, which is fine because use of `:has()` in such\n            // environments will fail in the qSA path and fall back to jQuery traversal\n            // anyway.\n            support.cssHas = assert(function() {\n                try {\n                    document.querySelector(\":has(*,:jqfake)\");\n                    return false;\n                } catch (e) {\n                    return true;\n                }\n            });\n            // ID filter and find\n            if (support.getById) {\n                Expr.filter.ID = function(id) {\n                    var attrId = id.replace(runescape, funescape);\n                    return function(elem) {\n                        return elem.getAttribute(\"id\") === attrId;\n                    };\n                };\n                Expr.find.ID = function(id, context) {\n                    if (typeof context.getElementById !== \"undefined\" && documentIsHTML) {\n                        var elem = context.getElementById(id);\n                        return elem ? [\n                            elem\n                        ] : [];\n                    }\n                };\n            } else {\n                Expr.filter.ID = function(id) {\n                    var attrId = id.replace(runescape, funescape);\n                    return function(elem) {\n                        var node = typeof elem.getAttributeNode !== \"undefined\" && elem.getAttributeNode(\"id\");\n                        return node && node.value === attrId;\n                    };\n                };\n                // Support: IE 6 - 7 only\n                // getElementById is not reliable as a find shortcut\n                Expr.find.ID = function(id, context) {\n                    if (typeof context.getElementById !== \"undefined\" && documentIsHTML) {\n                        var node, i, elems, elem = context.getElementById(id);\n                        if (elem) {\n                            // Verify the id attribute\n                            node = elem.getAttributeNode(\"id\");\n                            if (node && node.value === id) return [\n                                elem\n                            ];\n                            // Fall back on getElementsByName\n                            elems = context.getElementsByName(id);\n                            i = 0;\n                            while(elem = elems[i++]){\n                                node = elem.getAttributeNode(\"id\");\n                                if (node && node.value === id) return [\n                                    elem\n                                ];\n                            }\n                        }\n                        return [];\n                    }\n                };\n            }\n            // Tag\n            Expr.find.TAG = function(tag, context) {\n                if (typeof context.getElementsByTagName !== \"undefined\") return context.getElementsByTagName(tag);\n                else return context.querySelectorAll(tag);\n            };\n            // Class\n            Expr.find.CLASS = function(className, context) {\n                if (typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML) return context.getElementsByClassName(className);\n            };\n            /* QSA/matchesSelector\n\t---------------------------------------------------------------------- */ // QSA and matchesSelector support\n            rbuggyQSA = [];\n            // Build QSA regex\n            // Regex strategy adopted from Diego Perini\n            assert(function(el) {\n                var input;\n                documentElement.appendChild(el).innerHTML = \"<a id='\" + expando + \"' href='' disabled='disabled'></a>\" + \"<select id='\" + expando + \"-\\r\\\\' disabled='disabled'>\" + \"<option selected=''></option></select>\";\n                // Support: iOS <=7 - 8 only\n                // Boolean attributes and \"value\" are not treated correctly in some XML documents\n                if (!el.querySelectorAll(\"[selected]\").length) rbuggyQSA.push(\"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\");\n                // Support: iOS <=7 - 8 only\n                if (!el.querySelectorAll(\"[id~=\" + expando + \"-]\").length) rbuggyQSA.push(\"~=\");\n                // Support: iOS 8 only\n                // https://bugs.webkit.org/show_bug.cgi?id=136851\n                // In-page `selector#id sibling-combinator selector` fails\n                if (!el.querySelectorAll(\"a#\" + expando + \"+*\").length) rbuggyQSA.push(\".#.+[+~]\");\n                // Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+\n                // In some of the document kinds, these selectors wouldn't work natively.\n                // This is probably OK but for backwards compatibility we want to maintain\n                // handling them through jQuery traversal in jQuery 3.x.\n                if (!el.querySelectorAll(\":checked\").length) rbuggyQSA.push(\":checked\");\n                // Support: Windows 8 Native Apps\n                // The type and name attributes are restricted during .innerHTML assignment\n                input = document.createElement(\"input\");\n                input.setAttribute(\"type\", \"hidden\");\n                el.appendChild(input).setAttribute(\"name\", \"D\");\n                // Support: IE 9 - 11+\n                // IE's :disabled selector does not pick up the children of disabled fieldsets\n                // Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+\n                // In some of the document kinds, these selectors wouldn't work natively.\n                // This is probably OK but for backwards compatibility we want to maintain\n                // handling them through jQuery traversal in jQuery 3.x.\n                documentElement.appendChild(el).disabled = true;\n                if (el.querySelectorAll(\":disabled\").length !== 2) rbuggyQSA.push(\":enabled\", \":disabled\");\n                // Support: IE 11+, Edge 15 - 18+\n                // IE 11/Edge don't find elements on a `[name='']` query in some cases.\n                // Adding a temporary attribute to the document before the selection works\n                // around the issue.\n                // Interestingly, IE 10 & older don't seem to have the issue.\n                input = document.createElement(\"input\");\n                input.setAttribute(\"name\", \"\");\n                el.appendChild(input);\n                if (!el.querySelectorAll(\"[name='']\").length) rbuggyQSA.push(\"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" + whitespace + \"*(?:''|\\\"\\\")\");\n            });\n            if (!support.cssHas) // Support: Chrome 105 - 110+, Safari 15.4 - 16.3+\n            // Our regular `try-catch` mechanism fails to detect natively-unsupported\n            // pseudo-classes inside `:has()` (such as `:has(:contains(\"Foo\"))`)\n            // in browsers that parse the `:has()` argument as a forgiving selector list.\n            // https://drafts.csswg.org/selectors/#relational now requires the argument\n            // to be parsed unforgivingly, but browsers have not yet fully adjusted.\n            rbuggyQSA.push(\":has\");\n            rbuggyQSA = rbuggyQSA.length && new RegExp(rbuggyQSA.join(\"|\"));\n            /* Sorting\n\t---------------------------------------------------------------------- */ // Document order sorting\n            sortOrder = function(a, b) {\n                // Flag for duplicate removal\n                if (a === b) {\n                    hasDuplicate = true;\n                    return 0;\n                }\n                // Sort on method existence if only one input has compareDocumentPosition\n                var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n                if (compare) return compare;\n                // Calculate position if both inputs belong to the same document\n                // Support: IE 11+, Edge 17 - 18+\n                // IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n                // two documents; shallow comparisons work.\n                // eslint-disable-next-line eqeqeq\n                compare = (a.ownerDocument || a) == (b.ownerDocument || b) ? a.compareDocumentPosition(b) : // Otherwise we know they are disconnected\n                1;\n                // Disconnected nodes\n                if (compare & 1 || !support.sortDetached && b.compareDocumentPosition(a) === compare) {\n                    // Choose the first element that is related to our preferred document\n                    // Support: IE 11+, Edge 17 - 18+\n                    // IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n                    // two documents; shallow comparisons work.\n                    // eslint-disable-next-line eqeqeq\n                    if (a === document || a.ownerDocument == preferredDoc && find.contains(preferredDoc, a)) return -1;\n                    // Support: IE 11+, Edge 17 - 18+\n                    // IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n                    // two documents; shallow comparisons work.\n                    // eslint-disable-next-line eqeqeq\n                    if (b === document || b.ownerDocument == preferredDoc && find.contains(preferredDoc, b)) return 1;\n                    // Maintain original order\n                    return sortInput ? indexOf.call(sortInput, a) - indexOf.call(sortInput, b) : 0;\n                }\n                return compare & 4 ? -1 : 1;\n            };\n            return document;\n        }\n        find.matches = function(expr, elements) {\n            return find(expr, null, null, elements);\n        };\n        find.matchesSelector = function(elem, expr) {\n            setDocument(elem);\n            if (documentIsHTML && !nonnativeSelectorCache[expr + \" \"] && (!rbuggyQSA || !rbuggyQSA.test(expr))) try {\n                var ret = matches.call(elem, expr);\n                // IE 9's matchesSelector returns false on disconnected nodes\n                if (ret || support.disconnectedMatch || // As well, disconnected nodes are said to be in a document\n                // fragment in IE 9\n                elem.document && elem.document.nodeType !== 11) return ret;\n            } catch (e) {\n                nonnativeSelectorCache(expr, true);\n            }\n            return find(expr, document, null, [\n                elem\n            ]).length > 0;\n        };\n        find.contains = function(context, elem) {\n            // Set document vars if needed\n            // Support: IE 11+, Edge 17 - 18+\n            // IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n            // two documents; shallow comparisons work.\n            // eslint-disable-next-line eqeqeq\n            if ((context.ownerDocument || context) != document) setDocument(context);\n            return jQuery.contains(context, elem);\n        };\n        find.attr = function(elem, name) {\n            // Set document vars if needed\n            // Support: IE 11+, Edge 17 - 18+\n            // IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n            // two documents; shallow comparisons work.\n            // eslint-disable-next-line eqeqeq\n            if ((elem.ownerDocument || elem) != document) setDocument(elem);\n            var fn = Expr.attrHandle[name.toLowerCase()], // Don't get fooled by Object.prototype properties (see trac-13807)\n            val = fn && hasOwn.call(Expr.attrHandle, name.toLowerCase()) ? fn(elem, name, !documentIsHTML) : undefined;\n            if (val !== undefined) return val;\n            return elem.getAttribute(name);\n        };\n        find.error = function(msg) {\n            throw new Error(\"Syntax error, unrecognized expression: \" + msg);\n        };\n        /**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */ jQuery.uniqueSort = function(results) {\n            var elem, duplicates = [], j = 0, i = 0;\n            // Unless we *know* we can detect duplicates, assume their presence\n            //\n            // Support: Android <=4.0+\n            // Testing for detecting duplicates is unpredictable so instead assume we can't\n            // depend on duplicate detection in all browsers without a stable sort.\n            hasDuplicate = !support.sortStable;\n            sortInput = !support.sortStable && slice.call(results, 0);\n            sort.call(results, sortOrder);\n            if (hasDuplicate) {\n                while(elem = results[i++])if (elem === results[i]) j = duplicates.push(i);\n                while(j--)splice.call(results, duplicates[j], 1);\n            }\n            // Clear input after sorting to release objects\n            // See https://github.com/jquery/sizzle/pull/225\n            sortInput = null;\n            return results;\n        };\n        jQuery.fn.uniqueSort = function() {\n            return this.pushStack(jQuery.uniqueSort(slice.apply(this)));\n        };\n        Expr = jQuery.expr = {\n            // Can be adjusted by the user\n            cacheLength: 50,\n            createPseudo: markFunction,\n            match: matchExpr,\n            attrHandle: {},\n            find: {},\n            relative: {\n                \">\": {\n                    dir: \"parentNode\",\n                    first: true\n                },\n                \" \": {\n                    dir: \"parentNode\"\n                },\n                \"+\": {\n                    dir: \"previousSibling\",\n                    first: true\n                },\n                \"~\": {\n                    dir: \"previousSibling\"\n                }\n            },\n            preFilter: {\n                ATTR: function(match) {\n                    match[1] = match[1].replace(runescape, funescape);\n                    // Move the given value to match[3] whether quoted or unquoted\n                    match[3] = (match[3] || match[4] || match[5] || \"\").replace(runescape, funescape);\n                    if (match[2] === \"~=\") match[3] = \" \" + match[3] + \" \";\n                    return match.slice(0, 4);\n                },\n                CHILD: function(match) {\n                    /* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/ match[1] = match[1].toLowerCase();\n                    if (match[1].slice(0, 3) === \"nth\") {\n                        // nth-* requires argument\n                        if (!match[3]) find.error(match[0]);\n                        // numeric x and y parameters for Expr.filter.CHILD\n                        // remember that false/true cast respectively to 0/1\n                        match[4] = +(match[4] ? match[5] + (match[6] || 1) : 2 * (match[3] === \"even\" || match[3] === \"odd\"));\n                        match[5] = +(match[7] + match[8] || match[3] === \"odd\");\n                    // other types prohibit arguments\n                    } else if (match[3]) find.error(match[0]);\n                    return match;\n                },\n                PSEUDO: function(match) {\n                    var excess, unquoted = !match[6] && match[2];\n                    if (matchExpr.CHILD.test(match[0])) return null;\n                    // Accept quoted arguments as-is\n                    if (match[3]) match[2] = match[4] || match[5] || \"\";\n                    else if (unquoted && rpseudo.test(unquoted) && // Get excess from tokenize (recursively)\n                    (excess = tokenize(unquoted, true)) && // advance to the next closing parenthesis\n                    (excess = unquoted.indexOf(\")\", unquoted.length - excess) - unquoted.length)) {\n                        // excess is a negative index\n                        match[0] = match[0].slice(0, excess);\n                        match[2] = unquoted.slice(0, excess);\n                    }\n                    // Return only captures needed by the pseudo filter method (type and argument)\n                    return match.slice(0, 3);\n                }\n            },\n            filter: {\n                TAG: function(nodeNameSelector) {\n                    var expectedNodeName = nodeNameSelector.replace(runescape, funescape).toLowerCase();\n                    return nodeNameSelector === \"*\" ? function() {\n                        return true;\n                    } : function(elem) {\n                        return nodeName(elem, expectedNodeName);\n                    };\n                },\n                CLASS: function(className) {\n                    var pattern = classCache[className + \" \"];\n                    return pattern || (pattern = new RegExp(\"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\"), classCache(className, function(elem) {\n                        return pattern.test(typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== \"undefined\" && elem.getAttribute(\"class\") || \"\");\n                    }));\n                },\n                ATTR: function(name, operator, check) {\n                    return function(elem) {\n                        var result = find.attr(elem, name);\n                        if (result == null) return operator === \"!=\";\n                        if (!operator) return true;\n                        result += \"\";\n                        if (operator === \"=\") return result === check;\n                        if (operator === \"!=\") return result !== check;\n                        if (operator === \"^=\") return check && result.indexOf(check) === 0;\n                        if (operator === \"*=\") return check && result.indexOf(check) > -1;\n                        if (operator === \"$=\") return check && result.slice(-check.length) === check;\n                        if (operator === \"~=\") return (\" \" + result.replace(rwhitespace, \" \") + \" \").indexOf(check) > -1;\n                        if (operator === \"|=\") return result === check || result.slice(0, check.length + 1) === check + \"-\";\n                        return false;\n                    };\n                },\n                CHILD: function(type, what, _argument, first, last) {\n                    var simple = type.slice(0, 3) !== \"nth\", forward = type.slice(-4) !== \"last\", ofType = what === \"of-type\";\n                    return first === 1 && last === 0 ? // Shortcut for :nth-*(n)\n                    function(elem) {\n                        return !!elem.parentNode;\n                    } : function(elem, _context, xml) {\n                        var cache, outerCache, node, nodeIndex, start, dir = simple !== forward ? \"nextSibling\" : \"previousSibling\", parent = elem.parentNode, name = ofType && elem.nodeName.toLowerCase(), useCache = !xml && !ofType, diff = false;\n                        if (parent) {\n                            // :(first|last|only)-(child|of-type)\n                            if (simple) {\n                                while(dir){\n                                    node = elem;\n                                    while(node = node[dir]){\n                                        if (ofType ? nodeName(node, name) : node.nodeType === 1) return false;\n                                    }\n                                    // Reverse direction for :only-* (if we haven't yet done so)\n                                    start = dir = type === \"only\" && !start && \"nextSibling\";\n                                }\n                                return true;\n                            }\n                            start = [\n                                forward ? parent.firstChild : parent.lastChild\n                            ];\n                            // non-xml :nth-child(...) stores cache data on `parent`\n                            if (forward && useCache) {\n                                // Seek `elem` from a previously-cached index\n                                outerCache = parent[expando] || (parent[expando] = {});\n                                cache = outerCache[type] || [];\n                                nodeIndex = cache[0] === dirruns && cache[1];\n                                diff = nodeIndex && cache[2];\n                                node = nodeIndex && parent.childNodes[nodeIndex];\n                                while(node = ++nodeIndex && node && node[dir] || // Fallback to seeking `elem` from the start\n                                (diff = nodeIndex = 0) || start.pop())// When found, cache indexes on `parent` and break\n                                if (node.nodeType === 1 && ++diff && node === elem) {\n                                    outerCache[type] = [\n                                        dirruns,\n                                        nodeIndex,\n                                        diff\n                                    ];\n                                    break;\n                                }\n                            } else {\n                                // Use previously-cached element index if available\n                                if (useCache) {\n                                    outerCache = elem[expando] || (elem[expando] = {});\n                                    cache = outerCache[type] || [];\n                                    nodeIndex = cache[0] === dirruns && cache[1];\n                                    diff = nodeIndex;\n                                }\n                                // xml :nth-child(...)\n                                // or :nth-last-child(...) or :nth(-last)?-of-type(...)\n                                if (diff === false) {\n                                    // Use the same loop as above to seek `elem` from the start\n                                    while(node = ++nodeIndex && node && node[dir] || (diff = nodeIndex = 0) || start.pop())if ((ofType ? nodeName(node, name) : node.nodeType === 1) && ++diff) {\n                                        // Cache the index of each encountered element\n                                        if (useCache) {\n                                            outerCache = node[expando] || (node[expando] = {});\n                                            outerCache[type] = [\n                                                dirruns,\n                                                diff\n                                            ];\n                                        }\n                                        if (node === elem) break;\n                                    }\n                                }\n                            }\n                            // Incorporate the offset, then check against cycle size\n                            diff -= last;\n                            return diff === first || diff % first === 0 && diff / first >= 0;\n                        }\n                    };\n                },\n                PSEUDO: function(pseudo, argument) {\n                    // pseudo-class names are case-insensitive\n                    // https://www.w3.org/TR/selectors/#pseudo-classes\n                    // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n                    // Remember that setFilters inherits from pseudos\n                    var args, fn = Expr.pseudos[pseudo] || Expr.setFilters[pseudo.toLowerCase()] || find.error(\"unsupported pseudo: \" + pseudo);\n                    // The user may use createPseudo to indicate that\n                    // arguments are needed to create the filter function\n                    // just as jQuery does\n                    if (fn[expando]) return fn(argument);\n                    // But maintain support for old signatures\n                    if (fn.length > 1) {\n                        args = [\n                            pseudo,\n                            pseudo,\n                            \"\",\n                            argument\n                        ];\n                        return Expr.setFilters.hasOwnProperty(pseudo.toLowerCase()) ? markFunction(function(seed, matches) {\n                            var idx, matched = fn(seed, argument), i = matched.length;\n                            while(i--){\n                                idx = indexOf.call(seed, matched[i]);\n                                seed[idx] = !(matches[idx] = matched[i]);\n                            }\n                        }) : function(elem) {\n                            return fn(elem, 0, args);\n                        };\n                    }\n                    return fn;\n                }\n            },\n            pseudos: {\n                // Potentially complex pseudos\n                not: markFunction(function(selector) {\n                    // Trim the selector passed to compile\n                    // to avoid treating leading and trailing\n                    // spaces as combinators\n                    var input = [], results = [], matcher = compile(selector.replace(rtrimCSS, \"$1\"));\n                    return matcher[expando] ? markFunction(function(seed, matches, _context, xml) {\n                        var elem, unmatched = matcher(seed, null, xml, []), i = seed.length;\n                        // Match elements unmatched by `matcher`\n                        while(i--)if (elem = unmatched[i]) seed[i] = !(matches[i] = elem);\n                    }) : function(elem, _context, xml) {\n                        input[0] = elem;\n                        matcher(input, null, xml, results);\n                        // Don't keep the element\n                        // (see https://github.com/jquery/sizzle/issues/299)\n                        input[0] = null;\n                        return !results.pop();\n                    };\n                }),\n                has: markFunction(function(selector) {\n                    return function(elem) {\n                        return find(selector, elem).length > 0;\n                    };\n                }),\n                contains: markFunction(function(text) {\n                    text = text.replace(runescape, funescape);\n                    return function(elem) {\n                        return (elem.textContent || jQuery.text(elem)).indexOf(text) > -1;\n                    };\n                }),\n                // \"Whether an element is represented by a :lang() selector\n                // is based solely on the element's language value\n                // being equal to the identifier C,\n                // or beginning with the identifier C immediately followed by \"-\".\n                // The matching of C against the element's language value is performed case-insensitively.\n                // The identifier C does not have to be a valid language name.\"\n                // https://www.w3.org/TR/selectors/#lang-pseudo\n                lang: markFunction(function(lang) {\n                    // lang value must be a valid identifier\n                    if (!ridentifier.test(lang || \"\")) find.error(\"unsupported lang: \" + lang);\n                    lang = lang.replace(runescape, funescape).toLowerCase();\n                    return function(elem) {\n                        var elemLang;\n                        do if (elemLang = documentIsHTML ? elem.lang : elem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) {\n                            elemLang = elemLang.toLowerCase();\n                            return elemLang === lang || elemLang.indexOf(lang + \"-\") === 0;\n                        }\n                        while ((elem = elem.parentNode) && elem.nodeType === 1);\n                        return false;\n                    };\n                }),\n                // Miscellaneous\n                target: function(elem) {\n                    var hash = window1.location && window1.location.hash;\n                    return hash && hash.slice(1) === elem.id;\n                },\n                root: function(elem) {\n                    return elem === documentElement;\n                },\n                focus: function(elem) {\n                    return elem === safeActiveElement() && document.hasFocus() && !!(elem.type || elem.href || ~elem.tabIndex);\n                },\n                // Boolean properties\n                enabled: createDisabledPseudo(false),\n                disabled: createDisabledPseudo(true),\n                checked: function(elem) {\n                    // In CSS3, :checked should return both checked and selected elements\n                    // https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n                    return nodeName(elem, \"input\") && !!elem.checked || nodeName(elem, \"option\") && !!elem.selected;\n                },\n                selected: function(elem) {\n                    // Support: IE <=11+\n                    // Accessing the selectedIndex property\n                    // forces the browser to treat the default option as\n                    // selected when in an optgroup.\n                    if (elem.parentNode) // eslint-disable-next-line no-unused-expressions\n                    elem.parentNode.selectedIndex;\n                    return elem.selected === true;\n                },\n                // Contents\n                empty: function(elem) {\n                    // https://www.w3.org/TR/selectors/#empty-pseudo\n                    // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n                    //   but not by others (comment: 8; processing instruction: 7; etc.)\n                    // nodeType < 6 works because attributes (2) do not appear as children\n                    for(elem = elem.firstChild; elem; elem = elem.nextSibling){\n                        if (elem.nodeType < 6) return false;\n                    }\n                    return true;\n                },\n                parent: function(elem) {\n                    return !Expr.pseudos.empty(elem);\n                },\n                // Element/input types\n                header: function(elem) {\n                    return rheader.test(elem.nodeName);\n                },\n                input: function(elem) {\n                    return rinputs.test(elem.nodeName);\n                },\n                button: function(elem) {\n                    return nodeName(elem, \"input\") && elem.type === \"button\" || nodeName(elem, \"button\");\n                },\n                text: function(elem) {\n                    var attr;\n                    return nodeName(elem, \"input\") && elem.type === \"text\" && // Support: IE <10 only\n                    // New HTML5 attribute values (e.g., \"search\") appear\n                    // with elem.type === \"text\"\n                    ((attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === \"text\");\n                },\n                // Position-in-collection\n                first: createPositionalPseudo(function() {\n                    return [\n                        0\n                    ];\n                }),\n                last: createPositionalPseudo(function(_matchIndexes, length) {\n                    return [\n                        length - 1\n                    ];\n                }),\n                eq: createPositionalPseudo(function(_matchIndexes, length, argument) {\n                    return [\n                        argument < 0 ? argument + length : argument\n                    ];\n                }),\n                even: createPositionalPseudo(function(matchIndexes, length) {\n                    var i = 0;\n                    for(; i < length; i += 2)matchIndexes.push(i);\n                    return matchIndexes;\n                }),\n                odd: createPositionalPseudo(function(matchIndexes, length) {\n                    var i = 1;\n                    for(; i < length; i += 2)matchIndexes.push(i);\n                    return matchIndexes;\n                }),\n                lt: createPositionalPseudo(function(matchIndexes, length, argument) {\n                    var i;\n                    if (argument < 0) i = argument + length;\n                    else if (argument > length) i = length;\n                    else i = argument;\n                    for(; --i >= 0;)matchIndexes.push(i);\n                    return matchIndexes;\n                }),\n                gt: createPositionalPseudo(function(matchIndexes, length, argument) {\n                    var i = argument < 0 ? argument + length : argument;\n                    for(; ++i < length;)matchIndexes.push(i);\n                    return matchIndexes;\n                })\n            }\n        };\n        Expr.pseudos.nth = Expr.pseudos.eq;\n        // Add button/input type pseudos\n        for(i in {\n            radio: true,\n            checkbox: true,\n            file: true,\n            password: true,\n            image: true\n        })Expr.pseudos[i] = createInputPseudo(i);\n        for(i in {\n            submit: true,\n            reset: true\n        })Expr.pseudos[i] = createButtonPseudo(i);\n        // Easy API for creating new setFilters\n        function setFilters() {}\n        setFilters.prototype = Expr.filters = Expr.pseudos;\n        Expr.setFilters = new setFilters();\n        function tokenize(selector, parseOnly) {\n            var matched, match, tokens, type, soFar, groups, preFilters, cached = tokenCache[selector + \" \"];\n            if (cached) return parseOnly ? 0 : cached.slice(0);\n            soFar = selector;\n            groups = [];\n            preFilters = Expr.preFilter;\n            while(soFar){\n                // Comma and first run\n                if (!matched || (match = rcomma.exec(soFar))) {\n                    if (match) // Don't consume trailing commas as valid\n                    soFar = soFar.slice(match[0].length) || soFar;\n                    groups.push(tokens = []);\n                }\n                matched = false;\n                // Combinators\n                if (match = rleadingCombinator.exec(soFar)) {\n                    matched = match.shift();\n                    tokens.push({\n                        value: matched,\n                        // Cast descendant combinators to space\n                        type: match[0].replace(rtrimCSS, \" \")\n                    });\n                    soFar = soFar.slice(matched.length);\n                }\n                // Filters\n                for(type in Expr.filter)if ((match = matchExpr[type].exec(soFar)) && (!preFilters[type] || (match = preFilters[type](match)))) {\n                    matched = match.shift();\n                    tokens.push({\n                        value: matched,\n                        type: type,\n                        matches: match\n                    });\n                    soFar = soFar.slice(matched.length);\n                }\n                if (!matched) break;\n            }\n            // Return the length of the invalid excess\n            // if we're just parsing\n            // Otherwise, throw an error or return tokens\n            if (parseOnly) return soFar.length;\n            return soFar ? find.error(selector) : // Cache the tokens\n            tokenCache(selector, groups).slice(0);\n        }\n        function toSelector(tokens) {\n            var i = 0, len = tokens.length, selector = \"\";\n            for(; i < len; i++)selector += tokens[i].value;\n            return selector;\n        }\n        function addCombinator(matcher, combinator, base) {\n            var dir = combinator.dir, skip = combinator.next, key = skip || dir, checkNonElements = base && key === \"parentNode\", doneName = done++;\n            return combinator.first ? // Check against closest ancestor/preceding element\n            function(elem, context, xml) {\n                while(elem = elem[dir]){\n                    if (elem.nodeType === 1 || checkNonElements) return matcher(elem, context, xml);\n                }\n                return false;\n            } : // Check against all ancestor/preceding elements\n            function(elem, context, xml) {\n                var oldCache, outerCache, newCache = [\n                    dirruns,\n                    doneName\n                ];\n                // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n                if (xml) {\n                    while(elem = elem[dir])if (elem.nodeType === 1 || checkNonElements) {\n                        if (matcher(elem, context, xml)) return true;\n                    }\n                } else {\n                    while(elem = elem[dir])if (elem.nodeType === 1 || checkNonElements) {\n                        outerCache = elem[expando] || (elem[expando] = {});\n                        if (skip && nodeName(elem, skip)) elem = elem[dir] || elem;\n                        else if ((oldCache = outerCache[key]) && oldCache[0] === dirruns && oldCache[1] === doneName) // Assign to newCache so results back-propagate to previous elements\n                        return newCache[2] = oldCache[2];\n                        else {\n                            // Reuse newcache so results back-propagate to previous elements\n                            outerCache[key] = newCache;\n                            // A match means we're done; a fail means we have to keep checking\n                            if (newCache[2] = matcher(elem, context, xml)) return true;\n                        }\n                    }\n                }\n                return false;\n            };\n        }\n        function elementMatcher(matchers) {\n            return matchers.length > 1 ? function(elem, context, xml) {\n                var i = matchers.length;\n                while(i--){\n                    if (!matchers[i](elem, context, xml)) return false;\n                }\n                return true;\n            } : matchers[0];\n        }\n        function multipleContexts(selector, contexts, results) {\n            var i = 0, len = contexts.length;\n            for(; i < len; i++)find(selector, contexts[i], results);\n            return results;\n        }\n        function condense(unmatched, map, filter, context, xml) {\n            var elem, newUnmatched = [], i = 0, len = unmatched.length, mapped = map != null;\n            for(; i < len; i++){\n                if (elem = unmatched[i]) {\n                    if (!filter || filter(elem, context, xml)) {\n                        newUnmatched.push(elem);\n                        if (mapped) map.push(i);\n                    }\n                }\n            }\n            return newUnmatched;\n        }\n        function setMatcher(preFilter, selector, matcher, postFilter, postFinder, postSelector) {\n            if (postFilter && !postFilter[expando]) postFilter = setMatcher(postFilter);\n            if (postFinder && !postFinder[expando]) postFinder = setMatcher(postFinder, postSelector);\n            return markFunction(function(seed, results, context, xml) {\n                var temp, i, elem, matcherOut, preMap = [], postMap = [], preexisting = results.length, // Get initial elements from seed or context\n                elems = seed || multipleContexts(selector || \"*\", context.nodeType ? [\n                    context\n                ] : context, []), // Prefilter to get matcher input, preserving a map for seed-results synchronization\n                matcherIn = preFilter && (seed || !selector) ? condense(elems, preMap, preFilter, context, xml) : elems;\n                if (matcher) {\n                    // If we have a postFinder, or filtered seed, or non-seed postFilter\n                    // or preexisting results,\n                    matcherOut = postFinder || (seed ? preFilter : preexisting || postFilter) ? // ...intermediate processing is necessary\n                    [] : // ...otherwise use results directly\n                    results;\n                    // Find primary matches\n                    matcher(matcherIn, matcherOut, context, xml);\n                } else matcherOut = matcherIn;\n                // Apply postFilter\n                if (postFilter) {\n                    temp = condense(matcherOut, postMap);\n                    postFilter(temp, [], context, xml);\n                    // Un-match failing elements by moving them back to matcherIn\n                    i = temp.length;\n                    while(i--)if (elem = temp[i]) matcherOut[postMap[i]] = !(matcherIn[postMap[i]] = elem);\n                }\n                if (seed) {\n                    if (postFinder || preFilter) {\n                        if (postFinder) {\n                            // Get the final matcherOut by condensing this intermediate into postFinder contexts\n                            temp = [];\n                            i = matcherOut.length;\n                            while(i--)if (elem = matcherOut[i]) // Restore matcherIn since elem is not yet a final match\n                            temp.push(matcherIn[i] = elem);\n                            postFinder(null, matcherOut = [], temp, xml);\n                        }\n                        // Move matched elements from seed to results to keep them synchronized\n                        i = matcherOut.length;\n                        while(i--)if ((elem = matcherOut[i]) && (temp = postFinder ? indexOf.call(seed, elem) : preMap[i]) > -1) seed[temp] = !(results[temp] = elem);\n                    }\n                } else {\n                    matcherOut = condense(matcherOut === results ? matcherOut.splice(preexisting, matcherOut.length) : matcherOut);\n                    if (postFinder) postFinder(null, results, matcherOut, xml);\n                    else push.apply(results, matcherOut);\n                }\n            });\n        }\n        function matcherFromTokens(tokens) {\n            var checkContext, matcher, j, len = tokens.length, leadingRelative = Expr.relative[tokens[0].type], implicitRelative = leadingRelative || Expr.relative[\" \"], i = leadingRelative ? 1 : 0, // The foundational matcher ensures that elements are reachable from top-level context(s)\n            matchContext = addCombinator(function(elem) {\n                return elem === checkContext;\n            }, implicitRelative, true), matchAnyContext = addCombinator(function(elem) {\n                return indexOf.call(checkContext, elem) > -1;\n            }, implicitRelative, true), matchers = [\n                function(elem, context, xml) {\n                    // Support: IE 11+, Edge 17 - 18+\n                    // IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n                    // two documents; shallow comparisons work.\n                    // eslint-disable-next-line eqeqeq\n                    var ret = !leadingRelative && (xml || context != outermostContext) || ((checkContext = context).nodeType ? matchContext(elem, context, xml) : matchAnyContext(elem, context, xml));\n                    // Avoid hanging onto element\n                    // (see https://github.com/jquery/sizzle/issues/299)\n                    checkContext = null;\n                    return ret;\n                }\n            ];\n            for(; i < len; i++)if (matcher = Expr.relative[tokens[i].type]) matchers = [\n                addCombinator(elementMatcher(matchers), matcher)\n            ];\n            else {\n                matcher = Expr.filter[tokens[i].type].apply(null, tokens[i].matches);\n                // Return special upon seeing a positional matcher\n                if (matcher[expando]) {\n                    // Find the next relative operator (if any) for proper handling\n                    j = ++i;\n                    for(; j < len; j++){\n                        if (Expr.relative[tokens[j].type]) break;\n                    }\n                    return setMatcher(i > 1 && elementMatcher(matchers), i > 1 && toSelector(// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n                    tokens.slice(0, i - 1).concat({\n                        value: tokens[i - 2].type === \" \" ? \"*\" : \"\"\n                    })).replace(rtrimCSS, \"$1\"), matcher, i < j && matcherFromTokens(tokens.slice(i, j)), j < len && matcherFromTokens(tokens = tokens.slice(j)), j < len && toSelector(tokens));\n                }\n                matchers.push(matcher);\n            }\n            return elementMatcher(matchers);\n        }\n        function matcherFromGroupMatchers(elementMatchers, setMatchers) {\n            var bySet = setMatchers.length > 0, byElement = elementMatchers.length > 0, superMatcher = function(seed, context, xml, results, outermost) {\n                var elem, j, matcher, matchedCount = 0, i = \"0\", unmatched = seed && [], setMatched = [], contextBackup = outermostContext, // We must always have either seed elements or outermost context\n                elems = seed || byElement && Expr.find.TAG(\"*\", outermost), // Use integer dirruns iff this is the outermost matcher\n                dirrunsUnique = dirruns += contextBackup == null ? 1 : Math.random() || 0.1, len = elems.length;\n                if (outermost) // Support: IE 11+, Edge 17 - 18+\n                // IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n                // two documents; shallow comparisons work.\n                // eslint-disable-next-line eqeqeq\n                outermostContext = context == document || context || outermost;\n                // Add elements passing elementMatchers directly to results\n                // Support: iOS <=7 - 9 only\n                // Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching\n                // elements by id. (see trac-14142)\n                for(; i !== len && (elem = elems[i]) != null; i++){\n                    if (byElement && elem) {\n                        j = 0;\n                        // Support: IE 11+, Edge 17 - 18+\n                        // IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n                        // two documents; shallow comparisons work.\n                        // eslint-disable-next-line eqeqeq\n                        if (!context && elem.ownerDocument != document) {\n                            setDocument(elem);\n                            xml = !documentIsHTML;\n                        }\n                        while(matcher = elementMatchers[j++])if (matcher(elem, context || document, xml)) {\n                            push.call(results, elem);\n                            break;\n                        }\n                        if (outermost) dirruns = dirrunsUnique;\n                    }\n                    // Track unmatched elements for set filters\n                    if (bySet) {\n                        // They will have gone through all possible matchers\n                        if (elem = !matcher && elem) matchedCount--;\n                        // Lengthen the array for every element, matched or not\n                        if (seed) unmatched.push(elem);\n                    }\n                }\n                // `i` is now the count of elements visited above, and adding it to `matchedCount`\n                // makes the latter nonnegative.\n                matchedCount += i;\n                // Apply set filters to unmatched elements\n                // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n                // equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n                // no element matchers and no seed.\n                // Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n                // case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n                // numerically zero.\n                if (bySet && i !== matchedCount) {\n                    j = 0;\n                    while(matcher = setMatchers[j++])matcher(unmatched, setMatched, context, xml);\n                    if (seed) {\n                        // Reintegrate element matches to eliminate the need for sorting\n                        if (matchedCount > 0) {\n                            while(i--)if (!(unmatched[i] || setMatched[i])) setMatched[i] = pop.call(results);\n                        }\n                        // Discard index placeholder values to get only actual matches\n                        setMatched = condense(setMatched);\n                    }\n                    // Add matches to results\n                    push.apply(results, setMatched);\n                    // Seedless set matches succeeding multiple successful matchers stipulate sorting\n                    if (outermost && !seed && setMatched.length > 0 && matchedCount + setMatchers.length > 1) jQuery.uniqueSort(results);\n                }\n                // Override manipulation of globals by nested matchers\n                if (outermost) {\n                    dirruns = dirrunsUnique;\n                    outermostContext = contextBackup;\n                }\n                return unmatched;\n            };\n            return bySet ? markFunction(superMatcher) : superMatcher;\n        }\n        function compile(selector, match /* Internal Use Only */ ) {\n            var i, setMatchers = [], elementMatchers = [], cached = compilerCache[selector + \" \"];\n            if (!cached) {\n                // Generate a function of recursive functions that can be used to check each element\n                if (!match) match = tokenize(selector);\n                i = match.length;\n                while(i--){\n                    cached = matcherFromTokens(match[i]);\n                    if (cached[expando]) setMatchers.push(cached);\n                    else elementMatchers.push(cached);\n                }\n                // Cache the compiled function\n                cached = compilerCache(selector, matcherFromGroupMatchers(elementMatchers, setMatchers));\n                // Save selector and tokenization\n                cached.selector = selector;\n            }\n            return cached;\n        }\n        /**\n * A low-level selection function that works with jQuery's compiled\n *  selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n *  selector function built with jQuery selector compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */ function select(selector, context, results, seed) {\n            var i, tokens, token, type, find, compiled = typeof selector === \"function\" && selector, match = !seed && tokenize(selector = compiled.selector || selector);\n            results = results || [];\n            // Try to minimize operations if there is only one selector in the list and no seed\n            // (the latter of which guarantees us context)\n            if (match.length === 1) {\n                // Reduce context if the leading compound selector is an ID\n                tokens = match[0] = match[0].slice(0);\n                if (tokens.length > 2 && (token = tokens[0]).type === \"ID\" && context.nodeType === 9 && documentIsHTML && Expr.relative[tokens[1].type]) {\n                    context = (Expr.find.ID(token.matches[0].replace(runescape, funescape), context) || [])[0];\n                    if (!context) return results;\n                    else if (compiled) context = context.parentNode;\n                    selector = selector.slice(tokens.shift().value.length);\n                }\n                // Fetch a seed set for right-to-left matching\n                i = matchExpr.needsContext.test(selector) ? 0 : tokens.length;\n                while(i--){\n                    token = tokens[i];\n                    // Abort if we hit a combinator\n                    if (Expr.relative[type = token.type]) break;\n                    if (find = Expr.find[type]) // Search, expanding context for leading sibling combinators\n                    {\n                        if (seed = find(token.matches[0].replace(runescape, funescape), rsibling.test(tokens[0].type) && testContext(context.parentNode) || context)) {\n                            // If seed is empty or no tokens remain, we can return early\n                            tokens.splice(i, 1);\n                            selector = seed.length && toSelector(tokens);\n                            if (!selector) {\n                                push.apply(results, seed);\n                                return results;\n                            }\n                            break;\n                        }\n                    }\n                }\n            }\n            // Compile and execute a filtering function if one is not provided\n            // Provide `match` to avoid retokenization if we modified the selector above\n            (compiled || compile(selector, match))(seed, context, !documentIsHTML, results, !context || rsibling.test(selector) && testContext(context.parentNode) || context);\n            return results;\n        }\n        // One-time assignments\n        // Support: Android <=4.0 - 4.1+\n        // Sort stability\n        support.sortStable = expando.split(\"\").sort(sortOrder).join(\"\") === expando;\n        // Initialize against the default document\n        setDocument();\n        // Support: Android <=4.0 - 4.1+\n        // Detached nodes confoundingly follow *each other*\n        support.sortDetached = assert(function(el) {\n            // Should return 1, but returns 4 (following)\n            return el.compareDocumentPosition(document.createElement(\"fieldset\")) & 1;\n        });\n        jQuery.find = find;\n        // Deprecated\n        jQuery.expr[\":\"] = jQuery.expr.pseudos;\n        jQuery.unique = jQuery.uniqueSort;\n        // These have always been private, but they used to be documented as part of\n        // Sizzle so let's maintain them for now for backwards compatibility purposes.\n        find.compile = compile;\n        find.select = select;\n        find.setDocument = setDocument;\n        find.tokenize = tokenize;\n        find.escape = jQuery.escapeSelector;\n        find.getText = jQuery.text;\n        find.isXML = jQuery.isXMLDoc;\n        find.selectors = jQuery.expr;\n        find.support = jQuery.support;\n        find.uniqueSort = jQuery.uniqueSort;\n    /* eslint-enable */ })();\n    var dir = function(elem, dir, until) {\n        var matched = [], truncate = until !== undefined;\n        while((elem = elem[dir]) && elem.nodeType !== 9)if (elem.nodeType === 1) {\n            if (truncate && jQuery(elem).is(until)) break;\n            matched.push(elem);\n        }\n        return matched;\n    };\n    var siblings = function(n, elem) {\n        var matched = [];\n        for(; n; n = n.nextSibling)if (n.nodeType === 1 && n !== elem) matched.push(n);\n        return matched;\n    };\n    var rneedsContext = jQuery.expr.match.needsContext;\n    var rsingleTag = /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i;\n    // Implement the identical functionality for filter and not\n    function winnow(elements, qualifier, not) {\n        if (isFunction(qualifier)) return jQuery.grep(elements, function(elem, i) {\n            return !!qualifier.call(elem, i, elem) !== not;\n        });\n        // Single element\n        if (qualifier.nodeType) return jQuery.grep(elements, function(elem) {\n            return elem === qualifier !== not;\n        });\n        // Arraylike of elements (jQuery, arguments, Array)\n        if (typeof qualifier !== \"string\") return jQuery.grep(elements, function(elem) {\n            return indexOf.call(qualifier, elem) > -1 !== not;\n        });\n        // Filtered directly for both simple and complex selectors\n        return jQuery.filter(qualifier, elements, not);\n    }\n    jQuery.filter = function(expr, elems, not) {\n        var elem = elems[0];\n        if (not) expr = \":not(\" + expr + \")\";\n        if (elems.length === 1 && elem.nodeType === 1) return jQuery.find.matchesSelector(elem, expr) ? [\n            elem\n        ] : [];\n        return jQuery.find.matches(expr, jQuery.grep(elems, function(elem) {\n            return elem.nodeType === 1;\n        }));\n    };\n    jQuery.fn.extend({\n        find: function(selector) {\n            var i, ret, len = this.length, self = this;\n            if (typeof selector !== \"string\") return this.pushStack(jQuery(selector).filter(function() {\n                for(i = 0; i < len; i++){\n                    if (jQuery.contains(self[i], this)) return true;\n                }\n            }));\n            ret = this.pushStack([]);\n            for(i = 0; i < len; i++)jQuery.find(selector, self[i], ret);\n            return len > 1 ? jQuery.uniqueSort(ret) : ret;\n        },\n        filter: function(selector) {\n            return this.pushStack(winnow(this, selector || [], false));\n        },\n        not: function(selector) {\n            return this.pushStack(winnow(this, selector || [], true));\n        },\n        is: function(selector) {\n            return !!winnow(this, // If this is a positional/relative selector, check membership in the returned set\n            // so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n            typeof selector === \"string\" && rneedsContext.test(selector) ? jQuery(selector) : selector || [], false).length;\n        }\n    });\n    // Initialize a jQuery object\n    // A central reference to the root jQuery(document)\n    var rootjQuery, // A simple way to check for HTML strings\n    // Prioritize #id over <tag> to avoid XSS via location.hash (trac-9521)\n    // Strict HTML recognition (trac-11290: must start with <)\n    // Shortcut simple #id case for speed\n    rquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/, init = jQuery.fn.init = function(selector, context, root) {\n        var match, elem;\n        // HANDLE: $(\"\"), $(null), $(undefined), $(false)\n        if (!selector) return this;\n        // Method init() accepts an alternate rootjQuery\n        // so migrate can support jQuery.sub (gh-2101)\n        root = root || rootjQuery;\n        // Handle HTML strings\n        if (typeof selector === \"string\") {\n            if (selector[0] === \"<\" && selector[selector.length - 1] === \">\" && selector.length >= 3) // Assume that strings that start and end with <> are HTML and skip the regex check\n            match = [\n                null,\n                selector,\n                null\n            ];\n            else match = rquickExpr.exec(selector);\n            // Match html or make sure no context is specified for #id\n            if (match && (match[1] || !context)) {\n                // HANDLE: $(html) -> $(array)\n                if (match[1]) {\n                    context = context instanceof jQuery ? context[0] : context;\n                    // Option to run scripts is true for back-compat\n                    // Intentionally let the error be thrown if parseHTML is not present\n                    jQuery.merge(this, jQuery.parseHTML(match[1], context && context.nodeType ? context.ownerDocument || context : document, true));\n                    // HANDLE: $(html, props)\n                    if (rsingleTag.test(match[1]) && jQuery.isPlainObject(context)) {\n                        for(match in context)// Properties of context are called as methods if possible\n                        if (isFunction(this[match])) this[match](context[match]);\n                        else this.attr(match, context[match]);\n                    }\n                    return this;\n                // HANDLE: $(#id)\n                } else {\n                    elem = document.getElementById(match[2]);\n                    if (elem) {\n                        // Inject the element directly into the jQuery object\n                        this[0] = elem;\n                        this.length = 1;\n                    }\n                    return this;\n                }\n            } else if (!context || context.jquery) return (context || root).find(selector);\n            else return this.constructor(context).find(selector);\n        // HANDLE: $(DOMElement)\n        } else if (selector.nodeType) {\n            this[0] = selector;\n            this.length = 1;\n            return this;\n        // HANDLE: $(function)\n        // Shortcut for document ready\n        } else if (isFunction(selector)) return root.ready !== undefined ? root.ready(selector) : // Execute immediately if ready is not present\n        selector(jQuery);\n        return jQuery.makeArray(selector, this);\n    };\n    // Give the init function the jQuery prototype for later instantiation\n    init.prototype = jQuery.fn;\n    // Initialize central reference\n    rootjQuery = jQuery(document);\n    var rparentsprev = /^(?:parents|prev(?:Until|All))/, // Methods guaranteed to produce a unique set when starting from a unique set\n    guaranteedUnique = {\n        children: true,\n        contents: true,\n        next: true,\n        prev: true\n    };\n    jQuery.fn.extend({\n        has: function(target) {\n            var targets = jQuery(target, this), l = targets.length;\n            return this.filter(function() {\n                var i = 0;\n                for(; i < l; i++){\n                    if (jQuery.contains(this, targets[i])) return true;\n                }\n            });\n        },\n        closest: function(selectors, context) {\n            var cur, i = 0, l = this.length, matched = [], targets = typeof selectors !== \"string\" && jQuery(selectors);\n            // Positional selectors never match, since there's no _selection_ context\n            if (!rneedsContext.test(selectors)) for(; i < l; i++){\n                for(cur = this[i]; cur && cur !== context; cur = cur.parentNode)// Always skip document fragments\n                if (cur.nodeType < 11 && (targets ? targets.index(cur) > -1 : // Don't pass non-elements to jQuery#find\n                cur.nodeType === 1 && jQuery.find.matchesSelector(cur, selectors))) {\n                    matched.push(cur);\n                    break;\n                }\n            }\n            return this.pushStack(matched.length > 1 ? jQuery.uniqueSort(matched) : matched);\n        },\n        // Determine the position of an element within the set\n        index: function(elem) {\n            // No argument, return index in parent\n            if (!elem) return this[0] && this[0].parentNode ? this.first().prevAll().length : -1;\n            // Index in selector\n            if (typeof elem === \"string\") return indexOf.call(jQuery(elem), this[0]);\n            // Locate the position of the desired element\n            return indexOf.call(this, // If it receives a jQuery object, the first element is used\n            elem.jquery ? elem[0] : elem);\n        },\n        add: function(selector, context) {\n            return this.pushStack(jQuery.uniqueSort(jQuery.merge(this.get(), jQuery(selector, context))));\n        },\n        addBack: function(selector) {\n            return this.add(selector == null ? this.prevObject : this.prevObject.filter(selector));\n        }\n    });\n    function sibling(cur, dir) {\n        while((cur = cur[dir]) && cur.nodeType !== 1);\n        return cur;\n    }\n    jQuery.each({\n        parent: function(elem) {\n            var parent = elem.parentNode;\n            return parent && parent.nodeType !== 11 ? parent : null;\n        },\n        parents: function(elem) {\n            return dir(elem, \"parentNode\");\n        },\n        parentsUntil: function(elem, _i, until) {\n            return dir(elem, \"parentNode\", until);\n        },\n        next: function(elem) {\n            return sibling(elem, \"nextSibling\");\n        },\n        prev: function(elem) {\n            return sibling(elem, \"previousSibling\");\n        },\n        nextAll: function(elem) {\n            return dir(elem, \"nextSibling\");\n        },\n        prevAll: function(elem) {\n            return dir(elem, \"previousSibling\");\n        },\n        nextUntil: function(elem, _i, until) {\n            return dir(elem, \"nextSibling\", until);\n        },\n        prevUntil: function(elem, _i, until) {\n            return dir(elem, \"previousSibling\", until);\n        },\n        siblings: function(elem) {\n            return siblings((elem.parentNode || {}).firstChild, elem);\n        },\n        children: function(elem) {\n            return siblings(elem.firstChild);\n        },\n        contents: function(elem) {\n            if (elem.contentDocument != null && // Support: IE 11+\n            // <object> elements with no `data` attribute has an object\n            // `contentDocument` with a `null` prototype.\n            getProto(elem.contentDocument)) return elem.contentDocument;\n            // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n            // Treat the template element as a regular one in browsers that\n            // don't support it.\n            if (nodeName(elem, \"template\")) elem = elem.content || elem;\n            return jQuery.merge([], elem.childNodes);\n        }\n    }, function(name, fn) {\n        jQuery.fn[name] = function(until, selector) {\n            var matched = jQuery.map(this, fn, until);\n            if (name.slice(-5) !== \"Until\") selector = until;\n            if (selector && typeof selector === \"string\") matched = jQuery.filter(selector, matched);\n            if (this.length > 1) {\n                // Remove duplicates\n                if (!guaranteedUnique[name]) jQuery.uniqueSort(matched);\n                // Reverse order for parents* and prev-derivatives\n                if (rparentsprev.test(name)) matched.reverse();\n            }\n            return this.pushStack(matched);\n        };\n    });\n    var rnothtmlwhite = /[^\\x20\\t\\r\\n\\f]+/g;\n    // Convert String-formatted options into Object-formatted ones\n    function createOptions(options) {\n        var object = {};\n        jQuery.each(options.match(rnothtmlwhite) || [], function(_, flag) {\n            object[flag] = true;\n        });\n        return object;\n    }\n    /*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */ jQuery.Callbacks = function(options) {\n        // Convert options from String-formatted to Object-formatted if needed\n        // (we check in cache first)\n        options = typeof options === \"string\" ? createOptions(options) : jQuery.extend({}, options);\n        var firing, // Last fire value for non-forgettable lists\n        memory, // Flag to know if list was already fired\n        fired, // Flag to prevent firing\n        locked, // Actual callback list\n        list = [], // Queue of execution data for repeatable lists\n        queue = [], // Index of currently firing callback (modified by add/remove as needed)\n        firingIndex = -1, // Fire callbacks\n        fire = function() {\n            // Enforce single-firing\n            locked = locked || options.once;\n            // Execute callbacks for all pending executions,\n            // respecting firingIndex overrides and runtime changes\n            fired = firing = true;\n            for(; queue.length; firingIndex = -1){\n                memory = queue.shift();\n                while(++firingIndex < list.length)// Run callback and check for early termination\n                if (list[firingIndex].apply(memory[0], memory[1]) === false && options.stopOnFalse) {\n                    // Jump to end and forget the data so .add doesn't re-fire\n                    firingIndex = list.length;\n                    memory = false;\n                }\n            }\n            // Forget the data if we're done with it\n            if (!options.memory) memory = false;\n            firing = false;\n            // Clean up if we're done firing for good\n            if (locked) {\n                // Keep an empty list if we have data for future add calls\n                if (memory) list = [];\n                else list = \"\";\n            }\n        }, // Actual Callbacks object\n        self = {\n            // Add a callback or a collection of callbacks to the list\n            add: function() {\n                if (list) {\n                    // If we have memory from a past run, we should fire after adding\n                    if (memory && !firing) {\n                        firingIndex = list.length - 1;\n                        queue.push(memory);\n                    }\n                    (function add(args) {\n                        jQuery.each(args, function(_, arg) {\n                            if (isFunction(arg)) {\n                                if (!options.unique || !self.has(arg)) list.push(arg);\n                            } else if (arg && arg.length && toType(arg) !== \"string\") // Inspect recursively\n                            add(arg);\n                        });\n                    })(arguments);\n                    if (memory && !firing) fire();\n                }\n                return this;\n            },\n            // Remove a callback from the list\n            remove: function() {\n                jQuery.each(arguments, function(_, arg) {\n                    var index;\n                    while((index = jQuery.inArray(arg, list, index)) > -1){\n                        list.splice(index, 1);\n                        // Handle firing indexes\n                        if (index <= firingIndex) firingIndex--;\n                    }\n                });\n                return this;\n            },\n            // Check if a given callback is in the list.\n            // If no argument is given, return whether or not list has callbacks attached.\n            has: function(fn) {\n                return fn ? jQuery.inArray(fn, list) > -1 : list.length > 0;\n            },\n            // Remove all callbacks from the list\n            empty: function() {\n                if (list) list = [];\n                return this;\n            },\n            // Disable .fire and .add\n            // Abort any current/pending executions\n            // Clear all callbacks and values\n            disable: function() {\n                locked = queue = [];\n                list = memory = \"\";\n                return this;\n            },\n            disabled: function() {\n                return !list;\n            },\n            // Disable .fire\n            // Also disable .add unless we have memory (since it would have no effect)\n            // Abort any pending executions\n            lock: function() {\n                locked = queue = [];\n                if (!memory && !firing) list = memory = \"\";\n                return this;\n            },\n            locked: function() {\n                return !!locked;\n            },\n            // Call all callbacks with the given context and arguments\n            fireWith: function(context, args) {\n                if (!locked) {\n                    args = args || [];\n                    args = [\n                        context,\n                        args.slice ? args.slice() : args\n                    ];\n                    queue.push(args);\n                    if (!firing) fire();\n                }\n                return this;\n            },\n            // Call all the callbacks with the given arguments\n            fire: function() {\n                self.fireWith(this, arguments);\n                return this;\n            },\n            // To know if the callbacks have already been called at least once\n            fired: function() {\n                return !!fired;\n            }\n        };\n        return self;\n    };\n    function Identity(v) {\n        return v;\n    }\n    function Thrower(ex) {\n        throw ex;\n    }\n    function adoptValue(value, resolve, reject, noValue) {\n        var method;\n        try {\n            // Check for promise aspect first to privilege synchronous behavior\n            if (value && isFunction(method = value.promise)) method.call(value).done(resolve).fail(reject);\n            else if (value && isFunction(method = value.then)) method.call(value, resolve, reject);\n            else // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n            // * false: [ value ].slice( 0 ) => resolve( value )\n            // * true: [ value ].slice( 1 ) => resolve()\n            resolve.apply(undefined, [\n                value\n            ].slice(noValue));\n        // For Promises/A+, convert exceptions into rejections\n        // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n        // Deferred#then to conditionally suppress rejection.\n        } catch (value) {\n            // Support: Android 4.0 only\n            // Strict mode functions invoked without .call/.apply get global-object context\n            reject.apply(undefined, [\n                value\n            ]);\n        }\n    }\n    jQuery.extend({\n        Deferred: function(func) {\n            var tuples = [\n                // action, add listener, callbacks,\n                // ... .then handlers, argument index, [final state]\n                [\n                    \"notify\",\n                    \"progress\",\n                    jQuery.Callbacks(\"memory\"),\n                    jQuery.Callbacks(\"memory\"),\n                    2\n                ],\n                [\n                    \"resolve\",\n                    \"done\",\n                    jQuery.Callbacks(\"once memory\"),\n                    jQuery.Callbacks(\"once memory\"),\n                    0,\n                    \"resolved\"\n                ],\n                [\n                    \"reject\",\n                    \"fail\",\n                    jQuery.Callbacks(\"once memory\"),\n                    jQuery.Callbacks(\"once memory\"),\n                    1,\n                    \"rejected\"\n                ]\n            ], state = \"pending\", promise = {\n                state: function() {\n                    return state;\n                },\n                always: function() {\n                    deferred.done(arguments).fail(arguments);\n                    return this;\n                },\n                \"catch\": function(fn) {\n                    return promise.then(null, fn);\n                },\n                // Keep pipe for back-compat\n                pipe: function() {\n                    var fns = arguments;\n                    return jQuery.Deferred(function(newDefer) {\n                        jQuery.each(tuples, function(_i, tuple) {\n                            // Map tuples (progress, done, fail) to arguments (done, fail, progress)\n                            var fn = isFunction(fns[tuple[4]]) && fns[tuple[4]];\n                            // deferred.progress(function() { bind to newDefer or newDefer.notify })\n                            // deferred.done(function() { bind to newDefer or newDefer.resolve })\n                            // deferred.fail(function() { bind to newDefer or newDefer.reject })\n                            deferred[tuple[1]](function() {\n                                var returned = fn && fn.apply(this, arguments);\n                                if (returned && isFunction(returned.promise)) returned.promise().progress(newDefer.notify).done(newDefer.resolve).fail(newDefer.reject);\n                                else newDefer[tuple[0] + \"With\"](this, fn ? [\n                                    returned\n                                ] : arguments);\n                            });\n                        });\n                        fns = null;\n                    }).promise();\n                },\n                then: function(onFulfilled, onRejected, onProgress) {\n                    var maxDepth = 0;\n                    function resolve(depth, deferred, handler, special) {\n                        return function() {\n                            var that = this, args = arguments, mightThrow = function() {\n                                var returned, then;\n                                // Support: Promises/A+ section 2.3.3.3.3\n                                // https://promisesaplus.com/#point-59\n                                // Ignore double-resolution attempts\n                                if (depth < maxDepth) return;\n                                returned = handler.apply(that, args);\n                                // Support: Promises/A+ section 2.3.1\n                                // https://promisesaplus.com/#point-48\n                                if (returned === deferred.promise()) throw new TypeError(\"Thenable self-resolution\");\n                                // Support: Promises/A+ sections 2.3.3.1, 3.5\n                                // https://promisesaplus.com/#point-54\n                                // https://promisesaplus.com/#point-75\n                                // Retrieve `then` only once\n                                then = returned && // Support: Promises/A+ section 2.3.4\n                                // https://promisesaplus.com/#point-64\n                                // Only check objects and functions for thenability\n                                (typeof returned === \"object\" || typeof returned === \"function\") && returned.then;\n                                // Handle a returned thenable\n                                if (isFunction(then)) {\n                                    // Special processors (notify) just wait for resolution\n                                    if (special) then.call(returned, resolve(maxDepth, deferred, Identity, special), resolve(maxDepth, deferred, Thrower, special));\n                                    else {\n                                        // ...and disregard older resolution values\n                                        maxDepth++;\n                                        then.call(returned, resolve(maxDepth, deferred, Identity, special), resolve(maxDepth, deferred, Thrower, special), resolve(maxDepth, deferred, Identity, deferred.notifyWith));\n                                    }\n                                } else {\n                                    // Only substitute handlers pass on context\n                                    // and multiple values (non-spec behavior)\n                                    if (handler !== Identity) {\n                                        that = undefined;\n                                        args = [\n                                            returned\n                                        ];\n                                    }\n                                    // Process the value(s)\n                                    // Default process is resolve\n                                    (special || deferred.resolveWith)(that, args);\n                                }\n                            }, // Only normal processors (resolve) catch and reject exceptions\n                            process = special ? mightThrow : function() {\n                                try {\n                                    mightThrow();\n                                } catch (e) {\n                                    if (jQuery.Deferred.exceptionHook) jQuery.Deferred.exceptionHook(e, process.error);\n                                    // Support: Promises/A+ section 2.3.3.3.4.1\n                                    // https://promisesaplus.com/#point-61\n                                    // Ignore post-resolution exceptions\n                                    if (depth + 1 >= maxDepth) {\n                                        // Only substitute handlers pass on context\n                                        // and multiple values (non-spec behavior)\n                                        if (handler !== Thrower) {\n                                            that = undefined;\n                                            args = [\n                                                e\n                                            ];\n                                        }\n                                        deferred.rejectWith(that, args);\n                                    }\n                                }\n                            };\n                            // Support: Promises/A+ section 2.3.3.3.1\n                            // https://promisesaplus.com/#point-57\n                            // Re-resolve promises immediately to dodge false rejection from\n                            // subsequent errors\n                            if (depth) process();\n                            else {\n                                // Call an optional hook to record the error, in case of exception\n                                // since it's otherwise lost when execution goes async\n                                if (jQuery.Deferred.getErrorHook) process.error = jQuery.Deferred.getErrorHook();\n                                else if (jQuery.Deferred.getStackHook) process.error = jQuery.Deferred.getStackHook();\n                                window1.setTimeout(process);\n                            }\n                        };\n                    }\n                    return jQuery.Deferred(function(newDefer) {\n                        // progress_handlers.add( ... )\n                        tuples[0][3].add(resolve(0, newDefer, isFunction(onProgress) ? onProgress : Identity, newDefer.notifyWith));\n                        // fulfilled_handlers.add( ... )\n                        tuples[1][3].add(resolve(0, newDefer, isFunction(onFulfilled) ? onFulfilled : Identity));\n                        // rejected_handlers.add( ... )\n                        tuples[2][3].add(resolve(0, newDefer, isFunction(onRejected) ? onRejected : Thrower));\n                    }).promise();\n                },\n                // Get a promise for this deferred\n                // If obj is provided, the promise aspect is added to the object\n                promise: function(obj) {\n                    return obj != null ? jQuery.extend(obj, promise) : promise;\n                }\n            }, deferred = {};\n            // Add list-specific methods\n            jQuery.each(tuples, function(i, tuple) {\n                var list = tuple[2], stateString = tuple[5];\n                // promise.progress = list.add\n                // promise.done = list.add\n                // promise.fail = list.add\n                promise[tuple[1]] = list.add;\n                // Handle state\n                if (stateString) list.add(function() {\n                    // state = \"resolved\" (i.e., fulfilled)\n                    // state = \"rejected\"\n                    state = stateString;\n                }, // rejected_callbacks.disable\n                // fulfilled_callbacks.disable\n                tuples[3 - i][2].disable, // rejected_handlers.disable\n                // fulfilled_handlers.disable\n                tuples[3 - i][3].disable, // progress_callbacks.lock\n                tuples[0][2].lock, // progress_handlers.lock\n                tuples[0][3].lock);\n                // progress_handlers.fire\n                // fulfilled_handlers.fire\n                // rejected_handlers.fire\n                list.add(tuple[3].fire);\n                // deferred.notify = function() { deferred.notifyWith(...) }\n                // deferred.resolve = function() { deferred.resolveWith(...) }\n                // deferred.reject = function() { deferred.rejectWith(...) }\n                deferred[tuple[0]] = function() {\n                    deferred[tuple[0] + \"With\"](this === deferred ? undefined : this, arguments);\n                    return this;\n                };\n                // deferred.notifyWith = list.fireWith\n                // deferred.resolveWith = list.fireWith\n                // deferred.rejectWith = list.fireWith\n                deferred[tuple[0] + \"With\"] = list.fireWith;\n            });\n            // Make the deferred a promise\n            promise.promise(deferred);\n            // Call given func if any\n            if (func) func.call(deferred, deferred);\n            // All done!\n            return deferred;\n        },\n        // Deferred helper\n        when: function(singleValue) {\n            var // count of uncompleted subordinates\n            remaining = arguments.length, // count of unprocessed arguments\n            i = remaining, // subordinate fulfillment data\n            resolveContexts = Array(i), resolveValues = slice.call(arguments), // the primary Deferred\n            primary = jQuery.Deferred(), // subordinate callback factory\n            updateFunc = function(i) {\n                return function(value) {\n                    resolveContexts[i] = this;\n                    resolveValues[i] = arguments.length > 1 ? slice.call(arguments) : value;\n                    if (!--remaining) primary.resolveWith(resolveContexts, resolveValues);\n                };\n            };\n            // Single- and empty arguments are adopted like Promise.resolve\n            if (remaining <= 1) {\n                adoptValue(singleValue, primary.done(updateFunc(i)).resolve, primary.reject, !remaining);\n                // Use .then() to unwrap secondary thenables (cf. gh-3000)\n                if (primary.state() === \"pending\" || isFunction(resolveValues[i] && resolveValues[i].then)) return primary.then();\n            }\n            // Multiple arguments are aggregated like Promise.all array elements\n            while(i--)adoptValue(resolveValues[i], updateFunc(i), primary.reject);\n            return primary.promise();\n        }\n    });\n    // These usually indicate a programmer mistake during development,\n    // warn about them ASAP rather than swallowing them by default.\n    var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n    // If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error\n    // captured before the async barrier to get the original error cause\n    // which may otherwise be hidden.\n    jQuery.Deferred.exceptionHook = function(error, asyncError) {\n        // Support: IE 8 - 9 only\n        // Console exists when dev tools are open, which can happen at any time\n        if (window1.console && window1.console.warn && error && rerrorNames.test(error.name)) window1.console.warn(\"jQuery.Deferred exception: \" + error.message, error.stack, asyncError);\n    };\n    jQuery.readyException = function(error) {\n        window1.setTimeout(function() {\n            throw error;\n        });\n    };\n    // The deferred used on DOM ready\n    var readyList = jQuery.Deferred();\n    jQuery.fn.ready = function(fn) {\n        readyList.then(fn)// Wrap jQuery.readyException in a function so that the lookup\n        // happens at the time of error handling instead of callback\n        // registration.\n        .catch(function(error) {\n            jQuery.readyException(error);\n        });\n        return this;\n    };\n    jQuery.extend({\n        // Is the DOM ready to be used? Set to true once it occurs.\n        isReady: false,\n        // A counter to track how many items to wait for before\n        // the ready event fires. See trac-6781\n        readyWait: 1,\n        // Handle when the DOM is ready\n        ready: function(wait) {\n            // Abort if there are pending holds or we're already ready\n            if (wait === true ? --jQuery.readyWait : jQuery.isReady) return;\n            // Remember that the DOM is ready\n            jQuery.isReady = true;\n            // If a normal DOM Ready event fired, decrement, and wait if need be\n            if (wait !== true && --jQuery.readyWait > 0) return;\n            // If there are functions bound, to execute\n            readyList.resolveWith(document, [\n                jQuery\n            ]);\n        }\n    });\n    jQuery.ready.then = readyList.then;\n    // The ready event handler and self cleanup method\n    function completed() {\n        document.removeEventListener(\"DOMContentLoaded\", completed);\n        window1.removeEventListener(\"load\", completed);\n        jQuery.ready();\n    }\n    // Catch cases where $(document).ready() is called\n    // after the browser event has already occurred.\n    // Support: IE <=9 - 10 only\n    // Older IE sometimes signals \"interactive\" too soon\n    if (document.readyState === \"complete\" || document.readyState !== \"loading\" && !document.documentElement.doScroll) // Handle it asynchronously to allow scripts the opportunity to delay ready\n    window1.setTimeout(jQuery.ready);\n    else {\n        // Use the handy event callback\n        document.addEventListener(\"DOMContentLoaded\", completed);\n        // A fallback to window.onload, that will always work\n        window1.addEventListener(\"load\", completed);\n    }\n    // Multifunctional method to get and set values of a collection\n    // The value/s can optionally be executed if it's a function\n    var access = function(elems, fn, key, value, chainable, emptyGet, raw) {\n        var i = 0, len = elems.length, bulk = key == null;\n        // Sets many values\n        if (toType(key) === \"object\") {\n            chainable = true;\n            for(i in key)access(elems, fn, i, key[i], true, emptyGet, raw);\n        // Sets one value\n        } else if (value !== undefined) {\n            chainable = true;\n            if (!isFunction(value)) raw = true;\n            if (bulk) {\n                // Bulk operations run against the entire set\n                if (raw) {\n                    fn.call(elems, value);\n                    fn = null;\n                // ...except when executing function values\n                } else {\n                    bulk = fn;\n                    fn = function(elem, _key, value) {\n                        return bulk.call(jQuery(elem), value);\n                    };\n                }\n            }\n            if (fn) for(; i < len; i++)fn(elems[i], key, raw ? value : value.call(elems[i], i, fn(elems[i], key)));\n        }\n        if (chainable) return elems;\n        // Gets\n        if (bulk) return fn.call(elems);\n        return len ? fn(elems[0], key) : emptyGet;\n    };\n    // Matches dashed string for camelizing\n    var rmsPrefix = /^-ms-/, rdashAlpha = /-([a-z])/g;\n    // Used by camelCase as callback to replace()\n    function fcamelCase(_all, letter) {\n        return letter.toUpperCase();\n    }\n    // Convert dashed to camelCase; used by the css and data modules\n    // Support: IE <=9 - 11, Edge 12 - 15\n    // Microsoft forgot to hump their vendor prefix (trac-9572)\n    function camelCase(string) {\n        return string.replace(rmsPrefix, \"ms-\").replace(rdashAlpha, fcamelCase);\n    }\n    var acceptData = function(owner) {\n        // Accepts only:\n        //  - Node\n        //    - Node.ELEMENT_NODE\n        //    - Node.DOCUMENT_NODE\n        //  - Object\n        //    - Any\n        return owner.nodeType === 1 || owner.nodeType === 9 || !+owner.nodeType;\n    };\n    function Data() {\n        this.expando = jQuery.expando + Data.uid++;\n    }\n    Data.uid = 1;\n    Data.prototype = {\n        cache: function(owner) {\n            // Check if the owner object already has a cache\n            var value = owner[this.expando];\n            // If not, create one\n            if (!value) {\n                value = {};\n                // We can accept data for non-element nodes in modern browsers,\n                // but we should not, see trac-8335.\n                // Always return an empty object.\n                if (acceptData(owner)) {\n                    // If it is a node unlikely to be stringify-ed or looped over\n                    // use plain assignment\n                    if (owner.nodeType) owner[this.expando] = value;\n                    else Object.defineProperty(owner, this.expando, {\n                        value: value,\n                        configurable: true\n                    });\n                }\n            }\n            return value;\n        },\n        set: function(owner, data, value) {\n            var prop, cache = this.cache(owner);\n            // Handle: [ owner, key, value ] args\n            // Always use camelCase key (gh-2257)\n            if (typeof data === \"string\") cache[camelCase(data)] = value;\n            else // Copy the properties one-by-one to the cache object\n            for(prop in data)cache[camelCase(prop)] = data[prop];\n            return cache;\n        },\n        get: function(owner, key) {\n            return key === undefined ? this.cache(owner) : // Always use camelCase key (gh-2257)\n            owner[this.expando] && owner[this.expando][camelCase(key)];\n        },\n        access: function(owner, key, value) {\n            // In cases where either:\n            //\n            //   1. No key was specified\n            //   2. A string key was specified, but no value provided\n            //\n            // Take the \"read\" path and allow the get method to determine\n            // which value to return, respectively either:\n            //\n            //   1. The entire cache object\n            //   2. The data stored at the key\n            //\n            if (key === undefined || key && typeof key === \"string\" && value === undefined) return this.get(owner, key);\n            // When the key is not a string, or both a key and value\n            // are specified, set or extend (existing objects) with either:\n            //\n            //   1. An object of properties\n            //   2. A key and value\n            //\n            this.set(owner, key, value);\n            // Since the \"set\" path can have two possible entry points\n            // return the expected data based on which path was taken[*]\n            return value !== undefined ? value : key;\n        },\n        remove: function(owner, key) {\n            var i, cache = owner[this.expando];\n            if (cache === undefined) return;\n            if (key !== undefined) {\n                // Support array or space separated string of keys\n                if (Array.isArray(key)) // If key is an array of keys...\n                // We always set camelCase keys, so remove that.\n                key = key.map(camelCase);\n                else {\n                    key = camelCase(key);\n                    // If a key with the spaces exists, use it.\n                    // Otherwise, create an array by matching non-whitespace\n                    key = key in cache ? [\n                        key\n                    ] : key.match(rnothtmlwhite) || [];\n                }\n                i = key.length;\n                while(i--)delete cache[key[i]];\n            }\n            // Remove the expando if there's no more data\n            if (key === undefined || jQuery.isEmptyObject(cache)) {\n                // Support: Chrome <=35 - 45\n                // Webkit & Blink performance suffers when deleting properties\n                // from DOM nodes, so set to undefined instead\n                // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n                if (owner.nodeType) owner[this.expando] = undefined;\n                else delete owner[this.expando];\n            }\n        },\n        hasData: function(owner) {\n            var cache = owner[this.expando];\n            return cache !== undefined && !jQuery.isEmptyObject(cache);\n        }\n    };\n    var dataPriv = new Data();\n    var dataUser = new Data();\n    //\tImplementation Summary\n    //\n    //\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n    //\t2. Improve the module's maintainability by reducing the storage\n    //\t\tpaths to a single mechanism.\n    //\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n    //\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n    //\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n    //\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n    var rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/, rmultiDash = /[A-Z]/g;\n    function getData(data) {\n        if (data === \"true\") return true;\n        if (data === \"false\") return false;\n        if (data === \"null\") return null;\n        // Only convert to a number if it doesn't change the string\n        if (data === +data + \"\") return +data;\n        if (rbrace.test(data)) return JSON.parse(data);\n        return data;\n    }\n    function dataAttr(elem, key, data) {\n        var name;\n        // If nothing was found internally, try to fetch any\n        // data from the HTML5 data-* attribute\n        if (data === undefined && elem.nodeType === 1) {\n            name = \"data-\" + key.replace(rmultiDash, \"-$&\").toLowerCase();\n            data = elem.getAttribute(name);\n            if (typeof data === \"string\") {\n                try {\n                    data = getData(data);\n                } catch (e) {}\n                // Make sure we set the data so it isn't changed later\n                dataUser.set(elem, key, data);\n            } else data = undefined;\n        }\n        return data;\n    }\n    jQuery.extend({\n        hasData: function(elem) {\n            return dataUser.hasData(elem) || dataPriv.hasData(elem);\n        },\n        data: function(elem, name, data) {\n            return dataUser.access(elem, name, data);\n        },\n        removeData: function(elem, name) {\n            dataUser.remove(elem, name);\n        },\n        // TODO: Now that all calls to _data and _removeData have been replaced\n        // with direct calls to dataPriv methods, these can be deprecated.\n        _data: function(elem, name, data) {\n            return dataPriv.access(elem, name, data);\n        },\n        _removeData: function(elem, name) {\n            dataPriv.remove(elem, name);\n        }\n    });\n    jQuery.fn.extend({\n        data: function(key, value) {\n            var i, name, data, elem = this[0], attrs = elem && elem.attributes;\n            // Gets all values\n            if (key === undefined) {\n                if (this.length) {\n                    data = dataUser.get(elem);\n                    if (elem.nodeType === 1 && !dataPriv.get(elem, \"hasDataAttrs\")) {\n                        i = attrs.length;\n                        while(i--)// Support: IE 11 only\n                        // The attrs elements can be null (trac-14894)\n                        if (attrs[i]) {\n                            name = attrs[i].name;\n                            if (name.indexOf(\"data-\") === 0) {\n                                name = camelCase(name.slice(5));\n                                dataAttr(elem, name, data[name]);\n                            }\n                        }\n                        dataPriv.set(elem, \"hasDataAttrs\", true);\n                    }\n                }\n                return data;\n            }\n            // Sets multiple values\n            if (typeof key === \"object\") return this.each(function() {\n                dataUser.set(this, key);\n            });\n            return access(this, function(value) {\n                var data;\n                // The calling jQuery object (element matches) is not empty\n                // (and therefore has an element appears at this[ 0 ]) and the\n                // `value` parameter was not undefined. An empty jQuery object\n                // will result in `undefined` for elem = this[ 0 ] which will\n                // throw an exception if an attempt to read a data cache is made.\n                if (elem && value === undefined) {\n                    // Attempt to get data from the cache\n                    // The key will always be camelCased in Data\n                    data = dataUser.get(elem, key);\n                    if (data !== undefined) return data;\n                    // Attempt to \"discover\" the data in\n                    // HTML5 custom data-* attrs\n                    data = dataAttr(elem, key);\n                    if (data !== undefined) return data;\n                    // We tried really hard, but the data doesn't exist.\n                    return;\n                }\n                // Set the data...\n                this.each(function() {\n                    // We always store the camelCased key\n                    dataUser.set(this, key, value);\n                });\n            }, null, value, arguments.length > 1, null, true);\n        },\n        removeData: function(key) {\n            return this.each(function() {\n                dataUser.remove(this, key);\n            });\n        }\n    });\n    jQuery.extend({\n        queue: function(elem, type, data) {\n            var queue;\n            if (elem) {\n                type = (type || \"fx\") + \"queue\";\n                queue = dataPriv.get(elem, type);\n                // Speed up dequeue by getting out quickly if this is just a lookup\n                if (data) {\n                    if (!queue || Array.isArray(data)) queue = dataPriv.access(elem, type, jQuery.makeArray(data));\n                    else queue.push(data);\n                }\n                return queue || [];\n            }\n        },\n        dequeue: function(elem, type) {\n            type = type || \"fx\";\n            var queue = jQuery.queue(elem, type), startLength = queue.length, fn = queue.shift(), hooks = jQuery._queueHooks(elem, type), next = function() {\n                jQuery.dequeue(elem, type);\n            };\n            // If the fx queue is dequeued, always remove the progress sentinel\n            if (fn === \"inprogress\") {\n                fn = queue.shift();\n                startLength--;\n            }\n            if (fn) {\n                // Add a progress sentinel to prevent the fx queue from being\n                // automatically dequeued\n                if (type === \"fx\") queue.unshift(\"inprogress\");\n                // Clear up the last queue stop function\n                delete hooks.stop;\n                fn.call(elem, next, hooks);\n            }\n            if (!startLength && hooks) hooks.empty.fire();\n        },\n        // Not public - generate a queueHooks object, or return the current one\n        _queueHooks: function(elem, type) {\n            var key = type + \"queueHooks\";\n            return dataPriv.get(elem, key) || dataPriv.access(elem, key, {\n                empty: jQuery.Callbacks(\"once memory\").add(function() {\n                    dataPriv.remove(elem, [\n                        type + \"queue\",\n                        key\n                    ]);\n                })\n            });\n        }\n    });\n    jQuery.fn.extend({\n        queue: function(type, data) {\n            var setter = 2;\n            if (typeof type !== \"string\") {\n                data = type;\n                type = \"fx\";\n                setter--;\n            }\n            if (arguments.length < setter) return jQuery.queue(this[0], type);\n            return data === undefined ? this : this.each(function() {\n                var queue = jQuery.queue(this, type, data);\n                // Ensure a hooks for this queue\n                jQuery._queueHooks(this, type);\n                if (type === \"fx\" && queue[0] !== \"inprogress\") jQuery.dequeue(this, type);\n            });\n        },\n        dequeue: function(type) {\n            return this.each(function() {\n                jQuery.dequeue(this, type);\n            });\n        },\n        clearQueue: function(type) {\n            return this.queue(type || \"fx\", []);\n        },\n        // Get a promise resolved when queues of a certain type\n        // are emptied (fx is the type by default)\n        promise: function(type, obj) {\n            var tmp, count = 1, defer = jQuery.Deferred(), elements = this, i = this.length, resolve = function() {\n                if (!--count) defer.resolveWith(elements, [\n                    elements\n                ]);\n            };\n            if (typeof type !== \"string\") {\n                obj = type;\n                type = undefined;\n            }\n            type = type || \"fx\";\n            while(i--){\n                tmp = dataPriv.get(elements[i], type + \"queueHooks\");\n                if (tmp && tmp.empty) {\n                    count++;\n                    tmp.empty.add(resolve);\n                }\n            }\n            resolve();\n            return defer.promise(obj);\n        }\n    });\n    var pnum = /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source;\n    var rcssNum = new RegExp(\"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\");\n    var cssExpand = [\n        \"Top\",\n        \"Right\",\n        \"Bottom\",\n        \"Left\"\n    ];\n    var documentElement = document.documentElement;\n    var isAttached = function(elem) {\n        return jQuery.contains(elem.ownerDocument, elem);\n    }, composed = {\n        composed: true\n    };\n    // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only\n    // Check attachment across shadow DOM boundaries when possible (gh-3504)\n    // Support: iOS 10.0-10.2 only\n    // Early iOS 10 versions support `attachShadow` but not `getRootNode`,\n    // leading to errors. We need to check for `getRootNode`.\n    if (documentElement.getRootNode) isAttached = function(elem) {\n        return jQuery.contains(elem.ownerDocument, elem) || elem.getRootNode(composed) === elem.ownerDocument;\n    };\n    var isHiddenWithinTree = function(elem, el) {\n        // isHiddenWithinTree might be called from jQuery#filter function;\n        // in that case, element will be second argument\n        elem = el || elem;\n        // Inline style trumps all\n        return elem.style.display === \"none\" || elem.style.display === \"\" && // Otherwise, check computed style\n        // Support: Firefox <=43 - 45\n        // Disconnected elements can have computed display: none, so first confirm that elem is\n        // in the document.\n        isAttached(elem) && jQuery.css(elem, \"display\") === \"none\";\n    };\n    function adjustCSS(elem, prop, valueParts, tween) {\n        var adjusted, scale, maxIterations = 20, currentValue = tween ? function() {\n            return tween.cur();\n        } : function() {\n            return jQuery.css(elem, prop, \"\");\n        }, initial = currentValue(), unit = valueParts && valueParts[3] || (jQuery.cssNumber[prop] ? \"\" : \"px\"), // Starting value computation is required for potential unit mismatches\n        initialInUnit = elem.nodeType && (jQuery.cssNumber[prop] || unit !== \"px\" && +initial) && rcssNum.exec(jQuery.css(elem, prop));\n        if (initialInUnit && initialInUnit[3] !== unit) {\n            // Support: Firefox <=54\n            // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n            initial = initial / 2;\n            // Trust units reported by jQuery.css\n            unit = unit || initialInUnit[3];\n            // Iteratively approximate from a nonzero starting point\n            initialInUnit = +initial || 1;\n            while(maxIterations--){\n                // Evaluate and update our best guess (doubling guesses that zero out).\n                // Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n                jQuery.style(elem, prop, initialInUnit + unit);\n                if ((1 - scale) * (1 - (scale = currentValue() / initial || 0.5)) <= 0) maxIterations = 0;\n                initialInUnit = initialInUnit / scale;\n            }\n            initialInUnit = initialInUnit * 2;\n            jQuery.style(elem, prop, initialInUnit + unit);\n            // Make sure we update the tween properties later on\n            valueParts = valueParts || [];\n        }\n        if (valueParts) {\n            initialInUnit = +initialInUnit || +initial || 0;\n            // Apply relative offset (+=/-=) if specified\n            adjusted = valueParts[1] ? initialInUnit + (valueParts[1] + 1) * valueParts[2] : +valueParts[2];\n            if (tween) {\n                tween.unit = unit;\n                tween.start = initialInUnit;\n                tween.end = adjusted;\n            }\n        }\n        return adjusted;\n    }\n    var defaultDisplayMap = {};\n    function getDefaultDisplay(elem) {\n        var temp, doc = elem.ownerDocument, nodeName = elem.nodeName, display = defaultDisplayMap[nodeName];\n        if (display) return display;\n        temp = doc.body.appendChild(doc.createElement(nodeName));\n        display = jQuery.css(temp, \"display\");\n        temp.parentNode.removeChild(temp);\n        if (display === \"none\") display = \"block\";\n        defaultDisplayMap[nodeName] = display;\n        return display;\n    }\n    function showHide(elements, show) {\n        var display, elem, values = [], index = 0, length = elements.length;\n        // Determine new display value for elements that need to change\n        for(; index < length; index++){\n            elem = elements[index];\n            if (!elem.style) continue;\n            display = elem.style.display;\n            if (show) {\n                // Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n                // check is required in this first loop unless we have a nonempty display value (either\n                // inline or about-to-be-restored)\n                if (display === \"none\") {\n                    values[index] = dataPriv.get(elem, \"display\") || null;\n                    if (!values[index]) elem.style.display = \"\";\n                }\n                if (elem.style.display === \"\" && isHiddenWithinTree(elem)) values[index] = getDefaultDisplay(elem);\n            } else if (display !== \"none\") {\n                values[index] = \"none\";\n                // Remember what we're overwriting\n                dataPriv.set(elem, \"display\", display);\n            }\n        }\n        // Set the display of the elements in a second loop to avoid constant reflow\n        for(index = 0; index < length; index++)if (values[index] != null) elements[index].style.display = values[index];\n        return elements;\n    }\n    jQuery.fn.extend({\n        show: function() {\n            return showHide(this, true);\n        },\n        hide: function() {\n            return showHide(this);\n        },\n        toggle: function(state) {\n            if (typeof state === \"boolean\") return state ? this.show() : this.hide();\n            return this.each(function() {\n                if (isHiddenWithinTree(this)) jQuery(this).show();\n                else jQuery(this).hide();\n            });\n        }\n    });\n    var rcheckableType = /^(?:checkbox|radio)$/i;\n    var rtagName = /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i;\n    var rscriptType = /^$|^module$|\\/(?:java|ecma)script/i;\n    (function() {\n        var fragment = document.createDocumentFragment(), div = fragment.appendChild(document.createElement(\"div\")), input = document.createElement(\"input\");\n        // Support: Android 4.0 - 4.3 only\n        // Check state lost if the name is set (trac-11217)\n        // Support: Windows Web Apps (WWA)\n        // `name` and `type` must use .setAttribute for WWA (trac-14901)\n        input.setAttribute(\"type\", \"radio\");\n        input.setAttribute(\"checked\", \"checked\");\n        input.setAttribute(\"name\", \"t\");\n        div.appendChild(input);\n        // Support: Android <=4.1 only\n        // Older WebKit doesn't clone checked state correctly in fragments\n        support.checkClone = div.cloneNode(true).cloneNode(true).lastChild.checked;\n        // Support: IE <=11 only\n        // Make sure textarea (and checkbox) defaultValue is properly cloned\n        div.innerHTML = \"<textarea>x</textarea>\";\n        support.noCloneChecked = !!div.cloneNode(true).lastChild.defaultValue;\n        // Support: IE <=9 only\n        // IE <=9 replaces <option> tags with their contents when inserted outside of\n        // the select element.\n        div.innerHTML = \"<option></option>\";\n        support.option = !!div.lastChild;\n    })();\n    // We have to close these tags to support XHTML (trac-13200)\n    var wrapMap = {\n        // XHTML parsers do not magically insert elements in the\n        // same way that tag soup parsers do. So we cannot shorten\n        // this by omitting <tbody> or other required elements.\n        thead: [\n            1,\n            \"<table>\",\n            \"</table>\"\n        ],\n        col: [\n            2,\n            \"<table><colgroup>\",\n            \"</colgroup></table>\"\n        ],\n        tr: [\n            2,\n            \"<table><tbody>\",\n            \"</tbody></table>\"\n        ],\n        td: [\n            3,\n            \"<table><tbody><tr>\",\n            \"</tr></tbody></table>\"\n        ],\n        _default: [\n            0,\n            \"\",\n            \"\"\n        ]\n    };\n    wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\n    wrapMap.th = wrapMap.td;\n    // Support: IE <=9 only\n    if (!support.option) wrapMap.optgroup = wrapMap.option = [\n        1,\n        \"<select multiple='multiple'>\",\n        \"</select>\"\n    ];\n    function getAll(context, tag) {\n        // Support: IE <=9 - 11 only\n        // Use typeof to avoid zero-argument method invocation on host objects (trac-15151)\n        var ret;\n        if (typeof context.getElementsByTagName !== \"undefined\") ret = context.getElementsByTagName(tag || \"*\");\n        else if (typeof context.querySelectorAll !== \"undefined\") ret = context.querySelectorAll(tag || \"*\");\n        else ret = [];\n        if (tag === undefined || tag && nodeName(context, tag)) return jQuery.merge([\n            context\n        ], ret);\n        return ret;\n    }\n    // Mark scripts as having already been evaluated\n    function setGlobalEval(elems, refElements) {\n        var i = 0, l = elems.length;\n        for(; i < l; i++)dataPriv.set(elems[i], \"globalEval\", !refElements || dataPriv.get(refElements[i], \"globalEval\"));\n    }\n    var rhtml = /<|&#?\\w+;/;\n    function buildFragment(elems, context, scripts, selection, ignored) {\n        var elem, tmp, tag, wrap, attached, j, fragment = context.createDocumentFragment(), nodes = [], i = 0, l = elems.length;\n        for(; i < l; i++){\n            elem = elems[i];\n            if (elem || elem === 0) {\n                // Add nodes directly\n                if (toType(elem) === \"object\") // Support: Android <=4.0 only, PhantomJS 1 only\n                // push.apply(_, arraylike) throws on ancient WebKit\n                jQuery.merge(nodes, elem.nodeType ? [\n                    elem\n                ] : elem);\n                else if (!rhtml.test(elem)) nodes.push(context.createTextNode(elem));\n                else {\n                    tmp = tmp || fragment.appendChild(context.createElement(\"div\"));\n                    // Deserialize a standard representation\n                    tag = (rtagName.exec(elem) || [\n                        \"\",\n                        \"\"\n                    ])[1].toLowerCase();\n                    wrap = wrapMap[tag] || wrapMap._default;\n                    tmp.innerHTML = wrap[1] + jQuery.htmlPrefilter(elem) + wrap[2];\n                    // Descend through wrappers to the right content\n                    j = wrap[0];\n                    while(j--)tmp = tmp.lastChild;\n                    // Support: Android <=4.0 only, PhantomJS 1 only\n                    // push.apply(_, arraylike) throws on ancient WebKit\n                    jQuery.merge(nodes, tmp.childNodes);\n                    // Remember the top-level container\n                    tmp = fragment.firstChild;\n                    // Ensure the created nodes are orphaned (trac-12392)\n                    tmp.textContent = \"\";\n                }\n            }\n        }\n        // Remove wrapper from fragment\n        fragment.textContent = \"\";\n        i = 0;\n        while(elem = nodes[i++]){\n            // Skip elements already in the context collection (trac-4087)\n            if (selection && jQuery.inArray(elem, selection) > -1) {\n                if (ignored) ignored.push(elem);\n                continue;\n            }\n            attached = isAttached(elem);\n            // Append to fragment\n            tmp = getAll(fragment.appendChild(elem), \"script\");\n            // Preserve script evaluation history\n            if (attached) setGlobalEval(tmp);\n            // Capture executables\n            if (scripts) {\n                j = 0;\n                while(elem = tmp[j++])if (rscriptType.test(elem.type || \"\")) scripts.push(elem);\n            }\n        }\n        return fragment;\n    }\n    var rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n    function returnTrue() {\n        return true;\n    }\n    function returnFalse() {\n        return false;\n    }\n    function on(elem, types, selector, data, fn, one) {\n        var origFn, type;\n        // Types can be a map of types/handlers\n        if (typeof types === \"object\") {\n            // ( types-Object, selector, data )\n            if (typeof selector !== \"string\") {\n                // ( types-Object, data )\n                data = data || selector;\n                selector = undefined;\n            }\n            for(type in types)on(elem, type, selector, data, types[type], one);\n            return elem;\n        }\n        if (data == null && fn == null) {\n            // ( types, fn )\n            fn = selector;\n            data = selector = undefined;\n        } else if (fn == null) {\n            if (typeof selector === \"string\") {\n                // ( types, selector, fn )\n                fn = data;\n                data = undefined;\n            } else {\n                // ( types, data, fn )\n                fn = data;\n                data = selector;\n                selector = undefined;\n            }\n        }\n        if (fn === false) fn = returnFalse;\n        else if (!fn) return elem;\n        if (one === 1) {\n            origFn = fn;\n            fn = function(event) {\n                // Can use an empty set, since event contains the info\n                jQuery().off(event);\n                return origFn.apply(this, arguments);\n            };\n            // Use same guid so caller can remove using origFn\n            fn.guid = origFn.guid || (origFn.guid = jQuery.guid++);\n        }\n        return elem.each(function() {\n            jQuery.event.add(this, types, fn, data, selector);\n        });\n    }\n    /*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */ jQuery.event = {\n        global: {},\n        add: function(elem, types, handler, data, selector) {\n            var handleObjIn, eventHandle, tmp, events, t, handleObj, special, handlers, type, namespaces, origType, elemData = dataPriv.get(elem);\n            // Only attach events to objects that accept data\n            if (!acceptData(elem)) return;\n            // Caller can pass in an object of custom data in lieu of the handler\n            if (handler.handler) {\n                handleObjIn = handler;\n                handler = handleObjIn.handler;\n                selector = handleObjIn.selector;\n            }\n            // Ensure that invalid selectors throw exceptions at attach time\n            // Evaluate against documentElement in case elem is a non-element node (e.g., document)\n            if (selector) jQuery.find.matchesSelector(documentElement, selector);\n            // Make sure that the handler has a unique ID, used to find/remove it later\n            if (!handler.guid) handler.guid = jQuery.guid++;\n            // Init the element's event structure and main handler, if this is the first\n            if (!(events = elemData.events)) events = elemData.events = Object.create(null);\n            if (!(eventHandle = elemData.handle)) eventHandle = elemData.handle = function(e) {\n                // Discard the second event of a jQuery.event.trigger() and\n                // when an event is called after a page has unloaded\n                return typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ? jQuery.event.dispatch.apply(elem, arguments) : undefined;\n            };\n            // Handle multiple events separated by a space\n            types = (types || \"\").match(rnothtmlwhite) || [\n                \"\"\n            ];\n            t = types.length;\n            while(t--){\n                tmp = rtypenamespace.exec(types[t]) || [];\n                type = origType = tmp[1];\n                namespaces = (tmp[2] || \"\").split(\".\").sort();\n                // There *must* be a type, no attaching namespace-only handlers\n                if (!type) continue;\n                // If event changes its type, use the special event handlers for the changed type\n                special = jQuery.event.special[type] || {};\n                // If selector defined, determine special event api type, otherwise given type\n                type = (selector ? special.delegateType : special.bindType) || type;\n                // Update special based on newly reset type\n                special = jQuery.event.special[type] || {};\n                // handleObj is passed to all event handlers\n                handleObj = jQuery.extend({\n                    type: type,\n                    origType: origType,\n                    data: data,\n                    handler: handler,\n                    guid: handler.guid,\n                    selector: selector,\n                    needsContext: selector && jQuery.expr.match.needsContext.test(selector),\n                    namespace: namespaces.join(\".\")\n                }, handleObjIn);\n                // Init the event handler queue if we're the first\n                if (!(handlers = events[type])) {\n                    handlers = events[type] = [];\n                    handlers.delegateCount = 0;\n                    // Only use addEventListener if the special events handler returns false\n                    if (!special.setup || special.setup.call(elem, data, namespaces, eventHandle) === false) {\n                        if (elem.addEventListener) elem.addEventListener(type, eventHandle);\n                    }\n                }\n                if (special.add) {\n                    special.add.call(elem, handleObj);\n                    if (!handleObj.handler.guid) handleObj.handler.guid = handler.guid;\n                }\n                // Add to the element's handler list, delegates in front\n                if (selector) handlers.splice(handlers.delegateCount++, 0, handleObj);\n                else handlers.push(handleObj);\n                // Keep track of which events have ever been used, for event optimization\n                jQuery.event.global[type] = true;\n            }\n        },\n        // Detach an event or set of events from an element\n        remove: function(elem, types, handler, selector, mappedTypes) {\n            var j, origCount, tmp, events, t, handleObj, special, handlers, type, namespaces, origType, elemData = dataPriv.hasData(elem) && dataPriv.get(elem);\n            if (!elemData || !(events = elemData.events)) return;\n            // Once for each type.namespace in types; type may be omitted\n            types = (types || \"\").match(rnothtmlwhite) || [\n                \"\"\n            ];\n            t = types.length;\n            while(t--){\n                tmp = rtypenamespace.exec(types[t]) || [];\n                type = origType = tmp[1];\n                namespaces = (tmp[2] || \"\").split(\".\").sort();\n                // Unbind all events (on this namespace, if provided) for the element\n                if (!type) {\n                    for(type in events)jQuery.event.remove(elem, type + types[t], handler, selector, true);\n                    continue;\n                }\n                special = jQuery.event.special[type] || {};\n                type = (selector ? special.delegateType : special.bindType) || type;\n                handlers = events[type] || [];\n                tmp = tmp[2] && new RegExp(\"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\");\n                // Remove matching events\n                origCount = j = handlers.length;\n                while(j--){\n                    handleObj = handlers[j];\n                    if ((mappedTypes || origType === handleObj.origType) && (!handler || handler.guid === handleObj.guid) && (!tmp || tmp.test(handleObj.namespace)) && (!selector || selector === handleObj.selector || selector === \"**\" && handleObj.selector)) {\n                        handlers.splice(j, 1);\n                        if (handleObj.selector) handlers.delegateCount--;\n                        if (special.remove) special.remove.call(elem, handleObj);\n                    }\n                }\n                // Remove generic event handler if we removed something and no more handlers exist\n                // (avoids potential for endless recursion during removal of special event handlers)\n                if (origCount && !handlers.length) {\n                    if (!special.teardown || special.teardown.call(elem, namespaces, elemData.handle) === false) jQuery.removeEvent(elem, type, elemData.handle);\n                    delete events[type];\n                }\n            }\n            // Remove data and the expando if it's no longer used\n            if (jQuery.isEmptyObject(events)) dataPriv.remove(elem, \"handle events\");\n        },\n        dispatch: function(nativeEvent) {\n            var i, j, ret, matched, handleObj, handlerQueue, args = new Array(arguments.length), // Make a writable jQuery.Event from the native event object\n            event = jQuery.event.fix(nativeEvent), handlers = (dataPriv.get(this, \"events\") || Object.create(null))[event.type] || [], special = jQuery.event.special[event.type] || {};\n            // Use the fix-ed jQuery.Event rather than the (read-only) native event\n            args[0] = event;\n            for(i = 1; i < arguments.length; i++)args[i] = arguments[i];\n            event.delegateTarget = this;\n            // Call the preDispatch hook for the mapped type, and let it bail if desired\n            if (special.preDispatch && special.preDispatch.call(this, event) === false) return;\n            // Determine handlers\n            handlerQueue = jQuery.event.handlers.call(this, event, handlers);\n            // Run delegates first; they may want to stop propagation beneath us\n            i = 0;\n            while((matched = handlerQueue[i++]) && !event.isPropagationStopped()){\n                event.currentTarget = matched.elem;\n                j = 0;\n                while((handleObj = matched.handlers[j++]) && !event.isImmediatePropagationStopped())// If the event is namespaced, then each handler is only invoked if it is\n                // specially universal or its namespaces are a superset of the event's.\n                if (!event.rnamespace || handleObj.namespace === false || event.rnamespace.test(handleObj.namespace)) {\n                    event.handleObj = handleObj;\n                    event.data = handleObj.data;\n                    ret = ((jQuery.event.special[handleObj.origType] || {}).handle || handleObj.handler).apply(matched.elem, args);\n                    if (ret !== undefined) {\n                        if ((event.result = ret) === false) {\n                            event.preventDefault();\n                            event.stopPropagation();\n                        }\n                    }\n                }\n            }\n            // Call the postDispatch hook for the mapped type\n            if (special.postDispatch) special.postDispatch.call(this, event);\n            return event.result;\n        },\n        handlers: function(event, handlers) {\n            var i, handleObj, sel, matchedHandlers, matchedSelectors, handlerQueue = [], delegateCount = handlers.delegateCount, cur = event.target;\n            // Find delegate handlers\n            if (delegateCount && // Support: IE <=9\n            // Black-hole SVG <use> instance trees (trac-13180)\n            cur.nodeType && // Support: Firefox <=42\n            // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n            // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n            // Support: IE 11 only\n            // ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n            !(event.type === \"click\" && event.button >= 1)) {\n                for(; cur !== this; cur = cur.parentNode || this)// Don't check non-elements (trac-13208)\n                // Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)\n                if (cur.nodeType === 1 && !(event.type === \"click\" && cur.disabled === true)) {\n                    matchedHandlers = [];\n                    matchedSelectors = {};\n                    for(i = 0; i < delegateCount; i++){\n                        handleObj = handlers[i];\n                        // Don't conflict with Object.prototype properties (trac-13203)\n                        sel = handleObj.selector + \" \";\n                        if (matchedSelectors[sel] === undefined) matchedSelectors[sel] = handleObj.needsContext ? jQuery(sel, this).index(cur) > -1 : jQuery.find(sel, this, null, [\n                            cur\n                        ]).length;\n                        if (matchedSelectors[sel]) matchedHandlers.push(handleObj);\n                    }\n                    if (matchedHandlers.length) handlerQueue.push({\n                        elem: cur,\n                        handlers: matchedHandlers\n                    });\n                }\n            }\n            // Add the remaining (directly-bound) handlers\n            cur = this;\n            if (delegateCount < handlers.length) handlerQueue.push({\n                elem: cur,\n                handlers: handlers.slice(delegateCount)\n            });\n            return handlerQueue;\n        },\n        addProp: function(name, hook) {\n            Object.defineProperty(jQuery.Event.prototype, name, {\n                enumerable: true,\n                configurable: true,\n                get: isFunction(hook) ? function() {\n                    if (this.originalEvent) return hook(this.originalEvent);\n                } : function() {\n                    if (this.originalEvent) return this.originalEvent[name];\n                },\n                set: function(value) {\n                    Object.defineProperty(this, name, {\n                        enumerable: true,\n                        configurable: true,\n                        writable: true,\n                        value: value\n                    });\n                }\n            });\n        },\n        fix: function(originalEvent) {\n            return originalEvent[jQuery.expando] ? originalEvent : new jQuery.Event(originalEvent);\n        },\n        special: {\n            load: {\n                // Prevent triggered image.load events from bubbling to window.load\n                noBubble: true\n            },\n            click: {\n                // Utilize native event to ensure correct state for checkable inputs\n                setup: function(data) {\n                    // For mutual compressibility with _default, replace `this` access with a local var.\n                    // `|| data` is dead code meant only to preserve the variable through minification.\n                    var el = this || data;\n                    // Claim the first handler\n                    if (rcheckableType.test(el.type) && el.click && nodeName(el, \"input\")) // dataPriv.set( el, \"click\", ... )\n                    leverageNative(el, \"click\", true);\n                    // Return false to allow normal processing in the caller\n                    return false;\n                },\n                trigger: function(data) {\n                    // For mutual compressibility with _default, replace `this` access with a local var.\n                    // `|| data` is dead code meant only to preserve the variable through minification.\n                    var el = this || data;\n                    // Force setup before triggering a click\n                    if (rcheckableType.test(el.type) && el.click && nodeName(el, \"input\")) leverageNative(el, \"click\");\n                    // Return non-false to allow normal event-path propagation\n                    return true;\n                },\n                // For cross-browser consistency, suppress native .click() on links\n                // Also prevent it if we're currently inside a leveraged native-event stack\n                _default: function(event) {\n                    var target = event.target;\n                    return rcheckableType.test(target.type) && target.click && nodeName(target, \"input\") && dataPriv.get(target, \"click\") || nodeName(target, \"a\");\n                }\n            },\n            beforeunload: {\n                postDispatch: function(event) {\n                    // Support: Firefox 20+\n                    // Firefox doesn't alert if the returnValue field is not set.\n                    if (event.result !== undefined && event.originalEvent) event.originalEvent.returnValue = event.result;\n                }\n            }\n        }\n    };\n    // Ensure the presence of an event listener that handles manually-triggered\n    // synthetic events by interrupting progress until reinvoked in response to\n    // *native* events that it fires directly, ensuring that state changes have\n    // already occurred before other listeners are invoked.\n    function leverageNative(el, type, isSetup) {\n        // Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add\n        if (!isSetup) {\n            if (dataPriv.get(el, type) === undefined) jQuery.event.add(el, type, returnTrue);\n            return;\n        }\n        // Register the controller as a special universal handler for all event namespaces\n        dataPriv.set(el, type, false);\n        jQuery.event.add(el, type, {\n            namespace: false,\n            handler: function(event) {\n                var result, saved = dataPriv.get(this, type);\n                if (event.isTrigger & 1 && this[type]) {\n                    // Interrupt processing of the outer synthetic .trigger()ed event\n                    if (!saved) {\n                        // Store arguments for use when handling the inner native event\n                        // There will always be at least one argument (an event object), so this array\n                        // will not be confused with a leftover capture object.\n                        saved = slice.call(arguments);\n                        dataPriv.set(this, type, saved);\n                        // Trigger the native event and capture its result\n                        this[type]();\n                        result = dataPriv.get(this, type);\n                        dataPriv.set(this, type, false);\n                        if (saved !== result) {\n                            // Cancel the outer synthetic event\n                            event.stopImmediatePropagation();\n                            event.preventDefault();\n                            return result;\n                        }\n                    // If this is an inner synthetic event for an event with a bubbling surrogate\n                    // (focus or blur), assume that the surrogate already propagated from triggering\n                    // the native event and prevent that from happening again here.\n                    // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the\n                    // bubbling surrogate propagates *after* the non-bubbling base), but that seems\n                    // less bad than duplication.\n                    } else if ((jQuery.event.special[type] || {}).delegateType) event.stopPropagation();\n                // If this is a native event triggered above, everything is now in order\n                // Fire an inner synthetic event with the original arguments\n                } else if (saved) {\n                    // ...and capture the result\n                    dataPriv.set(this, type, jQuery.event.trigger(saved[0], saved.slice(1), this));\n                    // Abort handling of the native event by all jQuery handlers while allowing\n                    // native handlers on the same element to run. On target, this is achieved\n                    // by stopping immediate propagation just on the jQuery event. However,\n                    // the native event is re-wrapped by a jQuery one on each level of the\n                    // propagation so the only way to stop it for jQuery is to stop it for\n                    // everyone via native `stopPropagation()`. This is not a problem for\n                    // focus/blur which don't bubble, but it does also stop click on checkboxes\n                    // and radios. We accept this limitation.\n                    event.stopPropagation();\n                    event.isImmediatePropagationStopped = returnTrue;\n                }\n            }\n        });\n    }\n    jQuery.removeEvent = function(elem, type, handle) {\n        // This \"if\" is needed for plain objects\n        if (elem.removeEventListener) elem.removeEventListener(type, handle);\n    };\n    jQuery.Event = function(src, props) {\n        // Allow instantiation without the 'new' keyword\n        if (!(this instanceof jQuery.Event)) return new jQuery.Event(src, props);\n        // Event object\n        if (src && src.type) {\n            this.originalEvent = src;\n            this.type = src.type;\n            // Events bubbling up the document may have been marked as prevented\n            // by a handler lower down the tree; reflect the correct value.\n            this.isDefaultPrevented = src.defaultPrevented || src.defaultPrevented === undefined && // Support: Android <=2.3 only\n            src.returnValue === false ? returnTrue : returnFalse;\n            // Create target properties\n            // Support: Safari <=6 - 7 only\n            // Target should not be a text node (trac-504, trac-13143)\n            this.target = src.target && src.target.nodeType === 3 ? src.target.parentNode : src.target;\n            this.currentTarget = src.currentTarget;\n            this.relatedTarget = src.relatedTarget;\n        // Event type\n        } else this.type = src;\n        // Put explicitly provided properties onto the event object\n        if (props) jQuery.extend(this, props);\n        // Create a timestamp if incoming event doesn't have one\n        this.timeStamp = src && src.timeStamp || Date.now();\n        // Mark it as fixed\n        this[jQuery.expando] = true;\n    };\n    // jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n    // https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\n    jQuery.Event.prototype = {\n        constructor: jQuery.Event,\n        isDefaultPrevented: returnFalse,\n        isPropagationStopped: returnFalse,\n        isImmediatePropagationStopped: returnFalse,\n        isSimulated: false,\n        preventDefault: function() {\n            var e = this.originalEvent;\n            this.isDefaultPrevented = returnTrue;\n            if (e && !this.isSimulated) e.preventDefault();\n        },\n        stopPropagation: function() {\n            var e = this.originalEvent;\n            this.isPropagationStopped = returnTrue;\n            if (e && !this.isSimulated) e.stopPropagation();\n        },\n        stopImmediatePropagation: function() {\n            var e = this.originalEvent;\n            this.isImmediatePropagationStopped = returnTrue;\n            if (e && !this.isSimulated) e.stopImmediatePropagation();\n            this.stopPropagation();\n        }\n    };\n    // Includes all common event props including KeyEvent and MouseEvent specific props\n    jQuery.each({\n        altKey: true,\n        bubbles: true,\n        cancelable: true,\n        changedTouches: true,\n        ctrlKey: true,\n        detail: true,\n        eventPhase: true,\n        metaKey: true,\n        pageX: true,\n        pageY: true,\n        shiftKey: true,\n        view: true,\n        \"char\": true,\n        code: true,\n        charCode: true,\n        key: true,\n        keyCode: true,\n        button: true,\n        buttons: true,\n        clientX: true,\n        clientY: true,\n        offsetX: true,\n        offsetY: true,\n        pointerId: true,\n        pointerType: true,\n        screenX: true,\n        screenY: true,\n        targetTouches: true,\n        toElement: true,\n        touches: true,\n        which: true\n    }, jQuery.event.addProp);\n    jQuery.each({\n        focus: \"focusin\",\n        blur: \"focusout\"\n    }, function(type, delegateType) {\n        function focusMappedHandler(nativeEvent) {\n            if (document.documentMode) {\n                // Support: IE 11+\n                // Attach a single focusin/focusout handler on the document while someone wants\n                // focus/blur. This is because the former are synchronous in IE while the latter\n                // are async. In other browsers, all those handlers are invoked synchronously.\n                // `handle` from private data would already wrap the event, but we need\n                // to change the `type` here.\n                var handle = dataPriv.get(this, \"handle\"), event = jQuery.event.fix(nativeEvent);\n                event.type = nativeEvent.type === \"focusin\" ? \"focus\" : \"blur\";\n                event.isSimulated = true;\n                // First, handle focusin/focusout\n                handle(nativeEvent);\n                // ...then, handle focus/blur\n                //\n                // focus/blur don't bubble while focusin/focusout do; simulate the former by only\n                // invoking the handler at the lower level.\n                if (event.target === event.currentTarget) // The setup part calls `leverageNative`, which, in turn, calls\n                // `jQuery.event.add`, so event handle will already have been set\n                // by this point.\n                handle(event);\n            } else // For non-IE browsers, attach a single capturing handler on the document\n            // while someone wants focusin/focusout.\n            jQuery.event.simulate(delegateType, nativeEvent.target, jQuery.event.fix(nativeEvent));\n        }\n        jQuery.event.special[type] = {\n            // Utilize native event if possible so blur/focus sequence is correct\n            setup: function() {\n                var attaches;\n                // Claim the first handler\n                // dataPriv.set( this, \"focus\", ... )\n                // dataPriv.set( this, \"blur\", ... )\n                leverageNative(this, type, true);\n                if (document.documentMode) {\n                    // Support: IE 9 - 11+\n                    // We use the same native handler for focusin & focus (and focusout & blur)\n                    // so we need to coordinate setup & teardown parts between those events.\n                    // Use `delegateType` as the key as `type` is already used by `leverageNative`.\n                    attaches = dataPriv.get(this, delegateType);\n                    if (!attaches) this.addEventListener(delegateType, focusMappedHandler);\n                    dataPriv.set(this, delegateType, (attaches || 0) + 1);\n                } else // Return false to allow normal processing in the caller\n                return false;\n            },\n            trigger: function() {\n                // Force setup before trigger\n                leverageNative(this, type);\n                // Return non-false to allow normal event-path propagation\n                return true;\n            },\n            teardown: function() {\n                var attaches;\n                if (document.documentMode) {\n                    attaches = dataPriv.get(this, delegateType) - 1;\n                    if (!attaches) {\n                        this.removeEventListener(delegateType, focusMappedHandler);\n                        dataPriv.remove(this, delegateType);\n                    } else dataPriv.set(this, delegateType, attaches);\n                } else // Return false to indicate standard teardown should be applied\n                return false;\n            },\n            // Suppress native focus or blur if we're currently inside\n            // a leveraged native-event stack\n            _default: function(event) {\n                return dataPriv.get(event.target, type);\n            },\n            delegateType: delegateType\n        };\n        // Support: Firefox <=44\n        // Firefox doesn't have focus(in | out) events\n        // Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n        //\n        // Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n        // focus(in | out) events fire after focus & blur events,\n        // which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n        // Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\n        //\n        // Support: IE 9 - 11+\n        // To preserve relative focusin/focus & focusout/blur event order guaranteed on the 3.x branch,\n        // attach a single handler for both events in IE.\n        jQuery.event.special[delegateType] = {\n            setup: function() {\n                // Handle: regular nodes (via `this.ownerDocument`), window\n                // (via `this.document`) & document (via `this`).\n                var doc = this.ownerDocument || this.document || this, dataHolder = document.documentMode ? this : doc, attaches = dataPriv.get(dataHolder, delegateType);\n                // Support: IE 9 - 11+\n                // We use the same native handler for focusin & focus (and focusout & blur)\n                // so we need to coordinate setup & teardown parts between those events.\n                // Use `delegateType` as the key as `type` is already used by `leverageNative`.\n                if (!attaches) {\n                    if (document.documentMode) this.addEventListener(delegateType, focusMappedHandler);\n                    else doc.addEventListener(type, focusMappedHandler, true);\n                }\n                dataPriv.set(dataHolder, delegateType, (attaches || 0) + 1);\n            },\n            teardown: function() {\n                var doc = this.ownerDocument || this.document || this, dataHolder = document.documentMode ? this : doc, attaches = dataPriv.get(dataHolder, delegateType) - 1;\n                if (!attaches) {\n                    if (document.documentMode) this.removeEventListener(delegateType, focusMappedHandler);\n                    else doc.removeEventListener(type, focusMappedHandler, true);\n                    dataPriv.remove(dataHolder, delegateType);\n                } else dataPriv.set(dataHolder, delegateType, attaches);\n            }\n        };\n    });\n    // Create mouseenter/leave events using mouseover/out and event-time checks\n    // so that event delegation works in jQuery.\n    // Do the same for pointerenter/pointerleave and pointerover/pointerout\n    //\n    // Support: Safari 7 only\n    // Safari sends mouseenter too often; see:\n    // https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n    // for the description of the bug (it existed in older Chrome versions as well).\n    jQuery.each({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\",\n        pointerenter: \"pointerover\",\n        pointerleave: \"pointerout\"\n    }, function(orig, fix) {\n        jQuery.event.special[orig] = {\n            delegateType: fix,\n            bindType: fix,\n            handle: function(event) {\n                var ret, target = this, related = event.relatedTarget, handleObj = event.handleObj;\n                // For mouseenter/leave call the handler if related is outside the target.\n                // NB: No relatedTarget if the mouse left/entered the browser window\n                if (!related || related !== target && !jQuery.contains(target, related)) {\n                    event.type = handleObj.origType;\n                    ret = handleObj.handler.apply(this, arguments);\n                    event.type = fix;\n                }\n                return ret;\n            }\n        };\n    });\n    jQuery.fn.extend({\n        on: function(types, selector, data, fn) {\n            return on(this, types, selector, data, fn);\n        },\n        one: function(types, selector, data, fn) {\n            return on(this, types, selector, data, fn, 1);\n        },\n        off: function(types, selector, fn) {\n            var handleObj, type;\n            if (types && types.preventDefault && types.handleObj) {\n                // ( event )  dispatched jQuery.Event\n                handleObj = types.handleObj;\n                jQuery(types.delegateTarget).off(handleObj.namespace ? handleObj.origType + \".\" + handleObj.namespace : handleObj.origType, handleObj.selector, handleObj.handler);\n                return this;\n            }\n            if (typeof types === \"object\") {\n                // ( types-object [, selector] )\n                for(type in types)this.off(type, selector, types[type]);\n                return this;\n            }\n            if (selector === false || typeof selector === \"function\") {\n                // ( types [, fn] )\n                fn = selector;\n                selector = undefined;\n            }\n            if (fn === false) fn = returnFalse;\n            return this.each(function() {\n                jQuery.event.remove(this, types, fn, selector);\n            });\n        }\n    });\n    var // Support: IE <=10 - 11, Edge 12 - 13 only\n    // In IE/Edge using regex groups here causes severe slowdowns.\n    // See https://connect.microsoft.com/IE/feedback/details/1736512/\n    rnoInnerhtml = /<script|<style|<link/i, // checked=\"checked\" or checked\n    rchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i, rcleanScript = /^\\s*<!\\[CDATA\\[|\\]\\]>\\s*$/g;\n    // Prefer a tbody over its parent table for containing new rows\n    function manipulationTarget(elem, content) {\n        if (nodeName(elem, \"table\") && nodeName(content.nodeType !== 11 ? content : content.firstChild, \"tr\")) return jQuery(elem).children(\"tbody\")[0] || elem;\n        return elem;\n    }\n    // Replace/restore the type attribute of script elements for safe DOM manipulation\n    function disableScript(elem) {\n        elem.type = (elem.getAttribute(\"type\") !== null) + \"/\" + elem.type;\n        return elem;\n    }\n    function restoreScript(elem) {\n        if ((elem.type || \"\").slice(0, 5) === \"true/\") elem.type = elem.type.slice(5);\n        else elem.removeAttribute(\"type\");\n        return elem;\n    }\n    function cloneCopyEvent(src, dest) {\n        var i, l, type, pdataOld, udataOld, udataCur, events;\n        if (dest.nodeType !== 1) return;\n        // 1. Copy private data: events, handlers, etc.\n        if (dataPriv.hasData(src)) {\n            pdataOld = dataPriv.get(src);\n            events = pdataOld.events;\n            if (events) {\n                dataPriv.remove(dest, \"handle events\");\n                for(type in events)for(i = 0, l = events[type].length; i < l; i++)jQuery.event.add(dest, type, events[type][i]);\n            }\n        }\n        // 2. Copy user data\n        if (dataUser.hasData(src)) {\n            udataOld = dataUser.access(src);\n            udataCur = jQuery.extend({}, udataOld);\n            dataUser.set(dest, udataCur);\n        }\n    }\n    // Fix IE bugs, see support tests\n    function fixInput(src, dest) {\n        var nodeName = dest.nodeName.toLowerCase();\n        // Fails to persist the checked state of a cloned checkbox or radio button.\n        if (nodeName === \"input\" && rcheckableType.test(src.type)) dest.checked = src.checked;\n        else if (nodeName === \"input\" || nodeName === \"textarea\") dest.defaultValue = src.defaultValue;\n    }\n    function domManip(collection, args, callback, ignored) {\n        // Flatten any nested arrays\n        args = flat(args);\n        var fragment, first, scripts, hasScripts, node, doc, i = 0, l = collection.length, iNoClone = l - 1, value = args[0], valueIsFunction = isFunction(value);\n        // We can't cloneNode fragments that contain checked, in WebKit\n        if (valueIsFunction || l > 1 && typeof value === \"string\" && !support.checkClone && rchecked.test(value)) return collection.each(function(index) {\n            var self = collection.eq(index);\n            if (valueIsFunction) args[0] = value.call(this, index, self.html());\n            domManip(self, args, callback, ignored);\n        });\n        if (l) {\n            fragment = buildFragment(args, collection[0].ownerDocument, false, collection, ignored);\n            first = fragment.firstChild;\n            if (fragment.childNodes.length === 1) fragment = first;\n            // Require either new content or an interest in ignored elements to invoke the callback\n            if (first || ignored) {\n                scripts = jQuery.map(getAll(fragment, \"script\"), disableScript);\n                hasScripts = scripts.length;\n                // Use the original fragment for the last item\n                // instead of the first because it can end up\n                // being emptied incorrectly in certain situations (trac-8070).\n                for(; i < l; i++){\n                    node = fragment;\n                    if (i !== iNoClone) {\n                        node = jQuery.clone(node, true, true);\n                        // Keep references to cloned scripts for later restoration\n                        if (hasScripts) // Support: Android <=4.0 only, PhantomJS 1 only\n                        // push.apply(_, arraylike) throws on ancient WebKit\n                        jQuery.merge(scripts, getAll(node, \"script\"));\n                    }\n                    callback.call(collection[i], node, i);\n                }\n                if (hasScripts) {\n                    doc = scripts[scripts.length - 1].ownerDocument;\n                    // Re-enable scripts\n                    jQuery.map(scripts, restoreScript);\n                    // Evaluate executable scripts on first document insertion\n                    for(i = 0; i < hasScripts; i++){\n                        node = scripts[i];\n                        if (rscriptType.test(node.type || \"\") && !dataPriv.access(node, \"globalEval\") && jQuery.contains(doc, node)) {\n                            if (node.src && (node.type || \"\").toLowerCase() !== \"module\") // Optional AJAX dependency, but won't run scripts if not present\n                            {\n                                if (jQuery._evalUrl && !node.noModule) jQuery._evalUrl(node.src, {\n                                    nonce: node.nonce || node.getAttribute(\"nonce\")\n                                }, doc);\n                            } else // Unwrap a CDATA section containing script contents. This shouldn't be\n                            // needed as in XML documents they're already not visible when\n                            // inspecting element contents and in HTML documents they have no\n                            // meaning but we're preserving that logic for backwards compatibility.\n                            // This will be removed completely in 4.0. See gh-4904.\n                            DOMEval(node.textContent.replace(rcleanScript, \"\"), node, doc);\n                        }\n                    }\n                }\n            }\n        }\n        return collection;\n    }\n    function remove(elem, selector, keepData) {\n        var node, nodes = selector ? jQuery.filter(selector, elem) : elem, i = 0;\n        for(; (node = nodes[i]) != null; i++){\n            if (!keepData && node.nodeType === 1) jQuery.cleanData(getAll(node));\n            if (node.parentNode) {\n                if (keepData && isAttached(node)) setGlobalEval(getAll(node, \"script\"));\n                node.parentNode.removeChild(node);\n            }\n        }\n        return elem;\n    }\n    jQuery.extend({\n        htmlPrefilter: function(html) {\n            return html;\n        },\n        clone: function(elem, dataAndEvents, deepDataAndEvents) {\n            var i, l, srcElements, destElements, clone = elem.cloneNode(true), inPage = isAttached(elem);\n            // Fix IE cloning issues\n            if (!support.noCloneChecked && (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem)) {\n                // We eschew jQuery#find here for performance reasons:\n                // https://jsperf.com/getall-vs-sizzle/2\n                destElements = getAll(clone);\n                srcElements = getAll(elem);\n                for(i = 0, l = srcElements.length; i < l; i++)fixInput(srcElements[i], destElements[i]);\n            }\n            // Copy the events from the original to the clone\n            if (dataAndEvents) {\n                if (deepDataAndEvents) {\n                    srcElements = srcElements || getAll(elem);\n                    destElements = destElements || getAll(clone);\n                    for(i = 0, l = srcElements.length; i < l; i++)cloneCopyEvent(srcElements[i], destElements[i]);\n                } else cloneCopyEvent(elem, clone);\n            }\n            // Preserve script evaluation history\n            destElements = getAll(clone, \"script\");\n            if (destElements.length > 0) setGlobalEval(destElements, !inPage && getAll(elem, \"script\"));\n            // Return the cloned set\n            return clone;\n        },\n        cleanData: function(elems) {\n            var data, elem, type, special = jQuery.event.special, i = 0;\n            for(; (elem = elems[i]) !== undefined; i++)if (acceptData(elem)) {\n                if (data = elem[dataPriv.expando]) {\n                    if (data.events) {\n                        for(type in data.events)if (special[type]) jQuery.event.remove(elem, type);\n                        else jQuery.removeEvent(elem, type, data.handle);\n                    }\n                    // Support: Chrome <=35 - 45+\n                    // Assign undefined instead of using delete, see Data#remove\n                    elem[dataPriv.expando] = undefined;\n                }\n                if (elem[dataUser.expando]) // Support: Chrome <=35 - 45+\n                // Assign undefined instead of using delete, see Data#remove\n                elem[dataUser.expando] = undefined;\n            }\n        }\n    });\n    jQuery.fn.extend({\n        detach: function(selector) {\n            return remove(this, selector, true);\n        },\n        remove: function(selector) {\n            return remove(this, selector);\n        },\n        text: function(value) {\n            return access(this, function(value) {\n                return value === undefined ? jQuery.text(this) : this.empty().each(function() {\n                    if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) this.textContent = value;\n                });\n            }, null, value, arguments.length);\n        },\n        append: function() {\n            return domManip(this, arguments, function(elem) {\n                if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n                    var target = manipulationTarget(this, elem);\n                    target.appendChild(elem);\n                }\n            });\n        },\n        prepend: function() {\n            return domManip(this, arguments, function(elem) {\n                if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n                    var target = manipulationTarget(this, elem);\n                    target.insertBefore(elem, target.firstChild);\n                }\n            });\n        },\n        before: function() {\n            return domManip(this, arguments, function(elem) {\n                if (this.parentNode) this.parentNode.insertBefore(elem, this);\n            });\n        },\n        after: function() {\n            return domManip(this, arguments, function(elem) {\n                if (this.parentNode) this.parentNode.insertBefore(elem, this.nextSibling);\n            });\n        },\n        empty: function() {\n            var elem, i = 0;\n            for(; (elem = this[i]) != null; i++)if (elem.nodeType === 1) {\n                // Prevent memory leaks\n                jQuery.cleanData(getAll(elem, false));\n                // Remove any remaining nodes\n                elem.textContent = \"\";\n            }\n            return this;\n        },\n        clone: function(dataAndEvents, deepDataAndEvents) {\n            dataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n            deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n            return this.map(function() {\n                return jQuery.clone(this, dataAndEvents, deepDataAndEvents);\n            });\n        },\n        html: function(value) {\n            return access(this, function(value) {\n                var elem = this[0] || {}, i = 0, l = this.length;\n                if (value === undefined && elem.nodeType === 1) return elem.innerHTML;\n                // See if we can take a shortcut and just use innerHTML\n                if (typeof value === \"string\" && !rnoInnerhtml.test(value) && !wrapMap[(rtagName.exec(value) || [\n                    \"\",\n                    \"\"\n                ])[1].toLowerCase()]) {\n                    value = jQuery.htmlPrefilter(value);\n                    try {\n                        for(; i < l; i++){\n                            elem = this[i] || {};\n                            // Remove element nodes and prevent memory leaks\n                            if (elem.nodeType === 1) {\n                                jQuery.cleanData(getAll(elem, false));\n                                elem.innerHTML = value;\n                            }\n                        }\n                        elem = 0;\n                    // If using innerHTML throws an exception, use the fallback method\n                    } catch (e) {}\n                }\n                if (elem) this.empty().append(value);\n            }, null, value, arguments.length);\n        },\n        replaceWith: function() {\n            var ignored = [];\n            // Make the changes, replacing each non-ignored context element with the new content\n            return domManip(this, arguments, function(elem) {\n                var parent = this.parentNode;\n                if (jQuery.inArray(this, ignored) < 0) {\n                    jQuery.cleanData(getAll(this));\n                    if (parent) parent.replaceChild(elem, this);\n                }\n            // Force callback invocation\n            }, ignored);\n        }\n    });\n    jQuery.each({\n        appendTo: \"append\",\n        prependTo: \"prepend\",\n        insertBefore: \"before\",\n        insertAfter: \"after\",\n        replaceAll: \"replaceWith\"\n    }, function(name, original) {\n        jQuery.fn[name] = function(selector) {\n            var elems, ret = [], insert = jQuery(selector), last = insert.length - 1, i = 0;\n            for(; i <= last; i++){\n                elems = i === last ? this : this.clone(true);\n                jQuery(insert[i])[original](elems);\n                // Support: Android <=4.0 only, PhantomJS 1 only\n                // .get() because push.apply(_, arraylike) throws on ancient WebKit\n                push.apply(ret, elems.get());\n            }\n            return this.pushStack(ret);\n        };\n    });\n    var rnumnonpx = new RegExp(\"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\");\n    var rcustomProp = /^--/;\n    var getStyles = function(elem) {\n        // Support: IE <=11 only, Firefox <=30 (trac-15098, trac-14150)\n        // IE throws on elements created in popups\n        // FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n        var view = elem.ownerDocument.defaultView;\n        if (!view || !view.opener) view = window1;\n        return view.getComputedStyle(elem);\n    };\n    var swap = function(elem, options, callback) {\n        var ret, name, old = {};\n        // Remember the old values, and insert the new ones\n        for(name in options){\n            old[name] = elem.style[name];\n            elem.style[name] = options[name];\n        }\n        ret = callback.call(elem);\n        // Revert the old values\n        for(name in options)elem.style[name] = old[name];\n        return ret;\n    };\n    var rboxStyle = new RegExp(cssExpand.join(\"|\"), \"i\");\n    (function() {\n        // Executing both pixelPosition & boxSizingReliable tests require only one layout\n        // so they're executed at the same time to save the second computation.\n        function computeStyleTests() {\n            // This is a singleton, we need to execute it only once\n            if (!div) return;\n            container.style.cssText = \"position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0\";\n            div.style.cssText = \"position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%\";\n            documentElement.appendChild(container).appendChild(div);\n            var divStyle = window1.getComputedStyle(div);\n            pixelPositionVal = divStyle.top !== \"1%\";\n            // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n            reliableMarginLeftVal = roundPixelMeasures(divStyle.marginLeft) === 12;\n            // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n            // Some styles come back with percentage values, even though they shouldn't\n            div.style.right = \"60%\";\n            pixelBoxStylesVal = roundPixelMeasures(divStyle.right) === 36;\n            // Support: IE 9 - 11 only\n            // Detect misreporting of content dimensions for box-sizing:border-box elements\n            boxSizingReliableVal = roundPixelMeasures(divStyle.width) === 36;\n            // Support: IE 9 only\n            // Detect overflow:scroll screwiness (gh-3699)\n            // Support: Chrome <=64\n            // Don't get tricked when zoom affects offsetWidth (gh-4029)\n            div.style.position = \"absolute\";\n            scrollboxSizeVal = roundPixelMeasures(div.offsetWidth / 3) === 12;\n            documentElement.removeChild(container);\n            // Nullify the div so it wouldn't be stored in the memory and\n            // it will also be a sign that checks already performed\n            div = null;\n        }\n        function roundPixelMeasures(measure) {\n            return Math.round(parseFloat(measure));\n        }\n        var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, reliableTrDimensionsVal, reliableMarginLeftVal, container = document.createElement(\"div\"), div = document.createElement(\"div\");\n        // Finish early in limited (non-browser) environments\n        if (!div.style) return;\n        // Support: IE <=9 - 11 only\n        // Style of cloned element affects source element cloned (trac-8908)\n        div.style.backgroundClip = \"content-box\";\n        div.cloneNode(true).style.backgroundClip = \"\";\n        support.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n        jQuery.extend(support, {\n            boxSizingReliable: function() {\n                computeStyleTests();\n                return boxSizingReliableVal;\n            },\n            pixelBoxStyles: function() {\n                computeStyleTests();\n                return pixelBoxStylesVal;\n            },\n            pixelPosition: function() {\n                computeStyleTests();\n                return pixelPositionVal;\n            },\n            reliableMarginLeft: function() {\n                computeStyleTests();\n                return reliableMarginLeftVal;\n            },\n            scrollboxSize: function() {\n                computeStyleTests();\n                return scrollboxSizeVal;\n            },\n            // Support: IE 9 - 11+, Edge 15 - 18+\n            // IE/Edge misreport `getComputedStyle` of table rows with width/height\n            // set in CSS while `offset*` properties report correct values.\n            // Behavior in IE 9 is more subtle than in newer versions & it passes\n            // some versions of this test; make sure not to make it pass there!\n            //\n            // Support: Firefox 70+\n            // Only Firefox includes border widths\n            // in computed dimensions. (gh-4529)\n            reliableTrDimensions: function() {\n                var table, tr, trChild, trStyle;\n                if (reliableTrDimensionsVal == null) {\n                    table = document.createElement(\"table\");\n                    tr = document.createElement(\"tr\");\n                    trChild = document.createElement(\"div\");\n                    table.style.cssText = \"position:absolute;left:-11111px;border-collapse:separate\";\n                    tr.style.cssText = \"box-sizing:content-box;border:1px solid\";\n                    // Support: Chrome 86+\n                    // Height set through cssText does not get applied.\n                    // Computed height then comes back as 0.\n                    tr.style.height = \"1px\";\n                    trChild.style.height = \"9px\";\n                    // Support: Android 8 Chrome 86+\n                    // In our bodyBackground.html iframe,\n                    // display for all div elements is set to \"inline\",\n                    // which causes a problem only in Android 8 Chrome 86.\n                    // Ensuring the div is `display: block`\n                    // gets around this issue.\n                    trChild.style.display = \"block\";\n                    documentElement.appendChild(table).appendChild(tr).appendChild(trChild);\n                    trStyle = window1.getComputedStyle(tr);\n                    reliableTrDimensionsVal = parseInt(trStyle.height, 10) + parseInt(trStyle.borderTopWidth, 10) + parseInt(trStyle.borderBottomWidth, 10) === tr.offsetHeight;\n                    documentElement.removeChild(table);\n                }\n                return reliableTrDimensionsVal;\n            }\n        });\n    })();\n    function curCSS(elem, name, computed) {\n        var width, minWidth, maxWidth, ret, isCustomProp = rcustomProp.test(name), // Support: Firefox 51+\n        // Retrieving style before computed somehow\n        // fixes an issue with getting wrong values\n        // on detached elements\n        style = elem.style;\n        computed = computed || getStyles(elem);\n        // getPropertyValue is needed for:\n        //   .css('filter') (IE 9 only, trac-12537)\n        //   .css('--customProperty) (gh-3144)\n        if (computed) {\n            // Support: IE <=9 - 11+\n            // IE only supports `\"float\"` in `getPropertyValue`; in computed styles\n            // it's only available as `\"cssFloat\"`. We no longer modify properties\n            // sent to `.css()` apart from camelCasing, so we need to check both.\n            // Normally, this would create difference in behavior: if\n            // `getPropertyValue` returns an empty string, the value returned\n            // by `.css()` would be `undefined`. This is usually the case for\n            // disconnected elements. However, in IE even disconnected elements\n            // with no styles return `\"none\"` for `getPropertyValue( \"float\" )`\n            ret = computed.getPropertyValue(name) || computed[name];\n            if (isCustomProp && ret) // Support: Firefox 105+, Chrome <=105+\n            // Spec requires trimming whitespace for custom properties (gh-4926).\n            // Firefox only trims leading whitespace. Chrome just collapses\n            // both leading & trailing whitespace to a single space.\n            //\n            // Fall back to `undefined` if empty string returned.\n            // This collapses a missing definition with property defined\n            // and set to an empty string but there's no standard API\n            // allowing us to differentiate them without a performance penalty\n            // and returning `undefined` aligns with older jQuery.\n            //\n            // rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED\n            // as whitespace while CSS does not, but this is not a problem\n            // because CSS preprocessing replaces them with U+000A LINE FEED\n            // (which *is* CSS whitespace)\n            // https://www.w3.org/TR/css-syntax-3/#input-preprocessing\n            ret = ret.replace(rtrimCSS, \"$1\") || undefined;\n            if (ret === \"\" && !isAttached(elem)) ret = jQuery.style(elem, name);\n            // A tribute to the \"awesome hack by Dean Edwards\"\n            // Android Browser returns percentage for some values,\n            // but width seems to be reliably pixels.\n            // This is against the CSSOM draft spec:\n            // https://drafts.csswg.org/cssom/#resolved-values\n            if (!support.pixelBoxStyles() && rnumnonpx.test(ret) && rboxStyle.test(name)) {\n                // Remember the original values\n                width = style.width;\n                minWidth = style.minWidth;\n                maxWidth = style.maxWidth;\n                // Put in the new values to get a computed value out\n                style.minWidth = style.maxWidth = style.width = ret;\n                ret = computed.width;\n                // Revert the changed values\n                style.width = width;\n                style.minWidth = minWidth;\n                style.maxWidth = maxWidth;\n            }\n        }\n        return ret !== undefined ? // Support: IE <=9 - 11 only\n        // IE returns zIndex value as an integer.\n        ret + \"\" : ret;\n    }\n    function addGetHookIf(conditionFn, hookFn) {\n        // Define the hook, we'll check on the first run if it's really needed.\n        return {\n            get: function() {\n                if (conditionFn()) {\n                    // Hook not needed (or it's not possible to use it due\n                    // to missing dependency), remove it.\n                    delete this.get;\n                    return;\n                }\n                // Hook needed; redefine it so that the support test is not executed again.\n                return (this.get = hookFn).apply(this, arguments);\n            }\n        };\n    }\n    var cssPrefixes = [\n        \"Webkit\",\n        \"Moz\",\n        \"ms\"\n    ], emptyStyle = document.createElement(\"div\").style, vendorProps = {};\n    // Return a vendor-prefixed property or undefined\n    function vendorPropName(name) {\n        // Check for vendor prefixed names\n        var capName = name[0].toUpperCase() + name.slice(1), i = cssPrefixes.length;\n        while(i--){\n            name = cssPrefixes[i] + capName;\n            if (name in emptyStyle) return name;\n        }\n    }\n    // Return a potentially-mapped jQuery.cssProps or vendor prefixed property\n    function finalPropName(name) {\n        var final = jQuery.cssProps[name] || vendorProps[name];\n        if (final) return final;\n        if (name in emptyStyle) return name;\n        return vendorProps[name] = vendorPropName(name) || name;\n    }\n    var // Swappable if display is none or starts with table\n    // except \"table\", \"table-cell\", or \"table-caption\"\n    // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n    rdisplayswap = /^(none|table(?!-c[ea]).+)/, cssShow = {\n        position: \"absolute\",\n        visibility: \"hidden\",\n        display: \"block\"\n    }, cssNormalTransform = {\n        letterSpacing: \"0\",\n        fontWeight: \"400\"\n    };\n    function setPositiveNumber(_elem, value, subtract) {\n        // Any relative (+/-) values have already been\n        // normalized at this point\n        var matches = rcssNum.exec(value);\n        return matches ? // Guard against undefined \"subtract\", e.g., when used as in cssHooks\n        Math.max(0, matches[2] - (subtract || 0)) + (matches[3] || \"px\") : value;\n    }\n    function boxModelAdjustment(elem, dimension, box, isBorderBox, styles, computedVal) {\n        var i = dimension === \"width\" ? 1 : 0, extra = 0, delta = 0, marginDelta = 0;\n        // Adjustment may not be necessary\n        if (box === (isBorderBox ? \"border\" : \"content\")) return 0;\n        for(; i < 4; i += 2){\n            // Both box models exclude margin\n            // Count margin delta separately to only add it after scroll gutter adjustment.\n            // This is needed to make negative margins work with `outerHeight( true )` (gh-3982).\n            if (box === \"margin\") marginDelta += jQuery.css(elem, box + cssExpand[i], true, styles);\n            // If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n            if (!isBorderBox) {\n                // Add padding\n                delta += jQuery.css(elem, \"padding\" + cssExpand[i], true, styles);\n                // For \"border\" or \"margin\", add border\n                if (box !== \"padding\") delta += jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n                else extra += jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n            // If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n            // \"padding\" or \"margin\"\n            } else {\n                // For \"content\", subtract padding\n                if (box === \"content\") delta -= jQuery.css(elem, \"padding\" + cssExpand[i], true, styles);\n                // For \"content\" or \"padding\", subtract border\n                if (box !== \"margin\") delta -= jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n            }\n        }\n        // Account for positive content-box scroll gutter when requested by providing computedVal\n        if (!isBorderBox && computedVal >= 0) // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n        // Assuming integer scroll gutter, subtract the rest and round down\n        delta += Math.max(0, Math.ceil(elem[\"offset\" + dimension[0].toUpperCase() + dimension.slice(1)] - computedVal - delta - extra - 0.5)) || 0;\n        return delta + marginDelta;\n    }\n    function getWidthOrHeight(elem, dimension, extra) {\n        // Start with computed style\n        var styles = getStyles(elem), // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n        // Fake content-box until we know it's needed to know the true value.\n        boxSizingNeeded = !support.boxSizingReliable() || extra, isBorderBox = boxSizingNeeded && jQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\", valueIsBorderBox = isBorderBox, val = curCSS(elem, dimension, styles), offsetProp = \"offset\" + dimension[0].toUpperCase() + dimension.slice(1);\n        // Support: Firefox <=54\n        // Return a confounding non-pixel value or feign ignorance, as appropriate.\n        if (rnumnonpx.test(val)) {\n            if (!extra) return val;\n            val = \"auto\";\n        }\n        // Support: IE 9 - 11 only\n        // Use offsetWidth/offsetHeight for when box sizing is unreliable.\n        // In those cases, the computed value can be trusted to be border-box.\n        if ((!support.boxSizingReliable() && isBorderBox || // Support: IE 10 - 11+, Edge 15 - 18+\n        // IE/Edge misreport `getComputedStyle` of table rows with width/height\n        // set in CSS while `offset*` properties report correct values.\n        // Interestingly, in some cases IE 9 doesn't suffer from this issue.\n        !support.reliableTrDimensions() && nodeName(elem, \"tr\") || // Fall back to offsetWidth/offsetHeight when value is \"auto\"\n        // This happens for inline elements with no explicit setting (gh-3571)\n        val === \"auto\" || // Support: Android <=4.1 - 4.3 only\n        // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n        !parseFloat(val) && jQuery.css(elem, \"display\", false, styles) === \"inline\") && // Make sure the element is visible & connected\n        elem.getClientRects().length) {\n            isBorderBox = jQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\";\n            // Where available, offsetWidth/offsetHeight approximate border box dimensions.\n            // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n            // retrieved value as a content box dimension.\n            valueIsBorderBox = offsetProp in elem;\n            if (valueIsBorderBox) val = elem[offsetProp];\n        }\n        // Normalize \"\" and auto\n        val = parseFloat(val) || 0;\n        // Adjust for the element's box model\n        return val + boxModelAdjustment(elem, dimension, extra || (isBorderBox ? \"border\" : \"content\"), valueIsBorderBox, styles, // Provide the current computed size to request scroll gutter calculation (gh-3589)\n        val) + \"px\";\n    }\n    jQuery.extend({\n        // Add in style property hooks for overriding the default\n        // behavior of getting and setting a style property\n        cssHooks: {\n            opacity: {\n                get: function(elem, computed) {\n                    if (computed) {\n                        // We should always get a number back from opacity\n                        var ret = curCSS(elem, \"opacity\");\n                        return ret === \"\" ? \"1\" : ret;\n                    }\n                }\n            }\n        },\n        // Don't automatically add \"px\" to these possibly-unitless properties\n        cssNumber: {\n            animationIterationCount: true,\n            aspectRatio: true,\n            borderImageSlice: true,\n            columnCount: true,\n            flexGrow: true,\n            flexShrink: true,\n            fontWeight: true,\n            gridArea: true,\n            gridColumn: true,\n            gridColumnEnd: true,\n            gridColumnStart: true,\n            gridRow: true,\n            gridRowEnd: true,\n            gridRowStart: true,\n            lineHeight: true,\n            opacity: true,\n            order: true,\n            orphans: true,\n            scale: true,\n            widows: true,\n            zIndex: true,\n            zoom: true,\n            // SVG-related\n            fillOpacity: true,\n            floodOpacity: true,\n            stopOpacity: true,\n            strokeMiterlimit: true,\n            strokeOpacity: true\n        },\n        // Add in properties whose names you wish to fix before\n        // setting or getting the value\n        cssProps: {},\n        // Get and set the style property on a DOM Node\n        style: function(elem, name, value, extra) {\n            // Don't set styles on text and comment nodes\n            if (!elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style) return;\n            // Make sure that we're working with the right name\n            var ret, type, hooks, origName = camelCase(name), isCustomProp = rcustomProp.test(name), style = elem.style;\n            // Make sure that we're working with the right name. We don't\n            // want to query the value if it is a CSS custom property\n            // since they are user-defined.\n            if (!isCustomProp) name = finalPropName(origName);\n            // Gets hook for the prefixed version, then unprefixed version\n            hooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName];\n            // Check if we're setting a value\n            if (value !== undefined) {\n                type = typeof value;\n                // Convert \"+=\" or \"-=\" to relative numbers (trac-7345)\n                if (type === \"string\" && (ret = rcssNum.exec(value)) && ret[1]) {\n                    value = adjustCSS(elem, name, ret);\n                    // Fixes bug trac-9237\n                    type = \"number\";\n                }\n                // Make sure that null and NaN values aren't set (trac-7116)\n                if (value == null || value !== value) return;\n                // If a number was passed in, add the unit (except for certain CSS properties)\n                // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append\n                // \"px\" to a few hardcoded values.\n                if (type === \"number\" && !isCustomProp) value += ret && ret[3] || (jQuery.cssNumber[origName] ? \"\" : \"px\");\n                // background-* props affect original clone's values\n                if (!support.clearCloneStyle && value === \"\" && name.indexOf(\"background\") === 0) style[name] = \"inherit\";\n                // If a hook was provided, use that value, otherwise just set the specified value\n                if (!hooks || !(\"set\" in hooks) || (value = hooks.set(elem, value, extra)) !== undefined) {\n                    if (isCustomProp) style.setProperty(name, value);\n                    else style[name] = value;\n                }\n            } else {\n                // If a hook was provided get the non-computed value from there\n                if (hooks && \"get\" in hooks && (ret = hooks.get(elem, false, extra)) !== undefined) return ret;\n                // Otherwise just get the value from the style object\n                return style[name];\n            }\n        },\n        css: function(elem, name, extra, styles) {\n            var val, num, hooks, origName = camelCase(name), isCustomProp = rcustomProp.test(name);\n            // Make sure that we're working with the right name. We don't\n            // want to modify the value if it is a CSS custom property\n            // since they are user-defined.\n            if (!isCustomProp) name = finalPropName(origName);\n            // Try prefixed name followed by the unprefixed name\n            hooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName];\n            // If a hook was provided get the computed value from there\n            if (hooks && \"get\" in hooks) val = hooks.get(elem, true, extra);\n            // Otherwise, if a way to get the computed value exists, use that\n            if (val === undefined) val = curCSS(elem, name, styles);\n            // Convert \"normal\" to computed value\n            if (val === \"normal\" && name in cssNormalTransform) val = cssNormalTransform[name];\n            // Make numeric if forced or a qualifier was provided and val looks numeric\n            if (extra === \"\" || extra) {\n                num = parseFloat(val);\n                return extra === true || isFinite(num) ? num || 0 : val;\n            }\n            return val;\n        }\n    });\n    jQuery.each([\n        \"height\",\n        \"width\"\n    ], function(_i, dimension) {\n        jQuery.cssHooks[dimension] = {\n            get: function(elem, computed, extra) {\n                if (computed) // Certain elements can have dimension info if we invisibly show them\n                // but it must have a current display style that would benefit\n                return rdisplayswap.test(jQuery.css(elem, \"display\")) && // Support: Safari 8+\n                // Table columns in Safari have non-zero offsetWidth & zero\n                // getBoundingClientRect().width unless display is changed.\n                // Support: IE <=11 only\n                // Running getBoundingClientRect on a disconnected node\n                // in IE throws an error.\n                (!elem.getClientRects().length || !elem.getBoundingClientRect().width) ? swap(elem, cssShow, function() {\n                    return getWidthOrHeight(elem, dimension, extra);\n                }) : getWidthOrHeight(elem, dimension, extra);\n            },\n            set: function(elem, value, extra) {\n                var matches, styles = getStyles(elem), // Only read styles.position if the test has a chance to fail\n                // to avoid forcing a reflow.\n                scrollboxSizeBuggy = !support.scrollboxSize() && styles.position === \"absolute\", // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n                boxSizingNeeded = scrollboxSizeBuggy || extra, isBorderBox = boxSizingNeeded && jQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\", subtract = extra ? boxModelAdjustment(elem, dimension, extra, isBorderBox, styles) : 0;\n                // Account for unreliable border-box dimensions by comparing offset* to computed and\n                // faking a content-box to get border and padding (gh-3699)\n                if (isBorderBox && scrollboxSizeBuggy) subtract -= Math.ceil(elem[\"offset\" + dimension[0].toUpperCase() + dimension.slice(1)] - parseFloat(styles[dimension]) - boxModelAdjustment(elem, dimension, \"border\", false, styles) - 0.5);\n                // Convert to pixels if value adjustment is needed\n                if (subtract && (matches = rcssNum.exec(value)) && (matches[3] || \"px\") !== \"px\") {\n                    elem.style[dimension] = value;\n                    value = jQuery.css(elem, dimension);\n                }\n                return setPositiveNumber(elem, value, subtract);\n            }\n        };\n    });\n    jQuery.cssHooks.marginLeft = addGetHookIf(support.reliableMarginLeft, function(elem, computed) {\n        if (computed) return (parseFloat(curCSS(elem, \"marginLeft\")) || elem.getBoundingClientRect().left - swap(elem, {\n            marginLeft: 0\n        }, function() {\n            return elem.getBoundingClientRect().left;\n        })) + \"px\";\n    });\n    // These hooks are used by animate to expand properties\n    jQuery.each({\n        margin: \"\",\n        padding: \"\",\n        border: \"Width\"\n    }, function(prefix, suffix) {\n        jQuery.cssHooks[prefix + suffix] = {\n            expand: function(value) {\n                var i = 0, expanded = {}, // Assumes a single number if not a string\n                parts = typeof value === \"string\" ? value.split(\" \") : [\n                    value\n                ];\n                for(; i < 4; i++)expanded[prefix + cssExpand[i] + suffix] = parts[i] || parts[i - 2] || parts[0];\n                return expanded;\n            }\n        };\n        if (prefix !== \"margin\") jQuery.cssHooks[prefix + suffix].set = setPositiveNumber;\n    });\n    jQuery.fn.extend({\n        css: function(name, value) {\n            return access(this, function(elem, name, value) {\n                var styles, len, map = {}, i = 0;\n                if (Array.isArray(name)) {\n                    styles = getStyles(elem);\n                    len = name.length;\n                    for(; i < len; i++)map[name[i]] = jQuery.css(elem, name[i], false, styles);\n                    return map;\n                }\n                return value !== undefined ? jQuery.style(elem, name, value) : jQuery.css(elem, name);\n            }, name, value, arguments.length > 1);\n        }\n    });\n    function Tween(elem, options, prop, end, easing) {\n        return new Tween.prototype.init(elem, options, prop, end, easing);\n    }\n    jQuery.Tween = Tween;\n    Tween.prototype = {\n        constructor: Tween,\n        init: function(elem, options, prop, end, easing, unit) {\n            this.elem = elem;\n            this.prop = prop;\n            this.easing = easing || jQuery.easing._default;\n            this.options = options;\n            this.start = this.now = this.cur();\n            this.end = end;\n            this.unit = unit || (jQuery.cssNumber[prop] ? \"\" : \"px\");\n        },\n        cur: function() {\n            var hooks = Tween.propHooks[this.prop];\n            return hooks && hooks.get ? hooks.get(this) : Tween.propHooks._default.get(this);\n        },\n        run: function(percent) {\n            var eased, hooks = Tween.propHooks[this.prop];\n            if (this.options.duration) this.pos = eased = jQuery.easing[this.easing](percent, this.options.duration * percent, 0, 1, this.options.duration);\n            else this.pos = eased = percent;\n            this.now = (this.end - this.start) * eased + this.start;\n            if (this.options.step) this.options.step.call(this.elem, this.now, this);\n            if (hooks && hooks.set) hooks.set(this);\n            else Tween.propHooks._default.set(this);\n            return this;\n        }\n    };\n    Tween.prototype.init.prototype = Tween.prototype;\n    Tween.propHooks = {\n        _default: {\n            get: function(tween) {\n                var result;\n                // Use a property on the element directly when it is not a DOM element,\n                // or when there is no matching style property that exists.\n                if (tween.elem.nodeType !== 1 || tween.elem[tween.prop] != null && tween.elem.style[tween.prop] == null) return tween.elem[tween.prop];\n                // Passing an empty string as a 3rd parameter to .css will automatically\n                // attempt a parseFloat and fallback to a string if the parse fails.\n                // Simple values such as \"10px\" are parsed to Float;\n                // complex values such as \"rotate(1rad)\" are returned as-is.\n                result = jQuery.css(tween.elem, tween.prop, \"\");\n                // Empty strings, null, undefined and \"auto\" are converted to 0.\n                return !result || result === \"auto\" ? 0 : result;\n            },\n            set: function(tween) {\n                // Use step hook for back compat.\n                // Use cssHook if its there.\n                // Use .style if available and use plain properties where available.\n                if (jQuery.fx.step[tween.prop]) jQuery.fx.step[tween.prop](tween);\n                else if (tween.elem.nodeType === 1 && (jQuery.cssHooks[tween.prop] || tween.elem.style[finalPropName(tween.prop)] != null)) jQuery.style(tween.elem, tween.prop, tween.now + tween.unit);\n                else tween.elem[tween.prop] = tween.now;\n            }\n        }\n    };\n    // Support: IE <=9 only\n    // Panic based approach to setting things on disconnected nodes\n    Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n        set: function(tween) {\n            if (tween.elem.nodeType && tween.elem.parentNode) tween.elem[tween.prop] = tween.now;\n        }\n    };\n    jQuery.easing = {\n        linear: function(p) {\n            return p;\n        },\n        swing: function(p) {\n            return 0.5 - Math.cos(p * Math.PI) / 2;\n        },\n        _default: \"swing\"\n    };\n    jQuery.fx = Tween.prototype.init;\n    // Back compat <1.8 extension point\n    jQuery.fx.step = {};\n    var fxNow, inProgress, rfxtypes = /^(?:toggle|show|hide)$/, rrun = /queueHooks$/;\n    function schedule() {\n        if (inProgress) {\n            if (document.hidden === false && window1.requestAnimationFrame) window1.requestAnimationFrame(schedule);\n            else window1.setTimeout(schedule, jQuery.fx.interval);\n            jQuery.fx.tick();\n        }\n    }\n    // Animations created synchronously will run synchronously\n    function createFxNow() {\n        window1.setTimeout(function() {\n            fxNow = undefined;\n        });\n        return fxNow = Date.now();\n    }\n    // Generate parameters to create a standard animation\n    function genFx(type, includeWidth) {\n        var which, i = 0, attrs = {\n            height: type\n        };\n        // If we include width, step value is 1 to do all cssExpand values,\n        // otherwise step value is 2 to skip over Left and Right\n        includeWidth = includeWidth ? 1 : 0;\n        for(; i < 4; i += 2 - includeWidth){\n            which = cssExpand[i];\n            attrs[\"margin\" + which] = attrs[\"padding\" + which] = type;\n        }\n        if (includeWidth) attrs.opacity = attrs.width = type;\n        return attrs;\n    }\n    function createTween(value, prop, animation) {\n        var tween, collection = (Animation.tweeners[prop] || []).concat(Animation.tweeners[\"*\"]), index = 0, length = collection.length;\n        for(; index < length; index++){\n            if (tween = collection[index].call(animation, prop, value)) // We're done with this property\n            return tween;\n        }\n    }\n    function defaultPrefilter(elem, props, opts) {\n        var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, isBox = \"width\" in props || \"height\" in props, anim = this, orig = {}, style = elem.style, hidden = elem.nodeType && isHiddenWithinTree(elem), dataShow = dataPriv.get(elem, \"fxshow\");\n        // Queue-skipping animations hijack the fx hooks\n        if (!opts.queue) {\n            hooks = jQuery._queueHooks(elem, \"fx\");\n            if (hooks.unqueued == null) {\n                hooks.unqueued = 0;\n                oldfire = hooks.empty.fire;\n                hooks.empty.fire = function() {\n                    if (!hooks.unqueued) oldfire();\n                };\n            }\n            hooks.unqueued++;\n            anim.always(function() {\n                // Ensure the complete handler is called before this completes\n                anim.always(function() {\n                    hooks.unqueued--;\n                    if (!jQuery.queue(elem, \"fx\").length) hooks.empty.fire();\n                });\n            });\n        }\n        // Detect show/hide animations\n        for(prop in props){\n            value = props[prop];\n            if (rfxtypes.test(value)) {\n                delete props[prop];\n                toggle = toggle || value === \"toggle\";\n                if (value === (hidden ? \"hide\" : \"show\")) {\n                    // Pretend to be hidden if this is a \"show\" and\n                    // there is still data from a stopped show/hide\n                    if (value === \"show\" && dataShow && dataShow[prop] !== undefined) hidden = true;\n                    else continue;\n                }\n                orig[prop] = dataShow && dataShow[prop] || jQuery.style(elem, prop);\n            }\n        }\n        // Bail out if this is a no-op like .hide().hide()\n        propTween = !jQuery.isEmptyObject(props);\n        if (!propTween && jQuery.isEmptyObject(orig)) return;\n        // Restrict \"overflow\" and \"display\" styles during box animations\n        if (isBox && elem.nodeType === 1) {\n            // Support: IE <=9 - 11, Edge 12 - 15\n            // Record all 3 overflow attributes because IE does not infer the shorthand\n            // from identically-valued overflowX and overflowY and Edge just mirrors\n            // the overflowX value there.\n            opts.overflow = [\n                style.overflow,\n                style.overflowX,\n                style.overflowY\n            ];\n            // Identify a display type, preferring old show/hide data over the CSS cascade\n            restoreDisplay = dataShow && dataShow.display;\n            if (restoreDisplay == null) restoreDisplay = dataPriv.get(elem, \"display\");\n            display = jQuery.css(elem, \"display\");\n            if (display === \"none\") {\n                if (restoreDisplay) display = restoreDisplay;\n                else {\n                    // Get nonempty value(s) by temporarily forcing visibility\n                    showHide([\n                        elem\n                    ], true);\n                    restoreDisplay = elem.style.display || restoreDisplay;\n                    display = jQuery.css(elem, \"display\");\n                    showHide([\n                        elem\n                    ]);\n                }\n            }\n            // Animate inline elements as inline-block\n            if (display === \"inline\" || display === \"inline-block\" && restoreDisplay != null) {\n                if (jQuery.css(elem, \"float\") === \"none\") {\n                    // Restore the original display value at the end of pure show/hide animations\n                    if (!propTween) {\n                        anim.done(function() {\n                            style.display = restoreDisplay;\n                        });\n                        if (restoreDisplay == null) {\n                            display = style.display;\n                            restoreDisplay = display === \"none\" ? \"\" : display;\n                        }\n                    }\n                    style.display = \"inline-block\";\n                }\n            }\n        }\n        if (opts.overflow) {\n            style.overflow = \"hidden\";\n            anim.always(function() {\n                style.overflow = opts.overflow[0];\n                style.overflowX = opts.overflow[1];\n                style.overflowY = opts.overflow[2];\n            });\n        }\n        // Implement show/hide animations\n        propTween = false;\n        for(prop in orig){\n            // General show/hide setup for this element animation\n            if (!propTween) {\n                if (dataShow) {\n                    if (\"hidden\" in dataShow) hidden = dataShow.hidden;\n                } else dataShow = dataPriv.access(elem, \"fxshow\", {\n                    display: restoreDisplay\n                });\n                // Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n                if (toggle) dataShow.hidden = !hidden;\n                // Show elements before animating them\n                if (hidden) showHide([\n                    elem\n                ], true);\n                /* eslint-disable no-loop-func */ anim.done(function() {\n                    /* eslint-enable no-loop-func */ // The final step of a \"hide\" animation is actually hiding the element\n                    if (!hidden) showHide([\n                        elem\n                    ]);\n                    dataPriv.remove(elem, \"fxshow\");\n                    for(prop in orig)jQuery.style(elem, prop, orig[prop]);\n                });\n            }\n            // Per-property setup\n            propTween = createTween(hidden ? dataShow[prop] : 0, prop, anim);\n            if (!(prop in dataShow)) {\n                dataShow[prop] = propTween.start;\n                if (hidden) {\n                    propTween.end = propTween.start;\n                    propTween.start = 0;\n                }\n            }\n        }\n    }\n    function propFilter(props, specialEasing) {\n        var index, name, easing, value, hooks;\n        // camelCase, specialEasing and expand cssHook pass\n        for(index in props){\n            name = camelCase(index);\n            easing = specialEasing[name];\n            value = props[index];\n            if (Array.isArray(value)) {\n                easing = value[1];\n                value = props[index] = value[0];\n            }\n            if (index !== name) {\n                props[name] = value;\n                delete props[index];\n            }\n            hooks = jQuery.cssHooks[name];\n            if (hooks && \"expand\" in hooks) {\n                value = hooks.expand(value);\n                delete props[name];\n                // Not quite $.extend, this won't overwrite existing keys.\n                // Reusing 'index' because we have the correct \"name\"\n                for(index in value)if (!(index in props)) {\n                    props[index] = value[index];\n                    specialEasing[index] = easing;\n                }\n            } else specialEasing[name] = easing;\n        }\n    }\n    function Animation(elem, properties, options) {\n        var result, stopped, index = 0, length = Animation.prefilters.length, deferred = jQuery.Deferred().always(function() {\n            // Don't match elem in the :animated selector\n            delete tick.elem;\n        }), tick = function() {\n            if (stopped) return false;\n            var currentTime = fxNow || createFxNow(), remaining = Math.max(0, animation.startTime + animation.duration - currentTime), // Support: Android 2.3 only\n            // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (trac-12497)\n            temp = remaining / animation.duration || 0, percent = 1 - temp, index = 0, length = animation.tweens.length;\n            for(; index < length; index++)animation.tweens[index].run(percent);\n            deferred.notifyWith(elem, [\n                animation,\n                percent,\n                remaining\n            ]);\n            // If there's more to do, yield\n            if (percent < 1 && length) return remaining;\n            // If this was an empty animation, synthesize a final progress notification\n            if (!length) deferred.notifyWith(elem, [\n                animation,\n                1,\n                0\n            ]);\n            // Resolve the animation and report its conclusion\n            deferred.resolveWith(elem, [\n                animation\n            ]);\n            return false;\n        }, animation = deferred.promise({\n            elem: elem,\n            props: jQuery.extend({}, properties),\n            opts: jQuery.extend(true, {\n                specialEasing: {},\n                easing: jQuery.easing._default\n            }, options),\n            originalProperties: properties,\n            originalOptions: options,\n            startTime: fxNow || createFxNow(),\n            duration: options.duration,\n            tweens: [],\n            createTween: function(prop, end) {\n                var tween = jQuery.Tween(elem, animation.opts, prop, end, animation.opts.specialEasing[prop] || animation.opts.easing);\n                animation.tweens.push(tween);\n                return tween;\n            },\n            stop: function(gotoEnd) {\n                var index = 0, // If we are going to the end, we want to run all the tweens\n                // otherwise we skip this part\n                length = gotoEnd ? animation.tweens.length : 0;\n                if (stopped) return this;\n                stopped = true;\n                for(; index < length; index++)animation.tweens[index].run(1);\n                // Resolve when we played the last frame; otherwise, reject\n                if (gotoEnd) {\n                    deferred.notifyWith(elem, [\n                        animation,\n                        1,\n                        0\n                    ]);\n                    deferred.resolveWith(elem, [\n                        animation,\n                        gotoEnd\n                    ]);\n                } else deferred.rejectWith(elem, [\n                    animation,\n                    gotoEnd\n                ]);\n                return this;\n            }\n        }), props = animation.props;\n        propFilter(props, animation.opts.specialEasing);\n        for(; index < length; index++){\n            result = Animation.prefilters[index].call(animation, elem, props, animation.opts);\n            if (result) {\n                if (isFunction(result.stop)) jQuery._queueHooks(animation.elem, animation.opts.queue).stop = result.stop.bind(result);\n                return result;\n            }\n        }\n        jQuery.map(props, createTween, animation);\n        if (isFunction(animation.opts.start)) animation.opts.start.call(elem, animation);\n        // Attach callbacks from options\n        animation.progress(animation.opts.progress).done(animation.opts.done, animation.opts.complete).fail(animation.opts.fail).always(animation.opts.always);\n        jQuery.fx.timer(jQuery.extend(tick, {\n            elem: elem,\n            anim: animation,\n            queue: animation.opts.queue\n        }));\n        return animation;\n    }\n    jQuery.Animation = jQuery.extend(Animation, {\n        tweeners: {\n            \"*\": [\n                function(prop, value) {\n                    var tween = this.createTween(prop, value);\n                    adjustCSS(tween.elem, prop, rcssNum.exec(value), tween);\n                    return tween;\n                }\n            ]\n        },\n        tweener: function(props, callback) {\n            if (isFunction(props)) {\n                callback = props;\n                props = [\n                    \"*\"\n                ];\n            } else props = props.match(rnothtmlwhite);\n            var prop, index = 0, length = props.length;\n            for(; index < length; index++){\n                prop = props[index];\n                Animation.tweeners[prop] = Animation.tweeners[prop] || [];\n                Animation.tweeners[prop].unshift(callback);\n            }\n        },\n        prefilters: [\n            defaultPrefilter\n        ],\n        prefilter: function(callback, prepend) {\n            if (prepend) Animation.prefilters.unshift(callback);\n            else Animation.prefilters.push(callback);\n        }\n    });\n    jQuery.speed = function(speed, easing, fn) {\n        var opt = speed && typeof speed === \"object\" ? jQuery.extend({}, speed) : {\n            complete: fn || !fn && easing || isFunction(speed) && speed,\n            duration: speed,\n            easing: fn && easing || easing && !isFunction(easing) && easing\n        };\n        // Go to the end state if fx are off\n        if (jQuery.fx.off) opt.duration = 0;\n        else if (typeof opt.duration !== \"number\") {\n            if (opt.duration in jQuery.fx.speeds) opt.duration = jQuery.fx.speeds[opt.duration];\n            else opt.duration = jQuery.fx.speeds._default;\n        }\n        // Normalize opt.queue - true/undefined/null -> \"fx\"\n        if (opt.queue == null || opt.queue === true) opt.queue = \"fx\";\n        // Queueing\n        opt.old = opt.complete;\n        opt.complete = function() {\n            if (isFunction(opt.old)) opt.old.call(this);\n            if (opt.queue) jQuery.dequeue(this, opt.queue);\n        };\n        return opt;\n    };\n    jQuery.fn.extend({\n        fadeTo: function(speed, to, easing, callback) {\n            // Show any hidden elements after setting opacity to 0\n            return this.filter(isHiddenWithinTree).css(\"opacity\", 0).show()// Animate to the value specified\n            .end().animate({\n                opacity: to\n            }, speed, easing, callback);\n        },\n        animate: function(prop, speed, easing, callback) {\n            var empty = jQuery.isEmptyObject(prop), optall = jQuery.speed(speed, easing, callback), doAnimation = function() {\n                // Operate on a copy of prop so per-property easing won't be lost\n                var anim = Animation(this, jQuery.extend({}, prop), optall);\n                // Empty animations, or finishing resolves immediately\n                if (empty || dataPriv.get(this, \"finish\")) anim.stop(true);\n            };\n            doAnimation.finish = doAnimation;\n            return empty || optall.queue === false ? this.each(doAnimation) : this.queue(optall.queue, doAnimation);\n        },\n        stop: function(type, clearQueue, gotoEnd) {\n            var stopQueue = function(hooks) {\n                var stop = hooks.stop;\n                delete hooks.stop;\n                stop(gotoEnd);\n            };\n            if (typeof type !== \"string\") {\n                gotoEnd = clearQueue;\n                clearQueue = type;\n                type = undefined;\n            }\n            if (clearQueue) this.queue(type || \"fx\", []);\n            return this.each(function() {\n                var dequeue = true, index = type != null && type + \"queueHooks\", timers = jQuery.timers, data = dataPriv.get(this);\n                if (index) {\n                    if (data[index] && data[index].stop) stopQueue(data[index]);\n                } else {\n                    for(index in data)if (data[index] && data[index].stop && rrun.test(index)) stopQueue(data[index]);\n                }\n                for(index = timers.length; index--;)if (timers[index].elem === this && (type == null || timers[index].queue === type)) {\n                    timers[index].anim.stop(gotoEnd);\n                    dequeue = false;\n                    timers.splice(index, 1);\n                }\n                // Start the next in the queue if the last step wasn't forced.\n                // Timers currently will call their complete callbacks, which\n                // will dequeue but only if they were gotoEnd.\n                if (dequeue || !gotoEnd) jQuery.dequeue(this, type);\n            });\n        },\n        finish: function(type) {\n            if (type !== false) type = type || \"fx\";\n            return this.each(function() {\n                var index, data = dataPriv.get(this), queue = data[type + \"queue\"], hooks = data[type + \"queueHooks\"], timers = jQuery.timers, length = queue ? queue.length : 0;\n                // Enable finishing flag on private data\n                data.finish = true;\n                // Empty the queue first\n                jQuery.queue(this, type, []);\n                if (hooks && hooks.stop) hooks.stop.call(this, true);\n                // Look for any active animations, and finish them\n                for(index = timers.length; index--;)if (timers[index].elem === this && timers[index].queue === type) {\n                    timers[index].anim.stop(true);\n                    timers.splice(index, 1);\n                }\n                // Look for any animations in the old queue and finish them\n                for(index = 0; index < length; index++)if (queue[index] && queue[index].finish) queue[index].finish.call(this);\n                // Turn off finishing flag\n                delete data.finish;\n            });\n        }\n    });\n    jQuery.each([\n        \"toggle\",\n        \"show\",\n        \"hide\"\n    ], function(_i, name) {\n        var cssFn = jQuery.fn[name];\n        jQuery.fn[name] = function(speed, easing, callback) {\n            return speed == null || typeof speed === \"boolean\" ? cssFn.apply(this, arguments) : this.animate(genFx(name, true), speed, easing, callback);\n        };\n    });\n    // Generate shortcuts for custom animations\n    jQuery.each({\n        slideDown: genFx(\"show\"),\n        slideUp: genFx(\"hide\"),\n        slideToggle: genFx(\"toggle\"),\n        fadeIn: {\n            opacity: \"show\"\n        },\n        fadeOut: {\n            opacity: \"hide\"\n        },\n        fadeToggle: {\n            opacity: \"toggle\"\n        }\n    }, function(name, props) {\n        jQuery.fn[name] = function(speed, easing, callback) {\n            return this.animate(props, speed, easing, callback);\n        };\n    });\n    jQuery.timers = [];\n    jQuery.fx.tick = function() {\n        var timer, i = 0, timers = jQuery.timers;\n        fxNow = Date.now();\n        for(; i < timers.length; i++){\n            timer = timers[i];\n            // Run the timer and safely remove it when done (allowing for external removal)\n            if (!timer() && timers[i] === timer) timers.splice(i--, 1);\n        }\n        if (!timers.length) jQuery.fx.stop();\n        fxNow = undefined;\n    };\n    jQuery.fx.timer = function(timer) {\n        jQuery.timers.push(timer);\n        jQuery.fx.start();\n    };\n    jQuery.fx.interval = 13;\n    jQuery.fx.start = function() {\n        if (inProgress) return;\n        inProgress = true;\n        schedule();\n    };\n    jQuery.fx.stop = function() {\n        inProgress = null;\n    };\n    jQuery.fx.speeds = {\n        slow: 600,\n        fast: 200,\n        // Default speed\n        _default: 400\n    };\n    // Based off of the plugin by Clint Helfers, with permission.\n    jQuery.fn.delay = function(time, type) {\n        time = jQuery.fx ? jQuery.fx.speeds[time] || time : time;\n        type = type || \"fx\";\n        return this.queue(type, function(next, hooks) {\n            var timeout = window1.setTimeout(next, time);\n            hooks.stop = function() {\n                window1.clearTimeout(timeout);\n            };\n        });\n    };\n    (function() {\n        var input = document.createElement(\"input\"), select = document.createElement(\"select\"), opt = select.appendChild(document.createElement(\"option\"));\n        input.type = \"checkbox\";\n        // Support: Android <=4.3 only\n        // Default value for a checkbox should be \"on\"\n        support.checkOn = input.value !== \"\";\n        // Support: IE <=11 only\n        // Must access selectedIndex to make default options select\n        support.optSelected = opt.selected;\n        // Support: IE <=11 only\n        // An input loses its value after becoming a radio\n        input = document.createElement(\"input\");\n        input.value = \"t\";\n        input.type = \"radio\";\n        support.radioValue = input.value === \"t\";\n    })();\n    var boolHook, attrHandle = jQuery.expr.attrHandle;\n    jQuery.fn.extend({\n        attr: function(name, value) {\n            return access(this, jQuery.attr, name, value, arguments.length > 1);\n        },\n        removeAttr: function(name) {\n            return this.each(function() {\n                jQuery.removeAttr(this, name);\n            });\n        }\n    });\n    jQuery.extend({\n        attr: function(elem, name, value) {\n            var ret, hooks, nType = elem.nodeType;\n            // Don't get/set attributes on text, comment and attribute nodes\n            if (nType === 3 || nType === 8 || nType === 2) return;\n            // Fallback to prop when attributes are not supported\n            if (typeof elem.getAttribute === \"undefined\") return jQuery.prop(elem, name, value);\n            // Attribute hooks are determined by the lowercase version\n            // Grab necessary hook if one is defined\n            if (nType !== 1 || !jQuery.isXMLDoc(elem)) hooks = jQuery.attrHooks[name.toLowerCase()] || (jQuery.expr.match.bool.test(name) ? boolHook : undefined);\n            if (value !== undefined) {\n                if (value === null) {\n                    jQuery.removeAttr(elem, name);\n                    return;\n                }\n                if (hooks && \"set\" in hooks && (ret = hooks.set(elem, value, name)) !== undefined) return ret;\n                elem.setAttribute(name, value + \"\");\n                return value;\n            }\n            if (hooks && \"get\" in hooks && (ret = hooks.get(elem, name)) !== null) return ret;\n            ret = jQuery.find.attr(elem, name);\n            // Non-existent attributes return null, we normalize to undefined\n            return ret == null ? undefined : ret;\n        },\n        attrHooks: {\n            type: {\n                set: function(elem, value) {\n                    if (!support.radioValue && value === \"radio\" && nodeName(elem, \"input\")) {\n                        var val = elem.value;\n                        elem.setAttribute(\"type\", value);\n                        if (val) elem.value = val;\n                        return value;\n                    }\n                }\n            }\n        },\n        removeAttr: function(elem, value) {\n            var name, i = 0, // Attribute names can contain non-HTML whitespace characters\n            // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n            attrNames = value && value.match(rnothtmlwhite);\n            if (attrNames && elem.nodeType === 1) while(name = attrNames[i++])elem.removeAttribute(name);\n        }\n    });\n    // Hooks for boolean attributes\n    boolHook = {\n        set: function(elem, value, name) {\n            if (value === false) // Remove boolean attributes when set to false\n            jQuery.removeAttr(elem, name);\n            else elem.setAttribute(name, name);\n            return name;\n        }\n    };\n    jQuery.each(jQuery.expr.match.bool.source.match(/\\w+/g), function(_i, name) {\n        var getter = attrHandle[name] || jQuery.find.attr;\n        attrHandle[name] = function(elem, name, isXML) {\n            var ret, handle, lowercaseName = name.toLowerCase();\n            if (!isXML) {\n                // Avoid an infinite loop by temporarily removing this function from the getter\n                handle = attrHandle[lowercaseName];\n                attrHandle[lowercaseName] = ret;\n                ret = getter(elem, name, isXML) != null ? lowercaseName : null;\n                attrHandle[lowercaseName] = handle;\n            }\n            return ret;\n        };\n    });\n    var rfocusable = /^(?:input|select|textarea|button)$/i, rclickable = /^(?:a|area)$/i;\n    jQuery.fn.extend({\n        prop: function(name, value) {\n            return access(this, jQuery.prop, name, value, arguments.length > 1);\n        },\n        removeProp: function(name) {\n            return this.each(function() {\n                delete this[jQuery.propFix[name] || name];\n            });\n        }\n    });\n    jQuery.extend({\n        prop: function(elem, name, value) {\n            var ret, hooks, nType = elem.nodeType;\n            // Don't get/set properties on text, comment and attribute nodes\n            if (nType === 3 || nType === 8 || nType === 2) return;\n            if (nType !== 1 || !jQuery.isXMLDoc(elem)) {\n                // Fix name and attach hooks\n                name = jQuery.propFix[name] || name;\n                hooks = jQuery.propHooks[name];\n            }\n            if (value !== undefined) {\n                if (hooks && \"set\" in hooks && (ret = hooks.set(elem, value, name)) !== undefined) return ret;\n                return elem[name] = value;\n            }\n            if (hooks && \"get\" in hooks && (ret = hooks.get(elem, name)) !== null) return ret;\n            return elem[name];\n        },\n        propHooks: {\n            tabIndex: {\n                get: function(elem) {\n                    // Support: IE <=9 - 11 only\n                    // elem.tabIndex doesn't always return the\n                    // correct value when it hasn't been explicitly set\n                    // Use proper attribute retrieval (trac-12072)\n                    var tabindex = jQuery.find.attr(elem, \"tabindex\");\n                    if (tabindex) return parseInt(tabindex, 10);\n                    if (rfocusable.test(elem.nodeName) || rclickable.test(elem.nodeName) && elem.href) return 0;\n                    return -1;\n                }\n            }\n        },\n        propFix: {\n            \"for\": \"htmlFor\",\n            \"class\": \"className\"\n        }\n    });\n    // Support: IE <=11 only\n    // Accessing the selectedIndex property\n    // forces the browser to respect setting selected\n    // on the option\n    // The getter ensures a default option is selected\n    // when in an optgroup\n    // eslint rule \"no-unused-expressions\" is disabled for this code\n    // since it considers such accessions noop\n    if (!support.optSelected) jQuery.propHooks.selected = {\n        get: function(elem) {\n            /* eslint no-unused-expressions: \"off\" */ var parent = elem.parentNode;\n            if (parent && parent.parentNode) parent.parentNode.selectedIndex;\n            return null;\n        },\n        set: function(elem) {\n            /* eslint no-unused-expressions: \"off\" */ var parent = elem.parentNode;\n            if (parent) {\n                parent.selectedIndex;\n                if (parent.parentNode) parent.parentNode.selectedIndex;\n            }\n        }\n    };\n    jQuery.each([\n        \"tabIndex\",\n        \"readOnly\",\n        \"maxLength\",\n        \"cellSpacing\",\n        \"cellPadding\",\n        \"rowSpan\",\n        \"colSpan\",\n        \"useMap\",\n        \"frameBorder\",\n        \"contentEditable\"\n    ], function() {\n        jQuery.propFix[this.toLowerCase()] = this;\n    });\n    // Strip and collapse whitespace according to HTML spec\n    // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n    function stripAndCollapse(value) {\n        var tokens = value.match(rnothtmlwhite) || [];\n        return tokens.join(\" \");\n    }\n    function getClass(elem) {\n        return elem.getAttribute && elem.getAttribute(\"class\") || \"\";\n    }\n    function classesToArray(value) {\n        if (Array.isArray(value)) return value;\n        if (typeof value === \"string\") return value.match(rnothtmlwhite) || [];\n        return [];\n    }\n    jQuery.fn.extend({\n        addClass: function(value) {\n            var classNames, cur, curValue, className, i, finalValue;\n            if (isFunction(value)) return this.each(function(j) {\n                jQuery(this).addClass(value.call(this, j, getClass(this)));\n            });\n            classNames = classesToArray(value);\n            if (classNames.length) return this.each(function() {\n                curValue = getClass(this);\n                cur = this.nodeType === 1 && \" \" + stripAndCollapse(curValue) + \" \";\n                if (cur) {\n                    for(i = 0; i < classNames.length; i++){\n                        className = classNames[i];\n                        if (cur.indexOf(\" \" + className + \" \") < 0) cur += className + \" \";\n                    }\n                    // Only assign if different to avoid unneeded rendering.\n                    finalValue = stripAndCollapse(cur);\n                    if (curValue !== finalValue) this.setAttribute(\"class\", finalValue);\n                }\n            });\n            return this;\n        },\n        removeClass: function(value) {\n            var classNames, cur, curValue, className, i, finalValue;\n            if (isFunction(value)) return this.each(function(j) {\n                jQuery(this).removeClass(value.call(this, j, getClass(this)));\n            });\n            if (!arguments.length) return this.attr(\"class\", \"\");\n            classNames = classesToArray(value);\n            if (classNames.length) return this.each(function() {\n                curValue = getClass(this);\n                // This expression is here for better compressibility (see addClass)\n                cur = this.nodeType === 1 && \" \" + stripAndCollapse(curValue) + \" \";\n                if (cur) {\n                    for(i = 0; i < classNames.length; i++){\n                        className = classNames[i];\n                        // Remove *all* instances\n                        while(cur.indexOf(\" \" + className + \" \") > -1)cur = cur.replace(\" \" + className + \" \", \" \");\n                    }\n                    // Only assign if different to avoid unneeded rendering.\n                    finalValue = stripAndCollapse(cur);\n                    if (curValue !== finalValue) this.setAttribute(\"class\", finalValue);\n                }\n            });\n            return this;\n        },\n        toggleClass: function(value, stateVal) {\n            var classNames, className, i, self, type = typeof value, isValidValue = type === \"string\" || Array.isArray(value);\n            if (isFunction(value)) return this.each(function(i) {\n                jQuery(this).toggleClass(value.call(this, i, getClass(this), stateVal), stateVal);\n            });\n            if (typeof stateVal === \"boolean\" && isValidValue) return stateVal ? this.addClass(value) : this.removeClass(value);\n            classNames = classesToArray(value);\n            return this.each(function() {\n                if (isValidValue) {\n                    // Toggle individual class names\n                    self = jQuery(this);\n                    for(i = 0; i < classNames.length; i++){\n                        className = classNames[i];\n                        // Check each className given, space separated list\n                        if (self.hasClass(className)) self.removeClass(className);\n                        else self.addClass(className);\n                    }\n                // Toggle whole class name\n                } else if (value === undefined || type === \"boolean\") {\n                    className = getClass(this);\n                    if (className) // Store className if set\n                    dataPriv.set(this, \"__className__\", className);\n                    // If the element has a class name or if we're passed `false`,\n                    // then remove the whole classname (if there was one, the above saved it).\n                    // Otherwise bring back whatever was previously saved (if anything),\n                    // falling back to the empty string if nothing was stored.\n                    if (this.setAttribute) this.setAttribute(\"class\", className || value === false ? \"\" : dataPriv.get(this, \"__className__\") || \"\");\n                }\n            });\n        },\n        hasClass: function(selector) {\n            var className, elem, i = 0;\n            className = \" \" + selector + \" \";\n            while(elem = this[i++]){\n                if (elem.nodeType === 1 && (\" \" + stripAndCollapse(getClass(elem)) + \" \").indexOf(className) > -1) return true;\n            }\n            return false;\n        }\n    });\n    var rreturn = /\\r/g;\n    jQuery.fn.extend({\n        val: function(value) {\n            var hooks, ret, valueIsFunction, elem = this[0];\n            if (!arguments.length) {\n                if (elem) {\n                    hooks = jQuery.valHooks[elem.type] || jQuery.valHooks[elem.nodeName.toLowerCase()];\n                    if (hooks && \"get\" in hooks && (ret = hooks.get(elem, \"value\")) !== undefined) return ret;\n                    ret = elem.value;\n                    // Handle most common string cases\n                    if (typeof ret === \"string\") return ret.replace(rreturn, \"\");\n                    // Handle cases where value is null/undef or number\n                    return ret == null ? \"\" : ret;\n                }\n                return;\n            }\n            valueIsFunction = isFunction(value);\n            return this.each(function(i) {\n                var val;\n                if (this.nodeType !== 1) return;\n                if (valueIsFunction) val = value.call(this, i, jQuery(this).val());\n                else val = value;\n                // Treat null/undefined as \"\"; convert numbers to string\n                if (val == null) val = \"\";\n                else if (typeof val === \"number\") val += \"\";\n                else if (Array.isArray(val)) val = jQuery.map(val, function(value) {\n                    return value == null ? \"\" : value + \"\";\n                });\n                hooks = jQuery.valHooks[this.type] || jQuery.valHooks[this.nodeName.toLowerCase()];\n                // If set returns undefined, fall back to normal setting\n                if (!hooks || !(\"set\" in hooks) || hooks.set(this, val, \"value\") === undefined) this.value = val;\n            });\n        }\n    });\n    jQuery.extend({\n        valHooks: {\n            option: {\n                get: function(elem) {\n                    var val = jQuery.find.attr(elem, \"value\");\n                    return val != null ? val : // Support: IE <=10 - 11 only\n                    // option.text throws exceptions (trac-14686, trac-14858)\n                    // Strip and collapse whitespace\n                    // https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n                    stripAndCollapse(jQuery.text(elem));\n                }\n            },\n            select: {\n                get: function(elem) {\n                    var value, option, i, options = elem.options, index = elem.selectedIndex, one = elem.type === \"select-one\", values = one ? null : [], max = one ? index + 1 : options.length;\n                    if (index < 0) i = max;\n                    else i = one ? index : 0;\n                    // Loop through all the selected options\n                    for(; i < max; i++){\n                        option = options[i];\n                        // Support: IE <=9 only\n                        // IE8-9 doesn't update selected after form reset (trac-2551)\n                        if ((option.selected || i === index) && // Don't return options that are disabled or in a disabled optgroup\n                        !option.disabled && (!option.parentNode.disabled || !nodeName(option.parentNode, \"optgroup\"))) {\n                            // Get the specific value for the option\n                            value = jQuery(option).val();\n                            // We don't need an array for one selects\n                            if (one) return value;\n                            // Multi-Selects return an array\n                            values.push(value);\n                        }\n                    }\n                    return values;\n                },\n                set: function(elem, value) {\n                    var optionSet, option, options = elem.options, values = jQuery.makeArray(value), i = options.length;\n                    while(i--){\n                        option = options[i];\n                        /* eslint-disable no-cond-assign */ if (option.selected = jQuery.inArray(jQuery.valHooks.option.get(option), values) > -1) optionSet = true;\n                    /* eslint-enable no-cond-assign */ }\n                    // Force browsers to behave consistently when non-matching value is set\n                    if (!optionSet) elem.selectedIndex = -1;\n                    return values;\n                }\n            }\n        }\n    });\n    // Radios and checkboxes getter/setter\n    jQuery.each([\n        \"radio\",\n        \"checkbox\"\n    ], function() {\n        jQuery.valHooks[this] = {\n            set: function(elem, value) {\n                if (Array.isArray(value)) return elem.checked = jQuery.inArray(jQuery(elem).val(), value) > -1;\n            }\n        };\n        if (!support.checkOn) jQuery.valHooks[this].get = function(elem) {\n            return elem.getAttribute(\"value\") === null ? \"on\" : elem.value;\n        };\n    });\n    // Return jQuery for attributes-only inclusion\n    var location = window1.location;\n    var nonce = {\n        guid: Date.now()\n    };\n    var rquery = /\\?/;\n    // Cross-browser xml parsing\n    jQuery.parseXML = function(data) {\n        var xml, parserErrorElem;\n        if (!data || typeof data !== \"string\") return null;\n        // Support: IE 9 - 11 only\n        // IE throws on parseFromString with invalid input.\n        try {\n            xml = new window1.DOMParser().parseFromString(data, \"text/xml\");\n        } catch (e) {}\n        parserErrorElem = xml && xml.getElementsByTagName(\"parsererror\")[0];\n        if (!xml || parserErrorElem) jQuery.error(\"Invalid XML: \" + (parserErrorElem ? jQuery.map(parserErrorElem.childNodes, function(el) {\n            return el.textContent;\n        }).join(\"\\n\") : data));\n        return xml;\n    };\n    var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, stopPropagationCallback = function(e) {\n        e.stopPropagation();\n    };\n    jQuery.extend(jQuery.event, {\n        trigger: function(event, data, elem, onlyHandlers) {\n            var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, eventPath = [\n                elem || document\n            ], type = hasOwn.call(event, \"type\") ? event.type : event, namespaces = hasOwn.call(event, \"namespace\") ? event.namespace.split(\".\") : [];\n            cur = lastElement = tmp = elem = elem || document;\n            // Don't do events on text and comment nodes\n            if (elem.nodeType === 3 || elem.nodeType === 8) return;\n            // focus/blur morphs to focusin/out; ensure we're not firing them right now\n            if (rfocusMorph.test(type + jQuery.event.triggered)) return;\n            if (type.indexOf(\".\") > -1) {\n                // Namespaced trigger; create a regexp to match event type in handle()\n                namespaces = type.split(\".\");\n                type = namespaces.shift();\n                namespaces.sort();\n            }\n            ontype = type.indexOf(\":\") < 0 && \"on\" + type;\n            // Caller can pass in a jQuery.Event object, Object, or just an event type string\n            event = event[jQuery.expando] ? event : new jQuery.Event(type, typeof event === \"object\" && event);\n            // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n            event.isTrigger = onlyHandlers ? 2 : 3;\n            event.namespace = namespaces.join(\".\");\n            event.rnamespace = event.namespace ? new RegExp(\"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\") : null;\n            // Clean up the event in case it is being reused\n            event.result = undefined;\n            if (!event.target) event.target = elem;\n            // Clone any incoming data and prepend the event, creating the handler arg list\n            data = data == null ? [\n                event\n            ] : jQuery.makeArray(data, [\n                event\n            ]);\n            // Allow special events to draw outside the lines\n            special = jQuery.event.special[type] || {};\n            if (!onlyHandlers && special.trigger && special.trigger.apply(elem, data) === false) return;\n            // Determine event propagation path in advance, per W3C events spec (trac-9951)\n            // Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724)\n            if (!onlyHandlers && !special.noBubble && !isWindow(elem)) {\n                bubbleType = special.delegateType || type;\n                if (!rfocusMorph.test(bubbleType + type)) cur = cur.parentNode;\n                for(; cur; cur = cur.parentNode){\n                    eventPath.push(cur);\n                    tmp = cur;\n                }\n                // Only add window if we got to document (e.g., not plain obj or detached DOM)\n                if (tmp === (elem.ownerDocument || document)) eventPath.push(tmp.defaultView || tmp.parentWindow || window1);\n            }\n            // Fire handlers on the event path\n            i = 0;\n            while((cur = eventPath[i++]) && !event.isPropagationStopped()){\n                lastElement = cur;\n                event.type = i > 1 ? bubbleType : special.bindType || type;\n                // jQuery handler\n                handle = (dataPriv.get(cur, \"events\") || Object.create(null))[event.type] && dataPriv.get(cur, \"handle\");\n                if (handle) handle.apply(cur, data);\n                // Native handler\n                handle = ontype && cur[ontype];\n                if (handle && handle.apply && acceptData(cur)) {\n                    event.result = handle.apply(cur, data);\n                    if (event.result === false) event.preventDefault();\n                }\n            }\n            event.type = type;\n            // If nobody prevented the default action, do it now\n            if (!onlyHandlers && !event.isDefaultPrevented()) {\n                if ((!special._default || special._default.apply(eventPath.pop(), data) === false) && acceptData(elem)) // Call a native DOM method on the target with the same name as the event.\n                // Don't do default actions on window, that's where global variables be (trac-6170)\n                {\n                    if (ontype && isFunction(elem[type]) && !isWindow(elem)) {\n                        // Don't re-trigger an onFOO event when we call its FOO() method\n                        tmp = elem[ontype];\n                        if (tmp) elem[ontype] = null;\n                        // Prevent re-triggering of the same event, since we already bubbled it above\n                        jQuery.event.triggered = type;\n                        if (event.isPropagationStopped()) lastElement.addEventListener(type, stopPropagationCallback);\n                        elem[type]();\n                        if (event.isPropagationStopped()) lastElement.removeEventListener(type, stopPropagationCallback);\n                        jQuery.event.triggered = undefined;\n                        if (tmp) elem[ontype] = tmp;\n                    }\n                }\n            }\n            return event.result;\n        },\n        // Piggyback on a donor event to simulate a different one\n        // Used only for `focus(in | out)` events\n        simulate: function(type, elem, event) {\n            var e = jQuery.extend(new jQuery.Event(), event, {\n                type: type,\n                isSimulated: true\n            });\n            jQuery.event.trigger(e, null, elem);\n        }\n    });\n    jQuery.fn.extend({\n        trigger: function(type, data) {\n            return this.each(function() {\n                jQuery.event.trigger(type, data, this);\n            });\n        },\n        triggerHandler: function(type, data) {\n            var elem = this[0];\n            if (elem) return jQuery.event.trigger(type, data, elem, true);\n        }\n    });\n    var rbracket = /\\[\\]$/, rCRLF = /\\r?\\n/g, rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, rsubmittable = /^(?:input|select|textarea|keygen)/i;\n    function buildParams(prefix, obj, traditional, add) {\n        var name;\n        if (Array.isArray(obj)) // Serialize array item.\n        jQuery.each(obj, function(i, v) {\n            if (traditional || rbracket.test(prefix)) // Treat each array item as a scalar.\n            add(prefix, v);\n            else // Item is non-scalar (array or object), encode its numeric index.\n            buildParams(prefix + \"[\" + (typeof v === \"object\" && v != null ? i : \"\") + \"]\", v, traditional, add);\n        });\n        else if (!traditional && toType(obj) === \"object\") // Serialize object item.\n        for(name in obj)buildParams(prefix + \"[\" + name + \"]\", obj[name], traditional, add);\n        else // Serialize scalar item.\n        add(prefix, obj);\n    }\n    // Serialize an array of form elements or a set of\n    // key/values into a query string\n    jQuery.param = function(a, traditional) {\n        var prefix, s = [], add = function(key, valueOrFunction) {\n            // If value is a function, invoke it and use its return value\n            var value = isFunction(valueOrFunction) ? valueOrFunction() : valueOrFunction;\n            s[s.length] = encodeURIComponent(key) + \"=\" + encodeURIComponent(value == null ? \"\" : value);\n        };\n        if (a == null) return \"\";\n        // If an array was passed in, assume that it is an array of form elements.\n        if (Array.isArray(a) || a.jquery && !jQuery.isPlainObject(a)) // Serialize the form elements\n        jQuery.each(a, function() {\n            add(this.name, this.value);\n        });\n        else // If traditional, encode the \"old\" way (the way 1.3.2 or older\n        // did it), otherwise encode params recursively.\n        for(prefix in a)buildParams(prefix, a[prefix], traditional, add);\n        // Return the resulting serialization\n        return s.join(\"&\");\n    };\n    jQuery.fn.extend({\n        serialize: function() {\n            return jQuery.param(this.serializeArray());\n        },\n        serializeArray: function() {\n            return this.map(function() {\n                // Can add propHook for \"elements\" to filter or add form elements\n                var elements = jQuery.prop(this, \"elements\");\n                return elements ? jQuery.makeArray(elements) : this;\n            }).filter(function() {\n                var type = this.type;\n                // Use .is( \":disabled\" ) so that fieldset[disabled] works\n                return this.name && !jQuery(this).is(\":disabled\") && rsubmittable.test(this.nodeName) && !rsubmitterTypes.test(type) && (this.checked || !rcheckableType.test(type));\n            }).map(function(_i, elem) {\n                var val = jQuery(this).val();\n                if (val == null) return null;\n                if (Array.isArray(val)) return jQuery.map(val, function(val) {\n                    return {\n                        name: elem.name,\n                        value: val.replace(rCRLF, \"\\r\\n\")\n                    };\n                });\n                return {\n                    name: elem.name,\n                    value: val.replace(rCRLF, \"\\r\\n\")\n                };\n            }).get();\n        }\n    });\n    var r20 = /%20/g, rhash = /#.*$/, rantiCache = /([?&])_=[^&]*/, rheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg, // trac-7653, trac-8125, trac-8152: local protocol detection\n    rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, rnoContent = /^(?:GET|HEAD)$/, rprotocol = /^\\/\\//, /* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t *    - BEFORE asking for a transport\n\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */ prefilters = {}, /* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */ transports = {}, // Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression\n    allTypes = \"*/\".concat(\"*\"), // Anchor tag for parsing the document origin\n    originAnchor = document.createElement(\"a\");\n    originAnchor.href = location.href;\n    // Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\n    function addToPrefiltersOrTransports(structure) {\n        // dataTypeExpression is optional and defaults to \"*\"\n        return function(dataTypeExpression, func) {\n            if (typeof dataTypeExpression !== \"string\") {\n                func = dataTypeExpression;\n                dataTypeExpression = \"*\";\n            }\n            var dataType, i = 0, dataTypes = dataTypeExpression.toLowerCase().match(rnothtmlwhite) || [];\n            if (isFunction(func)) {\n                // For each dataType in the dataTypeExpression\n                while(dataType = dataTypes[i++])// Prepend if requested\n                if (dataType[0] === \"+\") {\n                    dataType = dataType.slice(1) || \"*\";\n                    (structure[dataType] = structure[dataType] || []).unshift(func);\n                // Otherwise append\n                } else (structure[dataType] = structure[dataType] || []).push(func);\n            }\n        };\n    }\n    // Base inspection function for prefilters and transports\n    function inspectPrefiltersOrTransports(structure, options, originalOptions, jqXHR) {\n        var inspected = {}, seekingTransport = structure === transports;\n        function inspect(dataType) {\n            var selected;\n            inspected[dataType] = true;\n            jQuery.each(structure[dataType] || [], function(_, prefilterOrFactory) {\n                var dataTypeOrTransport = prefilterOrFactory(options, originalOptions, jqXHR);\n                if (typeof dataTypeOrTransport === \"string\" && !seekingTransport && !inspected[dataTypeOrTransport]) {\n                    options.dataTypes.unshift(dataTypeOrTransport);\n                    inspect(dataTypeOrTransport);\n                    return false;\n                } else if (seekingTransport) return !(selected = dataTypeOrTransport);\n            });\n            return selected;\n        }\n        return inspect(options.dataTypes[0]) || !inspected[\"*\"] && inspect(\"*\");\n    }\n    // A special extend for ajax options\n    // that takes \"flat\" options (not to be deep extended)\n    // Fixes trac-9887\n    function ajaxExtend(target, src) {\n        var key, deep, flatOptions = jQuery.ajaxSettings.flatOptions || {};\n        for(key in src)if (src[key] !== undefined) (flatOptions[key] ? target : deep || (deep = {}))[key] = src[key];\n        if (deep) jQuery.extend(true, target, deep);\n        return target;\n    }\n    /* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */ function ajaxHandleResponses(s, jqXHR, responses) {\n        var ct, type, finalDataType, firstDataType, contents = s.contents, dataTypes = s.dataTypes;\n        // Remove auto dataType and get content-type in the process\n        while(dataTypes[0] === \"*\"){\n            dataTypes.shift();\n            if (ct === undefined) ct = s.mimeType || jqXHR.getResponseHeader(\"Content-Type\");\n        }\n        // Check if we're dealing with a known content-type\n        if (ct) {\n            for(type in contents)if (contents[type] && contents[type].test(ct)) {\n                dataTypes.unshift(type);\n                break;\n            }\n        }\n        // Check to see if we have a response for the expected dataType\n        if (dataTypes[0] in responses) finalDataType = dataTypes[0];\n        else {\n            // Try convertible dataTypes\n            for(type in responses){\n                if (!dataTypes[0] || s.converters[type + \" \" + dataTypes[0]]) {\n                    finalDataType = type;\n                    break;\n                }\n                if (!firstDataType) firstDataType = type;\n            }\n            // Or just use first one\n            finalDataType = finalDataType || firstDataType;\n        }\n        // If we found a dataType\n        // We add the dataType to the list if needed\n        // and return the corresponding response\n        if (finalDataType) {\n            if (finalDataType !== dataTypes[0]) dataTypes.unshift(finalDataType);\n            return responses[finalDataType];\n        }\n    }\n    /* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */ function ajaxConvert(s, response, jqXHR, isSuccess) {\n        var conv2, current, conv, tmp, prev, converters = {}, // Work with a copy of dataTypes in case we need to modify it for conversion\n        dataTypes = s.dataTypes.slice();\n        // Create converters map with lowercased keys\n        if (dataTypes[1]) for(conv in s.converters)converters[conv.toLowerCase()] = s.converters[conv];\n        current = dataTypes.shift();\n        // Convert to each sequential dataType\n        while(current){\n            if (s.responseFields[current]) jqXHR[s.responseFields[current]] = response;\n            // Apply the dataFilter if provided\n            if (!prev && isSuccess && s.dataFilter) response = s.dataFilter(response, s.dataType);\n            prev = current;\n            current = dataTypes.shift();\n            if (current) {\n                // There's only work to do if current dataType is non-auto\n                if (current === \"*\") current = prev;\n                else if (prev !== \"*\" && prev !== current) {\n                    // Seek a direct converter\n                    conv = converters[prev + \" \" + current] || converters[\"* \" + current];\n                    // If none found, seek a pair\n                    if (!conv) for(conv2 in converters){\n                        // If conv2 outputs current\n                        tmp = conv2.split(\" \");\n                        if (tmp[1] === current) {\n                            // If prev can be converted to accepted input\n                            conv = converters[prev + \" \" + tmp[0]] || converters[\"* \" + tmp[0]];\n                            if (conv) {\n                                // Condense equivalence converters\n                                if (conv === true) conv = converters[conv2];\n                                else if (converters[conv2] !== true) {\n                                    current = tmp[0];\n                                    dataTypes.unshift(tmp[1]);\n                                }\n                                break;\n                            }\n                        }\n                    }\n                    // Apply converter (if not an equivalence)\n                    if (conv !== true) {\n                        // Unless errors are allowed to bubble, catch and return them\n                        if (conv && s.throws) response = conv(response);\n                        else try {\n                            response = conv(response);\n                        } catch (e) {\n                            return {\n                                state: \"parsererror\",\n                                error: conv ? e : \"No conversion from \" + prev + \" to \" + current\n                            };\n                        }\n                    }\n                }\n            }\n        }\n        return {\n            state: \"success\",\n            data: response\n        };\n    }\n    jQuery.extend({\n        // Counter for holding the number of active queries\n        active: 0,\n        // Last-Modified header cache for next request\n        lastModified: {},\n        etag: {},\n        ajaxSettings: {\n            url: location.href,\n            type: \"GET\",\n            isLocal: rlocalProtocol.test(location.protocol),\n            global: true,\n            processData: true,\n            async: true,\n            contentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n            /*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/ accepts: {\n                \"*\": allTypes,\n                text: \"text/plain\",\n                html: \"text/html\",\n                xml: \"application/xml, text/xml\",\n                json: \"application/json, text/javascript\"\n            },\n            contents: {\n                xml: /\\bxml\\b/,\n                html: /\\bhtml/,\n                json: /\\bjson\\b/\n            },\n            responseFields: {\n                xml: \"responseXML\",\n                text: \"responseText\",\n                json: \"responseJSON\"\n            },\n            // Data converters\n            // Keys separate source (or catchall \"*\") and destination types with a single space\n            converters: {\n                // Convert anything to text\n                \"* text\": String,\n                // Text to html (true = no transformation)\n                \"text html\": true,\n                // Evaluate text as a json expression\n                \"text json\": JSON.parse,\n                // Parse text as xml\n                \"text xml\": jQuery.parseXML\n            },\n            // For options that shouldn't be deep extended:\n            // you can add your own custom options here if\n            // and when you create one that shouldn't be\n            // deep extended (see ajaxExtend)\n            flatOptions: {\n                url: true,\n                context: true\n            }\n        },\n        // Creates a full fledged settings object into target\n        // with both ajaxSettings and settings fields.\n        // If target is omitted, writes into ajaxSettings.\n        ajaxSetup: function(target, settings) {\n            return settings ? // Building a settings object\n            ajaxExtend(ajaxExtend(target, jQuery.ajaxSettings), settings) : // Extending ajaxSettings\n            ajaxExtend(jQuery.ajaxSettings, target);\n        },\n        ajaxPrefilter: addToPrefiltersOrTransports(prefilters),\n        ajaxTransport: addToPrefiltersOrTransports(transports),\n        // Main method\n        ajax: function(url, options) {\n            // If url is an object, simulate pre-1.5 signature\n            if (typeof url === \"object\") {\n                options = url;\n                url = undefined;\n            }\n            // Force options to be an object\n            options = options || {};\n            var transport, // URL without anti-cache param\n            cacheURL, // Response headers\n            responseHeadersString, responseHeaders, // timeout handle\n            timeoutTimer, // Url cleanup var\n            urlAnchor, // Request state (becomes false upon send and true upon completion)\n            completed, // To know if global events are to be dispatched\n            fireGlobals, // Loop variable\n            i, // uncached part of the url\n            uncached, // Create the final options object\n            s = jQuery.ajaxSetup({}, options), // Callbacks context\n            callbackContext = s.context || s, // Context for global events is callbackContext if it is a DOM node or jQuery collection\n            globalEventContext = s.context && (callbackContext.nodeType || callbackContext.jquery) ? jQuery(callbackContext) : jQuery.event, // Deferreds\n            deferred = jQuery.Deferred(), completeDeferred = jQuery.Callbacks(\"once memory\"), // Status-dependent callbacks\n            statusCode = s.statusCode || {}, // Headers (they are sent all at once)\n            requestHeaders = {}, requestHeadersNames = {}, // Default abort message\n            strAbort = \"canceled\", // Fake xhr\n            jqXHR = {\n                readyState: 0,\n                // Builds headers hashtable if needed\n                getResponseHeader: function(key) {\n                    var match;\n                    if (completed) {\n                        if (!responseHeaders) {\n                            responseHeaders = {};\n                            while(match = rheaders.exec(responseHeadersString))responseHeaders[match[1].toLowerCase() + \" \"] = (responseHeaders[match[1].toLowerCase() + \" \"] || []).concat(match[2]);\n                        }\n                        match = responseHeaders[key.toLowerCase() + \" \"];\n                    }\n                    return match == null ? null : match.join(\", \");\n                },\n                // Raw string\n                getAllResponseHeaders: function() {\n                    return completed ? responseHeadersString : null;\n                },\n                // Caches the header\n                setRequestHeader: function(name, value) {\n                    if (completed == null) {\n                        name = requestHeadersNames[name.toLowerCase()] = requestHeadersNames[name.toLowerCase()] || name;\n                        requestHeaders[name] = value;\n                    }\n                    return this;\n                },\n                // Overrides response content-type header\n                overrideMimeType: function(type) {\n                    if (completed == null) s.mimeType = type;\n                    return this;\n                },\n                // Status-dependent callbacks\n                statusCode: function(map) {\n                    var code;\n                    if (map) {\n                        if (completed) // Execute the appropriate callbacks\n                        jqXHR.always(map[jqXHR.status]);\n                        else // Lazy-add the new callbacks in a way that preserves old ones\n                        for(code in map)statusCode[code] = [\n                            statusCode[code],\n                            map[code]\n                        ];\n                    }\n                    return this;\n                },\n                // Cancel the request\n                abort: function(statusText) {\n                    var finalText = statusText || strAbort;\n                    if (transport) transport.abort(finalText);\n                    done(0, finalText);\n                    return this;\n                }\n            };\n            // Attach deferreds\n            deferred.promise(jqXHR);\n            // Add protocol if not provided (prefilters might expect it)\n            // Handle falsy url in the settings object (trac-10093: consistency with old signature)\n            // We also use the url parameter if available\n            s.url = ((url || s.url || location.href) + \"\").replace(rprotocol, location.protocol + \"//\");\n            // Alias method option to type as per ticket trac-12004\n            s.type = options.method || options.type || s.method || s.type;\n            // Extract dataTypes list\n            s.dataTypes = (s.dataType || \"*\").toLowerCase().match(rnothtmlwhite) || [\n                \"\"\n            ];\n            // A cross-domain request is in order when the origin doesn't match the current origin.\n            if (s.crossDomain == null) {\n                urlAnchor = document.createElement(\"a\");\n                // Support: IE <=8 - 11, Edge 12 - 15\n                // IE throws exception on accessing the href property if url is malformed,\n                // e.g. http://example.com:80x/\n                try {\n                    urlAnchor.href = s.url;\n                    // Support: IE <=8 - 11 only\n                    // Anchor's host property isn't correctly set when s.url is relative\n                    urlAnchor.href = urlAnchor.href;\n                    s.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !== urlAnchor.protocol + \"//\" + urlAnchor.host;\n                } catch (e) {\n                    // If there is an error parsing the URL, assume it is crossDomain,\n                    // it can be rejected by the transport if it is invalid\n                    s.crossDomain = true;\n                }\n            }\n            // Convert data if not already a string\n            if (s.data && s.processData && typeof s.data !== \"string\") s.data = jQuery.param(s.data, s.traditional);\n            // Apply prefilters\n            inspectPrefiltersOrTransports(prefilters, s, options, jqXHR);\n            // If request was aborted inside a prefilter, stop there\n            if (completed) return jqXHR;\n            // We can fire global events as of now if asked to\n            // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (trac-15118)\n            fireGlobals = jQuery.event && s.global;\n            // Watch for a new set of requests\n            if (fireGlobals && jQuery.active++ === 0) jQuery.event.trigger(\"ajaxStart\");\n            // Uppercase the type\n            s.type = s.type.toUpperCase();\n            // Determine if request has content\n            s.hasContent = !rnoContent.test(s.type);\n            // Save the URL in case we're toying with the If-Modified-Since\n            // and/or If-None-Match header later on\n            // Remove hash to simplify url manipulation\n            cacheURL = s.url.replace(rhash, \"\");\n            // More options handling for requests with no content\n            if (!s.hasContent) {\n                // Remember the hash so we can put it back\n                uncached = s.url.slice(cacheURL.length);\n                // If data is available and should be processed, append data to url\n                if (s.data && (s.processData || typeof s.data === \"string\")) {\n                    cacheURL += (rquery.test(cacheURL) ? \"&\" : \"?\") + s.data;\n                    // trac-9682: remove data so that it's not used in an eventual retry\n                    delete s.data;\n                }\n                // Add or update anti-cache param if needed\n                if (s.cache === false) {\n                    cacheURL = cacheURL.replace(rantiCache, \"$1\");\n                    uncached = (rquery.test(cacheURL) ? \"&\" : \"?\") + \"_=\" + nonce.guid++ + uncached;\n                }\n                // Put hash and anti-cache on the URL that will be requested (gh-1732)\n                s.url = cacheURL + uncached;\n            // Change '%20' to '+' if this is encoded form body content (gh-2658)\n            } else if (s.data && s.processData && (s.contentType || \"\").indexOf(\"application/x-www-form-urlencoded\") === 0) s.data = s.data.replace(r20, \"+\");\n            // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n            if (s.ifModified) {\n                if (jQuery.lastModified[cacheURL]) jqXHR.setRequestHeader(\"If-Modified-Since\", jQuery.lastModified[cacheURL]);\n                if (jQuery.etag[cacheURL]) jqXHR.setRequestHeader(\"If-None-Match\", jQuery.etag[cacheURL]);\n            }\n            // Set the correct header, if data is being sent\n            if (s.data && s.hasContent && s.contentType !== false || options.contentType) jqXHR.setRequestHeader(\"Content-Type\", s.contentType);\n            // Set the Accepts header for the server, depending on the dataType\n            jqXHR.setRequestHeader(\"Accept\", s.dataTypes[0] && s.accepts[s.dataTypes[0]] ? s.accepts[s.dataTypes[0]] + (s.dataTypes[0] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\") : s.accepts[\"*\"]);\n            // Check for headers option\n            for(i in s.headers)jqXHR.setRequestHeader(i, s.headers[i]);\n            // Allow custom headers/mimetypes and early abort\n            if (s.beforeSend && (s.beforeSend.call(callbackContext, jqXHR, s) === false || completed)) // Abort if not done already and return\n            return jqXHR.abort();\n            // Aborting is no longer a cancellation\n            strAbort = \"abort\";\n            // Install callbacks on deferreds\n            completeDeferred.add(s.complete);\n            jqXHR.done(s.success);\n            jqXHR.fail(s.error);\n            // Get transport\n            transport = inspectPrefiltersOrTransports(transports, s, options, jqXHR);\n            // If no transport, we auto-abort\n            if (!transport) done(-1, \"No Transport\");\n            else {\n                jqXHR.readyState = 1;\n                // Send global event\n                if (fireGlobals) globalEventContext.trigger(\"ajaxSend\", [\n                    jqXHR,\n                    s\n                ]);\n                // If request was aborted inside ajaxSend, stop there\n                if (completed) return jqXHR;\n                // Timeout\n                if (s.async && s.timeout > 0) timeoutTimer = window1.setTimeout(function() {\n                    jqXHR.abort(\"timeout\");\n                }, s.timeout);\n                try {\n                    completed = false;\n                    transport.send(requestHeaders, done);\n                } catch (e) {\n                    // Rethrow post-completion exceptions\n                    if (completed) throw e;\n                    // Propagate others as results\n                    done(-1, e);\n                }\n            }\n            // Callback for when everything is done\n            function done(status, nativeStatusText, responses, headers) {\n                var isSuccess, success, error, response, modified, statusText = nativeStatusText;\n                // Ignore repeat invocations\n                if (completed) return;\n                completed = true;\n                // Clear timeout if it exists\n                if (timeoutTimer) window1.clearTimeout(timeoutTimer);\n                // Dereference transport for early garbage collection\n                // (no matter how long the jqXHR object will be used)\n                transport = undefined;\n                // Cache response headers\n                responseHeadersString = headers || \"\";\n                // Set readyState\n                jqXHR.readyState = status > 0 ? 4 : 0;\n                // Determine if successful\n                isSuccess = status >= 200 && status < 300 || status === 304;\n                // Get response data\n                if (responses) response = ajaxHandleResponses(s, jqXHR, responses);\n                // Use a noop converter for missing script but not if jsonp\n                if (!isSuccess && jQuery.inArray(\"script\", s.dataTypes) > -1 && jQuery.inArray(\"json\", s.dataTypes) < 0) s.converters[\"text script\"] = function() {};\n                // Convert no matter what (that way responseXXX fields are always set)\n                response = ajaxConvert(s, response, jqXHR, isSuccess);\n                // If successful, handle type chaining\n                if (isSuccess) {\n                    // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n                    if (s.ifModified) {\n                        modified = jqXHR.getResponseHeader(\"Last-Modified\");\n                        if (modified) jQuery.lastModified[cacheURL] = modified;\n                        modified = jqXHR.getResponseHeader(\"etag\");\n                        if (modified) jQuery.etag[cacheURL] = modified;\n                    }\n                    // if no content\n                    if (status === 204 || s.type === \"HEAD\") statusText = \"nocontent\";\n                    else if (status === 304) statusText = \"notmodified\";\n                    else {\n                        statusText = response.state;\n                        success = response.data;\n                        error = response.error;\n                        isSuccess = !error;\n                    }\n                } else {\n                    // Extract error from statusText and normalize for non-aborts\n                    error = statusText;\n                    if (status || !statusText) {\n                        statusText = \"error\";\n                        if (status < 0) status = 0;\n                    }\n                }\n                // Set data for the fake xhr object\n                jqXHR.status = status;\n                jqXHR.statusText = (nativeStatusText || statusText) + \"\";\n                // Success/Error\n                if (isSuccess) deferred.resolveWith(callbackContext, [\n                    success,\n                    statusText,\n                    jqXHR\n                ]);\n                else deferred.rejectWith(callbackContext, [\n                    jqXHR,\n                    statusText,\n                    error\n                ]);\n                // Status-dependent callbacks\n                jqXHR.statusCode(statusCode);\n                statusCode = undefined;\n                if (fireGlobals) globalEventContext.trigger(isSuccess ? \"ajaxSuccess\" : \"ajaxError\", [\n                    jqXHR,\n                    s,\n                    isSuccess ? success : error\n                ]);\n                // Complete\n                completeDeferred.fireWith(callbackContext, [\n                    jqXHR,\n                    statusText\n                ]);\n                if (fireGlobals) {\n                    globalEventContext.trigger(\"ajaxComplete\", [\n                        jqXHR,\n                        s\n                    ]);\n                    // Handle the global AJAX counter\n                    if (!--jQuery.active) jQuery.event.trigger(\"ajaxStop\");\n                }\n            }\n            return jqXHR;\n        },\n        getJSON: function(url, data, callback) {\n            return jQuery.get(url, data, callback, \"json\");\n        },\n        getScript: function(url, callback) {\n            return jQuery.get(url, undefined, callback, \"script\");\n        }\n    });\n    jQuery.each([\n        \"get\",\n        \"post\"\n    ], function(_i, method) {\n        jQuery[method] = function(url, data, callback, type) {\n            // Shift arguments if data argument was omitted\n            if (isFunction(data)) {\n                type = type || callback;\n                callback = data;\n                data = undefined;\n            }\n            // The url can be an options object (which then must have .url)\n            return jQuery.ajax(jQuery.extend({\n                url: url,\n                type: method,\n                dataType: type,\n                data: data,\n                success: callback\n            }, jQuery.isPlainObject(url) && url));\n        };\n    });\n    jQuery.ajaxPrefilter(function(s) {\n        var i;\n        for(i in s.headers)if (i.toLowerCase() === \"content-type\") s.contentType = s.headers[i] || \"\";\n    });\n    jQuery._evalUrl = function(url, options, doc) {\n        return jQuery.ajax({\n            url: url,\n            // Make this explicit, since user can override this through ajaxSetup (trac-11264)\n            type: \"GET\",\n            dataType: \"script\",\n            cache: true,\n            async: false,\n            global: false,\n            // Only evaluate the response if it is successful (gh-4126)\n            // dataFilter is not invoked for failure responses, so using it instead\n            // of the default converter is kludgy but it works.\n            converters: {\n                \"text script\": function() {}\n            },\n            dataFilter: function(response) {\n                jQuery.globalEval(response, options, doc);\n            }\n        });\n    };\n    jQuery.fn.extend({\n        wrapAll: function(html) {\n            var wrap;\n            if (this[0]) {\n                if (isFunction(html)) html = html.call(this[0]);\n                // The elements to wrap the target around\n                wrap = jQuery(html, this[0].ownerDocument).eq(0).clone(true);\n                if (this[0].parentNode) wrap.insertBefore(this[0]);\n                wrap.map(function() {\n                    var elem = this;\n                    while(elem.firstElementChild)elem = elem.firstElementChild;\n                    return elem;\n                }).append(this);\n            }\n            return this;\n        },\n        wrapInner: function(html) {\n            if (isFunction(html)) return this.each(function(i) {\n                jQuery(this).wrapInner(html.call(this, i));\n            });\n            return this.each(function() {\n                var self = jQuery(this), contents = self.contents();\n                if (contents.length) contents.wrapAll(html);\n                else self.append(html);\n            });\n        },\n        wrap: function(html) {\n            var htmlIsFunction = isFunction(html);\n            return this.each(function(i) {\n                jQuery(this).wrapAll(htmlIsFunction ? html.call(this, i) : html);\n            });\n        },\n        unwrap: function(selector) {\n            this.parent(selector).not(\"body\").each(function() {\n                jQuery(this).replaceWith(this.childNodes);\n            });\n            return this;\n        }\n    });\n    jQuery.expr.pseudos.hidden = function(elem) {\n        return !jQuery.expr.pseudos.visible(elem);\n    };\n    jQuery.expr.pseudos.visible = function(elem) {\n        return !!(elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length);\n    };\n    jQuery.ajaxSettings.xhr = function() {\n        try {\n            return new window1.XMLHttpRequest();\n        } catch (e) {}\n    };\n    var xhrSuccessStatus = {\n        // File protocol always yields status code 0, assume 200\n        0: 200,\n        // Support: IE <=9 only\n        // trac-1450: sometimes IE returns 1223 when it should be 204\n        1223: 204\n    }, xhrSupported = jQuery.ajaxSettings.xhr();\n    support.cors = !!xhrSupported && \"withCredentials\" in xhrSupported;\n    support.ajax = xhrSupported = !!xhrSupported;\n    jQuery.ajaxTransport(function(options) {\n        var callback, errorCallback;\n        // Cross domain only allowed if supported through XMLHttpRequest\n        if (support.cors || xhrSupported && !options.crossDomain) return {\n            send: function(headers, complete) {\n                var i, xhr = options.xhr();\n                xhr.open(options.type, options.url, options.async, options.username, options.password);\n                // Apply custom fields if provided\n                if (options.xhrFields) for(i in options.xhrFields)xhr[i] = options.xhrFields[i];\n                // Override mime type if needed\n                if (options.mimeType && xhr.overrideMimeType) xhr.overrideMimeType(options.mimeType);\n                // X-Requested-With header\n                // For cross-domain requests, seeing as conditions for a preflight are\n                // akin to a jigsaw puzzle, we simply never set it to be sure.\n                // (it can always be set on a per-request basis or even using ajaxSetup)\n                // For same-domain requests, won't change header if already provided.\n                if (!options.crossDomain && !headers[\"X-Requested-With\"]) headers[\"X-Requested-With\"] = \"XMLHttpRequest\";\n                // Set headers\n                for(i in headers)xhr.setRequestHeader(i, headers[i]);\n                // Callback\n                callback = function(type) {\n                    return function() {\n                        if (callback) {\n                            callback = errorCallback = xhr.onload = xhr.onerror = xhr.onabort = xhr.ontimeout = xhr.onreadystatechange = null;\n                            if (type === \"abort\") xhr.abort();\n                            else if (type === \"error\") {\n                                // Support: IE <=9 only\n                                // On a manual native abort, IE9 throws\n                                // errors on any property access that is not readyState\n                                if (typeof xhr.status !== \"number\") complete(0, \"error\");\n                                else complete(// File: protocol always yields status 0; see trac-8605, trac-14207\n                                xhr.status, xhr.statusText);\n                            } else complete(xhrSuccessStatus[xhr.status] || xhr.status, xhr.statusText, // Support: IE <=9 only\n                            // IE9 has no XHR2 but throws on binary (trac-11426)\n                            // For XHR2 non-text, let the caller handle it (gh-2498)\n                            (xhr.responseType || \"text\") !== \"text\" || typeof xhr.responseText !== \"string\" ? {\n                                binary: xhr.response\n                            } : {\n                                text: xhr.responseText\n                            }, xhr.getAllResponseHeaders());\n                        }\n                    };\n                };\n                // Listen to events\n                xhr.onload = callback();\n                errorCallback = xhr.onerror = xhr.ontimeout = callback(\"error\");\n                // Support: IE 9 only\n                // Use onreadystatechange to replace onabort\n                // to handle uncaught aborts\n                if (xhr.onabort !== undefined) xhr.onabort = errorCallback;\n                else xhr.onreadystatechange = function() {\n                    // Check readyState before timeout as it changes\n                    if (xhr.readyState === 4) // Allow onerror to be called first,\n                    // but that will not handle a native abort\n                    // Also, save errorCallback to a variable\n                    // as xhr.onerror cannot be accessed\n                    window1.setTimeout(function() {\n                        if (callback) errorCallback();\n                    });\n                };\n                // Create the abort callback\n                callback = callback(\"abort\");\n                try {\n                    // Do send the request (this may raise an exception)\n                    xhr.send(options.hasContent && options.data || null);\n                } catch (e) {\n                    // trac-14683: Only rethrow if this hasn't been notified as an error yet\n                    if (callback) throw e;\n                }\n            },\n            abort: function() {\n                if (callback) callback();\n            }\n        };\n    });\n    // Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\n    jQuery.ajaxPrefilter(function(s) {\n        if (s.crossDomain) s.contents.script = false;\n    });\n    // Install script dataType\n    jQuery.ajaxSetup({\n        accepts: {\n            script: \"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"\n        },\n        contents: {\n            script: /\\b(?:java|ecma)script\\b/\n        },\n        converters: {\n            \"text script\": function(text) {\n                jQuery.globalEval(text);\n                return text;\n            }\n        }\n    });\n    // Handle cache's special case and crossDomain\n    jQuery.ajaxPrefilter(\"script\", function(s) {\n        if (s.cache === undefined) s.cache = false;\n        if (s.crossDomain) s.type = \"GET\";\n    });\n    // Bind script tag hack transport\n    jQuery.ajaxTransport(\"script\", function(s) {\n        // This transport only deals with cross domain or forced-by-attrs requests\n        if (s.crossDomain || s.scriptAttrs) {\n            var script, callback;\n            return {\n                send: function(_, complete) {\n                    script = jQuery(\"<script>\").attr(s.scriptAttrs || {}).prop({\n                        charset: s.scriptCharset,\n                        src: s.url\n                    }).on(\"load error\", callback = function(evt) {\n                        script.remove();\n                        callback = null;\n                        if (evt) complete(evt.type === \"error\" ? 404 : 200, evt.type);\n                    });\n                    // Use native DOM manipulation to avoid our domManip AJAX trickery\n                    document.head.appendChild(script[0]);\n                },\n                abort: function() {\n                    if (callback) callback();\n                }\n            };\n        }\n    });\n    var oldCallbacks = [], rjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n    // Default jsonp settings\n    jQuery.ajaxSetup({\n        jsonp: \"callback\",\n        jsonpCallback: function() {\n            var callback = oldCallbacks.pop() || jQuery.expando + \"_\" + nonce.guid++;\n            this[callback] = true;\n            return callback;\n        }\n    });\n    // Detect, normalize options and install callbacks for jsonp requests\n    jQuery.ajaxPrefilter(\"json jsonp\", function(s, originalSettings, jqXHR) {\n        var callbackName, overwritten, responseContainer, jsonProp = s.jsonp !== false && (rjsonp.test(s.url) ? \"url\" : typeof s.data === \"string\" && (s.contentType || \"\").indexOf(\"application/x-www-form-urlencoded\") === 0 && rjsonp.test(s.data) && \"data\");\n        // Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n        if (jsonProp || s.dataTypes[0] === \"jsonp\") {\n            // Get callback name, remembering preexisting value associated with it\n            callbackName = s.jsonpCallback = isFunction(s.jsonpCallback) ? s.jsonpCallback() : s.jsonpCallback;\n            // Insert callback into url or form data\n            if (jsonProp) s[jsonProp] = s[jsonProp].replace(rjsonp, \"$1\" + callbackName);\n            else if (s.jsonp !== false) s.url += (rquery.test(s.url) ? \"&\" : \"?\") + s.jsonp + \"=\" + callbackName;\n            // Use data converter to retrieve json after script execution\n            s.converters[\"script json\"] = function() {\n                if (!responseContainer) jQuery.error(callbackName + \" was not called\");\n                return responseContainer[0];\n            };\n            // Force json dataType\n            s.dataTypes[0] = \"json\";\n            // Install callback\n            overwritten = window1[callbackName];\n            window1[callbackName] = function() {\n                responseContainer = arguments;\n            };\n            // Clean-up function (fires after converters)\n            jqXHR.always(function() {\n                // If previous value didn't exist - remove it\n                if (overwritten === undefined) jQuery(window1).removeProp(callbackName);\n                else window1[callbackName] = overwritten;\n                // Save back as free\n                if (s[callbackName]) {\n                    // Make sure that re-using the options doesn't screw things around\n                    s.jsonpCallback = originalSettings.jsonpCallback;\n                    // Save the callback name for future use\n                    oldCallbacks.push(callbackName);\n                }\n                // Call if it was a function and we have a response\n                if (responseContainer && isFunction(overwritten)) overwritten(responseContainer[0]);\n                responseContainer = overwritten = undefined;\n            });\n            // Delegate to script\n            return \"script\";\n        }\n    });\n    // Support: Safari 8 only\n    // In Safari 8 documents created via document.implementation.createHTMLDocument\n    // collapse sibling forms: the second one becomes a child of the first one.\n    // Because of that, this security measure has to be disabled in Safari 8.\n    // https://bugs.webkit.org/show_bug.cgi?id=137337\n    support.createHTMLDocument = function() {\n        var body = document.implementation.createHTMLDocument(\"\").body;\n        body.innerHTML = \"<form></form><form></form>\";\n        return body.childNodes.length === 2;\n    }();\n    // Argument \"data\" should be string of html\n    // context (optional): If specified, the fragment will be created in this context,\n    // defaults to document\n    // keepScripts (optional): If true, will include scripts passed in the html string\n    jQuery.parseHTML = function(data, context, keepScripts) {\n        if (typeof data !== \"string\") return [];\n        if (typeof context === \"boolean\") {\n            keepScripts = context;\n            context = false;\n        }\n        var base, parsed, scripts;\n        if (!context) {\n            // Stop scripts or inline event handlers from being executed immediately\n            // by using document.implementation\n            if (support.createHTMLDocument) {\n                context = document.implementation.createHTMLDocument(\"\");\n                // Set the base href for the created document\n                // so any parsed elements with URLs\n                // are based on the document's URL (gh-2965)\n                base = context.createElement(\"base\");\n                base.href = document.location.href;\n                context.head.appendChild(base);\n            } else context = document;\n        }\n        parsed = rsingleTag.exec(data);\n        scripts = !keepScripts && [];\n        // Single tag\n        if (parsed) return [\n            context.createElement(parsed[1])\n        ];\n        parsed = buildFragment([\n            data\n        ], context, scripts);\n        if (scripts && scripts.length) jQuery(scripts).remove();\n        return jQuery.merge([], parsed.childNodes);\n    };\n    /**\n * Load a url into a page\n */ jQuery.fn.load = function(url, params, callback) {\n        var selector, type, response, self = this, off = url.indexOf(\" \");\n        if (off > -1) {\n            selector = stripAndCollapse(url.slice(off));\n            url = url.slice(0, off);\n        }\n        // If it's a function\n        if (isFunction(params)) {\n            // We assume that it's the callback\n            callback = params;\n            params = undefined;\n        // Otherwise, build a param string\n        } else if (params && typeof params === \"object\") type = \"POST\";\n        // If we have elements to modify, make the request\n        if (self.length > 0) jQuery.ajax({\n            url: url,\n            // If \"type\" variable is undefined, then \"GET\" method will be used.\n            // Make value of this field explicit since\n            // user can override it through ajaxSetup method\n            type: type || \"GET\",\n            dataType: \"html\",\n            data: params\n        }).done(function(responseText) {\n            // Save response for use in complete callback\n            response = arguments;\n            self.html(selector ? // If a selector was specified, locate the right elements in a dummy div\n            // Exclude scripts to avoid IE 'Permission Denied' errors\n            jQuery(\"<div>\").append(jQuery.parseHTML(responseText)).find(selector) : // Otherwise use the full result\n            responseText);\n        // If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n        // but they are ignored because response was set above.\n        // If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n        }).always(callback && function(jqXHR, status) {\n            self.each(function() {\n                callback.apply(this, response || [\n                    jqXHR.responseText,\n                    status,\n                    jqXHR\n                ]);\n            });\n        });\n        return this;\n    };\n    jQuery.expr.pseudos.animated = function(elem) {\n        return jQuery.grep(jQuery.timers, function(fn) {\n            return elem === fn.elem;\n        }).length;\n    };\n    jQuery.offset = {\n        setOffset: function(elem, options, i) {\n            var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition, position = jQuery.css(elem, \"position\"), curElem = jQuery(elem), props = {};\n            // Set position first, in-case top/left are set even on static elem\n            if (position === \"static\") elem.style.position = \"relative\";\n            curOffset = curElem.offset();\n            curCSSTop = jQuery.css(elem, \"top\");\n            curCSSLeft = jQuery.css(elem, \"left\");\n            calculatePosition = (position === \"absolute\" || position === \"fixed\") && (curCSSTop + curCSSLeft).indexOf(\"auto\") > -1;\n            // Need to be able to calculate position if either\n            // top or left is auto and position is either absolute or fixed\n            if (calculatePosition) {\n                curPosition = curElem.position();\n                curTop = curPosition.top;\n                curLeft = curPosition.left;\n            } else {\n                curTop = parseFloat(curCSSTop) || 0;\n                curLeft = parseFloat(curCSSLeft) || 0;\n            }\n            if (isFunction(options)) // Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n            options = options.call(elem, i, jQuery.extend({}, curOffset));\n            if (options.top != null) props.top = options.top - curOffset.top + curTop;\n            if (options.left != null) props.left = options.left - curOffset.left + curLeft;\n            if (\"using\" in options) options.using.call(elem, props);\n            else curElem.css(props);\n        }\n    };\n    jQuery.fn.extend({\n        // offset() relates an element's border box to the document origin\n        offset: function(options) {\n            // Preserve chaining for setter\n            if (arguments.length) return options === undefined ? this : this.each(function(i) {\n                jQuery.offset.setOffset(this, options, i);\n            });\n            var rect, win, elem = this[0];\n            if (!elem) return;\n            // Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n            // Support: IE <=11 only\n            // Running getBoundingClientRect on a\n            // disconnected node in IE throws an error\n            if (!elem.getClientRects().length) return {\n                top: 0,\n                left: 0\n            };\n            // Get document-relative position by adding viewport scroll to viewport-relative gBCR\n            rect = elem.getBoundingClientRect();\n            win = elem.ownerDocument.defaultView;\n            return {\n                top: rect.top + win.pageYOffset,\n                left: rect.left + win.pageXOffset\n            };\n        },\n        // position() relates an element's margin box to its offset parent's padding box\n        // This corresponds to the behavior of CSS absolute positioning\n        position: function() {\n            if (!this[0]) return;\n            var offsetParent, offset, doc, elem = this[0], parentOffset = {\n                top: 0,\n                left: 0\n            };\n            // position:fixed elements are offset from the viewport, which itself always has zero offset\n            if (jQuery.css(elem, \"position\") === \"fixed\") // Assume position:fixed implies availability of getBoundingClientRect\n            offset = elem.getBoundingClientRect();\n            else {\n                offset = this.offset();\n                // Account for the *real* offset parent, which can be the document or its root element\n                // when a statically positioned element is identified\n                doc = elem.ownerDocument;\n                offsetParent = elem.offsetParent || doc.documentElement;\n                while(offsetParent && (offsetParent === doc.body || offsetParent === doc.documentElement) && jQuery.css(offsetParent, \"position\") === \"static\")offsetParent = offsetParent.parentNode;\n                if (offsetParent && offsetParent !== elem && offsetParent.nodeType === 1) {\n                    // Incorporate borders into its offset, since they are outside its content origin\n                    parentOffset = jQuery(offsetParent).offset();\n                    parentOffset.top += jQuery.css(offsetParent, \"borderTopWidth\", true);\n                    parentOffset.left += jQuery.css(offsetParent, \"borderLeftWidth\", true);\n                }\n            }\n            // Subtract parent offsets and element margins\n            return {\n                top: offset.top - parentOffset.top - jQuery.css(elem, \"marginTop\", true),\n                left: offset.left - parentOffset.left - jQuery.css(elem, \"marginLeft\", true)\n            };\n        },\n        // This method will return documentElement in the following cases:\n        // 1) For the element inside the iframe without offsetParent, this method will return\n        //    documentElement of the parent window\n        // 2) For the hidden or detached element\n        // 3) For body or html element, i.e. in case of the html node - it will return itself\n        //\n        // but those exceptions were never presented as a real life use-cases\n        // and might be considered as more preferable results.\n        //\n        // This logic, however, is not guaranteed and can change at any point in the future\n        offsetParent: function() {\n            return this.map(function() {\n                var offsetParent = this.offsetParent;\n                while(offsetParent && jQuery.css(offsetParent, \"position\") === \"static\")offsetParent = offsetParent.offsetParent;\n                return offsetParent || documentElement;\n            });\n        }\n    });\n    // Create scrollLeft and scrollTop methods\n    jQuery.each({\n        scrollLeft: \"pageXOffset\",\n        scrollTop: \"pageYOffset\"\n    }, function(method, prop) {\n        var top = \"pageYOffset\" === prop;\n        jQuery.fn[method] = function(val) {\n            return access(this, function(elem, method, val) {\n                // Coalesce documents and windows\n                var win;\n                if (isWindow(elem)) win = elem;\n                else if (elem.nodeType === 9) win = elem.defaultView;\n                if (val === undefined) return win ? win[prop] : elem[method];\n                if (win) win.scrollTo(!top ? val : win.pageXOffset, top ? val : win.pageYOffset);\n                else elem[method] = val;\n            }, method, val, arguments.length);\n        };\n    });\n    // Support: Safari <=7 - 9.1, Chrome <=37 - 49\n    // Add the top/left cssHooks using jQuery.fn.position\n    // Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n    // Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347\n    // getComputedStyle returns percent when specified for top/left/bottom/right;\n    // rather than make the css module depend on the offset module, just check for it here\n    jQuery.each([\n        \"top\",\n        \"left\"\n    ], function(_i, prop) {\n        jQuery.cssHooks[prop] = addGetHookIf(support.pixelPosition, function(elem, computed) {\n            if (computed) {\n                computed = curCSS(elem, prop);\n                // If curCSS returns percentage, fallback to offset\n                return rnumnonpx.test(computed) ? jQuery(elem).position()[prop] + \"px\" : computed;\n            }\n        });\n    });\n    // Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\n    jQuery.each({\n        Height: \"height\",\n        Width: \"width\"\n    }, function(name, type) {\n        jQuery.each({\n            padding: \"inner\" + name,\n            content: type,\n            \"\": \"outer\" + name\n        }, function(defaultExtra, funcName) {\n            // Margin is only for outerHeight, outerWidth\n            jQuery.fn[funcName] = function(margin, value) {\n                var chainable = arguments.length && (defaultExtra || typeof margin !== \"boolean\"), extra = defaultExtra || (margin === true || value === true ? \"margin\" : \"border\");\n                return access(this, function(elem, type, value) {\n                    var doc;\n                    if (isWindow(elem)) // $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n                    return funcName.indexOf(\"outer\") === 0 ? elem[\"inner\" + name] : elem.document.documentElement[\"client\" + name];\n                    // Get document width or height\n                    if (elem.nodeType === 9) {\n                        doc = elem.documentElement;\n                        // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n                        // whichever is greatest\n                        return Math.max(elem.body[\"scroll\" + name], doc[\"scroll\" + name], elem.body[\"offset\" + name], doc[\"offset\" + name], doc[\"client\" + name]);\n                    }\n                    return value === undefined ? // Get width or height on the element, requesting but not forcing parseFloat\n                    jQuery.css(elem, type, extra) : // Set width or height on the element\n                    jQuery.style(elem, type, value, extra);\n                }, type, chainable ? margin : undefined, chainable);\n            };\n        });\n    });\n    jQuery.each([\n        \"ajaxStart\",\n        \"ajaxStop\",\n        \"ajaxComplete\",\n        \"ajaxError\",\n        \"ajaxSuccess\",\n        \"ajaxSend\"\n    ], function(_i, type) {\n        jQuery.fn[type] = function(fn) {\n            return this.on(type, fn);\n        };\n    });\n    jQuery.fn.extend({\n        bind: function(types, data, fn) {\n            return this.on(types, null, data, fn);\n        },\n        unbind: function(types, fn) {\n            return this.off(types, null, fn);\n        },\n        delegate: function(selector, types, data, fn) {\n            return this.on(types, selector, data, fn);\n        },\n        undelegate: function(selector, types, fn) {\n            // ( namespace ) or ( selector, types [, fn] )\n            return arguments.length === 1 ? this.off(selector, \"**\") : this.off(types, selector || \"**\", fn);\n        },\n        hover: function(fnOver, fnOut) {\n            return this.on(\"mouseenter\", fnOver).on(\"mouseleave\", fnOut || fnOver);\n        }\n    });\n    jQuery.each(\"blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu\".split(\" \"), function(_i, name) {\n        // Handle event binding\n        jQuery.fn[name] = function(data, fn) {\n            return arguments.length > 0 ? this.on(name, null, data, fn) : this.trigger(name);\n        };\n    });\n    // Support: Android <=4.0 only\n    // Make sure we trim BOM and NBSP\n    // Require that the \"whitespace run\" starts from a non-whitespace\n    // to avoid O(N^2) behavior when the engine would try matching \"\\s+$\" at each space position.\n    var rtrim = /^[\\s\\uFEFF\\xA0]+|([^\\s\\uFEFF\\xA0])[\\s\\uFEFF\\xA0]+$/g;\n    // Bind a function to a context, optionally partially applying any\n    // arguments.\n    // jQuery.proxy is deprecated to promote standards (specifically Function#bind)\n    // However, it is not slated for removal any time soon\n    jQuery.proxy = function(fn, context) {\n        var tmp, args, proxy;\n        if (typeof context === \"string\") {\n            tmp = fn[context];\n            context = fn;\n            fn = tmp;\n        }\n        // Quick check to determine if target is callable, in the spec\n        // this throws a TypeError, but we will just return undefined.\n        if (!isFunction(fn)) return undefined;\n        // Simulated bind\n        args = slice.call(arguments, 2);\n        proxy = function() {\n            return fn.apply(context || this, args.concat(slice.call(arguments)));\n        };\n        // Set the guid of unique handler to the same of original handler, so it can be removed\n        proxy.guid = fn.guid = fn.guid || jQuery.guid++;\n        return proxy;\n    };\n    jQuery.holdReady = function(hold) {\n        if (hold) jQuery.readyWait++;\n        else jQuery.ready(true);\n    };\n    jQuery.isArray = Array.isArray;\n    jQuery.parseJSON = JSON.parse;\n    jQuery.nodeName = nodeName;\n    jQuery.isFunction = isFunction;\n    jQuery.isWindow = isWindow;\n    jQuery.camelCase = camelCase;\n    jQuery.type = toType;\n    jQuery.now = Date.now;\n    jQuery.isNumeric = function(obj) {\n        // As of jQuery 3.0, isNumeric is limited to\n        // strings and numbers (primitives or objects)\n        // that can be coerced to finite numbers (gh-2662)\n        var type = jQuery.type(obj);\n        return (type === \"number\" || type === \"string\") && // parseFloat NaNs numeric-cast false positives (\"\")\n        // ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n        // subtraction forces infinities to NaN\n        !isNaN(obj - parseFloat(obj));\n    };\n    jQuery.trim = function(text) {\n        return text == null ? \"\" : (text + \"\").replace(rtrim, \"$1\");\n    };\n    // Register as a named AMD module, since jQuery can be concatenated with other\n    // files that may use define, but not via a proper concatenation script that\n    // understands anonymous AMD modules. A named AMD is safest and most robust\n    // way to register. Lowercase jquery is used because AMD module names are\n    // derived from file names, and jQuery is normally delivered in a lowercase\n    // file name. Do this after creating the global so that if an AMD module wants\n    // to call noConflict to hide this version of jQuery, it will work.\n    // Note that for maximum portability, libraries that are not jQuery should\n    // declare themselves as anonymous modules, and avoid setting a global if an\n    // AMD loader is present. jQuery is a special case. For more information, see\n    // https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n    if (typeof define === \"function\" && define.amd) define(\"jquery\", [], function() {\n        return jQuery;\n    });\n    var // Map over jQuery in case of overwrite\n    _jQuery = window1.jQuery, // Map over the $ in case of overwrite\n    _$ = window1.$;\n    jQuery.noConflict = function(deep) {\n        if (window1.$ === jQuery) window1.$ = _$;\n        if (deep && window1.jQuery === jQuery) window1.jQuery = _jQuery;\n        return jQuery;\n    };\n    // Expose jQuery and $ identifiers, even in AMD\n    // (trac-7102#comment:10, https://github.com/jquery/jquery/pull/557)\n    // and CommonJS for browser emulators (trac-13566)\n    if (typeof noGlobal === \"undefined\") window1.jQuery = window1.$ = jQuery;\n    return jQuery;\n});\n\n});\n\n\nvar $iUSsr = parcelRequire(\"iUSsr\");\n\nvar $227e14c8e58ba555$exports = {};\n\n/*!\n  * Bootstrap v4.6.2 (https://getbootstrap.com/)\n  * Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n  */ (function(global1, factory) {\n    factory($227e14c8e58ba555$exports, (parcelRequire(\"iUSsr\")));\n})($227e14c8e58ba555$exports, function(exports1, $) {\n    'use strict';\n    function _interopDefaultLegacy(e) {\n        return e && typeof e === 'object' && 'default' in e ? e : {\n            'default': e\n        };\n    }\n    var $__default = /*#__PURE__*/ _interopDefaultLegacy($);\n    function _defineProperties(target, props) {\n        for(var i = 0; i < props.length; i++){\n            var descriptor = props[i];\n            descriptor.enumerable = descriptor.enumerable || false;\n            descriptor.configurable = true;\n            if (\"value\" in descriptor) descriptor.writable = true;\n            Object.defineProperty(target, descriptor.key, descriptor);\n        }\n    }\n    function _createClass(Constructor, protoProps, staticProps) {\n        if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n        if (staticProps) _defineProperties(Constructor, staticProps);\n        Object.defineProperty(Constructor, \"prototype\", {\n            writable: false\n        });\n        return Constructor;\n    }\n    function _extends$1() {\n        _extends$1 = Object.assign ? Object.assign.bind() : function(target) {\n            for(var i = 1; i < arguments.length; i++){\n                var source = arguments[i];\n                for(var key in source)if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];\n            }\n            return target;\n        };\n        return _extends$1.apply(this, arguments);\n    }\n    function _inheritsLoose(subClass, superClass) {\n        subClass.prototype = Object.create(superClass.prototype);\n        subClass.prototype.constructor = subClass;\n        _setPrototypeOf(subClass, superClass);\n    }\n    function _setPrototypeOf(o, p) {\n        _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {\n            o.__proto__ = p;\n            return o;\n        };\n        return _setPrototypeOf(o, p);\n    }\n    /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v4.6.2): util.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */ /**\n   * Private TransitionEnd Helpers\n   */ var TRANSITION_END = 'transitionend';\n    var MAX_UID = 1000000;\n    var MILLISECONDS_MULTIPLIER = 1000; // Shoutout AngusCroll (https://goo.gl/pxwQGp)\n    function toType(obj) {\n        if (obj === null || typeof obj === 'undefined') return \"\" + obj;\n        return ({}).toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase();\n    }\n    function getSpecialTransitionEndEvent() {\n        return {\n            bindType: TRANSITION_END,\n            delegateType: TRANSITION_END,\n            handle: function handle(event) {\n                if ($__default[\"default\"](event.target).is(this)) return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params\n                return undefined;\n            }\n        };\n    }\n    function transitionEndEmulator(duration) {\n        var _this = this;\n        var called = false;\n        $__default[\"default\"](this).one(Util.TRANSITION_END, function() {\n            called = true;\n        });\n        setTimeout(function() {\n            if (!called) Util.triggerTransitionEnd(_this);\n        }, duration);\n        return this;\n    }\n    function setTransitionEndSupport() {\n        $__default[\"default\"].fn.emulateTransitionEnd = transitionEndEmulator;\n        $__default[\"default\"].event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent();\n    }\n    /**\n   * Public Util API\n   */ var Util = {\n        TRANSITION_END: 'bsTransitionEnd',\n        getUID: function getUID(prefix) {\n            do // eslint-disable-next-line no-bitwise\n            prefix += ~~(Math.random() * MAX_UID); // \"~~\" acts like a faster Math.floor() here\n            while (document.getElementById(prefix));\n            return prefix;\n        },\n        getSelectorFromElement: function getSelectorFromElement(element) {\n            var selector = element.getAttribute('data-target');\n            if (!selector || selector === '#') {\n                var hrefAttr = element.getAttribute('href');\n                selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : '';\n            }\n            try {\n                return document.querySelector(selector) ? selector : null;\n            } catch (_) {\n                return null;\n            }\n        },\n        getTransitionDurationFromElement: function getTransitionDurationFromElement(element) {\n            if (!element) return 0;\n             // Get transition-duration of the element\n            var transitionDuration = $__default[\"default\"](element).css('transition-duration');\n            var transitionDelay = $__default[\"default\"](element).css('transition-delay');\n            var floatTransitionDuration = parseFloat(transitionDuration);\n            var floatTransitionDelay = parseFloat(transitionDelay); // Return 0 if element or transition duration is not found\n            if (!floatTransitionDuration && !floatTransitionDelay) return 0;\n             // If multiple durations are defined, take the first\n            transitionDuration = transitionDuration.split(',')[0];\n            transitionDelay = transitionDelay.split(',')[0];\n            return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n        },\n        reflow: function reflow(element) {\n            return element.offsetHeight;\n        },\n        triggerTransitionEnd: function triggerTransitionEnd(element) {\n            $__default[\"default\"](element).trigger(TRANSITION_END);\n        },\n        supportsTransitionEnd: function supportsTransitionEnd() {\n            return Boolean(TRANSITION_END);\n        },\n        isElement: function isElement(obj) {\n            return (obj[0] || obj).nodeType;\n        },\n        typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) {\n            for(var property in configTypes)if (Object.prototype.hasOwnProperty.call(configTypes, property)) {\n                var expectedTypes = configTypes[property];\n                var value = config[property];\n                var valueType = value && Util.isElement(value) ? 'element' : toType(value);\n                if (!new RegExp(expectedTypes).test(valueType)) throw new Error(componentName.toUpperCase() + \": \" + (\"Option \\\"\" + property + \"\\\" provided type \\\"\" + valueType + \"\\\" \") + (\"but expected type \\\"\" + expectedTypes + \"\\\".\"));\n            }\n        },\n        findShadowRoot: function findShadowRoot(element) {\n            if (!document.documentElement.attachShadow) return null;\n             // Can find the shadow root otherwise it'll return the document\n            if (typeof element.getRootNode === 'function') {\n                var root = element.getRootNode();\n                return root instanceof ShadowRoot ? root : null;\n            }\n            if (element instanceof ShadowRoot) return element;\n             // when we don't find a shadow root\n            if (!element.parentNode) return null;\n            return Util.findShadowRoot(element.parentNode);\n        },\n        jQueryDetection: function jQueryDetection() {\n            if (typeof $__default[\"default\"] === 'undefined') throw new TypeError('Bootstrap\\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\\'s JavaScript.');\n            var version = $__default[\"default\"].fn.jquery.split(' ')[0].split('.');\n            var minMajor = 1;\n            var ltMajor = 2;\n            var minMinor = 9;\n            var minPatch = 1;\n            var maxMajor = 4;\n            if (version[0] < ltMajor && version[1] < minMinor || version[0] === minMajor && version[1] === minMinor && version[2] < minPatch || version[0] >= maxMajor) throw new Error('Bootstrap\\'s JavaScript requires at least jQuery v1.9.1 but less than v4.0.0');\n        }\n    };\n    Util.jQueryDetection();\n    setTransitionEndSupport();\n    /**\n   * Constants\n   */ var NAME$a = 'alert';\n    var VERSION$a = '4.6.2';\n    var DATA_KEY$a = 'bs.alert';\n    var EVENT_KEY$a = \".\" + DATA_KEY$a;\n    var DATA_API_KEY$7 = '.data-api';\n    var JQUERY_NO_CONFLICT$a = $__default[\"default\"].fn[NAME$a];\n    var CLASS_NAME_ALERT = 'alert';\n    var CLASS_NAME_FADE$5 = 'fade';\n    var CLASS_NAME_SHOW$7 = 'show';\n    var EVENT_CLOSE = \"close\" + EVENT_KEY$a;\n    var EVENT_CLOSED = \"closed\" + EVENT_KEY$a;\n    var EVENT_CLICK_DATA_API$6 = \"click\" + EVENT_KEY$a + DATA_API_KEY$7;\n    var SELECTOR_DISMISS = '[data-dismiss=\"alert\"]';\n    /**\n   * Class definition\n   */ var Alert = /*#__PURE__*/ function() {\n        function Alert(element) {\n            this._element = element;\n        } // Getters\n        var _proto = Alert.prototype;\n        // Public\n        _proto.close = function close(element) {\n            var rootElement = this._element;\n            if (element) rootElement = this._getRootElement(element);\n            var customEvent = this._triggerCloseEvent(rootElement);\n            if (customEvent.isDefaultPrevented()) return;\n            this._removeElement(rootElement);\n        };\n        _proto.dispose = function dispose() {\n            $__default[\"default\"].removeData(this._element, DATA_KEY$a);\n            this._element = null;\n        } // Private\n        ;\n        _proto._getRootElement = function _getRootElement(element) {\n            var selector = Util.getSelectorFromElement(element);\n            var parent = false;\n            if (selector) parent = document.querySelector(selector);\n            if (!parent) parent = $__default[\"default\"](element).closest(\".\" + CLASS_NAME_ALERT)[0];\n            return parent;\n        };\n        _proto._triggerCloseEvent = function _triggerCloseEvent(element) {\n            var closeEvent = $__default[\"default\"].Event(EVENT_CLOSE);\n            $__default[\"default\"](element).trigger(closeEvent);\n            return closeEvent;\n        };\n        _proto._removeElement = function _removeElement(element) {\n            var _this = this;\n            $__default[\"default\"](element).removeClass(CLASS_NAME_SHOW$7);\n            if (!$__default[\"default\"](element).hasClass(CLASS_NAME_FADE$5)) {\n                this._destroyElement(element);\n                return;\n            }\n            var transitionDuration = Util.getTransitionDurationFromElement(element);\n            $__default[\"default\"](element).one(Util.TRANSITION_END, function(event) {\n                return _this._destroyElement(element, event);\n            }).emulateTransitionEnd(transitionDuration);\n        };\n        _proto._destroyElement = function _destroyElement(element) {\n            $__default[\"default\"](element).detach().trigger(EVENT_CLOSED).remove();\n        } // Static\n        ;\n        Alert._jQueryInterface = function _jQueryInterface(config) {\n            return this.each(function() {\n                var $element = $__default[\"default\"](this);\n                var data = $element.data(DATA_KEY$a);\n                if (!data) {\n                    data = new Alert(this);\n                    $element.data(DATA_KEY$a, data);\n                }\n                if (config === 'close') data[config](this);\n            });\n        };\n        Alert._handleDismiss = function _handleDismiss(alertInstance) {\n            return function(event) {\n                if (event) event.preventDefault();\n                alertInstance.close(this);\n            };\n        };\n        _createClass(Alert, null, [\n            {\n                key: \"VERSION\",\n                get: function get() {\n                    return VERSION$a;\n                }\n            }\n        ]);\n        return Alert;\n    }();\n    /**\n   * Data API implementation\n   */ $__default[\"default\"](document).on(EVENT_CLICK_DATA_API$6, SELECTOR_DISMISS, Alert._handleDismiss(new Alert()));\n    /**\n   * jQuery\n   */ $__default[\"default\"].fn[NAME$a] = Alert._jQueryInterface;\n    $__default[\"default\"].fn[NAME$a].Constructor = Alert;\n    $__default[\"default\"].fn[NAME$a].noConflict = function() {\n        $__default[\"default\"].fn[NAME$a] = JQUERY_NO_CONFLICT$a;\n        return Alert._jQueryInterface;\n    };\n    /**\n   * Constants\n   */ var NAME$9 = 'button';\n    var VERSION$9 = '4.6.2';\n    var DATA_KEY$9 = 'bs.button';\n    var EVENT_KEY$9 = \".\" + DATA_KEY$9;\n    var DATA_API_KEY$6 = '.data-api';\n    var JQUERY_NO_CONFLICT$9 = $__default[\"default\"].fn[NAME$9];\n    var CLASS_NAME_ACTIVE$3 = 'active';\n    var CLASS_NAME_BUTTON = 'btn';\n    var CLASS_NAME_FOCUS = 'focus';\n    var EVENT_CLICK_DATA_API$5 = \"click\" + EVENT_KEY$9 + DATA_API_KEY$6;\n    var EVENT_FOCUS_BLUR_DATA_API = \"focus\" + EVENT_KEY$9 + DATA_API_KEY$6 + \" \" + (\"blur\" + EVENT_KEY$9 + DATA_API_KEY$6);\n    var EVENT_LOAD_DATA_API$2 = \"load\" + EVENT_KEY$9 + DATA_API_KEY$6;\n    var SELECTOR_DATA_TOGGLE_CARROT = '[data-toggle^=\"button\"]';\n    var SELECTOR_DATA_TOGGLES = '[data-toggle=\"buttons\"]';\n    var SELECTOR_DATA_TOGGLE$4 = '[data-toggle=\"button\"]';\n    var SELECTOR_DATA_TOGGLES_BUTTONS = '[data-toggle=\"buttons\"] .btn';\n    var SELECTOR_INPUT = 'input:not([type=\"hidden\"])';\n    var SELECTOR_ACTIVE$2 = '.active';\n    var SELECTOR_BUTTON = '.btn';\n    /**\n   * Class definition\n   */ var Button = /*#__PURE__*/ function() {\n        function Button(element) {\n            this._element = element;\n            this.shouldAvoidTriggerChange = false;\n        } // Getters\n        var _proto = Button.prototype;\n        // Public\n        _proto.toggle = function toggle() {\n            var triggerChangeEvent = true;\n            var addAriaPressed = true;\n            var rootElement = $__default[\"default\"](this._element).closest(SELECTOR_DATA_TOGGLES)[0];\n            if (rootElement) {\n                var input = this._element.querySelector(SELECTOR_INPUT);\n                if (input) {\n                    if (input.type === 'radio') {\n                        if (input.checked && this._element.classList.contains(CLASS_NAME_ACTIVE$3)) triggerChangeEvent = false;\n                        else {\n                            var activeElement = rootElement.querySelector(SELECTOR_ACTIVE$2);\n                            if (activeElement) $__default[\"default\"](activeElement).removeClass(CLASS_NAME_ACTIVE$3);\n                        }\n                    }\n                    if (triggerChangeEvent) {\n                        // if it's not a radio button or checkbox don't add a pointless/invalid checked property to the input\n                        if (input.type === 'checkbox' || input.type === 'radio') input.checked = !this._element.classList.contains(CLASS_NAME_ACTIVE$3);\n                        if (!this.shouldAvoidTriggerChange) $__default[\"default\"](input).trigger('change');\n                    }\n                    input.focus();\n                    addAriaPressed = false;\n                }\n            }\n            if (!(this._element.hasAttribute('disabled') || this._element.classList.contains('disabled'))) {\n                if (addAriaPressed) this._element.setAttribute('aria-pressed', !this._element.classList.contains(CLASS_NAME_ACTIVE$3));\n                if (triggerChangeEvent) $__default[\"default\"](this._element).toggleClass(CLASS_NAME_ACTIVE$3);\n            }\n        };\n        _proto.dispose = function dispose() {\n            $__default[\"default\"].removeData(this._element, DATA_KEY$9);\n            this._element = null;\n        } // Static\n        ;\n        Button._jQueryInterface = function _jQueryInterface(config, avoidTriggerChange) {\n            return this.each(function() {\n                var $element = $__default[\"default\"](this);\n                var data = $element.data(DATA_KEY$9);\n                if (!data) {\n                    data = new Button(this);\n                    $element.data(DATA_KEY$9, data);\n                }\n                data.shouldAvoidTriggerChange = avoidTriggerChange;\n                if (config === 'toggle') data[config]();\n            });\n        };\n        _createClass(Button, null, [\n            {\n                key: \"VERSION\",\n                get: function get() {\n                    return VERSION$9;\n                }\n            }\n        ]);\n        return Button;\n    }();\n    /**\n   * Data API implementation\n   */ $__default[\"default\"](document).on(EVENT_CLICK_DATA_API$5, SELECTOR_DATA_TOGGLE_CARROT, function(event) {\n        var button = event.target;\n        var initialButton = button;\n        if (!$__default[\"default\"](button).hasClass(CLASS_NAME_BUTTON)) button = $__default[\"default\"](button).closest(SELECTOR_BUTTON)[0];\n        if (!button || button.hasAttribute('disabled') || button.classList.contains('disabled')) event.preventDefault(); // work around Firefox bug #1540995\n        else {\n            var inputBtn = button.querySelector(SELECTOR_INPUT);\n            if (inputBtn && (inputBtn.hasAttribute('disabled') || inputBtn.classList.contains('disabled'))) {\n                event.preventDefault(); // work around Firefox bug #1540995\n                return;\n            }\n            if (initialButton.tagName === 'INPUT' || button.tagName !== 'LABEL') Button._jQueryInterface.call($__default[\"default\"](button), 'toggle', initialButton.tagName === 'INPUT');\n        }\n    }).on(EVENT_FOCUS_BLUR_DATA_API, SELECTOR_DATA_TOGGLE_CARROT, function(event) {\n        var button = $__default[\"default\"](event.target).closest(SELECTOR_BUTTON)[0];\n        $__default[\"default\"](button).toggleClass(CLASS_NAME_FOCUS, /^focus(in)?$/.test(event.type));\n    });\n    $__default[\"default\"](window).on(EVENT_LOAD_DATA_API$2, function() {\n        // ensure correct active class is set to match the controls' actual values/states\n        // find all checkboxes/readio buttons inside data-toggle groups\n        var buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLES_BUTTONS));\n        for(var i = 0, len = buttons.length; i < len; i++){\n            var button = buttons[i];\n            var input = button.querySelector(SELECTOR_INPUT);\n            if (input.checked || input.hasAttribute('checked')) button.classList.add(CLASS_NAME_ACTIVE$3);\n            else button.classList.remove(CLASS_NAME_ACTIVE$3);\n        } // find all button toggles\n        buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE$4));\n        for(var _i = 0, _len = buttons.length; _i < _len; _i++){\n            var _button = buttons[_i];\n            if (_button.getAttribute('aria-pressed') === 'true') _button.classList.add(CLASS_NAME_ACTIVE$3);\n            else _button.classList.remove(CLASS_NAME_ACTIVE$3);\n        }\n    });\n    /**\n   * jQuery\n   */ $__default[\"default\"].fn[NAME$9] = Button._jQueryInterface;\n    $__default[\"default\"].fn[NAME$9].Constructor = Button;\n    $__default[\"default\"].fn[NAME$9].noConflict = function() {\n        $__default[\"default\"].fn[NAME$9] = JQUERY_NO_CONFLICT$9;\n        return Button._jQueryInterface;\n    };\n    /**\n   * Constants\n   */ var NAME$8 = 'carousel';\n    var VERSION$8 = '4.6.2';\n    var DATA_KEY$8 = 'bs.carousel';\n    var EVENT_KEY$8 = \".\" + DATA_KEY$8;\n    var DATA_API_KEY$5 = '.data-api';\n    var JQUERY_NO_CONFLICT$8 = $__default[\"default\"].fn[NAME$8];\n    var ARROW_LEFT_KEYCODE = 37; // KeyboardEvent.which value for left arrow key\n    var ARROW_RIGHT_KEYCODE = 39; // KeyboardEvent.which value for right arrow key\n    var TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n    var SWIPE_THRESHOLD = 40;\n    var CLASS_NAME_CAROUSEL = 'carousel';\n    var CLASS_NAME_ACTIVE$2 = 'active';\n    var CLASS_NAME_SLIDE = 'slide';\n    var CLASS_NAME_RIGHT = 'carousel-item-right';\n    var CLASS_NAME_LEFT = 'carousel-item-left';\n    var CLASS_NAME_NEXT = 'carousel-item-next';\n    var CLASS_NAME_PREV = 'carousel-item-prev';\n    var CLASS_NAME_POINTER_EVENT = 'pointer-event';\n    var DIRECTION_NEXT = 'next';\n    var DIRECTION_PREV = 'prev';\n    var DIRECTION_LEFT = 'left';\n    var DIRECTION_RIGHT = 'right';\n    var EVENT_SLIDE = \"slide\" + EVENT_KEY$8;\n    var EVENT_SLID = \"slid\" + EVENT_KEY$8;\n    var EVENT_KEYDOWN = \"keydown\" + EVENT_KEY$8;\n    var EVENT_MOUSEENTER = \"mouseenter\" + EVENT_KEY$8;\n    var EVENT_MOUSELEAVE = \"mouseleave\" + EVENT_KEY$8;\n    var EVENT_TOUCHSTART = \"touchstart\" + EVENT_KEY$8;\n    var EVENT_TOUCHMOVE = \"touchmove\" + EVENT_KEY$8;\n    var EVENT_TOUCHEND = \"touchend\" + EVENT_KEY$8;\n    var EVENT_POINTERDOWN = \"pointerdown\" + EVENT_KEY$8;\n    var EVENT_POINTERUP = \"pointerup\" + EVENT_KEY$8;\n    var EVENT_DRAG_START = \"dragstart\" + EVENT_KEY$8;\n    var EVENT_LOAD_DATA_API$1 = \"load\" + EVENT_KEY$8 + DATA_API_KEY$5;\n    var EVENT_CLICK_DATA_API$4 = \"click\" + EVENT_KEY$8 + DATA_API_KEY$5;\n    var SELECTOR_ACTIVE$1 = '.active';\n    var SELECTOR_ACTIVE_ITEM = '.active.carousel-item';\n    var SELECTOR_ITEM = '.carousel-item';\n    var SELECTOR_ITEM_IMG = '.carousel-item img';\n    var SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev';\n    var SELECTOR_INDICATORS = '.carousel-indicators';\n    var SELECTOR_DATA_SLIDE = '[data-slide], [data-slide-to]';\n    var SELECTOR_DATA_RIDE = '[data-ride=\"carousel\"]';\n    var Default$7 = {\n        interval: 5000,\n        keyboard: true,\n        slide: false,\n        pause: 'hover',\n        wrap: true,\n        touch: true\n    };\n    var DefaultType$7 = {\n        interval: '(number|boolean)',\n        keyboard: 'boolean',\n        slide: '(boolean|string)',\n        pause: '(string|boolean)',\n        wrap: 'boolean',\n        touch: 'boolean'\n    };\n    var PointerType = {\n        TOUCH: 'touch',\n        PEN: 'pen'\n    };\n    /**\n   * Class definition\n   */ var Carousel = /*#__PURE__*/ function() {\n        function Carousel(element, config) {\n            this._items = null;\n            this._interval = null;\n            this._activeElement = null;\n            this._isPaused = false;\n            this._isSliding = false;\n            this.touchTimeout = null;\n            this.touchStartX = 0;\n            this.touchDeltaX = 0;\n            this._config = this._getConfig(config);\n            this._element = element;\n            this._indicatorsElement = this._element.querySelector(SELECTOR_INDICATORS);\n            this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n            this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent);\n            this._addEventListeners();\n        } // Getters\n        var _proto = Carousel.prototype;\n        // Public\n        _proto.next = function next() {\n            if (!this._isSliding) this._slide(DIRECTION_NEXT);\n        };\n        _proto.nextWhenVisible = function nextWhenVisible() {\n            var $element = $__default[\"default\"](this._element); // Don't call next when the page isn't visible\n            // or the carousel or its parent isn't visible\n            if (!document.hidden && $element.is(':visible') && $element.css('visibility') !== 'hidden') this.next();\n        };\n        _proto.prev = function prev() {\n            if (!this._isSliding) this._slide(DIRECTION_PREV);\n        };\n        _proto.pause = function pause(event) {\n            if (!event) this._isPaused = true;\n            if (this._element.querySelector(SELECTOR_NEXT_PREV)) {\n                Util.triggerTransitionEnd(this._element);\n                this.cycle(true);\n            }\n            clearInterval(this._interval);\n            this._interval = null;\n        };\n        _proto.cycle = function cycle(event) {\n            if (!event) this._isPaused = false;\n            if (this._interval) {\n                clearInterval(this._interval);\n                this._interval = null;\n            }\n            if (this._config.interval && !this._isPaused) {\n                this._updateInterval();\n                this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);\n            }\n        };\n        _proto.to = function to(index) {\n            var _this = this;\n            this._activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM);\n            var activeIndex = this._getItemIndex(this._activeElement);\n            if (index > this._items.length - 1 || index < 0) return;\n            if (this._isSliding) {\n                $__default[\"default\"](this._element).one(EVENT_SLID, function() {\n                    return _this.to(index);\n                });\n                return;\n            }\n            if (activeIndex === index) {\n                this.pause();\n                this.cycle();\n                return;\n            }\n            var direction = index > activeIndex ? DIRECTION_NEXT : DIRECTION_PREV;\n            this._slide(direction, this._items[index]);\n        };\n        _proto.dispose = function dispose() {\n            $__default[\"default\"](this._element).off(EVENT_KEY$8);\n            $__default[\"default\"].removeData(this._element, DATA_KEY$8);\n            this._items = null;\n            this._config = null;\n            this._element = null;\n            this._interval = null;\n            this._isPaused = null;\n            this._isSliding = null;\n            this._activeElement = null;\n            this._indicatorsElement = null;\n        } // Private\n        ;\n        _proto._getConfig = function _getConfig(config) {\n            config = _extends$1({}, Default$7, config);\n            Util.typeCheckConfig(NAME$8, config, DefaultType$7);\n            return config;\n        };\n        _proto._handleSwipe = function _handleSwipe() {\n            var absDeltax = Math.abs(this.touchDeltaX);\n            if (absDeltax <= SWIPE_THRESHOLD) return;\n            var direction = absDeltax / this.touchDeltaX;\n            this.touchDeltaX = 0; // swipe left\n            if (direction > 0) this.prev();\n             // swipe right\n            if (direction < 0) this.next();\n        };\n        _proto._addEventListeners = function _addEventListeners() {\n            var _this2 = this;\n            if (this._config.keyboard) $__default[\"default\"](this._element).on(EVENT_KEYDOWN, function(event) {\n                return _this2._keydown(event);\n            });\n            if (this._config.pause === 'hover') $__default[\"default\"](this._element).on(EVENT_MOUSEENTER, function(event) {\n                return _this2.pause(event);\n            }).on(EVENT_MOUSELEAVE, function(event) {\n                return _this2.cycle(event);\n            });\n            if (this._config.touch) this._addTouchEventListeners();\n        };\n        _proto._addTouchEventListeners = function _addTouchEventListeners() {\n            var _this3 = this;\n            if (!this._touchSupported) return;\n            var start = function start(event) {\n                if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) _this3.touchStartX = event.originalEvent.clientX;\n                else if (!_this3._pointerEvent) _this3.touchStartX = event.originalEvent.touches[0].clientX;\n            };\n            var move = function move(event) {\n                // ensure swiping with one touch and not pinching\n                _this3.touchDeltaX = event.originalEvent.touches && event.originalEvent.touches.length > 1 ? 0 : event.originalEvent.touches[0].clientX - _this3.touchStartX;\n            };\n            var end = function end(event) {\n                if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) _this3.touchDeltaX = event.originalEvent.clientX - _this3.touchStartX;\n                _this3._handleSwipe();\n                if (_this3._config.pause === 'hover') {\n                    // If it's a touch-enabled device, mouseenter/leave are fired as\n                    // part of the mouse compatibility events on first tap - the carousel\n                    // would stop cycling until user tapped out of it;\n                    // here, we listen for touchend, explicitly pause the carousel\n                    // (as if it's the second time we tap on it, mouseenter compat event\n                    // is NOT fired) and after a timeout (to allow for mouse compatibility\n                    // events to fire) we explicitly restart cycling\n                    _this3.pause();\n                    if (_this3.touchTimeout) clearTimeout(_this3.touchTimeout);\n                    _this3.touchTimeout = setTimeout(function(event) {\n                        return _this3.cycle(event);\n                    }, TOUCHEVENT_COMPAT_WAIT + _this3._config.interval);\n                }\n            };\n            $__default[\"default\"](this._element.querySelectorAll(SELECTOR_ITEM_IMG)).on(EVENT_DRAG_START, function(e) {\n                return e.preventDefault();\n            });\n            if (this._pointerEvent) {\n                $__default[\"default\"](this._element).on(EVENT_POINTERDOWN, function(event) {\n                    return start(event);\n                });\n                $__default[\"default\"](this._element).on(EVENT_POINTERUP, function(event) {\n                    return end(event);\n                });\n                this._element.classList.add(CLASS_NAME_POINTER_EVENT);\n            } else {\n                $__default[\"default\"](this._element).on(EVENT_TOUCHSTART, function(event) {\n                    return start(event);\n                });\n                $__default[\"default\"](this._element).on(EVENT_TOUCHMOVE, function(event) {\n                    return move(event);\n                });\n                $__default[\"default\"](this._element).on(EVENT_TOUCHEND, function(event) {\n                    return end(event);\n                });\n            }\n        };\n        _proto._keydown = function _keydown(event) {\n            if (/input|textarea/i.test(event.target.tagName)) return;\n            switch(event.which){\n                case ARROW_LEFT_KEYCODE:\n                    event.preventDefault();\n                    this.prev();\n                    break;\n                case ARROW_RIGHT_KEYCODE:\n                    event.preventDefault();\n                    this.next();\n                    break;\n            }\n        };\n        _proto._getItemIndex = function _getItemIndex(element) {\n            this._items = element && element.parentNode ? [].slice.call(element.parentNode.querySelectorAll(SELECTOR_ITEM)) : [];\n            return this._items.indexOf(element);\n        };\n        _proto._getItemByDirection = function _getItemByDirection(direction, activeElement) {\n            var isNextDirection = direction === DIRECTION_NEXT;\n            var isPrevDirection = direction === DIRECTION_PREV;\n            var activeIndex = this._getItemIndex(activeElement);\n            var lastItemIndex = this._items.length - 1;\n            var isGoingToWrap = isPrevDirection && activeIndex === 0 || isNextDirection && activeIndex === lastItemIndex;\n            if (isGoingToWrap && !this._config.wrap) return activeElement;\n            var delta = direction === DIRECTION_PREV ? -1 : 1;\n            var itemIndex = (activeIndex + delta) % this._items.length;\n            return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex];\n        };\n        _proto._triggerSlideEvent = function _triggerSlideEvent(relatedTarget, eventDirectionName) {\n            var targetIndex = this._getItemIndex(relatedTarget);\n            var fromIndex = this._getItemIndex(this._element.querySelector(SELECTOR_ACTIVE_ITEM));\n            var slideEvent = $__default[\"default\"].Event(EVENT_SLIDE, {\n                relatedTarget: relatedTarget,\n                direction: eventDirectionName,\n                from: fromIndex,\n                to: targetIndex\n            });\n            $__default[\"default\"](this._element).trigger(slideEvent);\n            return slideEvent;\n        };\n        _proto._setActiveIndicatorElement = function _setActiveIndicatorElement(element) {\n            if (this._indicatorsElement) {\n                var indicators = [].slice.call(this._indicatorsElement.querySelectorAll(SELECTOR_ACTIVE$1));\n                $__default[\"default\"](indicators).removeClass(CLASS_NAME_ACTIVE$2);\n                var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)];\n                if (nextIndicator) $__default[\"default\"](nextIndicator).addClass(CLASS_NAME_ACTIVE$2);\n            }\n        };\n        _proto._updateInterval = function _updateInterval() {\n            var element = this._activeElement || this._element.querySelector(SELECTOR_ACTIVE_ITEM);\n            if (!element) return;\n            var elementInterval = parseInt(element.getAttribute('data-interval'), 10);\n            if (elementInterval) {\n                this._config.defaultInterval = this._config.defaultInterval || this._config.interval;\n                this._config.interval = elementInterval;\n            } else this._config.interval = this._config.defaultInterval || this._config.interval;\n        };\n        _proto._slide = function _slide(direction, element) {\n            var _this4 = this;\n            var activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM);\n            var activeElementIndex = this._getItemIndex(activeElement);\n            var nextElement = element || activeElement && this._getItemByDirection(direction, activeElement);\n            var nextElementIndex = this._getItemIndex(nextElement);\n            var isCycling = Boolean(this._interval);\n            var directionalClassName;\n            var orderClassName;\n            var eventDirectionName;\n            if (direction === DIRECTION_NEXT) {\n                directionalClassName = CLASS_NAME_LEFT;\n                orderClassName = CLASS_NAME_NEXT;\n                eventDirectionName = DIRECTION_LEFT;\n            } else {\n                directionalClassName = CLASS_NAME_RIGHT;\n                orderClassName = CLASS_NAME_PREV;\n                eventDirectionName = DIRECTION_RIGHT;\n            }\n            if (nextElement && $__default[\"default\"](nextElement).hasClass(CLASS_NAME_ACTIVE$2)) {\n                this._isSliding = false;\n                return;\n            }\n            var slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);\n            if (slideEvent.isDefaultPrevented()) return;\n            if (!activeElement || !nextElement) // Some weirdness is happening, so we bail\n            return;\n            this._isSliding = true;\n            if (isCycling) this.pause();\n            this._setActiveIndicatorElement(nextElement);\n            this._activeElement = nextElement;\n            var slidEvent = $__default[\"default\"].Event(EVENT_SLID, {\n                relatedTarget: nextElement,\n                direction: eventDirectionName,\n                from: activeElementIndex,\n                to: nextElementIndex\n            });\n            if ($__default[\"default\"](this._element).hasClass(CLASS_NAME_SLIDE)) {\n                $__default[\"default\"](nextElement).addClass(orderClassName);\n                Util.reflow(nextElement);\n                $__default[\"default\"](activeElement).addClass(directionalClassName);\n                $__default[\"default\"](nextElement).addClass(directionalClassName);\n                var transitionDuration = Util.getTransitionDurationFromElement(activeElement);\n                $__default[\"default\"](activeElement).one(Util.TRANSITION_END, function() {\n                    $__default[\"default\"](nextElement).removeClass(directionalClassName + \" \" + orderClassName).addClass(CLASS_NAME_ACTIVE$2);\n                    $__default[\"default\"](activeElement).removeClass(CLASS_NAME_ACTIVE$2 + \" \" + orderClassName + \" \" + directionalClassName);\n                    _this4._isSliding = false;\n                    setTimeout(function() {\n                        return $__default[\"default\"](_this4._element).trigger(slidEvent);\n                    }, 0);\n                }).emulateTransitionEnd(transitionDuration);\n            } else {\n                $__default[\"default\"](activeElement).removeClass(CLASS_NAME_ACTIVE$2);\n                $__default[\"default\"](nextElement).addClass(CLASS_NAME_ACTIVE$2);\n                this._isSliding = false;\n                $__default[\"default\"](this._element).trigger(slidEvent);\n            }\n            if (isCycling) this.cycle();\n        } // Static\n        ;\n        Carousel._jQueryInterface = function _jQueryInterface(config) {\n            return this.each(function() {\n                var data = $__default[\"default\"](this).data(DATA_KEY$8);\n                var _config = _extends$1({}, Default$7, $__default[\"default\"](this).data());\n                if (typeof config === 'object') _config = _extends$1({}, _config, config);\n                var action = typeof config === 'string' ? config : _config.slide;\n                if (!data) {\n                    data = new Carousel(this, _config);\n                    $__default[\"default\"](this).data(DATA_KEY$8, data);\n                }\n                if (typeof config === 'number') data.to(config);\n                else if (typeof action === 'string') {\n                    if (typeof data[action] === 'undefined') throw new TypeError(\"No method named \\\"\" + action + \"\\\"\");\n                    data[action]();\n                } else if (_config.interval && _config.ride) {\n                    data.pause();\n                    data.cycle();\n                }\n            });\n        };\n        Carousel._dataApiClickHandler = function _dataApiClickHandler(event) {\n            var selector = Util.getSelectorFromElement(this);\n            if (!selector) return;\n            var target = $__default[\"default\"](selector)[0];\n            if (!target || !$__default[\"default\"](target).hasClass(CLASS_NAME_CAROUSEL)) return;\n            var config = _extends$1({}, $__default[\"default\"](target).data(), $__default[\"default\"](this).data());\n            var slideIndex = this.getAttribute('data-slide-to');\n            if (slideIndex) config.interval = false;\n            Carousel._jQueryInterface.call($__default[\"default\"](target), config);\n            if (slideIndex) $__default[\"default\"](target).data(DATA_KEY$8).to(slideIndex);\n            event.preventDefault();\n        };\n        _createClass(Carousel, null, [\n            {\n                key: \"VERSION\",\n                get: function get() {\n                    return VERSION$8;\n                }\n            },\n            {\n                key: \"Default\",\n                get: function get() {\n                    return Default$7;\n                }\n            }\n        ]);\n        return Carousel;\n    }();\n    /**\n   * Data API implementation\n   */ $__default[\"default\"](document).on(EVENT_CLICK_DATA_API$4, SELECTOR_DATA_SLIDE, Carousel._dataApiClickHandler);\n    $__default[\"default\"](window).on(EVENT_LOAD_DATA_API$1, function() {\n        var carousels = [].slice.call(document.querySelectorAll(SELECTOR_DATA_RIDE));\n        for(var i = 0, len = carousels.length; i < len; i++){\n            var $carousel = $__default[\"default\"](carousels[i]);\n            Carousel._jQueryInterface.call($carousel, $carousel.data());\n        }\n    });\n    /**\n   * jQuery\n   */ $__default[\"default\"].fn[NAME$8] = Carousel._jQueryInterface;\n    $__default[\"default\"].fn[NAME$8].Constructor = Carousel;\n    $__default[\"default\"].fn[NAME$8].noConflict = function() {\n        $__default[\"default\"].fn[NAME$8] = JQUERY_NO_CONFLICT$8;\n        return Carousel._jQueryInterface;\n    };\n    /**\n   * Constants\n   */ var NAME$7 = 'collapse';\n    var VERSION$7 = '4.6.2';\n    var DATA_KEY$7 = 'bs.collapse';\n    var EVENT_KEY$7 = \".\" + DATA_KEY$7;\n    var DATA_API_KEY$4 = '.data-api';\n    var JQUERY_NO_CONFLICT$7 = $__default[\"default\"].fn[NAME$7];\n    var CLASS_NAME_SHOW$6 = 'show';\n    var CLASS_NAME_COLLAPSE = 'collapse';\n    var CLASS_NAME_COLLAPSING = 'collapsing';\n    var CLASS_NAME_COLLAPSED = 'collapsed';\n    var DIMENSION_WIDTH = 'width';\n    var DIMENSION_HEIGHT = 'height';\n    var EVENT_SHOW$4 = \"show\" + EVENT_KEY$7;\n    var EVENT_SHOWN$4 = \"shown\" + EVENT_KEY$7;\n    var EVENT_HIDE$4 = \"hide\" + EVENT_KEY$7;\n    var EVENT_HIDDEN$4 = \"hidden\" + EVENT_KEY$7;\n    var EVENT_CLICK_DATA_API$3 = \"click\" + EVENT_KEY$7 + DATA_API_KEY$4;\n    var SELECTOR_ACTIVES = '.show, .collapsing';\n    var SELECTOR_DATA_TOGGLE$3 = '[data-toggle=\"collapse\"]';\n    var Default$6 = {\n        toggle: true,\n        parent: ''\n    };\n    var DefaultType$6 = {\n        toggle: 'boolean',\n        parent: '(string|element)'\n    };\n    /**\n   * Class definition\n   */ var Collapse = /*#__PURE__*/ function() {\n        function Collapse(element, config) {\n            this._isTransitioning = false;\n            this._element = element;\n            this._config = this._getConfig(config);\n            this._triggerArray = [].slice.call(document.querySelectorAll(\"[data-toggle=\\\"collapse\\\"][href=\\\"#\" + element.id + \"\\\"],\" + (\"[data-toggle=\\\"collapse\\\"][data-target=\\\"#\" + element.id + \"\\\"]\")));\n            var toggleList = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE$3));\n            for(var i = 0, len = toggleList.length; i < len; i++){\n                var elem = toggleList[i];\n                var selector = Util.getSelectorFromElement(elem);\n                var filterElement = [].slice.call(document.querySelectorAll(selector)).filter(function(foundElem) {\n                    return foundElem === element;\n                });\n                if (selector !== null && filterElement.length > 0) {\n                    this._selector = selector;\n                    this._triggerArray.push(elem);\n                }\n            }\n            this._parent = this._config.parent ? this._getParent() : null;\n            if (!this._config.parent) this._addAriaAndCollapsedClass(this._element, this._triggerArray);\n            if (this._config.toggle) this.toggle();\n        } // Getters\n        var _proto = Collapse.prototype;\n        // Public\n        _proto.toggle = function toggle() {\n            if ($__default[\"default\"](this._element).hasClass(CLASS_NAME_SHOW$6)) this.hide();\n            else this.show();\n        };\n        _proto.show = function show() {\n            var _this = this;\n            if (this._isTransitioning || $__default[\"default\"](this._element).hasClass(CLASS_NAME_SHOW$6)) return;\n            var actives;\n            var activesData;\n            if (this._parent) {\n                actives = [].slice.call(this._parent.querySelectorAll(SELECTOR_ACTIVES)).filter(function(elem) {\n                    if (typeof _this._config.parent === 'string') return elem.getAttribute('data-parent') === _this._config.parent;\n                    return elem.classList.contains(CLASS_NAME_COLLAPSE);\n                });\n                if (actives.length === 0) actives = null;\n            }\n            if (actives) {\n                activesData = $__default[\"default\"](actives).not(this._selector).data(DATA_KEY$7);\n                if (activesData && activesData._isTransitioning) return;\n            }\n            var startEvent = $__default[\"default\"].Event(EVENT_SHOW$4);\n            $__default[\"default\"](this._element).trigger(startEvent);\n            if (startEvent.isDefaultPrevented()) return;\n            if (actives) {\n                Collapse._jQueryInterface.call($__default[\"default\"](actives).not(this._selector), 'hide');\n                if (!activesData) $__default[\"default\"](actives).data(DATA_KEY$7, null);\n            }\n            var dimension = this._getDimension();\n            $__default[\"default\"](this._element).removeClass(CLASS_NAME_COLLAPSE).addClass(CLASS_NAME_COLLAPSING);\n            this._element.style[dimension] = 0;\n            if (this._triggerArray.length) $__default[\"default\"](this._triggerArray).removeClass(CLASS_NAME_COLLAPSED).attr('aria-expanded', true);\n            this.setTransitioning(true);\n            var complete = function complete() {\n                $__default[\"default\"](_this._element).removeClass(CLASS_NAME_COLLAPSING).addClass(CLASS_NAME_COLLAPSE + \" \" + CLASS_NAME_SHOW$6);\n                _this._element.style[dimension] = '';\n                _this.setTransitioning(false);\n                $__default[\"default\"](_this._element).trigger(EVENT_SHOWN$4);\n            };\n            var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n            var scrollSize = \"scroll\" + capitalizedDimension;\n            var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n            $__default[\"default\"](this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n            this._element.style[dimension] = this._element[scrollSize] + \"px\";\n        };\n        _proto.hide = function hide() {\n            var _this2 = this;\n            if (this._isTransitioning || !$__default[\"default\"](this._element).hasClass(CLASS_NAME_SHOW$6)) return;\n            var startEvent = $__default[\"default\"].Event(EVENT_HIDE$4);\n            $__default[\"default\"](this._element).trigger(startEvent);\n            if (startEvent.isDefaultPrevented()) return;\n            var dimension = this._getDimension();\n            this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + \"px\";\n            Util.reflow(this._element);\n            $__default[\"default\"](this._element).addClass(CLASS_NAME_COLLAPSING).removeClass(CLASS_NAME_COLLAPSE + \" \" + CLASS_NAME_SHOW$6);\n            var triggerArrayLength = this._triggerArray.length;\n            if (triggerArrayLength > 0) for(var i = 0; i < triggerArrayLength; i++){\n                var trigger = this._triggerArray[i];\n                var selector = Util.getSelectorFromElement(trigger);\n                if (selector !== null) {\n                    var $elem = $__default[\"default\"]([].slice.call(document.querySelectorAll(selector)));\n                    if (!$elem.hasClass(CLASS_NAME_SHOW$6)) $__default[\"default\"](trigger).addClass(CLASS_NAME_COLLAPSED).attr('aria-expanded', false);\n                }\n            }\n            this.setTransitioning(true);\n            var complete = function complete() {\n                _this2.setTransitioning(false);\n                $__default[\"default\"](_this2._element).removeClass(CLASS_NAME_COLLAPSING).addClass(CLASS_NAME_COLLAPSE).trigger(EVENT_HIDDEN$4);\n            };\n            this._element.style[dimension] = '';\n            var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n            $__default[\"default\"](this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n        };\n        _proto.setTransitioning = function setTransitioning(isTransitioning) {\n            this._isTransitioning = isTransitioning;\n        };\n        _proto.dispose = function dispose() {\n            $__default[\"default\"].removeData(this._element, DATA_KEY$7);\n            this._config = null;\n            this._parent = null;\n            this._element = null;\n            this._triggerArray = null;\n            this._isTransitioning = null;\n        } // Private\n        ;\n        _proto._getConfig = function _getConfig(config) {\n            config = _extends$1({}, Default$6, config);\n            config.toggle = Boolean(config.toggle); // Coerce string values\n            Util.typeCheckConfig(NAME$7, config, DefaultType$6);\n            return config;\n        };\n        _proto._getDimension = function _getDimension() {\n            var hasWidth = $__default[\"default\"](this._element).hasClass(DIMENSION_WIDTH);\n            return hasWidth ? DIMENSION_WIDTH : DIMENSION_HEIGHT;\n        };\n        _proto._getParent = function _getParent() {\n            var _this3 = this;\n            var parent;\n            if (Util.isElement(this._config.parent)) {\n                parent = this._config.parent; // It's a jQuery object\n                if (typeof this._config.parent.jquery !== 'undefined') parent = this._config.parent[0];\n            } else parent = document.querySelector(this._config.parent);\n            var selector = \"[data-toggle=\\\"collapse\\\"][data-parent=\\\"\" + this._config.parent + \"\\\"]\";\n            var children = [].slice.call(parent.querySelectorAll(selector));\n            $__default[\"default\"](children).each(function(i, element) {\n                _this3._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [\n                    element\n                ]);\n            });\n            return parent;\n        };\n        _proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) {\n            var isOpen = $__default[\"default\"](element).hasClass(CLASS_NAME_SHOW$6);\n            if (triggerArray.length) $__default[\"default\"](triggerArray).toggleClass(CLASS_NAME_COLLAPSED, !isOpen).attr('aria-expanded', isOpen);\n        } // Static\n        ;\n        Collapse._getTargetFromElement = function _getTargetFromElement(element) {\n            var selector = Util.getSelectorFromElement(element);\n            return selector ? document.querySelector(selector) : null;\n        };\n        Collapse._jQueryInterface = function _jQueryInterface(config) {\n            return this.each(function() {\n                var $element = $__default[\"default\"](this);\n                var data = $element.data(DATA_KEY$7);\n                var _config = _extends$1({}, Default$6, $element.data(), typeof config === 'object' && config ? config : {});\n                if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) _config.toggle = false;\n                if (!data) {\n                    data = new Collapse(this, _config);\n                    $element.data(DATA_KEY$7, data);\n                }\n                if (typeof config === 'string') {\n                    if (typeof data[config] === 'undefined') throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n                    data[config]();\n                }\n            });\n        };\n        _createClass(Collapse, null, [\n            {\n                key: \"VERSION\",\n                get: function get() {\n                    return VERSION$7;\n                }\n            },\n            {\n                key: \"Default\",\n                get: function get() {\n                    return Default$6;\n                }\n            }\n        ]);\n        return Collapse;\n    }();\n    /**\n   * Data API implementation\n   */ $__default[\"default\"](document).on(EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function(event) {\n        // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n        if (event.currentTarget.tagName === 'A') event.preventDefault();\n        var $trigger = $__default[\"default\"](this);\n        var selector = Util.getSelectorFromElement(this);\n        var selectors = [].slice.call(document.querySelectorAll(selector));\n        $__default[\"default\"](selectors).each(function() {\n            var $target = $__default[\"default\"](this);\n            var data = $target.data(DATA_KEY$7);\n            var config = data ? 'toggle' : $trigger.data();\n            Collapse._jQueryInterface.call($target, config);\n        });\n    });\n    /**\n   * jQuery\n   */ $__default[\"default\"].fn[NAME$7] = Collapse._jQueryInterface;\n    $__default[\"default\"].fn[NAME$7].Constructor = Collapse;\n    $__default[\"default\"].fn[NAME$7].noConflict = function() {\n        $__default[\"default\"].fn[NAME$7] = JQUERY_NO_CONFLICT$7;\n        return Collapse._jQueryInterface;\n    };\n    /**!\n   * @fileOverview Kickass library to create and place poppers near their reference elements.\n   * @version 1.16.1\n   * @license\n   * Copyright (c) 2016 Federico Zivolo and contributors\n   *\n   * Permission is hereby granted, free of charge, to any person obtaining a copy\n   * of this software and associated documentation files (the \"Software\"), to deal\n   * in the Software without restriction, including without limitation the rights\n   * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n   * copies of the Software, and to permit persons to whom the Software is\n   * furnished to do so, subject to the following conditions:\n   *\n   * The above copyright notice and this permission notice shall be included in all\n   * copies or substantial portions of the Software.\n   *\n   * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n   * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n   * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n   * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n   * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n   * SOFTWARE.\n   */ var isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && typeof navigator !== 'undefined';\n    var timeoutDuration = function() {\n        var longerTimeoutBrowsers = [\n            'Edge',\n            'Trident',\n            'Firefox'\n        ];\n        for(var i = 0; i < longerTimeoutBrowsers.length; i += 1){\n            if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) return 1;\n        }\n        return 0;\n    }();\n    function microtaskDebounce(fn) {\n        var called = false;\n        return function() {\n            if (called) return;\n            called = true;\n            window.Promise.resolve().then(function() {\n                called = false;\n                fn();\n            });\n        };\n    }\n    function taskDebounce(fn) {\n        var scheduled = false;\n        return function() {\n            if (!scheduled) {\n                scheduled = true;\n                setTimeout(function() {\n                    scheduled = false;\n                    fn();\n                }, timeoutDuration);\n            }\n        };\n    }\n    var supportsMicroTasks = isBrowser && window.Promise;\n    /**\n  * Create a debounced version of a method, that's asynchronously deferred\n  * but called in the minimum time possible.\n  *\n  * @method\n  * @memberof Popper.Utils\n  * @argument {Function} fn\n  * @returns {Function}\n  */ var debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce;\n    /**\n   * Check if the given variable is a function\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Any} functionToCheck - variable to check\n   * @returns {Boolean} answer to: is a function?\n   */ function isFunction(functionToCheck) {\n        var getType = {};\n        return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';\n    }\n    /**\n   * Get CSS computed property of the given element\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Eement} element\n   * @argument {String} property\n   */ function getStyleComputedProperty(element, property) {\n        if (element.nodeType !== 1) return [];\n        // NOTE: 1 DOM access here\n        var window1 = element.ownerDocument.defaultView;\n        var css = window1.getComputedStyle(element, null);\n        return property ? css[property] : css;\n    }\n    /**\n   * Returns the parentNode or the host of the element\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Element} element\n   * @returns {Element} parent\n   */ function getParentNode(element) {\n        if (element.nodeName === 'HTML') return element;\n        return element.parentNode || element.host;\n    }\n    /**\n   * Returns the scrolling parent of the given element\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Element} element\n   * @returns {Element} scroll parent\n   */ function getScrollParent(element) {\n        // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n        if (!element) return document.body;\n        switch(element.nodeName){\n            case 'HTML':\n            case 'BODY':\n                return element.ownerDocument.body;\n            case '#document':\n                return element.body;\n        }\n        // Firefox want us to check `-x` and `-y` variations as well\n        var _getStyleComputedProp = getStyleComputedProperty(element), overflow = _getStyleComputedProp.overflow, overflowX = _getStyleComputedProp.overflowX, overflowY = _getStyleComputedProp.overflowY;\n        if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) return element;\n        return getScrollParent(getParentNode(element));\n    }\n    /**\n   * Returns the reference node of the reference object, or the reference object itself.\n   * @method\n   * @memberof Popper.Utils\n   * @param {Element|Object} reference - the reference element (the popper will be relative to this)\n   * @returns {Element} parent\n   */ function getReferenceNode(reference) {\n        return reference && reference.referenceNode ? reference.referenceNode : reference;\n    }\n    var isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);\n    var isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);\n    /**\n   * Determines if the browser is Internet Explorer\n   * @method\n   * @memberof Popper.Utils\n   * @param {Number} version to check\n   * @returns {Boolean} isIE\n   */ function isIE(version) {\n        if (version === 11) return isIE11;\n        if (version === 10) return isIE10;\n        return isIE11 || isIE10;\n    }\n    /**\n   * Returns the offset parent of the given element\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Element} element\n   * @returns {Element} offset parent\n   */ function getOffsetParent(element) {\n        if (!element) return document.documentElement;\n        var noOffsetParent = isIE(10) ? document.body : null;\n        // NOTE: 1 DOM access here\n        var offsetParent = element.offsetParent || null;\n        // Skip hidden elements which don't have an offsetParent\n        while(offsetParent === noOffsetParent && element.nextElementSibling)offsetParent = (element = element.nextElementSibling).offsetParent;\n        var nodeName = offsetParent && offsetParent.nodeName;\n        if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') return element ? element.ownerDocument.documentElement : document.documentElement;\n        // .offsetParent will return the closest TH, TD or TABLE in case\n        // no offsetParent is present, I hate this job...\n        if ([\n            'TH',\n            'TD',\n            'TABLE'\n        ].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static') return getOffsetParent(offsetParent);\n        return offsetParent;\n    }\n    function isOffsetContainer(element) {\n        var nodeName = element.nodeName;\n        if (nodeName === 'BODY') return false;\n        return nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element;\n    }\n    /**\n   * Finds the root node (document, shadowDOM root) of the given element\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Element} node\n   * @returns {Element} root node\n   */ function getRoot(node) {\n        if (node.parentNode !== null) return getRoot(node.parentNode);\n        return node;\n    }\n    /**\n   * Finds the offset parent common to the two provided nodes\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Element} element1\n   * @argument {Element} element2\n   * @returns {Element} common offset parent\n   */ function findCommonOffsetParent(element1, element2) {\n        // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n        if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) return document.documentElement;\n        // Here we make sure to give as \"start\" the element that comes first in the DOM\n        var order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING;\n        var start = order ? element1 : element2;\n        var end = order ? element2 : element1;\n        // Get common ancestor container\n        var range = document.createRange();\n        range.setStart(start, 0);\n        range.setEnd(end, 0);\n        var commonAncestorContainer = range.commonAncestorContainer;\n        // Both nodes are inside #document\n        if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) {\n            if (isOffsetContainer(commonAncestorContainer)) return commonAncestorContainer;\n            return getOffsetParent(commonAncestorContainer);\n        }\n        // one of the nodes is inside shadowDOM, find which one\n        var element1root = getRoot(element1);\n        if (element1root.host) return findCommonOffsetParent(element1root.host, element2);\n        else return findCommonOffsetParent(element1, getRoot(element2).host);\n    }\n    /**\n   * Gets the scroll value of the given element in the given side (top and left)\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Element} element\n   * @argument {String} side `top` or `left`\n   * @returns {number} amount of scrolled pixels\n   */ function getScroll(element) {\n        var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top';\n        var upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n        var nodeName = element.nodeName;\n        if (nodeName === 'BODY' || nodeName === 'HTML') {\n            var html = element.ownerDocument.documentElement;\n            var scrollingElement = element.ownerDocument.scrollingElement || html;\n            return scrollingElement[upperSide];\n        }\n        return element[upperSide];\n    }\n    /*\n   * Sum or subtract the element scroll values (left and top) from a given rect object\n   * @method\n   * @memberof Popper.Utils\n   * @param {Object} rect - Rect object you want to change\n   * @param {HTMLElement} element - The element from the function reads the scroll values\n   * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n   * @return {Object} rect - The modifier rect object\n   */ function includeScroll(rect, element) {\n        var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n        var scrollTop = getScroll(element, 'top');\n        var scrollLeft = getScroll(element, 'left');\n        var modifier = subtract ? -1 : 1;\n        rect.top += scrollTop * modifier;\n        rect.bottom += scrollTop * modifier;\n        rect.left += scrollLeft * modifier;\n        rect.right += scrollLeft * modifier;\n        return rect;\n    }\n    /*\n   * Helper to detect borders of a given element\n   * @method\n   * @memberof Popper.Utils\n   * @param {CSSStyleDeclaration} styles\n   * Result of `getStyleComputedProperty` on the given element\n   * @param {String} axis - `x` or `y`\n   * @return {number} borders - The borders size of the given axis\n   */ function getBordersSize(styles, axis) {\n        var sideA = axis === 'x' ? 'Left' : 'Top';\n        var sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n        return parseFloat(styles['border' + sideA + 'Width']) + parseFloat(styles['border' + sideB + 'Width']);\n    }\n    function getSize(axis, body, html, computedStyle) {\n        return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE(10) ? parseInt(html['offset' + axis]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')]) : 0);\n    }\n    function getWindowSizes(document1) {\n        var body = document1.body;\n        var html = document1.documentElement;\n        var computedStyle = isIE(10) && getComputedStyle(html);\n        return {\n            height: getSize('Height', body, html, computedStyle),\n            width: getSize('Width', body, html, computedStyle)\n        };\n    }\n    var classCallCheck = function(instance, Constructor) {\n        if (!(instance instanceof Constructor)) throw new TypeError(\"Cannot call a class as a function\");\n    };\n    var createClass = function() {\n        function defineProperties(target, props) {\n            for(var i = 0; i < props.length; i++){\n                var descriptor = props[i];\n                descriptor.enumerable = descriptor.enumerable || false;\n                descriptor.configurable = true;\n                if (\"value\" in descriptor) descriptor.writable = true;\n                Object.defineProperty(target, descriptor.key, descriptor);\n            }\n        }\n        return function(Constructor, protoProps, staticProps) {\n            if (protoProps) defineProperties(Constructor.prototype, protoProps);\n            if (staticProps) defineProperties(Constructor, staticProps);\n            return Constructor;\n        };\n    }();\n    var defineProperty = function(obj, key, value) {\n        if (key in obj) Object.defineProperty(obj, key, {\n            value: value,\n            enumerable: true,\n            configurable: true,\n            writable: true\n        });\n        else obj[key] = value;\n        return obj;\n    };\n    var _extends = Object.assign || function(target) {\n        for(var i = 1; i < arguments.length; i++){\n            var source = arguments[i];\n            for(var key in source)if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];\n        }\n        return target;\n    };\n    /**\n   * Given element offsets, generate an output similar to getBoundingClientRect\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Object} offsets\n   * @returns {Object} ClientRect like output\n   */ function getClientRect(offsets) {\n        return _extends({}, offsets, {\n            right: offsets.left + offsets.width,\n            bottom: offsets.top + offsets.height\n        });\n    }\n    /**\n   * Get bounding client rect of given element\n   * @method\n   * @memberof Popper.Utils\n   * @param {HTMLElement} element\n   * @return {Object} client rect\n   */ function getBoundingClientRect(element) {\n        var rect = {};\n        // IE10 10 FIX: Please, don't ask, the element isn't\n        // considered in DOM in some circumstances...\n        // This isn't reproducible in IE10 compatibility mode of IE11\n        try {\n            if (isIE(10)) {\n                rect = element.getBoundingClientRect();\n                var scrollTop = getScroll(element, 'top');\n                var scrollLeft = getScroll(element, 'left');\n                rect.top += scrollTop;\n                rect.left += scrollLeft;\n                rect.bottom += scrollTop;\n                rect.right += scrollLeft;\n            } else rect = element.getBoundingClientRect();\n        } catch (e) {}\n        var result = {\n            left: rect.left,\n            top: rect.top,\n            width: rect.right - rect.left,\n            height: rect.bottom - rect.top\n        };\n        // subtract scrollbar size from sizes\n        var sizes = element.nodeName === 'HTML' ? getWindowSizes(element.ownerDocument) : {};\n        var width = sizes.width || element.clientWidth || result.width;\n        var height = sizes.height || element.clientHeight || result.height;\n        var horizScrollbar = element.offsetWidth - width;\n        var vertScrollbar = element.offsetHeight - height;\n        // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n        // we make this check conditional for performance reasons\n        if (horizScrollbar || vertScrollbar) {\n            var styles = getStyleComputedProperty(element);\n            horizScrollbar -= getBordersSize(styles, 'x');\n            vertScrollbar -= getBordersSize(styles, 'y');\n            result.width -= horizScrollbar;\n            result.height -= vertScrollbar;\n        }\n        return getClientRect(result);\n    }\n    function getOffsetRectRelativeToArbitraryNode(children, parent) {\n        var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n        var isIE10 = isIE(10);\n        var isHTML = parent.nodeName === 'HTML';\n        var childrenRect = getBoundingClientRect(children);\n        var parentRect = getBoundingClientRect(parent);\n        var scrollParent = getScrollParent(children);\n        var styles = getStyleComputedProperty(parent);\n        var borderTopWidth = parseFloat(styles.borderTopWidth);\n        var borderLeftWidth = parseFloat(styles.borderLeftWidth);\n        // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n        if (fixedPosition && isHTML) {\n            parentRect.top = Math.max(parentRect.top, 0);\n            parentRect.left = Math.max(parentRect.left, 0);\n        }\n        var offsets = getClientRect({\n            top: childrenRect.top - parentRect.top - borderTopWidth,\n            left: childrenRect.left - parentRect.left - borderLeftWidth,\n            width: childrenRect.width,\n            height: childrenRect.height\n        });\n        offsets.marginTop = 0;\n        offsets.marginLeft = 0;\n        // Subtract margins of documentElement in case it's being used as parent\n        // we do this only on HTML because it's the only element that behaves\n        // differently when margins are applied to it. The margins are included in\n        // the box of the documentElement, in the other cases not.\n        if (!isIE10 && isHTML) {\n            var marginTop = parseFloat(styles.marginTop);\n            var marginLeft = parseFloat(styles.marginLeft);\n            offsets.top -= borderTopWidth - marginTop;\n            offsets.bottom -= borderTopWidth - marginTop;\n            offsets.left -= borderLeftWidth - marginLeft;\n            offsets.right -= borderLeftWidth - marginLeft;\n            // Attach marginTop and marginLeft because in some circumstances we may need them\n            offsets.marginTop = marginTop;\n            offsets.marginLeft = marginLeft;\n        }\n        if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') offsets = includeScroll(offsets, parent);\n        return offsets;\n    }\n    function getViewportOffsetRectRelativeToArtbitraryNode(element) {\n        var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n        var html = element.ownerDocument.documentElement;\n        var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n        var width = Math.max(html.clientWidth, window.innerWidth || 0);\n        var height = Math.max(html.clientHeight, window.innerHeight || 0);\n        var scrollTop = !excludeScroll ? getScroll(html) : 0;\n        var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n        var offset = {\n            top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n            left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n            width: width,\n            height: height\n        };\n        return getClientRect(offset);\n    }\n    /**\n   * Check if the given element is fixed or is inside a fixed parent\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Element} element\n   * @argument {Element} customContainer\n   * @returns {Boolean} answer to \"isFixed?\"\n   */ function isFixed(element) {\n        var nodeName = element.nodeName;\n        if (nodeName === 'BODY' || nodeName === 'HTML') return false;\n        if (getStyleComputedProperty(element, 'position') === 'fixed') return true;\n        var parentNode = getParentNode(element);\n        if (!parentNode) return false;\n        return isFixed(parentNode);\n    }\n    /**\n   * Finds the first parent of an element that has a transformed property defined\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Element} element\n   * @returns {Element} first transformed parent or documentElement\n   */ function getFixedPositionOffsetParent(element) {\n        // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n        if (!element || !element.parentElement || isIE()) return document.documentElement;\n        var el = element.parentElement;\n        while(el && getStyleComputedProperty(el, 'transform') === 'none')el = el.parentElement;\n        return el || document.documentElement;\n    }\n    /**\n   * Computed the boundaries limits and return them\n   * @method\n   * @memberof Popper.Utils\n   * @param {HTMLElement} popper\n   * @param {HTMLElement} reference\n   * @param {number} padding\n   * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n   * @param {Boolean} fixedPosition - Is in fixed position mode\n   * @returns {Object} Coordinates of the boundaries\n   */ function getBoundaries(popper, reference, padding, boundariesElement) {\n        var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n        // NOTE: 1 DOM access here\n        var boundaries = {\n            top: 0,\n            left: 0\n        };\n        var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n        // Handle viewport case\n        if (boundariesElement === 'viewport') boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n        else {\n            // Handle other cases based on DOM element used as boundaries\n            var boundariesNode = void 0;\n            if (boundariesElement === 'scrollParent') {\n                boundariesNode = getScrollParent(getParentNode(reference));\n                if (boundariesNode.nodeName === 'BODY') boundariesNode = popper.ownerDocument.documentElement;\n            } else if (boundariesElement === 'window') boundariesNode = popper.ownerDocument.documentElement;\n            else boundariesNode = boundariesElement;\n            var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition);\n            // In case of HTML, we need a different computation\n            if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n                var _getWindowSizes = getWindowSizes(popper.ownerDocument), height = _getWindowSizes.height, width = _getWindowSizes.width;\n                boundaries.top += offsets.top - offsets.marginTop;\n                boundaries.bottom = height + offsets.top;\n                boundaries.left += offsets.left - offsets.marginLeft;\n                boundaries.right = width + offsets.left;\n            } else // for all the other DOM elements, this one is good\n            boundaries = offsets;\n        }\n        // Add paddings\n        padding = padding || 0;\n        var isPaddingNumber = typeof padding === 'number';\n        boundaries.left += isPaddingNumber ? padding : padding.left || 0;\n        boundaries.top += isPaddingNumber ? padding : padding.top || 0;\n        boundaries.right -= isPaddingNumber ? padding : padding.right || 0;\n        boundaries.bottom -= isPaddingNumber ? padding : padding.bottom || 0;\n        return boundaries;\n    }\n    function getArea(_ref) {\n        var width = _ref.width, height = _ref.height;\n        return width * height;\n    }\n    /**\n   * Utility used to transform the `auto` placement to the placement with more\n   * available space.\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Object} data - The data object generated by update method\n   * @argument {Object} options - Modifiers configuration and options\n   * @returns {Object} The data object, properly modified\n   */ function computeAutoPlacement(placement, refRect, popper, reference, boundariesElement) {\n        var padding = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;\n        if (placement.indexOf('auto') === -1) return placement;\n        var boundaries = getBoundaries(popper, reference, padding, boundariesElement);\n        var rects = {\n            top: {\n                width: boundaries.width,\n                height: refRect.top - boundaries.top\n            },\n            right: {\n                width: boundaries.right - refRect.right,\n                height: boundaries.height\n            },\n            bottom: {\n                width: boundaries.width,\n                height: boundaries.bottom - refRect.bottom\n            },\n            left: {\n                width: refRect.left - boundaries.left,\n                height: boundaries.height\n            }\n        };\n        var sortedAreas = Object.keys(rects).map(function(key) {\n            return _extends({\n                key: key\n            }, rects[key], {\n                area: getArea(rects[key])\n            });\n        }).sort(function(a, b) {\n            return b.area - a.area;\n        });\n        var filteredAreas = sortedAreas.filter(function(_ref2) {\n            var width = _ref2.width, height = _ref2.height;\n            return width >= popper.clientWidth && height >= popper.clientHeight;\n        });\n        var computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key;\n        var variation = placement.split('-')[1];\n        return computedPlacement + (variation ? '-' + variation : '');\n    }\n    /**\n   * Get offsets to the reference element\n   * @method\n   * @memberof Popper.Utils\n   * @param {Object} state\n   * @param {Element} popper - the popper element\n   * @param {Element} reference - the reference element (the popper will be relative to this)\n   * @param {Element} fixedPosition - is in fixed position mode\n   * @returns {Object} An object containing the offsets which will be applied to the popper\n   */ function getReferenceOffsets(state, popper, reference) {\n        var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n        var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n        return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n    }\n    /**\n   * Get the outer sizes of the given element (offset size + margins)\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Element} element\n   * @returns {Object} object containing width and height properties\n   */ function getOuterSizes(element) {\n        var window1 = element.ownerDocument.defaultView;\n        var styles = window1.getComputedStyle(element);\n        var x = parseFloat(styles.marginTop || 0) + parseFloat(styles.marginBottom || 0);\n        var y = parseFloat(styles.marginLeft || 0) + parseFloat(styles.marginRight || 0);\n        var result = {\n            width: element.offsetWidth + y,\n            height: element.offsetHeight + x\n        };\n        return result;\n    }\n    /**\n   * Get the opposite placement of the given one\n   * @method\n   * @memberof Popper.Utils\n   * @argument {String} placement\n   * @returns {String} flipped placement\n   */ function getOppositePlacement(placement) {\n        var hash = {\n            left: 'right',\n            right: 'left',\n            bottom: 'top',\n            top: 'bottom'\n        };\n        return placement.replace(/left|right|bottom|top/g, function(matched) {\n            return hash[matched];\n        });\n    }\n    /**\n   * Get offsets to the popper\n   * @method\n   * @memberof Popper.Utils\n   * @param {Object} position - CSS position the Popper will get applied\n   * @param {HTMLElement} popper - the popper element\n   * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n   * @param {String} placement - one of the valid placement options\n   * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n   */ function getPopperOffsets(popper, referenceOffsets, placement) {\n        placement = placement.split('-')[0];\n        // Get popper node sizes\n        var popperRect = getOuterSizes(popper);\n        // Add position, width and height to our offsets object\n        var popperOffsets = {\n            width: popperRect.width,\n            height: popperRect.height\n        };\n        // depending by the popper placement we have to compute its offsets slightly differently\n        var isHoriz = [\n            'right',\n            'left'\n        ].indexOf(placement) !== -1;\n        var mainSide = isHoriz ? 'top' : 'left';\n        var secondarySide = isHoriz ? 'left' : 'top';\n        var measurement = isHoriz ? 'height' : 'width';\n        var secondaryMeasurement = !isHoriz ? 'height' : 'width';\n        popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2;\n        if (placement === secondarySide) popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n        else popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)];\n        return popperOffsets;\n    }\n    /**\n   * Mimics the `find` method of Array\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Array} arr\n   * @argument prop\n   * @argument value\n   * @returns index or -1\n   */ function find(arr, check) {\n        // use native find if supported\n        if (Array.prototype.find) return arr.find(check);\n        // use `filter` to obtain the same behavior of `find`\n        return arr.filter(check)[0];\n    }\n    /**\n   * Return the index of the matching object\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Array} arr\n   * @argument prop\n   * @argument value\n   * @returns index or -1\n   */ function findIndex(arr, prop, value) {\n        // use native findIndex if supported\n        if (Array.prototype.findIndex) return arr.findIndex(function(cur) {\n            return cur[prop] === value;\n        });\n        // use `find` + `indexOf` if `findIndex` isn't supported\n        var match = find(arr, function(obj) {\n            return obj[prop] === value;\n        });\n        return arr.indexOf(match);\n    }\n    /**\n   * Loop trough the list of modifiers and run them in order,\n   * each of them will then edit the data object.\n   * @method\n   * @memberof Popper.Utils\n   * @param {dataObject} data\n   * @param {Array} modifiers\n   * @param {String} ends - Optional modifier name used as stopper\n   * @returns {dataObject}\n   */ function runModifiers(modifiers, data, ends) {\n        var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n        modifiersToRun.forEach(function(modifier) {\n            if (modifier['function']) // eslint-disable-line dot-notation\n            console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n            var fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n            if (modifier.enabled && isFunction(fn)) {\n                // Add properties to offsets to make them a complete clientRect object\n                // we do this before each modifier to make sure the previous one doesn't\n                // mess with these values\n                data.offsets.popper = getClientRect(data.offsets.popper);\n                data.offsets.reference = getClientRect(data.offsets.reference);\n                data = fn(data, modifier);\n            }\n        });\n        return data;\n    }\n    /**\n   * Updates the position of the popper, computing the new offsets and applying\n   * the new style.<br />\n   * Prefer `scheduleUpdate` over `update` because of performance reasons.\n   * @method\n   * @memberof Popper\n   */ function update() {\n        // if popper is destroyed, don't perform any further update\n        if (this.state.isDestroyed) return;\n        var data = {\n            instance: this,\n            styles: {},\n            arrowStyles: {},\n            attributes: {},\n            flipped: false,\n            offsets: {}\n        };\n        // compute reference element offsets\n        data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed);\n        // compute auto placement, store placement inside the data object,\n        // modifiers will be able to edit `placement` if needed\n        // and refer to originalPlacement to know the original value\n        data.placement = computeAutoPlacement(this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding);\n        // store the computed placement inside `originalPlacement`\n        data.originalPlacement = data.placement;\n        data.positionFixed = this.options.positionFixed;\n        // compute the popper offsets\n        data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement);\n        data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute';\n        // run the modifiers\n        data = runModifiers(this.modifiers, data);\n        // the first `update` will call `onCreate` callback\n        // the other ones will call `onUpdate` callback\n        if (!this.state.isCreated) {\n            this.state.isCreated = true;\n            this.options.onCreate(data);\n        } else this.options.onUpdate(data);\n    }\n    /**\n   * Helper used to know if the given modifier is enabled.\n   * @method\n   * @memberof Popper.Utils\n   * @returns {Boolean}\n   */ function isModifierEnabled(modifiers, modifierName) {\n        return modifiers.some(function(_ref) {\n            var name = _ref.name, enabled = _ref.enabled;\n            return enabled && name === modifierName;\n        });\n    }\n    /**\n   * Get the prefixed supported property name\n   * @method\n   * @memberof Popper.Utils\n   * @argument {String} property (camelCase)\n   * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n   */ function getSupportedPropertyName(property) {\n        var prefixes = [\n            false,\n            'ms',\n            'Webkit',\n            'Moz',\n            'O'\n        ];\n        var upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n        for(var i = 0; i < prefixes.length; i++){\n            var prefix = prefixes[i];\n            var toCheck = prefix ? '' + prefix + upperProp : property;\n            if (typeof document.body.style[toCheck] !== 'undefined') return toCheck;\n        }\n        return null;\n    }\n    /**\n   * Destroys the popper.\n   * @method\n   * @memberof Popper\n   */ function destroy() {\n        this.state.isDestroyed = true;\n        // touch DOM only if `applyStyle` modifier is enabled\n        if (isModifierEnabled(this.modifiers, 'applyStyle')) {\n            this.popper.removeAttribute('x-placement');\n            this.popper.style.position = '';\n            this.popper.style.top = '';\n            this.popper.style.left = '';\n            this.popper.style.right = '';\n            this.popper.style.bottom = '';\n            this.popper.style.willChange = '';\n            this.popper.style[getSupportedPropertyName('transform')] = '';\n        }\n        this.disableEventListeners();\n        // remove the popper if user explicitly asked for the deletion on destroy\n        // do not use `remove` because IE11 doesn't support it\n        if (this.options.removeOnDestroy) this.popper.parentNode.removeChild(this.popper);\n        return this;\n    }\n    /**\n   * Get the window associated with the element\n   * @argument {Element} element\n   * @returns {Window}\n   */ function getWindow(element) {\n        var ownerDocument = element.ownerDocument;\n        return ownerDocument ? ownerDocument.defaultView : window;\n    }\n    function attachToScrollParents(scrollParent, event, callback, scrollParents) {\n        var isBody = scrollParent.nodeName === 'BODY';\n        var target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n        target.addEventListener(event, callback, {\n            passive: true\n        });\n        if (!isBody) attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents);\n        scrollParents.push(target);\n    }\n    /**\n   * Setup needed event listeners used to update the popper position\n   * @method\n   * @memberof Popper.Utils\n   * @private\n   */ function setupEventListeners(reference, options, state, updateBound) {\n        // Resize event listener on window\n        state.updateBound = updateBound;\n        getWindow(reference).addEventListener('resize', state.updateBound, {\n            passive: true\n        });\n        // Scroll event listener on scroll parents\n        var scrollElement = getScrollParent(reference);\n        attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents);\n        state.scrollElement = scrollElement;\n        state.eventsEnabled = true;\n        return state;\n    }\n    /**\n   * It will add resize/scroll events and start recalculating\n   * position of the popper element when they are triggered.\n   * @method\n   * @memberof Popper\n   */ function enableEventListeners() {\n        if (!this.state.eventsEnabled) this.state = setupEventListeners(this.reference, this.options, this.state, this.scheduleUpdate);\n    }\n    /**\n   * Remove event listeners used to update the popper position\n   * @method\n   * @memberof Popper.Utils\n   * @private\n   */ function removeEventListeners(reference, state) {\n        // Remove resize event listener on window\n        getWindow(reference).removeEventListener('resize', state.updateBound);\n        // Remove scroll event listener on scroll parents\n        state.scrollParents.forEach(function(target) {\n            target.removeEventListener('scroll', state.updateBound);\n        });\n        // Reset state\n        state.updateBound = null;\n        state.scrollParents = [];\n        state.scrollElement = null;\n        state.eventsEnabled = false;\n        return state;\n    }\n    /**\n   * It will remove resize/scroll events and won't recalculate popper position\n   * when they are triggered. It also won't trigger `onUpdate` callback anymore,\n   * unless you call `update` method manually.\n   * @method\n   * @memberof Popper\n   */ function disableEventListeners() {\n        if (this.state.eventsEnabled) {\n            cancelAnimationFrame(this.scheduleUpdate);\n            this.state = removeEventListeners(this.reference, this.state);\n        }\n    }\n    /**\n   * Tells if a given input is a number\n   * @method\n   * @memberof Popper.Utils\n   * @param {*} input to check\n   * @return {Boolean}\n   */ function isNumeric(n) {\n        return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n    }\n    /**\n   * Set the style to the given popper\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Element} element - Element to apply the style to\n   * @argument {Object} styles\n   * Object with a list of properties and values which will be applied to the element\n   */ function setStyles(element, styles) {\n        Object.keys(styles).forEach(function(prop) {\n            var unit = '';\n            // add unit if the value is numeric and is one of the following\n            if ([\n                'width',\n                'height',\n                'top',\n                'right',\n                'bottom',\n                'left'\n            ].indexOf(prop) !== -1 && isNumeric(styles[prop])) unit = 'px';\n            element.style[prop] = styles[prop] + unit;\n        });\n    }\n    /**\n   * Set the attributes to the given popper\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Element} element - Element to apply the attributes to\n   * @argument {Object} styles\n   * Object with a list of properties and values which will be applied to the element\n   */ function setAttributes(element, attributes) {\n        Object.keys(attributes).forEach(function(prop) {\n            var value = attributes[prop];\n            if (value !== false) element.setAttribute(prop, attributes[prop]);\n            else element.removeAttribute(prop);\n        });\n    }\n    /**\n   * @function\n   * @memberof Modifiers\n   * @argument {Object} data - The data object generated by `update` method\n   * @argument {Object} data.styles - List of style properties - values to apply to popper element\n   * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element\n   * @argument {Object} options - Modifiers configuration and options\n   * @returns {Object} The same data object\n   */ function applyStyle(data) {\n        // any property present in `data.styles` will be applied to the popper,\n        // in this way we can make the 3rd party modifiers add custom styles to it\n        // Be aware, modifiers could override the properties defined in the previous\n        // lines of this modifier!\n        setStyles(data.instance.popper, data.styles);\n        // any property present in `data.attributes` will be applied to the popper,\n        // they will be set as HTML attributes of the element\n        setAttributes(data.instance.popper, data.attributes);\n        // if arrowElement is defined and arrowStyles has some properties\n        if (data.arrowElement && Object.keys(data.arrowStyles).length) setStyles(data.arrowElement, data.arrowStyles);\n        return data;\n    }\n    /**\n   * Set the x-placement attribute before everything else because it could be used\n   * to add margins to the popper margins needs to be calculated to get the\n   * correct popper offsets.\n   * @method\n   * @memberof Popper.modifiers\n   * @param {HTMLElement} reference - The reference element used to position the popper\n   * @param {HTMLElement} popper - The HTML element used as popper\n   * @param {Object} options - Popper.js options\n   */ function applyStyleOnLoad(reference, popper, options, modifierOptions, state) {\n        // compute reference element offsets\n        var referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);\n        // compute auto placement, store placement inside the data object,\n        // modifiers will be able to edit `placement` if needed\n        // and refer to originalPlacement to know the original value\n        var placement = computeAutoPlacement(options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement, options.modifiers.flip.padding);\n        popper.setAttribute('x-placement', placement);\n        // Apply `position` to popper before anything else because\n        // without the position applied we can't guarantee correct computations\n        setStyles(popper, {\n            position: options.positionFixed ? 'fixed' : 'absolute'\n        });\n        return options;\n    }\n    /**\n   * @function\n   * @memberof Popper.Utils\n   * @argument {Object} data - The data object generated by `update` method\n   * @argument {Boolean} shouldRound - If the offsets should be rounded at all\n   * @returns {Object} The popper's position offsets rounded\n   *\n   * The tale of pixel-perfect positioning. It's still not 100% perfect, but as\n   * good as it can be within reason.\n   * Discussion here: https://github.com/FezVrasta/popper.js/pull/715\n   *\n   * Low DPI screens cause a popper to be blurry if not using full pixels (Safari\n   * as well on High DPI screens).\n   *\n   * Firefox prefers no rounding for positioning and does not have blurriness on\n   * high DPI screens.\n   *\n   * Only horizontal placement and left/right values need to be considered.\n   */ function getRoundedOffsets(data, shouldRound) {\n        var _data$offsets = data.offsets, popper = _data$offsets.popper, reference = _data$offsets.reference;\n        var round = Math.round, floor = Math.floor;\n        var noRound = function noRound(v) {\n            return v;\n        };\n        var referenceWidth = round(reference.width);\n        var popperWidth = round(popper.width);\n        var isVertical = [\n            'left',\n            'right'\n        ].indexOf(data.placement) !== -1;\n        var isVariation = data.placement.indexOf('-') !== -1;\n        var sameWidthParity = referenceWidth % 2 === popperWidth % 2;\n        var bothOddWidth = referenceWidth % 2 === 1 && popperWidth % 2 === 1;\n        var horizontalToInteger = !shouldRound ? noRound : isVertical || isVariation || sameWidthParity ? round : floor;\n        var verticalToInteger = !shouldRound ? noRound : round;\n        return {\n            left: horizontalToInteger(bothOddWidth && !isVariation && shouldRound ? popper.left - 1 : popper.left),\n            top: verticalToInteger(popper.top),\n            bottom: verticalToInteger(popper.bottom),\n            right: horizontalToInteger(popper.right)\n        };\n    }\n    var isFirefox = isBrowser && /Firefox/i.test(navigator.userAgent);\n    /**\n   * @function\n   * @memberof Modifiers\n   * @argument {Object} data - The data object generated by `update` method\n   * @argument {Object} options - Modifiers configuration and options\n   * @returns {Object} The data object, properly modified\n   */ function computeStyle(data, options) {\n        var x = options.x, y = options.y;\n        var popper = data.offsets.popper;\n        // Remove this legacy support in Popper.js v2\n        var legacyGpuAccelerationOption = find(data.instance.modifiers, function(modifier) {\n            return modifier.name === 'applyStyle';\n        }).gpuAcceleration;\n        if (legacyGpuAccelerationOption !== undefined) console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!');\n        var gpuAcceleration = legacyGpuAccelerationOption !== undefined ? legacyGpuAccelerationOption : options.gpuAcceleration;\n        var offsetParent = getOffsetParent(data.instance.popper);\n        var offsetParentRect = getBoundingClientRect(offsetParent);\n        // Styles\n        var styles = {\n            position: popper.position\n        };\n        var offsets = getRoundedOffsets(data, window.devicePixelRatio < 2 || !isFirefox);\n        var sideA = x === 'bottom' ? 'top' : 'bottom';\n        var sideB = y === 'right' ? 'left' : 'right';\n        // if gpuAcceleration is set to `true` and transform is supported,\n        //  we use `translate3d` to apply the position to the popper we\n        // automatically use the supported prefixed version if needed\n        var prefixedProperty = getSupportedPropertyName('transform');\n        // now, let's make a step back and look at this code closely (wtf?)\n        // If the content of the popper grows once it's been positioned, it\n        // may happen that the popper gets misplaced because of the new content\n        // overflowing its reference element\n        // To avoid this problem, we provide two options (x and y), which allow\n        // the consumer to define the offset origin.\n        // If we position a popper on top of a reference element, we can set\n        // `x` to `top` to make the popper grow towards its top instead of\n        // its bottom.\n        var left = void 0, top = void 0;\n        if (sideA === 'bottom') {\n            // when offsetParent is <html> the positioning is relative to the bottom of the screen (excluding the scrollbar)\n            // and not the bottom of the html element\n            if (offsetParent.nodeName === 'HTML') top = -offsetParent.clientHeight + offsets.bottom;\n            else top = -offsetParentRect.height + offsets.bottom;\n        } else top = offsets.top;\n        if (sideB === 'right') {\n            if (offsetParent.nodeName === 'HTML') left = -offsetParent.clientWidth + offsets.right;\n            else left = -offsetParentRect.width + offsets.right;\n        } else left = offsets.left;\n        if (gpuAcceleration && prefixedProperty) {\n            styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)';\n            styles[sideA] = 0;\n            styles[sideB] = 0;\n            styles.willChange = 'transform';\n        } else {\n            // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties\n            var invertTop = sideA === 'bottom' ? -1 : 1;\n            var invertLeft = sideB === 'right' ? -1 : 1;\n            styles[sideA] = top * invertTop;\n            styles[sideB] = left * invertLeft;\n            styles.willChange = sideA + ', ' + sideB;\n        }\n        // Attributes\n        var attributes = {\n            'x-placement': data.placement\n        };\n        // Update `data` attributes, styles and arrowStyles\n        data.attributes = _extends({}, attributes, data.attributes);\n        data.styles = _extends({}, styles, data.styles);\n        data.arrowStyles = _extends({}, data.offsets.arrow, data.arrowStyles);\n        return data;\n    }\n    /**\n   * Helper used to know if the given modifier depends from another one.<br />\n   * It checks if the needed modifier is listed and enabled.\n   * @method\n   * @memberof Popper.Utils\n   * @param {Array} modifiers - list of modifiers\n   * @param {String} requestingName - name of requesting modifier\n   * @param {String} requestedName - name of requested modifier\n   * @returns {Boolean}\n   */ function isModifierRequired(modifiers, requestingName, requestedName) {\n        var requesting = find(modifiers, function(_ref) {\n            var name = _ref.name;\n            return name === requestingName;\n        });\n        var isRequired = !!requesting && modifiers.some(function(modifier) {\n            return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order;\n        });\n        if (!isRequired) {\n            var _requesting = '`' + requestingName + '`';\n            var requested = '`' + requestedName + '`';\n            console.warn(requested + ' modifier is required by ' + _requesting + ' modifier in order to work, be sure to include it before ' + _requesting + '!');\n        }\n        return isRequired;\n    }\n    /**\n   * @function\n   * @memberof Modifiers\n   * @argument {Object} data - The data object generated by update method\n   * @argument {Object} options - Modifiers configuration and options\n   * @returns {Object} The data object, properly modified\n   */ function arrow(data, options) {\n        var _data$offsets$arrow;\n        // arrow depends on keepTogether in order to work\n        if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) return data;\n        var arrowElement = options.element;\n        // if arrowElement is a string, suppose it's a CSS selector\n        if (typeof arrowElement === 'string') {\n            arrowElement = data.instance.popper.querySelector(arrowElement);\n            // if arrowElement is not found, don't run the modifier\n            if (!arrowElement) return data;\n        } else // if the arrowElement isn't a query selector we must check that the\n        // provided DOM node is child of its popper node\n        if (!data.instance.popper.contains(arrowElement)) {\n            console.warn('WARNING: `arrow.element` must be child of its popper element!');\n            return data;\n        }\n        var placement = data.placement.split('-')[0];\n        var _data$offsets = data.offsets, popper = _data$offsets.popper, reference = _data$offsets.reference;\n        var isVertical = [\n            'left',\n            'right'\n        ].indexOf(placement) !== -1;\n        var len = isVertical ? 'height' : 'width';\n        var sideCapitalized = isVertical ? 'Top' : 'Left';\n        var side = sideCapitalized.toLowerCase();\n        var altSide = isVertical ? 'left' : 'top';\n        var opSide = isVertical ? 'bottom' : 'right';\n        var arrowElementSize = getOuterSizes(arrowElement)[len];\n        //\n        // extends keepTogether behavior making sure the popper and its\n        // reference have enough pixels in conjunction\n        //\n        // top/left side\n        if (reference[opSide] - arrowElementSize < popper[side]) data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize);\n        // bottom/right side\n        if (reference[side] + arrowElementSize > popper[opSide]) data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide];\n        data.offsets.popper = getClientRect(data.offsets.popper);\n        // compute center of the popper\n        var center = reference[side] + reference[len] / 2 - arrowElementSize / 2;\n        // Compute the sideValue using the updated popper offsets\n        // take popper margin in account because we don't have this info available\n        var css = getStyleComputedProperty(data.instance.popper);\n        var popperMarginSide = parseFloat(css['margin' + sideCapitalized]);\n        var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width']);\n        var sideValue = center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;\n        // prevent arrowElement from being placed not contiguously to its popper\n        sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\n        data.arrowElement = arrowElement;\n        data.offsets.arrow = (_data$offsets$arrow = {}, defineProperty(_data$offsets$arrow, side, Math.round(sideValue)), defineProperty(_data$offsets$arrow, altSide, ''), _data$offsets$arrow);\n        return data;\n    }\n    /**\n   * Get the opposite placement variation of the given one\n   * @method\n   * @memberof Popper.Utils\n   * @argument {String} placement variation\n   * @returns {String} flipped placement variation\n   */ function getOppositeVariation(variation) {\n        if (variation === 'end') return 'start';\n        else if (variation === 'start') return 'end';\n        return variation;\n    }\n    /**\n   * List of accepted placements to use as values of the `placement` option.<br />\n   * Valid placements are:\n   * - `auto`\n   * - `top`\n   * - `right`\n   * - `bottom`\n   * - `left`\n   *\n   * Each placement can have a variation from this list:\n   * - `-start`\n   * - `-end`\n   *\n   * Variations are interpreted easily if you think of them as the left to right\n   * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`\n   * is right.<br />\n   * Vertically (`left` and `right`), `start` is top and `end` is bottom.\n   *\n   * Some valid examples are:\n   * - `top-end` (on top of reference, right aligned)\n   * - `right-start` (on right of reference, top aligned)\n   * - `bottom` (on bottom, centered)\n   * - `auto-end` (on the side with more space available, alignment depends by placement)\n   *\n   * @static\n   * @type {Array}\n   * @enum {String}\n   * @readonly\n   * @method placements\n   * @memberof Popper\n   */ var placements = [\n        'auto-start',\n        'auto',\n        'auto-end',\n        'top-start',\n        'top',\n        'top-end',\n        'right-start',\n        'right',\n        'right-end',\n        'bottom-end',\n        'bottom',\n        'bottom-start',\n        'left-end',\n        'left',\n        'left-start'\n    ];\n    // Get rid of `auto` `auto-start` and `auto-end`\n    var validPlacements = placements.slice(3);\n    /**\n   * Given an initial placement, returns all the subsequent placements\n   * clockwise (or counter-clockwise).\n   *\n   * @method\n   * @memberof Popper.Utils\n   * @argument {String} placement - A valid placement (it accepts variations)\n   * @argument {Boolean} counter - Set to true to walk the placements counterclockwise\n   * @returns {Array} placements including their variations\n   */ function clockwise(placement) {\n        var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n        var index = validPlacements.indexOf(placement);\n        var arr = validPlacements.slice(index + 1).concat(validPlacements.slice(0, index));\n        return counter ? arr.reverse() : arr;\n    }\n    var BEHAVIORS = {\n        FLIP: 'flip',\n        CLOCKWISE: 'clockwise',\n        COUNTERCLOCKWISE: 'counterclockwise'\n    };\n    /**\n   * @function\n   * @memberof Modifiers\n   * @argument {Object} data - The data object generated by update method\n   * @argument {Object} options - Modifiers configuration and options\n   * @returns {Object} The data object, properly modified\n   */ function flip(data, options) {\n        // if `inner` modifier is enabled, we can't use the `flip` modifier\n        if (isModifierEnabled(data.instance.modifiers, 'inner')) return data;\n        if (data.flipped && data.placement === data.originalPlacement) // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\n        return data;\n        var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed);\n        var placement = data.placement.split('-')[0];\n        var placementOpposite = getOppositePlacement(placement);\n        var variation = data.placement.split('-')[1] || '';\n        var flipOrder = [];\n        switch(options.behavior){\n            case BEHAVIORS.FLIP:\n                flipOrder = [\n                    placement,\n                    placementOpposite\n                ];\n                break;\n            case BEHAVIORS.CLOCKWISE:\n                flipOrder = clockwise(placement);\n                break;\n            case BEHAVIORS.COUNTERCLOCKWISE:\n                flipOrder = clockwise(placement, true);\n                break;\n            default:\n                flipOrder = options.behavior;\n        }\n        flipOrder.forEach(function(step, index) {\n            if (placement !== step || flipOrder.length === index + 1) return data;\n            placement = data.placement.split('-')[0];\n            placementOpposite = getOppositePlacement(placement);\n            var popperOffsets = data.offsets.popper;\n            var refOffsets = data.offsets.reference;\n            // using floor because the reference offsets may contain decimals we are not going to consider here\n            var floor = Math.floor;\n            var overlapsRef = placement === 'left' && floor(popperOffsets.right) > floor(refOffsets.left) || placement === 'right' && floor(popperOffsets.left) < floor(refOffsets.right) || placement === 'top' && floor(popperOffsets.bottom) > floor(refOffsets.top) || placement === 'bottom' && floor(popperOffsets.top) < floor(refOffsets.bottom);\n            var overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);\n            var overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);\n            var overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);\n            var overflowsBottom = floor(popperOffsets.bottom) > floor(boundaries.bottom);\n            var overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom;\n            // flip the variation if required\n            var isVertical = [\n                'top',\n                'bottom'\n            ].indexOf(placement) !== -1;\n            // flips variation if reference element overflows boundaries\n            var flippedVariationByRef = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom);\n            // flips variation if popper content overflows boundaries\n            var flippedVariationByContent = !!options.flipVariationsByContent && (isVertical && variation === 'start' && overflowsRight || isVertical && variation === 'end' && overflowsLeft || !isVertical && variation === 'start' && overflowsBottom || !isVertical && variation === 'end' && overflowsTop);\n            var flippedVariation = flippedVariationByRef || flippedVariationByContent;\n            if (overlapsRef || overflowsBoundaries || flippedVariation) {\n                // this boolean to detect any flip loop\n                data.flipped = true;\n                if (overlapsRef || overflowsBoundaries) placement = flipOrder[index + 1];\n                if (flippedVariation) variation = getOppositeVariation(variation);\n                data.placement = placement + (variation ? '-' + variation : '');\n                // this object contains `position`, we want to preserve it along with\n                // any additional property we may add in the future\n                data.offsets.popper = _extends({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement));\n                data = runModifiers(data.instance.modifiers, data, 'flip');\n            }\n        });\n        return data;\n    }\n    /**\n   * @function\n   * @memberof Modifiers\n   * @argument {Object} data - The data object generated by update method\n   * @argument {Object} options - Modifiers configuration and options\n   * @returns {Object} The data object, properly modified\n   */ function keepTogether(data) {\n        var _data$offsets = data.offsets, popper = _data$offsets.popper, reference = _data$offsets.reference;\n        var placement = data.placement.split('-')[0];\n        var floor = Math.floor;\n        var isVertical = [\n            'top',\n            'bottom'\n        ].indexOf(placement) !== -1;\n        var side = isVertical ? 'right' : 'bottom';\n        var opSide = isVertical ? 'left' : 'top';\n        var measurement = isVertical ? 'width' : 'height';\n        if (popper[side] < floor(reference[opSide])) data.offsets.popper[opSide] = floor(reference[opSide]) - popper[measurement];\n        if (popper[opSide] > floor(reference[side])) data.offsets.popper[opSide] = floor(reference[side]);\n        return data;\n    }\n    /**\n   * Converts a string containing value + unit into a px value number\n   * @function\n   * @memberof {modifiers~offset}\n   * @private\n   * @argument {String} str - Value + unit string\n   * @argument {String} measurement - `height` or `width`\n   * @argument {Object} popperOffsets\n   * @argument {Object} referenceOffsets\n   * @returns {Number|String}\n   * Value in pixels, or original string if no values were extracted\n   */ function toValue(str, measurement, popperOffsets, referenceOffsets) {\n        // separate value from unit\n        var split = str.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/);\n        var value = +split[1];\n        var unit = split[2];\n        // If it's not a number it's an operator, I guess\n        if (!value) return str;\n        if (unit.indexOf('%') === 0) {\n            var element = void 0;\n            switch(unit){\n                case '%p':\n                    element = popperOffsets;\n                    break;\n                case '%':\n                case '%r':\n                default:\n                    element = referenceOffsets;\n            }\n            var rect = getClientRect(element);\n            return rect[measurement] / 100 * value;\n        } else if (unit === 'vh' || unit === 'vw') {\n            // if is a vh or vw, we calculate the size based on the viewport\n            var size = void 0;\n            if (unit === 'vh') size = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);\n            else size = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\n            return size / 100 * value;\n        } else // if is an explicit pixel unit, we get rid of the unit and keep the value\n        // if is an implicit unit, it's px, and we return just the value\n        return value;\n    }\n    /**\n   * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.\n   * @function\n   * @memberof {modifiers~offset}\n   * @private\n   * @argument {String} offset\n   * @argument {Object} popperOffsets\n   * @argument {Object} referenceOffsets\n   * @argument {String} basePlacement\n   * @returns {Array} a two cells array with x and y offsets in numbers\n   */ function parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) {\n        var offsets = [\n            0,\n            0\n        ];\n        // Use height if placement is left or right and index is 0 otherwise use width\n        // in this way the first offset will use an axis and the second one\n        // will use the other one\n        var useHeight = [\n            'right',\n            'left'\n        ].indexOf(basePlacement) !== -1;\n        // Split the offset string to obtain a list of values and operands\n        // The regex addresses values with the plus or minus sign in front (+10, -20, etc)\n        var fragments = offset.split(/(\\+|\\-)/).map(function(frag) {\n            return frag.trim();\n        });\n        // Detect if the offset string contains a pair of values or a single one\n        // they could be separated by comma or space\n        var divider = fragments.indexOf(find(fragments, function(frag) {\n            return frag.search(/,|\\s/) !== -1;\n        }));\n        if (fragments[divider] && fragments[divider].indexOf(',') === -1) console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');\n        // If divider is found, we divide the list of values and operands to divide\n        // them by ofset X and Y.\n        var splitRegex = /\\s*,\\s*|\\s+/;\n        var ops = divider !== -1 ? [\n            fragments.slice(0, divider).concat([\n                fragments[divider].split(splitRegex)[0]\n            ]),\n            [\n                fragments[divider].split(splitRegex)[1]\n            ].concat(fragments.slice(divider + 1))\n        ] : [\n            fragments\n        ];\n        // Convert the values with units to absolute pixels to allow our computations\n        ops = ops.map(function(op, index) {\n            // Most of the units rely on the orientation of the popper\n            var measurement = (index === 1 ? !useHeight : useHeight) ? 'height' : 'width';\n            var mergeWithPrevious = false;\n            return op// This aggregates any `+` or `-` sign that aren't considered operators\n            // e.g.: 10 + +5 => [10, +, +5]\n            .reduce(function(a, b) {\n                if (a[a.length - 1] === '' && [\n                    '+',\n                    '-'\n                ].indexOf(b) !== -1) {\n                    a[a.length - 1] = b;\n                    mergeWithPrevious = true;\n                    return a;\n                } else if (mergeWithPrevious) {\n                    a[a.length - 1] += b;\n                    mergeWithPrevious = false;\n                    return a;\n                } else return a.concat(b);\n            }, [])// Here we convert the string values into number values (in px)\n            .map(function(str) {\n                return toValue(str, measurement, popperOffsets, referenceOffsets);\n            });\n        });\n        // Loop trough the offsets arrays and execute the operations\n        ops.forEach(function(op, index) {\n            op.forEach(function(frag, index2) {\n                if (isNumeric(frag)) offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);\n            });\n        });\n        return offsets;\n    }\n    /**\n   * @function\n   * @memberof Modifiers\n   * @argument {Object} data - The data object generated by update method\n   * @argument {Object} options - Modifiers configuration and options\n   * @argument {Number|String} options.offset=0\n   * The offset value as described in the modifier description\n   * @returns {Object} The data object, properly modified\n   */ function offset(data, _ref) {\n        var offset = _ref.offset;\n        var placement = data.placement, _data$offsets = data.offsets, popper = _data$offsets.popper, reference = _data$offsets.reference;\n        var basePlacement = placement.split('-')[0];\n        var offsets = void 0;\n        if (isNumeric(+offset)) offsets = [\n            +offset,\n            0\n        ];\n        else offsets = parseOffset(offset, popper, reference, basePlacement);\n        if (basePlacement === 'left') {\n            popper.top += offsets[0];\n            popper.left -= offsets[1];\n        } else if (basePlacement === 'right') {\n            popper.top += offsets[0];\n            popper.left += offsets[1];\n        } else if (basePlacement === 'top') {\n            popper.left += offsets[0];\n            popper.top -= offsets[1];\n        } else if (basePlacement === 'bottom') {\n            popper.left += offsets[0];\n            popper.top += offsets[1];\n        }\n        data.popper = popper;\n        return data;\n    }\n    /**\n   * @function\n   * @memberof Modifiers\n   * @argument {Object} data - The data object generated by `update` method\n   * @argument {Object} options - Modifiers configuration and options\n   * @returns {Object} The data object, properly modified\n   */ function preventOverflow(data, options) {\n        var boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper);\n        // If offsetParent is the reference element, we really want to\n        // go one step up and use the next offsetParent as reference to\n        // avoid to make this modifier completely useless and look like broken\n        if (data.instance.reference === boundariesElement) boundariesElement = getOffsetParent(boundariesElement);\n        // NOTE: DOM access here\n        // resets the popper's position so that the document size can be calculated excluding\n        // the size of the popper element itself\n        var transformProp = getSupportedPropertyName('transform');\n        var popperStyles = data.instance.popper.style; // assignment to help minification\n        var top = popperStyles.top, left = popperStyles.left, transform = popperStyles[transformProp];\n        popperStyles.top = '';\n        popperStyles.left = '';\n        popperStyles[transformProp] = '';\n        var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed);\n        // NOTE: DOM access here\n        // restores the original style properties after the offsets have been computed\n        popperStyles.top = top;\n        popperStyles.left = left;\n        popperStyles[transformProp] = transform;\n        options.boundaries = boundaries;\n        var order = options.priority;\n        var popper = data.offsets.popper;\n        var check = {\n            primary: function primary(placement) {\n                var value = popper[placement];\n                if (popper[placement] < boundaries[placement] && !options.escapeWithReference) value = Math.max(popper[placement], boundaries[placement]);\n                return defineProperty({}, placement, value);\n            },\n            secondary: function secondary(placement) {\n                var mainSide = placement === 'right' ? 'left' : 'top';\n                var value = popper[mainSide];\n                if (popper[placement] > boundaries[placement] && !options.escapeWithReference) value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height));\n                return defineProperty({}, mainSide, value);\n            }\n        };\n        order.forEach(function(placement) {\n            var side = [\n                'left',\n                'top'\n            ].indexOf(placement) !== -1 ? 'primary' : 'secondary';\n            popper = _extends({}, popper, check[side](placement));\n        });\n        data.offsets.popper = popper;\n        return data;\n    }\n    /**\n   * @function\n   * @memberof Modifiers\n   * @argument {Object} data - The data object generated by `update` method\n   * @argument {Object} options - Modifiers configuration and options\n   * @returns {Object} The data object, properly modified\n   */ function shift(data) {\n        var placement = data.placement;\n        var basePlacement = placement.split('-')[0];\n        var shiftvariation = placement.split('-')[1];\n        // if shift shiftvariation is specified, run the modifier\n        if (shiftvariation) {\n            var _data$offsets = data.offsets, reference = _data$offsets.reference, popper = _data$offsets.popper;\n            var isVertical = [\n                'bottom',\n                'top'\n            ].indexOf(basePlacement) !== -1;\n            var side = isVertical ? 'left' : 'top';\n            var measurement = isVertical ? 'width' : 'height';\n            var shiftOffsets = {\n                start: defineProperty({}, side, reference[side]),\n                end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement])\n            };\n            data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]);\n        }\n        return data;\n    }\n    /**\n   * @function\n   * @memberof Modifiers\n   * @argument {Object} data - The data object generated by update method\n   * @argument {Object} options - Modifiers configuration and options\n   * @returns {Object} The data object, properly modified\n   */ function hide(data) {\n        if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) return data;\n        var refRect = data.offsets.reference;\n        var bound = find(data.instance.modifiers, function(modifier) {\n            return modifier.name === 'preventOverflow';\n        }).boundaries;\n        if (refRect.bottom < bound.top || refRect.left > bound.right || refRect.top > bound.bottom || refRect.right < bound.left) {\n            // Avoid unnecessary DOM access if visibility hasn't changed\n            if (data.hide === true) return data;\n            data.hide = true;\n            data.attributes['x-out-of-boundaries'] = '';\n        } else {\n            // Avoid unnecessary DOM access if visibility hasn't changed\n            if (data.hide === false) return data;\n            data.hide = false;\n            data.attributes['x-out-of-boundaries'] = false;\n        }\n        return data;\n    }\n    /**\n   * @function\n   * @memberof Modifiers\n   * @argument {Object} data - The data object generated by `update` method\n   * @argument {Object} options - Modifiers configuration and options\n   * @returns {Object} The data object, properly modified\n   */ function inner(data) {\n        var placement = data.placement;\n        var basePlacement = placement.split('-')[0];\n        var _data$offsets = data.offsets, popper = _data$offsets.popper, reference = _data$offsets.reference;\n        var isHoriz = [\n            'left',\n            'right'\n        ].indexOf(basePlacement) !== -1;\n        var subtractLength = [\n            'top',\n            'left'\n        ].indexOf(basePlacement) === -1;\n        popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n        data.placement = getOppositePlacement(placement);\n        data.offsets.popper = getClientRect(popper);\n        return data;\n    }\n    /**\n   * Modifier function, each modifier can have a function of this type assigned\n   * to its `fn` property.<br />\n   * These functions will be called on each update, this means that you must\n   * make sure they are performant enough to avoid performance bottlenecks.\n   *\n   * @function ModifierFn\n   * @argument {dataObject} data - The data object generated by `update` method\n   * @argument {Object} options - Modifiers configuration and options\n   * @returns {dataObject} The data object, properly modified\n   */ /**\n   * Modifiers are plugins used to alter the behavior of your poppers.<br />\n   * Popper.js uses a set of 9 modifiers to provide all the basic functionalities\n   * needed by the library.\n   *\n   * Usually you don't want to override the `order`, `fn` and `onLoad` props.\n   * All the other properties are configurations that could be tweaked.\n   * @namespace modifiers\n   */ var modifiers = {\n        /**\n     * Modifier used to shift the popper on the start or end of its reference\n     * element.<br />\n     * It will read the variation of the `placement` property.<br />\n     * It can be one either `-end` or `-start`.\n     * @memberof modifiers\n     * @inner\n     */ shift: {\n            /** @prop {number} order=100 - Index used to define the order of execution */ order: 100,\n            /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ enabled: true,\n            /** @prop {ModifierFn} */ fn: shift\n        },\n        /**\n     * The `offset` modifier can shift your popper on both its axis.\n     *\n     * It accepts the following units:\n     * - `px` or unit-less, interpreted as pixels\n     * - `%` or `%r`, percentage relative to the length of the reference element\n     * - `%p`, percentage relative to the length of the popper element\n     * - `vw`, CSS viewport width unit\n     * - `vh`, CSS viewport height unit\n     *\n     * For length is intended the main axis relative to the placement of the popper.<br />\n     * This means that if the placement is `top` or `bottom`, the length will be the\n     * `width`. In case of `left` or `right`, it will be the `height`.\n     *\n     * You can provide a single value (as `Number` or `String`), or a pair of values\n     * as `String` divided by a comma or one (or more) white spaces.<br />\n     * The latter is a deprecated method because it leads to confusion and will be\n     * removed in v2.<br />\n     * Additionally, it accepts additions and subtractions between different units.\n     * Note that multiplications and divisions aren't supported.\n     *\n     * Valid examples are:\n     * ```\n     * 10\n     * '10%'\n     * '10, 10'\n     * '10%, 10'\n     * '10 + 10%'\n     * '10 - 5vh + 3%'\n     * '-10px + 5vh, 5px - 6%'\n     * ```\n     * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap\n     * > with their reference element, unfortunately, you will have to disable the `flip` modifier.\n     * > You can read more on this at this [issue](https://github.com/FezVrasta/popper.js/issues/373).\n     *\n     * @memberof modifiers\n     * @inner\n     */ offset: {\n            /** @prop {number} order=200 - Index used to define the order of execution */ order: 200,\n            /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ enabled: true,\n            /** @prop {ModifierFn} */ fn: offset,\n            /** @prop {Number|String} offset=0\n       * The offset value as described in the modifier description\n       */ offset: 0\n        },\n        /**\n     * Modifier used to prevent the popper from being positioned outside the boundary.\n     *\n     * A scenario exists where the reference itself is not within the boundaries.<br />\n     * We can say it has \"escaped the boundaries\" — or just \"escaped\".<br />\n     * In this case we need to decide whether the popper should either:\n     *\n     * - detach from the reference and remain \"trapped\" in the boundaries, or\n     * - if it should ignore the boundary and \"escape with its reference\"\n     *\n     * When `escapeWithReference` is set to`true` and reference is completely\n     * outside its boundaries, the popper will overflow (or completely leave)\n     * the boundaries in order to remain attached to the edge of the reference.\n     *\n     * @memberof modifiers\n     * @inner\n     */ preventOverflow: {\n            /** @prop {number} order=300 - Index used to define the order of execution */ order: 300,\n            /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ enabled: true,\n            /** @prop {ModifierFn} */ fn: preventOverflow,\n            /**\n       * @prop {Array} [priority=['left','right','top','bottom']]\n       * Popper will try to prevent overflow following these priorities by default,\n       * then, it could overflow on the left and on top of the `boundariesElement`\n       */ priority: [\n                'left',\n                'right',\n                'top',\n                'bottom'\n            ],\n            /**\n       * @prop {number} padding=5\n       * Amount of pixel used to define a minimum distance between the boundaries\n       * and the popper. This makes sure the popper always has a little padding\n       * between the edges of its container\n       */ padding: 5,\n            /**\n       * @prop {String|HTMLElement} boundariesElement='scrollParent'\n       * Boundaries used by the modifier. Can be `scrollParent`, `window`,\n       * `viewport` or any DOM element.\n       */ boundariesElement: 'scrollParent'\n        },\n        /**\n     * Modifier used to make sure the reference and its popper stay near each other\n     * without leaving any gap between the two. Especially useful when the arrow is\n     * enabled and you want to ensure that it points to its reference element.\n     * It cares only about the first axis. You can still have poppers with margin\n     * between the popper and its reference element.\n     * @memberof modifiers\n     * @inner\n     */ keepTogether: {\n            /** @prop {number} order=400 - Index used to define the order of execution */ order: 400,\n            /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ enabled: true,\n            /** @prop {ModifierFn} */ fn: keepTogether\n        },\n        /**\n     * This modifier is used to move the `arrowElement` of the popper to make\n     * sure it is positioned between the reference element and its popper element.\n     * It will read the outer size of the `arrowElement` node to detect how many\n     * pixels of conjunction are needed.\n     *\n     * It has no effect if no `arrowElement` is provided.\n     * @memberof modifiers\n     * @inner\n     */ arrow: {\n            /** @prop {number} order=500 - Index used to define the order of execution */ order: 500,\n            /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ enabled: true,\n            /** @prop {ModifierFn} */ fn: arrow,\n            /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */ element: '[x-arrow]'\n        },\n        /**\n     * Modifier used to flip the popper's placement when it starts to overlap its\n     * reference element.\n     *\n     * Requires the `preventOverflow` modifier before it in order to work.\n     *\n     * **NOTE:** this modifier will interrupt the current update cycle and will\n     * restart it if it detects the need to flip the placement.\n     * @memberof modifiers\n     * @inner\n     */ flip: {\n            /** @prop {number} order=600 - Index used to define the order of execution */ order: 600,\n            /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ enabled: true,\n            /** @prop {ModifierFn} */ fn: flip,\n            /**\n       * @prop {String|Array} behavior='flip'\n       * The behavior used to change the popper's placement. It can be one of\n       * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid\n       * placements (with optional variations)\n       */ behavior: 'flip',\n            /**\n       * @prop {number} padding=5\n       * The popper will flip if it hits the edges of the `boundariesElement`\n       */ padding: 5,\n            /**\n       * @prop {String|HTMLElement} boundariesElement='viewport'\n       * The element which will define the boundaries of the popper position.\n       * The popper will never be placed outside of the defined boundaries\n       * (except if `keepTogether` is enabled)\n       */ boundariesElement: 'viewport',\n            /**\n       * @prop {Boolean} flipVariations=false\n       * The popper will switch placement variation between `-start` and `-end` when\n       * the reference element overlaps its boundaries.\n       *\n       * The original placement should have a set variation.\n       */ flipVariations: false,\n            /**\n       * @prop {Boolean} flipVariationsByContent=false\n       * The popper will switch placement variation between `-start` and `-end` when\n       * the popper element overlaps its reference boundaries.\n       *\n       * The original placement should have a set variation.\n       */ flipVariationsByContent: false\n        },\n        /**\n     * Modifier used to make the popper flow toward the inner of the reference element.\n     * By default, when this modifier is disabled, the popper will be placed outside\n     * the reference element.\n     * @memberof modifiers\n     * @inner\n     */ inner: {\n            /** @prop {number} order=700 - Index used to define the order of execution */ order: 700,\n            /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */ enabled: false,\n            /** @prop {ModifierFn} */ fn: inner\n        },\n        /**\n     * Modifier used to hide the popper when its reference element is outside of the\n     * popper boundaries. It will set a `x-out-of-boundaries` attribute which can\n     * be used to hide with a CSS selector the popper when its reference is\n     * out of boundaries.\n     *\n     * Requires the `preventOverflow` modifier before it in order to work.\n     * @memberof modifiers\n     * @inner\n     */ hide: {\n            /** @prop {number} order=800 - Index used to define the order of execution */ order: 800,\n            /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ enabled: true,\n            /** @prop {ModifierFn} */ fn: hide\n        },\n        /**\n     * Computes the style that will be applied to the popper element to gets\n     * properly positioned.\n     *\n     * Note that this modifier will not touch the DOM, it just prepares the styles\n     * so that `applyStyle` modifier can apply it. This separation is useful\n     * in case you need to replace `applyStyle` with a custom implementation.\n     *\n     * This modifier has `850` as `order` value to maintain backward compatibility\n     * with previous versions of Popper.js. Expect the modifiers ordering method\n     * to change in future major versions of the library.\n     *\n     * @memberof modifiers\n     * @inner\n     */ computeStyle: {\n            /** @prop {number} order=850 - Index used to define the order of execution */ order: 850,\n            /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ enabled: true,\n            /** @prop {ModifierFn} */ fn: computeStyle,\n            /**\n       * @prop {Boolean} gpuAcceleration=true\n       * If true, it uses the CSS 3D transformation to position the popper.\n       * Otherwise, it will use the `top` and `left` properties\n       */ gpuAcceleration: true,\n            /**\n       * @prop {string} [x='bottom']\n       * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.\n       * Change this if your popper should grow in a direction different from `bottom`\n       */ x: 'bottom',\n            /**\n       * @prop {string} [x='left']\n       * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.\n       * Change this if your popper should grow in a direction different from `right`\n       */ y: 'right'\n        },\n        /**\n     * Applies the computed styles to the popper element.\n     *\n     * All the DOM manipulations are limited to this modifier. This is useful in case\n     * you want to integrate Popper.js inside a framework or view library and you\n     * want to delegate all the DOM manipulations to it.\n     *\n     * Note that if you disable this modifier, you must make sure the popper element\n     * has its position set to `absolute` before Popper.js can do its work!\n     *\n     * Just disable this modifier and define your own to achieve the desired effect.\n     *\n     * @memberof modifiers\n     * @inner\n     */ applyStyle: {\n            /** @prop {number} order=900 - Index used to define the order of execution */ order: 900,\n            /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ enabled: true,\n            /** @prop {ModifierFn} */ fn: applyStyle,\n            /** @prop {Function} */ onLoad: applyStyleOnLoad,\n            /**\n       * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier\n       * @prop {Boolean} gpuAcceleration=true\n       * If true, it uses the CSS 3D transformation to position the popper.\n       * Otherwise, it will use the `top` and `left` properties\n       */ gpuAcceleration: undefined\n        }\n    };\n    /**\n   * The `dataObject` is an object containing all the information used by Popper.js.\n   * This object is passed to modifiers and to the `onCreate` and `onUpdate` callbacks.\n   * @name dataObject\n   * @property {Object} data.instance The Popper.js instance\n   * @property {String} data.placement Placement applied to popper\n   * @property {String} data.originalPlacement Placement originally defined on init\n   * @property {Boolean} data.flipped True if popper has been flipped by flip modifier\n   * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper\n   * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier\n   * @property {Object} data.styles Any CSS property defined here will be applied to the popper. It expects the JavaScript nomenclature (eg. `marginBottom`)\n   * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow. It expects the JavaScript nomenclature (eg. `marginBottom`)\n   * @property {Object} data.boundaries Offsets of the popper boundaries\n   * @property {Object} data.offsets The measurements of popper, reference and arrow elements\n   * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values\n   * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values\n   * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0\n   */ /**\n   * Default options provided to Popper.js constructor.<br />\n   * These can be overridden using the `options` argument of Popper.js.<br />\n   * To override an option, simply pass an object with the same\n   * structure of the `options` object, as the 3rd argument. For example:\n   * ```\n   * new Popper(ref, pop, {\n   *   modifiers: {\n   *     preventOverflow: { enabled: false }\n   *   }\n   * })\n   * ```\n   * @type {Object}\n   * @static\n   * @memberof Popper\n   */ var Defaults = {\n        /**\n     * Popper's placement.\n     * @prop {Popper.placements} placement='bottom'\n     */ placement: 'bottom',\n        /**\n     * Set this to true if you want popper to position it self in 'fixed' mode\n     * @prop {Boolean} positionFixed=false\n     */ positionFixed: false,\n        /**\n     * Whether events (resize, scroll) are initially enabled.\n     * @prop {Boolean} eventsEnabled=true\n     */ eventsEnabled: true,\n        /**\n     * Set to true if you want to automatically remove the popper when\n     * you call the `destroy` method.\n     * @prop {Boolean} removeOnDestroy=false\n     */ removeOnDestroy: false,\n        /**\n     * Callback called when the popper is created.<br />\n     * By default, it is set to no-op.<br />\n     * Access Popper.js instance with `data.instance`.\n     * @prop {onCreate}\n     */ onCreate: function onCreate() {},\n        /**\n     * Callback called when the popper is updated. This callback is not called\n     * on the initialization/creation of the popper, but only on subsequent\n     * updates.<br />\n     * By default, it is set to no-op.<br />\n     * Access Popper.js instance with `data.instance`.\n     * @prop {onUpdate}\n     */ onUpdate: function onUpdate() {},\n        /**\n     * List of modifiers used to modify the offsets before they are applied to the popper.\n     * They provide most of the functionalities of Popper.js.\n     * @prop {modifiers}\n     */ modifiers: modifiers\n    };\n    /**\n   * @callback onCreate\n   * @param {dataObject} data\n   */ /**\n   * @callback onUpdate\n   * @param {dataObject} data\n   */ // Utils\n    // Methods\n    var Popper = function() {\n        /**\n     * Creates a new Popper.js instance.\n     * @class Popper\n     * @param {Element|referenceObject} reference - The reference element used to position the popper\n     * @param {Element} popper - The HTML / XML element used as the popper\n     * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)\n     * @return {Object} instance - The generated Popper.js instance\n     */ function Popper(reference, popper) {\n            var _this = this;\n            var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n            classCallCheck(this, Popper);\n            this.scheduleUpdate = function() {\n                return requestAnimationFrame(_this.update);\n            };\n            // make update() debounced, so that it only runs at most once-per-tick\n            this.update = debounce(this.update.bind(this));\n            // with {} we create a new object with the options inside it\n            this.options = _extends({}, Popper.Defaults, options);\n            // init state\n            this.state = {\n                isDestroyed: false,\n                isCreated: false,\n                scrollParents: []\n            };\n            // get reference and popper elements (allow jQuery wrappers)\n            this.reference = reference && reference.jquery ? reference[0] : reference;\n            this.popper = popper && popper.jquery ? popper[0] : popper;\n            // Deep merge modifiers options\n            this.options.modifiers = {};\n            Object.keys(_extends({}, Popper.Defaults.modifiers, options.modifiers)).forEach(function(name) {\n                _this.options.modifiers[name] = _extends({}, Popper.Defaults.modifiers[name] || {}, options.modifiers ? options.modifiers[name] : {});\n            });\n            // Refactoring modifiers' list (Object => Array)\n            this.modifiers = Object.keys(this.options.modifiers).map(function(name) {\n                return _extends({\n                    name: name\n                }, _this.options.modifiers[name]);\n            })// sort the modifiers by order\n            .sort(function(a, b) {\n                return a.order - b.order;\n            });\n            // modifiers have the ability to execute arbitrary code when Popper.js get inited\n            // such code is executed in the same order of its modifier\n            // they could add new properties to their options configuration\n            // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!\n            this.modifiers.forEach(function(modifierOptions) {\n                if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) modifierOptions.onLoad(_this.reference, _this.popper, _this.options, modifierOptions, _this.state);\n            });\n            // fire the first update to position the popper in the right place\n            this.update();\n            var eventsEnabled = this.options.eventsEnabled;\n            if (eventsEnabled) // setup event listeners, they will take care of update the position in specific situations\n            this.enableEventListeners();\n            this.state.eventsEnabled = eventsEnabled;\n        }\n        // We can't use class properties because they don't get listed in the\n        // class prototype and break stuff like Sinon stubs\n        createClass(Popper, [\n            {\n                key: 'update',\n                value: function update$$1() {\n                    return update.call(this);\n                }\n            },\n            {\n                key: 'destroy',\n                value: function destroy$$1() {\n                    return destroy.call(this);\n                }\n            },\n            {\n                key: 'enableEventListeners',\n                value: function enableEventListeners$$1() {\n                    return enableEventListeners.call(this);\n                }\n            },\n            {\n                key: 'disableEventListeners',\n                value: function disableEventListeners$$1() {\n                    return disableEventListeners.call(this);\n                }\n            }\n        ]);\n        return Popper;\n    }();\n    /**\n   * The `referenceObject` is an object that provides an interface compatible with Popper.js\n   * and lets you use it as replacement of a real DOM node.<br />\n   * You can use this method to position a popper relatively to a set of coordinates\n   * in case you don't have a DOM node to use as reference.\n   *\n   * ```\n   * new Popper(referenceObject, popperNode);\n   * ```\n   *\n   * NB: This feature isn't supported in Internet Explorer 10.\n   * @name referenceObject\n   * @property {Function} data.getBoundingClientRect\n   * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.\n   * @property {number} data.clientWidth\n   * An ES6 getter that will return the width of the virtual reference element.\n   * @property {number} data.clientHeight\n   * An ES6 getter that will return the height of the virtual reference element.\n   */ Popper.Utils = (typeof window !== 'undefined' ? window : $parcel$global).PopperUtils;\n    Popper.placements = placements;\n    Popper.Defaults = Defaults;\n    var Popper$1 = Popper;\n    /**\n   * Constants\n   */ var NAME$6 = 'dropdown';\n    var VERSION$6 = '4.6.2';\n    var DATA_KEY$6 = 'bs.dropdown';\n    var EVENT_KEY$6 = \".\" + DATA_KEY$6;\n    var DATA_API_KEY$3 = '.data-api';\n    var JQUERY_NO_CONFLICT$6 = $__default[\"default\"].fn[NAME$6];\n    var ESCAPE_KEYCODE$1 = 27; // KeyboardEvent.which value for Escape (Esc) key\n    var SPACE_KEYCODE = 32; // KeyboardEvent.which value for space key\n    var TAB_KEYCODE = 9; // KeyboardEvent.which value for tab key\n    var ARROW_UP_KEYCODE = 38; // KeyboardEvent.which value for up arrow key\n    var ARROW_DOWN_KEYCODE = 40; // KeyboardEvent.which value for down arrow key\n    var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse)\n    var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + \"|\" + ARROW_DOWN_KEYCODE + \"|\" + ESCAPE_KEYCODE$1);\n    var CLASS_NAME_DISABLED$1 = 'disabled';\n    var CLASS_NAME_SHOW$5 = 'show';\n    var CLASS_NAME_DROPUP = 'dropup';\n    var CLASS_NAME_DROPRIGHT = 'dropright';\n    var CLASS_NAME_DROPLEFT = 'dropleft';\n    var CLASS_NAME_MENURIGHT = 'dropdown-menu-right';\n    var CLASS_NAME_POSITION_STATIC = 'position-static';\n    var EVENT_HIDE$3 = \"hide\" + EVENT_KEY$6;\n    var EVENT_HIDDEN$3 = \"hidden\" + EVENT_KEY$6;\n    var EVENT_SHOW$3 = \"show\" + EVENT_KEY$6;\n    var EVENT_SHOWN$3 = \"shown\" + EVENT_KEY$6;\n    var EVENT_CLICK = \"click\" + EVENT_KEY$6;\n    var EVENT_CLICK_DATA_API$2 = \"click\" + EVENT_KEY$6 + DATA_API_KEY$3;\n    var EVENT_KEYDOWN_DATA_API = \"keydown\" + EVENT_KEY$6 + DATA_API_KEY$3;\n    var EVENT_KEYUP_DATA_API = \"keyup\" + EVENT_KEY$6 + DATA_API_KEY$3;\n    var SELECTOR_DATA_TOGGLE$2 = '[data-toggle=\"dropdown\"]';\n    var SELECTOR_FORM_CHILD = '.dropdown form';\n    var SELECTOR_MENU = '.dropdown-menu';\n    var SELECTOR_NAVBAR_NAV = '.navbar-nav';\n    var SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';\n    var PLACEMENT_TOP = 'top-start';\n    var PLACEMENT_TOPEND = 'top-end';\n    var PLACEMENT_BOTTOM = 'bottom-start';\n    var PLACEMENT_BOTTOMEND = 'bottom-end';\n    var PLACEMENT_RIGHT = 'right-start';\n    var PLACEMENT_LEFT = 'left-start';\n    var Default$5 = {\n        offset: 0,\n        flip: true,\n        boundary: 'scrollParent',\n        reference: 'toggle',\n        display: 'dynamic',\n        popperConfig: null\n    };\n    var DefaultType$5 = {\n        offset: '(number|string|function)',\n        flip: 'boolean',\n        boundary: '(string|element)',\n        reference: '(string|element)',\n        display: 'string',\n        popperConfig: '(null|object)'\n    };\n    /**\n   * Class definition\n   */ var Dropdown = /*#__PURE__*/ function() {\n        function Dropdown(element, config) {\n            this._element = element;\n            this._popper = null;\n            this._config = this._getConfig(config);\n            this._menu = this._getMenuElement();\n            this._inNavbar = this._detectNavbar();\n            this._addEventListeners();\n        } // Getters\n        var _proto = Dropdown.prototype;\n        // Public\n        _proto.toggle = function toggle() {\n            if (this._element.disabled || $__default[\"default\"](this._element).hasClass(CLASS_NAME_DISABLED$1)) return;\n            var isActive = $__default[\"default\"](this._menu).hasClass(CLASS_NAME_SHOW$5);\n            Dropdown._clearMenus();\n            if (isActive) return;\n            this.show(true);\n        };\n        _proto.show = function show(usePopper) {\n            if (usePopper === void 0) usePopper = false;\n            if (this._element.disabled || $__default[\"default\"](this._element).hasClass(CLASS_NAME_DISABLED$1) || $__default[\"default\"](this._menu).hasClass(CLASS_NAME_SHOW$5)) return;\n            var relatedTarget = {\n                relatedTarget: this._element\n            };\n            var showEvent = $__default[\"default\"].Event(EVENT_SHOW$3, relatedTarget);\n            var parent = Dropdown._getParentFromElement(this._element);\n            $__default[\"default\"](parent).trigger(showEvent);\n            if (showEvent.isDefaultPrevented()) return;\n             // Totally disable Popper for Dropdowns in Navbar\n            if (!this._inNavbar && usePopper) {\n                // Check for Popper dependency\n                if (typeof Popper$1 === 'undefined') throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)');\n                var referenceElement = this._element;\n                if (this._config.reference === 'parent') referenceElement = parent;\n                else if (Util.isElement(this._config.reference)) {\n                    referenceElement = this._config.reference; // Check if it's jQuery element\n                    if (typeof this._config.reference.jquery !== 'undefined') referenceElement = this._config.reference[0];\n                } // If boundary is not `scrollParent`, then set position to `static`\n                // to allow the menu to \"escape\" the scroll parent's boundaries\n                // https://github.com/twbs/bootstrap/issues/24251\n                if (this._config.boundary !== 'scrollParent') $__default[\"default\"](parent).addClass(CLASS_NAME_POSITION_STATIC);\n                this._popper = new Popper$1(referenceElement, this._menu, this._getPopperConfig());\n            } // If this is a touch-enabled device we add extra\n            // empty mouseover listeners to the body's immediate children;\n            // only needed because of broken event delegation on iOS\n            // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n            if ('ontouchstart' in document.documentElement && $__default[\"default\"](parent).closest(SELECTOR_NAVBAR_NAV).length === 0) $__default[\"default\"](document.body).children().on('mouseover', null, $__default[\"default\"].noop);\n            this._element.focus();\n            this._element.setAttribute('aria-expanded', true);\n            $__default[\"default\"](this._menu).toggleClass(CLASS_NAME_SHOW$5);\n            $__default[\"default\"](parent).toggleClass(CLASS_NAME_SHOW$5).trigger($__default[\"default\"].Event(EVENT_SHOWN$3, relatedTarget));\n        };\n        _proto.hide = function hide() {\n            if (this._element.disabled || $__default[\"default\"](this._element).hasClass(CLASS_NAME_DISABLED$1) || !$__default[\"default\"](this._menu).hasClass(CLASS_NAME_SHOW$5)) return;\n            var relatedTarget = {\n                relatedTarget: this._element\n            };\n            var hideEvent = $__default[\"default\"].Event(EVENT_HIDE$3, relatedTarget);\n            var parent = Dropdown._getParentFromElement(this._element);\n            $__default[\"default\"](parent).trigger(hideEvent);\n            if (hideEvent.isDefaultPrevented()) return;\n            if (this._popper) this._popper.destroy();\n            $__default[\"default\"](this._menu).toggleClass(CLASS_NAME_SHOW$5);\n            $__default[\"default\"](parent).toggleClass(CLASS_NAME_SHOW$5).trigger($__default[\"default\"].Event(EVENT_HIDDEN$3, relatedTarget));\n        };\n        _proto.dispose = function dispose() {\n            $__default[\"default\"].removeData(this._element, DATA_KEY$6);\n            $__default[\"default\"](this._element).off(EVENT_KEY$6);\n            this._element = null;\n            this._menu = null;\n            if (this._popper !== null) {\n                this._popper.destroy();\n                this._popper = null;\n            }\n        };\n        _proto.update = function update() {\n            this._inNavbar = this._detectNavbar();\n            if (this._popper !== null) this._popper.scheduleUpdate();\n        } // Private\n        ;\n        _proto._addEventListeners = function _addEventListeners() {\n            var _this = this;\n            $__default[\"default\"](this._element).on(EVENT_CLICK, function(event) {\n                event.preventDefault();\n                event.stopPropagation();\n                _this.toggle();\n            });\n        };\n        _proto._getConfig = function _getConfig(config) {\n            config = _extends$1({}, this.constructor.Default, $__default[\"default\"](this._element).data(), config);\n            Util.typeCheckConfig(NAME$6, config, this.constructor.DefaultType);\n            return config;\n        };\n        _proto._getMenuElement = function _getMenuElement() {\n            if (!this._menu) {\n                var parent = Dropdown._getParentFromElement(this._element);\n                if (parent) this._menu = parent.querySelector(SELECTOR_MENU);\n            }\n            return this._menu;\n        };\n        _proto._getPlacement = function _getPlacement() {\n            var $parentDropdown = $__default[\"default\"](this._element.parentNode);\n            var placement = PLACEMENT_BOTTOM; // Handle dropup\n            if ($parentDropdown.hasClass(CLASS_NAME_DROPUP)) placement = $__default[\"default\"](this._menu).hasClass(CLASS_NAME_MENURIGHT) ? PLACEMENT_TOPEND : PLACEMENT_TOP;\n            else if ($parentDropdown.hasClass(CLASS_NAME_DROPRIGHT)) placement = PLACEMENT_RIGHT;\n            else if ($parentDropdown.hasClass(CLASS_NAME_DROPLEFT)) placement = PLACEMENT_LEFT;\n            else if ($__default[\"default\"](this._menu).hasClass(CLASS_NAME_MENURIGHT)) placement = PLACEMENT_BOTTOMEND;\n            return placement;\n        };\n        _proto._detectNavbar = function _detectNavbar() {\n            return $__default[\"default\"](this._element).closest('.navbar').length > 0;\n        };\n        _proto._getOffset = function _getOffset() {\n            var _this2 = this;\n            var offset = {};\n            if (typeof this._config.offset === 'function') offset.fn = function(data) {\n                data.offsets = _extends$1({}, data.offsets, _this2._config.offset(data.offsets, _this2._element));\n                return data;\n            };\n            else offset.offset = this._config.offset;\n            return offset;\n        };\n        _proto._getPopperConfig = function _getPopperConfig() {\n            var popperConfig = {\n                placement: this._getPlacement(),\n                modifiers: {\n                    offset: this._getOffset(),\n                    flip: {\n                        enabled: this._config.flip\n                    },\n                    preventOverflow: {\n                        boundariesElement: this._config.boundary\n                    }\n                }\n            }; // Disable Popper if we have a static display\n            if (this._config.display === 'static') popperConfig.modifiers.applyStyle = {\n                enabled: false\n            };\n            return _extends$1({}, popperConfig, this._config.popperConfig);\n        } // Static\n        ;\n        Dropdown._jQueryInterface = function _jQueryInterface(config) {\n            return this.each(function() {\n                var data = $__default[\"default\"](this).data(DATA_KEY$6);\n                var _config = typeof config === 'object' ? config : null;\n                if (!data) {\n                    data = new Dropdown(this, _config);\n                    $__default[\"default\"](this).data(DATA_KEY$6, data);\n                }\n                if (typeof config === 'string') {\n                    if (typeof data[config] === 'undefined') throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n                    data[config]();\n                }\n            });\n        };\n        Dropdown._clearMenus = function _clearMenus(event) {\n            if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH || event.type === 'keyup' && event.which !== TAB_KEYCODE)) return;\n            var toggles = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE$2));\n            for(var i = 0, len = toggles.length; i < len; i++){\n                var parent = Dropdown._getParentFromElement(toggles[i]);\n                var context = $__default[\"default\"](toggles[i]).data(DATA_KEY$6);\n                var relatedTarget = {\n                    relatedTarget: toggles[i]\n                };\n                if (event && event.type === 'click') relatedTarget.clickEvent = event;\n                if (!context) continue;\n                var dropdownMenu = context._menu;\n                if (!$__default[\"default\"](parent).hasClass(CLASS_NAME_SHOW$5)) continue;\n                if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) && $__default[\"default\"].contains(parent, event.target)) continue;\n                var hideEvent = $__default[\"default\"].Event(EVENT_HIDE$3, relatedTarget);\n                $__default[\"default\"](parent).trigger(hideEvent);\n                if (hideEvent.isDefaultPrevented()) continue;\n                 // If this is a touch-enabled device we remove the extra\n                // empty mouseover listeners we added for iOS support\n                if ('ontouchstart' in document.documentElement) $__default[\"default\"](document.body).children().off('mouseover', null, $__default[\"default\"].noop);\n                toggles[i].setAttribute('aria-expanded', 'false');\n                if (context._popper) context._popper.destroy();\n                $__default[\"default\"](dropdownMenu).removeClass(CLASS_NAME_SHOW$5);\n                $__default[\"default\"](parent).removeClass(CLASS_NAME_SHOW$5).trigger($__default[\"default\"].Event(EVENT_HIDDEN$3, relatedTarget));\n            }\n        };\n        Dropdown._getParentFromElement = function _getParentFromElement(element) {\n            var parent;\n            var selector = Util.getSelectorFromElement(element);\n            if (selector) parent = document.querySelector(selector);\n            return parent || element.parentNode;\n        } // eslint-disable-next-line complexity\n        ;\n        Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) {\n            // If not input/textarea:\n            //  - And not a key in REGEXP_KEYDOWN => not a dropdown command\n            // If input/textarea:\n            //  - If space key => not a dropdown command\n            //  - If key is other than escape\n            //    - If key is not up or down => not a dropdown command\n            //    - If trigger inside the menu => not a dropdown command\n            if (/input|textarea/i.test(event.target.tagName) ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE$1 && (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || $__default[\"default\"](event.target).closest(SELECTOR_MENU).length) : !REGEXP_KEYDOWN.test(event.which)) return;\n            if (this.disabled || $__default[\"default\"](this).hasClass(CLASS_NAME_DISABLED$1)) return;\n            var parent = Dropdown._getParentFromElement(this);\n            var isActive = $__default[\"default\"](parent).hasClass(CLASS_NAME_SHOW$5);\n            if (!isActive && event.which === ESCAPE_KEYCODE$1) return;\n            event.preventDefault();\n            event.stopPropagation();\n            if (!isActive || event.which === ESCAPE_KEYCODE$1 || event.which === SPACE_KEYCODE) {\n                if (event.which === ESCAPE_KEYCODE$1) $__default[\"default\"](parent.querySelector(SELECTOR_DATA_TOGGLE$2)).trigger('focus');\n                $__default[\"default\"](this).trigger('click');\n                return;\n            }\n            var items = [].slice.call(parent.querySelectorAll(SELECTOR_VISIBLE_ITEMS)).filter(function(item) {\n                return $__default[\"default\"](item).is(':visible');\n            });\n            if (items.length === 0) return;\n            var index = items.indexOf(event.target);\n            if (event.which === ARROW_UP_KEYCODE && index > 0) // Up\n            index--;\n            if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) // Down\n            index++;\n            if (index < 0) index = 0;\n            items[index].focus();\n        };\n        _createClass(Dropdown, null, [\n            {\n                key: \"VERSION\",\n                get: function get() {\n                    return VERSION$6;\n                }\n            },\n            {\n                key: \"Default\",\n                get: function get() {\n                    return Default$5;\n                }\n            },\n            {\n                key: \"DefaultType\",\n                get: function get() {\n                    return DefaultType$5;\n                }\n            }\n        ]);\n        return Dropdown;\n    }();\n    /**\n   * Data API implementation\n   */ $__default[\"default\"](document).on(EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$2, Dropdown._dataApiKeydownHandler).on(EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown._dataApiKeydownHandler).on(EVENT_CLICK_DATA_API$2 + \" \" + EVENT_KEYUP_DATA_API, Dropdown._clearMenus).on(EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function(event) {\n        event.preventDefault();\n        event.stopPropagation();\n        Dropdown._jQueryInterface.call($__default[\"default\"](this), 'toggle');\n    }).on(EVENT_CLICK_DATA_API$2, SELECTOR_FORM_CHILD, function(e) {\n        e.stopPropagation();\n    });\n    /**\n   * jQuery\n   */ $__default[\"default\"].fn[NAME$6] = Dropdown._jQueryInterface;\n    $__default[\"default\"].fn[NAME$6].Constructor = Dropdown;\n    $__default[\"default\"].fn[NAME$6].noConflict = function() {\n        $__default[\"default\"].fn[NAME$6] = JQUERY_NO_CONFLICT$6;\n        return Dropdown._jQueryInterface;\n    };\n    /**\n   * Constants\n   */ var NAME$5 = 'modal';\n    var VERSION$5 = '4.6.2';\n    var DATA_KEY$5 = 'bs.modal';\n    var EVENT_KEY$5 = \".\" + DATA_KEY$5;\n    var DATA_API_KEY$2 = '.data-api';\n    var JQUERY_NO_CONFLICT$5 = $__default[\"default\"].fn[NAME$5];\n    var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key\n    var CLASS_NAME_SCROLLABLE = 'modal-dialog-scrollable';\n    var CLASS_NAME_SCROLLBAR_MEASURER = 'modal-scrollbar-measure';\n    var CLASS_NAME_BACKDROP = 'modal-backdrop';\n    var CLASS_NAME_OPEN = 'modal-open';\n    var CLASS_NAME_FADE$4 = 'fade';\n    var CLASS_NAME_SHOW$4 = 'show';\n    var CLASS_NAME_STATIC = 'modal-static';\n    var EVENT_HIDE$2 = \"hide\" + EVENT_KEY$5;\n    var EVENT_HIDE_PREVENTED = \"hidePrevented\" + EVENT_KEY$5;\n    var EVENT_HIDDEN$2 = \"hidden\" + EVENT_KEY$5;\n    var EVENT_SHOW$2 = \"show\" + EVENT_KEY$5;\n    var EVENT_SHOWN$2 = \"shown\" + EVENT_KEY$5;\n    var EVENT_FOCUSIN = \"focusin\" + EVENT_KEY$5;\n    var EVENT_RESIZE = \"resize\" + EVENT_KEY$5;\n    var EVENT_CLICK_DISMISS$1 = \"click.dismiss\" + EVENT_KEY$5;\n    var EVENT_KEYDOWN_DISMISS = \"keydown.dismiss\" + EVENT_KEY$5;\n    var EVENT_MOUSEUP_DISMISS = \"mouseup.dismiss\" + EVENT_KEY$5;\n    var EVENT_MOUSEDOWN_DISMISS = \"mousedown.dismiss\" + EVENT_KEY$5;\n    var EVENT_CLICK_DATA_API$1 = \"click\" + EVENT_KEY$5 + DATA_API_KEY$2;\n    var SELECTOR_DIALOG = '.modal-dialog';\n    var SELECTOR_MODAL_BODY = '.modal-body';\n    var SELECTOR_DATA_TOGGLE$1 = '[data-toggle=\"modal\"]';\n    var SELECTOR_DATA_DISMISS$1 = '[data-dismiss=\"modal\"]';\n    var SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\n    var SELECTOR_STICKY_CONTENT = '.sticky-top';\n    var Default$4 = {\n        backdrop: true,\n        keyboard: true,\n        focus: true,\n        show: true\n    };\n    var DefaultType$4 = {\n        backdrop: '(boolean|string)',\n        keyboard: 'boolean',\n        focus: 'boolean',\n        show: 'boolean'\n    };\n    /**\n   * Class definition\n   */ var Modal = /*#__PURE__*/ function() {\n        function Modal(element, config) {\n            this._config = this._getConfig(config);\n            this._element = element;\n            this._dialog = element.querySelector(SELECTOR_DIALOG);\n            this._backdrop = null;\n            this._isShown = false;\n            this._isBodyOverflowing = false;\n            this._ignoreBackdropClick = false;\n            this._isTransitioning = false;\n            this._scrollbarWidth = 0;\n        } // Getters\n        var _proto = Modal.prototype;\n        // Public\n        _proto.toggle = function toggle(relatedTarget) {\n            return this._isShown ? this.hide() : this.show(relatedTarget);\n        };\n        _proto.show = function show(relatedTarget) {\n            var _this = this;\n            if (this._isShown || this._isTransitioning) return;\n            var showEvent = $__default[\"default\"].Event(EVENT_SHOW$2, {\n                relatedTarget: relatedTarget\n            });\n            $__default[\"default\"](this._element).trigger(showEvent);\n            if (showEvent.isDefaultPrevented()) return;\n            this._isShown = true;\n            if ($__default[\"default\"](this._element).hasClass(CLASS_NAME_FADE$4)) this._isTransitioning = true;\n            this._checkScrollbar();\n            this._setScrollbar();\n            this._adjustDialog();\n            this._setEscapeEvent();\n            this._setResizeEvent();\n            $__default[\"default\"](this._element).on(EVENT_CLICK_DISMISS$1, SELECTOR_DATA_DISMISS$1, function(event) {\n                return _this.hide(event);\n            });\n            $__default[\"default\"](this._dialog).on(EVENT_MOUSEDOWN_DISMISS, function() {\n                $__default[\"default\"](_this._element).one(EVENT_MOUSEUP_DISMISS, function(event) {\n                    if ($__default[\"default\"](event.target).is(_this._element)) _this._ignoreBackdropClick = true;\n                });\n            });\n            this._showBackdrop(function() {\n                return _this._showElement(relatedTarget);\n            });\n        };\n        _proto.hide = function hide(event) {\n            var _this2 = this;\n            if (event) event.preventDefault();\n            if (!this._isShown || this._isTransitioning) return;\n            var hideEvent = $__default[\"default\"].Event(EVENT_HIDE$2);\n            $__default[\"default\"](this._element).trigger(hideEvent);\n            if (!this._isShown || hideEvent.isDefaultPrevented()) return;\n            this._isShown = false;\n            var transition = $__default[\"default\"](this._element).hasClass(CLASS_NAME_FADE$4);\n            if (transition) this._isTransitioning = true;\n            this._setEscapeEvent();\n            this._setResizeEvent();\n            $__default[\"default\"](document).off(EVENT_FOCUSIN);\n            $__default[\"default\"](this._element).removeClass(CLASS_NAME_SHOW$4);\n            $__default[\"default\"](this._element).off(EVENT_CLICK_DISMISS$1);\n            $__default[\"default\"](this._dialog).off(EVENT_MOUSEDOWN_DISMISS);\n            if (transition) {\n                var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n                $__default[\"default\"](this._element).one(Util.TRANSITION_END, function(event) {\n                    return _this2._hideModal(event);\n                }).emulateTransitionEnd(transitionDuration);\n            } else this._hideModal();\n        };\n        _proto.dispose = function dispose() {\n            [\n                window,\n                this._element,\n                this._dialog\n            ].forEach(function(htmlElement) {\n                return $__default[\"default\"](htmlElement).off(EVENT_KEY$5);\n            });\n            /**\n       * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`\n       * Do not move `document` in `htmlElements` array\n       * It will remove `EVENT_CLICK_DATA_API` event that should remain\n       */ $__default[\"default\"](document).off(EVENT_FOCUSIN);\n            $__default[\"default\"].removeData(this._element, DATA_KEY$5);\n            this._config = null;\n            this._element = null;\n            this._dialog = null;\n            this._backdrop = null;\n            this._isShown = null;\n            this._isBodyOverflowing = null;\n            this._ignoreBackdropClick = null;\n            this._isTransitioning = null;\n            this._scrollbarWidth = null;\n        };\n        _proto.handleUpdate = function handleUpdate() {\n            this._adjustDialog();\n        } // Private\n        ;\n        _proto._getConfig = function _getConfig(config) {\n            config = _extends$1({}, Default$4, config);\n            Util.typeCheckConfig(NAME$5, config, DefaultType$4);\n            return config;\n        };\n        _proto._triggerBackdropTransition = function _triggerBackdropTransition() {\n            var _this3 = this;\n            var hideEventPrevented = $__default[\"default\"].Event(EVENT_HIDE_PREVENTED);\n            $__default[\"default\"](this._element).trigger(hideEventPrevented);\n            if (hideEventPrevented.isDefaultPrevented()) return;\n            var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n            if (!isModalOverflowing) this._element.style.overflowY = 'hidden';\n            this._element.classList.add(CLASS_NAME_STATIC);\n            var modalTransitionDuration = Util.getTransitionDurationFromElement(this._dialog);\n            $__default[\"default\"](this._element).off(Util.TRANSITION_END);\n            $__default[\"default\"](this._element).one(Util.TRANSITION_END, function() {\n                _this3._element.classList.remove(CLASS_NAME_STATIC);\n                if (!isModalOverflowing) $__default[\"default\"](_this3._element).one(Util.TRANSITION_END, function() {\n                    _this3._element.style.overflowY = '';\n                }).emulateTransitionEnd(_this3._element, modalTransitionDuration);\n            }).emulateTransitionEnd(modalTransitionDuration);\n            this._element.focus();\n        };\n        _proto._showElement = function _showElement(relatedTarget) {\n            var _this4 = this;\n            var transition = $__default[\"default\"](this._element).hasClass(CLASS_NAME_FADE$4);\n            var modalBody = this._dialog ? this._dialog.querySelector(SELECTOR_MODAL_BODY) : null;\n            if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) // Don't move modal's DOM position\n            document.body.appendChild(this._element);\n            this._element.style.display = 'block';\n            this._element.removeAttribute('aria-hidden');\n            this._element.setAttribute('aria-modal', true);\n            this._element.setAttribute('role', 'dialog');\n            if ($__default[\"default\"](this._dialog).hasClass(CLASS_NAME_SCROLLABLE) && modalBody) modalBody.scrollTop = 0;\n            else this._element.scrollTop = 0;\n            if (transition) Util.reflow(this._element);\n            $__default[\"default\"](this._element).addClass(CLASS_NAME_SHOW$4);\n            if (this._config.focus) this._enforceFocus();\n            var shownEvent = $__default[\"default\"].Event(EVENT_SHOWN$2, {\n                relatedTarget: relatedTarget\n            });\n            var transitionComplete = function transitionComplete() {\n                if (_this4._config.focus) _this4._element.focus();\n                _this4._isTransitioning = false;\n                $__default[\"default\"](_this4._element).trigger(shownEvent);\n            };\n            if (transition) {\n                var transitionDuration = Util.getTransitionDurationFromElement(this._dialog);\n                $__default[\"default\"](this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(transitionDuration);\n            } else transitionComplete();\n        };\n        _proto._enforceFocus = function _enforceFocus() {\n            var _this5 = this;\n            $__default[\"default\"](document).off(EVENT_FOCUSIN) // Guard against infinite focus loop\n            .on(EVENT_FOCUSIN, function(event) {\n                if (document !== event.target && _this5._element !== event.target && $__default[\"default\"](_this5._element).has(event.target).length === 0) _this5._element.focus();\n            });\n        };\n        _proto._setEscapeEvent = function _setEscapeEvent() {\n            var _this6 = this;\n            if (this._isShown) $__default[\"default\"](this._element).on(EVENT_KEYDOWN_DISMISS, function(event) {\n                if (_this6._config.keyboard && event.which === ESCAPE_KEYCODE) {\n                    event.preventDefault();\n                    _this6.hide();\n                } else if (!_this6._config.keyboard && event.which === ESCAPE_KEYCODE) _this6._triggerBackdropTransition();\n            });\n            else if (!this._isShown) $__default[\"default\"](this._element).off(EVENT_KEYDOWN_DISMISS);\n        };\n        _proto._setResizeEvent = function _setResizeEvent() {\n            var _this7 = this;\n            if (this._isShown) $__default[\"default\"](window).on(EVENT_RESIZE, function(event) {\n                return _this7.handleUpdate(event);\n            });\n            else $__default[\"default\"](window).off(EVENT_RESIZE);\n        };\n        _proto._hideModal = function _hideModal() {\n            var _this8 = this;\n            this._element.style.display = 'none';\n            this._element.setAttribute('aria-hidden', true);\n            this._element.removeAttribute('aria-modal');\n            this._element.removeAttribute('role');\n            this._isTransitioning = false;\n            this._showBackdrop(function() {\n                $__default[\"default\"](document.body).removeClass(CLASS_NAME_OPEN);\n                _this8._resetAdjustments();\n                _this8._resetScrollbar();\n                $__default[\"default\"](_this8._element).trigger(EVENT_HIDDEN$2);\n            });\n        };\n        _proto._removeBackdrop = function _removeBackdrop() {\n            if (this._backdrop) {\n                $__default[\"default\"](this._backdrop).remove();\n                this._backdrop = null;\n            }\n        };\n        _proto._showBackdrop = function _showBackdrop(callback) {\n            var _this9 = this;\n            var animate = $__default[\"default\"](this._element).hasClass(CLASS_NAME_FADE$4) ? CLASS_NAME_FADE$4 : '';\n            if (this._isShown && this._config.backdrop) {\n                this._backdrop = document.createElement('div');\n                this._backdrop.className = CLASS_NAME_BACKDROP;\n                if (animate) this._backdrop.classList.add(animate);\n                $__default[\"default\"](this._backdrop).appendTo(document.body);\n                $__default[\"default\"](this._element).on(EVENT_CLICK_DISMISS$1, function(event) {\n                    if (_this9._ignoreBackdropClick) {\n                        _this9._ignoreBackdropClick = false;\n                        return;\n                    }\n                    if (event.target !== event.currentTarget) return;\n                    if (_this9._config.backdrop === 'static') _this9._triggerBackdropTransition();\n                    else _this9.hide();\n                });\n                if (animate) Util.reflow(this._backdrop);\n                $__default[\"default\"](this._backdrop).addClass(CLASS_NAME_SHOW$4);\n                if (!callback) return;\n                if (!animate) {\n                    callback();\n                    return;\n                }\n                var backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);\n                $__default[\"default\"](this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration);\n            } else if (!this._isShown && this._backdrop) {\n                $__default[\"default\"](this._backdrop).removeClass(CLASS_NAME_SHOW$4);\n                var callbackRemove = function callbackRemove() {\n                    _this9._removeBackdrop();\n                    if (callback) callback();\n                };\n                if ($__default[\"default\"](this._element).hasClass(CLASS_NAME_FADE$4)) {\n                    var _backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);\n                    $__default[\"default\"](this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration);\n                } else callbackRemove();\n            } else if (callback) callback();\n        } // ----------------------------------------------------------------------\n        ;\n        _proto._adjustDialog = function _adjustDialog() {\n            var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n            if (!this._isBodyOverflowing && isModalOverflowing) this._element.style.paddingLeft = this._scrollbarWidth + \"px\";\n            if (this._isBodyOverflowing && !isModalOverflowing) this._element.style.paddingRight = this._scrollbarWidth + \"px\";\n        };\n        _proto._resetAdjustments = function _resetAdjustments() {\n            this._element.style.paddingLeft = '';\n            this._element.style.paddingRight = '';\n        };\n        _proto._checkScrollbar = function _checkScrollbar() {\n            var rect = document.body.getBoundingClientRect();\n            this._isBodyOverflowing = Math.round(rect.left + rect.right) < window.innerWidth;\n            this._scrollbarWidth = this._getScrollbarWidth();\n        };\n        _proto._setScrollbar = function _setScrollbar() {\n            var _this10 = this;\n            if (this._isBodyOverflowing) {\n                // Note: DOMNode.style.paddingRight returns the actual value or '' if not set\n                //   while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set\n                var fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT));\n                var stickyContent = [].slice.call(document.querySelectorAll(SELECTOR_STICKY_CONTENT)); // Adjust fixed content padding\n                $__default[\"default\"](fixedContent).each(function(index, element) {\n                    var actualPadding = element.style.paddingRight;\n                    var calculatedPadding = $__default[\"default\"](element).css('padding-right');\n                    $__default[\"default\"](element).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + _this10._scrollbarWidth + \"px\");\n                }); // Adjust sticky content margin\n                $__default[\"default\"](stickyContent).each(function(index, element) {\n                    var actualMargin = element.style.marginRight;\n                    var calculatedMargin = $__default[\"default\"](element).css('margin-right');\n                    $__default[\"default\"](element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) - _this10._scrollbarWidth + \"px\");\n                }); // Adjust body padding\n                var actualPadding = document.body.style.paddingRight;\n                var calculatedPadding = $__default[\"default\"](document.body).css('padding-right');\n                $__default[\"default\"](document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + \"px\");\n            }\n            $__default[\"default\"](document.body).addClass(CLASS_NAME_OPEN);\n        };\n        _proto._resetScrollbar = function _resetScrollbar() {\n            // Restore fixed content padding\n            var fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT));\n            $__default[\"default\"](fixedContent).each(function(index, element) {\n                var padding = $__default[\"default\"](element).data('padding-right');\n                $__default[\"default\"](element).removeData('padding-right');\n                element.style.paddingRight = padding ? padding : '';\n            }); // Restore sticky content\n            var elements = [].slice.call(document.querySelectorAll(\"\" + SELECTOR_STICKY_CONTENT));\n            $__default[\"default\"](elements).each(function(index, element) {\n                var margin = $__default[\"default\"](element).data('margin-right');\n                if (typeof margin !== 'undefined') $__default[\"default\"](element).css('margin-right', margin).removeData('margin-right');\n            }); // Restore body padding\n            var padding = $__default[\"default\"](document.body).data('padding-right');\n            $__default[\"default\"](document.body).removeData('padding-right');\n            document.body.style.paddingRight = padding ? padding : '';\n        };\n        _proto._getScrollbarWidth = function _getScrollbarWidth() {\n            // thx d.walsh\n            var scrollDiv = document.createElement('div');\n            scrollDiv.className = CLASS_NAME_SCROLLBAR_MEASURER;\n            document.body.appendChild(scrollDiv);\n            var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;\n            document.body.removeChild(scrollDiv);\n            return scrollbarWidth;\n        } // Static\n        ;\n        Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) {\n            return this.each(function() {\n                var data = $__default[\"default\"](this).data(DATA_KEY$5);\n                var _config = _extends$1({}, Default$4, $__default[\"default\"](this).data(), typeof config === 'object' && config ? config : {});\n                if (!data) {\n                    data = new Modal(this, _config);\n                    $__default[\"default\"](this).data(DATA_KEY$5, data);\n                }\n                if (typeof config === 'string') {\n                    if (typeof data[config] === 'undefined') throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n                    data[config](relatedTarget);\n                } else if (_config.show) data.show(relatedTarget);\n            });\n        };\n        _createClass(Modal, null, [\n            {\n                key: \"VERSION\",\n                get: function get() {\n                    return VERSION$5;\n                }\n            },\n            {\n                key: \"Default\",\n                get: function get() {\n                    return Default$4;\n                }\n            }\n        ]);\n        return Modal;\n    }();\n    /**\n   * Data API implementation\n   */ $__default[\"default\"](document).on(EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function(event) {\n        var _this11 = this;\n        var target;\n        var selector = Util.getSelectorFromElement(this);\n        if (selector) target = document.querySelector(selector);\n        var config = $__default[\"default\"](target).data(DATA_KEY$5) ? 'toggle' : _extends$1({}, $__default[\"default\"](target).data(), $__default[\"default\"](this).data());\n        if (this.tagName === 'A' || this.tagName === 'AREA') event.preventDefault();\n        var $target = $__default[\"default\"](target).one(EVENT_SHOW$2, function(showEvent) {\n            if (showEvent.isDefaultPrevented()) // Only register focus restorer if modal will actually get shown\n            return;\n            $target.one(EVENT_HIDDEN$2, function() {\n                if ($__default[\"default\"](_this11).is(':visible')) _this11.focus();\n            });\n        });\n        Modal._jQueryInterface.call($__default[\"default\"](target), config, this);\n    });\n    /**\n   * jQuery\n   */ $__default[\"default\"].fn[NAME$5] = Modal._jQueryInterface;\n    $__default[\"default\"].fn[NAME$5].Constructor = Modal;\n    $__default[\"default\"].fn[NAME$5].noConflict = function() {\n        $__default[\"default\"].fn[NAME$5] = JQUERY_NO_CONFLICT$5;\n        return Modal._jQueryInterface;\n    };\n    /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v4.6.2): tools/sanitizer.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */ var uriAttrs = [\n        'background',\n        'cite',\n        'href',\n        'itemtype',\n        'longdesc',\n        'poster',\n        'src',\n        'xlink:href'\n    ];\n    var ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n    var DefaultWhitelist = {\n        // Global attributes allowed on any supplied element below.\n        '*': [\n            'class',\n            'dir',\n            'id',\n            'lang',\n            'role',\n            ARIA_ATTRIBUTE_PATTERN\n        ],\n        a: [\n            'target',\n            'href',\n            'title',\n            'rel'\n        ],\n        area: [],\n        b: [],\n        br: [],\n        col: [],\n        code: [],\n        div: [],\n        em: [],\n        hr: [],\n        h1: [],\n        h2: [],\n        h3: [],\n        h4: [],\n        h5: [],\n        h6: [],\n        i: [],\n        img: [\n            'src',\n            'srcset',\n            'alt',\n            'title',\n            'width',\n            'height'\n        ],\n        li: [],\n        ol: [],\n        p: [],\n        pre: [],\n        s: [],\n        small: [],\n        span: [],\n        sub: [],\n        sup: [],\n        strong: [],\n        u: [],\n        ul: []\n    };\n    /**\n   * A pattern that recognizes a commonly useful subset of URLs that are safe.\n   *\n   * Shoutout to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts\n   */ var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i;\n    /**\n   * A pattern that matches safe data URLs. Only matches image, video and audio types.\n   *\n   * Shoutout to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts\n   */ var DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i;\n    function allowedAttribute(attr, allowedAttributeList) {\n        var attrName = attr.nodeName.toLowerCase();\n        if (allowedAttributeList.indexOf(attrName) !== -1) {\n            if (uriAttrs.indexOf(attrName) !== -1) return Boolean(SAFE_URL_PATTERN.test(attr.nodeValue) || DATA_URL_PATTERN.test(attr.nodeValue));\n            return true;\n        }\n        var regExp = allowedAttributeList.filter(function(attrRegex) {\n            return attrRegex instanceof RegExp;\n        }); // Check if a regular expression validates the attribute.\n        for(var i = 0, len = regExp.length; i < len; i++){\n            if (regExp[i].test(attrName)) return true;\n        }\n        return false;\n    }\n    function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {\n        if (unsafeHtml.length === 0) return unsafeHtml;\n        if (sanitizeFn && typeof sanitizeFn === 'function') return sanitizeFn(unsafeHtml);\n        var domParser = new window.DOMParser();\n        var createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n        var whitelistKeys = Object.keys(whiteList);\n        var elements = [].slice.call(createdDocument.body.querySelectorAll('*'));\n        var _loop = function _loop(i, len) {\n            var el = elements[i];\n            var elName = el.nodeName.toLowerCase();\n            if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) {\n                el.parentNode.removeChild(el);\n                return \"continue\";\n            }\n            var attributeList = [].slice.call(el.attributes); // eslint-disable-next-line unicorn/prefer-spread\n            var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || []);\n            attributeList.forEach(function(attr) {\n                if (!allowedAttribute(attr, whitelistedAttributes)) el.removeAttribute(attr.nodeName);\n            });\n        };\n        for(var i = 0, len = elements.length; i < len; i++){\n            var _ret = _loop(i);\n            if (_ret === \"continue\") continue;\n        }\n        return createdDocument.body.innerHTML;\n    }\n    /**\n   * Constants\n   */ var NAME$4 = 'tooltip';\n    var VERSION$4 = '4.6.2';\n    var DATA_KEY$4 = 'bs.tooltip';\n    var EVENT_KEY$4 = \".\" + DATA_KEY$4;\n    var JQUERY_NO_CONFLICT$4 = $__default[\"default\"].fn[NAME$4];\n    var CLASS_PREFIX$1 = 'bs-tooltip';\n    var BSCLS_PREFIX_REGEX$1 = new RegExp(\"(^|\\\\s)\" + CLASS_PREFIX$1 + \"\\\\S+\", 'g');\n    var DISALLOWED_ATTRIBUTES = [\n        'sanitize',\n        'whiteList',\n        'sanitizeFn'\n    ];\n    var CLASS_NAME_FADE$3 = 'fade';\n    var CLASS_NAME_SHOW$3 = 'show';\n    var HOVER_STATE_SHOW = 'show';\n    var HOVER_STATE_OUT = 'out';\n    var SELECTOR_TOOLTIP_INNER = '.tooltip-inner';\n    var SELECTOR_ARROW = '.arrow';\n    var TRIGGER_HOVER = 'hover';\n    var TRIGGER_FOCUS = 'focus';\n    var TRIGGER_CLICK = 'click';\n    var TRIGGER_MANUAL = 'manual';\n    var AttachmentMap = {\n        AUTO: 'auto',\n        TOP: 'top',\n        RIGHT: 'right',\n        BOTTOM: 'bottom',\n        LEFT: 'left'\n    };\n    var Default$3 = {\n        animation: true,\n        template: '<div class=\"tooltip\" role=\"tooltip\"><div class=\"arrow\"></div><div class=\"tooltip-inner\"></div></div>',\n        trigger: 'hover focus',\n        title: '',\n        delay: 0,\n        html: false,\n        selector: false,\n        placement: 'top',\n        offset: 0,\n        container: false,\n        fallbackPlacement: 'flip',\n        boundary: 'scrollParent',\n        customClass: '',\n        sanitize: true,\n        sanitizeFn: null,\n        whiteList: DefaultWhitelist,\n        popperConfig: null\n    };\n    var DefaultType$3 = {\n        animation: 'boolean',\n        template: 'string',\n        title: '(string|element|function)',\n        trigger: 'string',\n        delay: '(number|object)',\n        html: 'boolean',\n        selector: '(string|boolean)',\n        placement: '(string|function)',\n        offset: '(number|string|function)',\n        container: '(string|element|boolean)',\n        fallbackPlacement: '(string|array)',\n        boundary: '(string|element)',\n        customClass: '(string|function)',\n        sanitize: 'boolean',\n        sanitizeFn: '(null|function)',\n        whiteList: 'object',\n        popperConfig: '(null|object)'\n    };\n    var Event$1 = {\n        HIDE: \"hide\" + EVENT_KEY$4,\n        HIDDEN: \"hidden\" + EVENT_KEY$4,\n        SHOW: \"show\" + EVENT_KEY$4,\n        SHOWN: \"shown\" + EVENT_KEY$4,\n        INSERTED: \"inserted\" + EVENT_KEY$4,\n        CLICK: \"click\" + EVENT_KEY$4,\n        FOCUSIN: \"focusin\" + EVENT_KEY$4,\n        FOCUSOUT: \"focusout\" + EVENT_KEY$4,\n        MOUSEENTER: \"mouseenter\" + EVENT_KEY$4,\n        MOUSELEAVE: \"mouseleave\" + EVENT_KEY$4\n    };\n    /**\n   * Class definition\n   */ var Tooltip = /*#__PURE__*/ function() {\n        function Tooltip(element, config) {\n            if (typeof Popper$1 === 'undefined') throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)');\n             // Private\n            this._isEnabled = true;\n            this._timeout = 0;\n            this._hoverState = '';\n            this._activeTrigger = {};\n            this._popper = null; // Protected\n            this.element = element;\n            this.config = this._getConfig(config);\n            this.tip = null;\n            this._setListeners();\n        } // Getters\n        var _proto = Tooltip.prototype;\n        // Public\n        _proto.enable = function enable() {\n            this._isEnabled = true;\n        };\n        _proto.disable = function disable() {\n            this._isEnabled = false;\n        };\n        _proto.toggleEnabled = function toggleEnabled() {\n            this._isEnabled = !this._isEnabled;\n        };\n        _proto.toggle = function toggle(event) {\n            if (!this._isEnabled) return;\n            if (event) {\n                var dataKey = this.constructor.DATA_KEY;\n                var context = $__default[\"default\"](event.currentTarget).data(dataKey);\n                if (!context) {\n                    context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n                    $__default[\"default\"](event.currentTarget).data(dataKey, context);\n                }\n                context._activeTrigger.click = !context._activeTrigger.click;\n                if (context._isWithActiveTrigger()) context._enter(null, context);\n                else context._leave(null, context);\n            } else {\n                if ($__default[\"default\"](this.getTipElement()).hasClass(CLASS_NAME_SHOW$3)) {\n                    this._leave(null, this);\n                    return;\n                }\n                this._enter(null, this);\n            }\n        };\n        _proto.dispose = function dispose() {\n            clearTimeout(this._timeout);\n            $__default[\"default\"].removeData(this.element, this.constructor.DATA_KEY);\n            $__default[\"default\"](this.element).off(this.constructor.EVENT_KEY);\n            $__default[\"default\"](this.element).closest('.modal').off('hide.bs.modal', this._hideModalHandler);\n            if (this.tip) $__default[\"default\"](this.tip).remove();\n            this._isEnabled = null;\n            this._timeout = null;\n            this._hoverState = null;\n            this._activeTrigger = null;\n            if (this._popper) this._popper.destroy();\n            this._popper = null;\n            this.element = null;\n            this.config = null;\n            this.tip = null;\n        };\n        _proto.show = function show() {\n            var _this = this;\n            if ($__default[\"default\"](this.element).css('display') === 'none') throw new Error('Please use show on visible elements');\n            var showEvent = $__default[\"default\"].Event(this.constructor.Event.SHOW);\n            if (this.isWithContent() && this._isEnabled) {\n                $__default[\"default\"](this.element).trigger(showEvent);\n                var shadowRoot = Util.findShadowRoot(this.element);\n                var isInTheDom = $__default[\"default\"].contains(shadowRoot !== null ? shadowRoot : this.element.ownerDocument.documentElement, this.element);\n                if (showEvent.isDefaultPrevented() || !isInTheDom) return;\n                var tip = this.getTipElement();\n                var tipId = Util.getUID(this.constructor.NAME);\n                tip.setAttribute('id', tipId);\n                this.element.setAttribute('aria-describedby', tipId);\n                this.setContent();\n                if (this.config.animation) $__default[\"default\"](tip).addClass(CLASS_NAME_FADE$3);\n                var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement;\n                var attachment = this._getAttachment(placement);\n                this.addAttachmentClass(attachment);\n                var container = this._getContainer();\n                $__default[\"default\"](tip).data(this.constructor.DATA_KEY, this);\n                if (!$__default[\"default\"].contains(this.element.ownerDocument.documentElement, this.tip)) $__default[\"default\"](tip).appendTo(container);\n                $__default[\"default\"](this.element).trigger(this.constructor.Event.INSERTED);\n                this._popper = new Popper$1(this.element, tip, this._getPopperConfig(attachment));\n                $__default[\"default\"](tip).addClass(CLASS_NAME_SHOW$3);\n                $__default[\"default\"](tip).addClass(this.config.customClass); // If this is a touch-enabled device we add extra\n                // empty mouseover listeners to the body's immediate children;\n                // only needed because of broken event delegation on iOS\n                // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n                if ('ontouchstart' in document.documentElement) $__default[\"default\"](document.body).children().on('mouseover', null, $__default[\"default\"].noop);\n                var complete = function complete() {\n                    if (_this.config.animation) _this._fixTransition();\n                    var prevHoverState = _this._hoverState;\n                    _this._hoverState = null;\n                    $__default[\"default\"](_this.element).trigger(_this.constructor.Event.SHOWN);\n                    if (prevHoverState === HOVER_STATE_OUT) _this._leave(null, _this);\n                };\n                if ($__default[\"default\"](this.tip).hasClass(CLASS_NAME_FADE$3)) {\n                    var transitionDuration = Util.getTransitionDurationFromElement(this.tip);\n                    $__default[\"default\"](this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n                } else complete();\n            }\n        };\n        _proto.hide = function hide(callback) {\n            var _this2 = this;\n            var tip = this.getTipElement();\n            var hideEvent = $__default[\"default\"].Event(this.constructor.Event.HIDE);\n            var complete = function complete() {\n                if (_this2._hoverState !== HOVER_STATE_SHOW && tip.parentNode) tip.parentNode.removeChild(tip);\n                _this2._cleanTipClass();\n                _this2.element.removeAttribute('aria-describedby');\n                $__default[\"default\"](_this2.element).trigger(_this2.constructor.Event.HIDDEN);\n                if (_this2._popper !== null) _this2._popper.destroy();\n                if (callback) callback();\n            };\n            $__default[\"default\"](this.element).trigger(hideEvent);\n            if (hideEvent.isDefaultPrevented()) return;\n            $__default[\"default\"](tip).removeClass(CLASS_NAME_SHOW$3); // If this is a touch-enabled device we remove the extra\n            // empty mouseover listeners we added for iOS support\n            if ('ontouchstart' in document.documentElement) $__default[\"default\"](document.body).children().off('mouseover', null, $__default[\"default\"].noop);\n            this._activeTrigger[TRIGGER_CLICK] = false;\n            this._activeTrigger[TRIGGER_FOCUS] = false;\n            this._activeTrigger[TRIGGER_HOVER] = false;\n            if ($__default[\"default\"](this.tip).hasClass(CLASS_NAME_FADE$3)) {\n                var transitionDuration = Util.getTransitionDurationFromElement(tip);\n                $__default[\"default\"](tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n            } else complete();\n            this._hoverState = '';\n        };\n        _proto.update = function update() {\n            if (this._popper !== null) this._popper.scheduleUpdate();\n        } // Protected\n        ;\n        _proto.isWithContent = function isWithContent() {\n            return Boolean(this.getTitle());\n        };\n        _proto.addAttachmentClass = function addAttachmentClass(attachment) {\n            $__default[\"default\"](this.getTipElement()).addClass(CLASS_PREFIX$1 + \"-\" + attachment);\n        };\n        _proto.getTipElement = function getTipElement() {\n            this.tip = this.tip || $__default[\"default\"](this.config.template)[0];\n            return this.tip;\n        };\n        _proto.setContent = function setContent() {\n            var tip = this.getTipElement();\n            this.setElementContent($__default[\"default\"](tip.querySelectorAll(SELECTOR_TOOLTIP_INNER)), this.getTitle());\n            $__default[\"default\"](tip).removeClass(CLASS_NAME_FADE$3 + \" \" + CLASS_NAME_SHOW$3);\n        };\n        _proto.setElementContent = function setElementContent($element, content) {\n            if (typeof content === 'object' && (content.nodeType || content.jquery)) {\n                // Content is a DOM node or a jQuery\n                if (this.config.html) {\n                    if (!$__default[\"default\"](content).parent().is($element)) $element.empty().append(content);\n                } else $element.text($__default[\"default\"](content).text());\n                return;\n            }\n            if (this.config.html) {\n                if (this.config.sanitize) content = sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn);\n                $element.html(content);\n            } else $element.text(content);\n        };\n        _proto.getTitle = function getTitle() {\n            var title = this.element.getAttribute('data-original-title');\n            if (!title) title = typeof this.config.title === 'function' ? this.config.title.call(this.element) : this.config.title;\n            return title;\n        } // Private\n        ;\n        _proto._getPopperConfig = function _getPopperConfig(attachment) {\n            var _this3 = this;\n            var defaultBsConfig = {\n                placement: attachment,\n                modifiers: {\n                    offset: this._getOffset(),\n                    flip: {\n                        behavior: this.config.fallbackPlacement\n                    },\n                    arrow: {\n                        element: SELECTOR_ARROW\n                    },\n                    preventOverflow: {\n                        boundariesElement: this.config.boundary\n                    }\n                },\n                onCreate: function onCreate(data) {\n                    if (data.originalPlacement !== data.placement) _this3._handlePopperPlacementChange(data);\n                },\n                onUpdate: function onUpdate(data) {\n                    return _this3._handlePopperPlacementChange(data);\n                }\n            };\n            return _extends$1({}, defaultBsConfig, this.config.popperConfig);\n        };\n        _proto._getOffset = function _getOffset() {\n            var _this4 = this;\n            var offset = {};\n            if (typeof this.config.offset === 'function') offset.fn = function(data) {\n                data.offsets = _extends$1({}, data.offsets, _this4.config.offset(data.offsets, _this4.element));\n                return data;\n            };\n            else offset.offset = this.config.offset;\n            return offset;\n        };\n        _proto._getContainer = function _getContainer() {\n            if (this.config.container === false) return document.body;\n            if (Util.isElement(this.config.container)) return $__default[\"default\"](this.config.container);\n            return $__default[\"default\"](document).find(this.config.container);\n        };\n        _proto._getAttachment = function _getAttachment(placement) {\n            return AttachmentMap[placement.toUpperCase()];\n        };\n        _proto._setListeners = function _setListeners() {\n            var _this5 = this;\n            var triggers = this.config.trigger.split(' ');\n            triggers.forEach(function(trigger) {\n                if (trigger === 'click') $__default[\"default\"](_this5.element).on(_this5.constructor.Event.CLICK, _this5.config.selector, function(event) {\n                    return _this5.toggle(event);\n                });\n                else if (trigger !== TRIGGER_MANUAL) {\n                    var eventIn = trigger === TRIGGER_HOVER ? _this5.constructor.Event.MOUSEENTER : _this5.constructor.Event.FOCUSIN;\n                    var eventOut = trigger === TRIGGER_HOVER ? _this5.constructor.Event.MOUSELEAVE : _this5.constructor.Event.FOCUSOUT;\n                    $__default[\"default\"](_this5.element).on(eventIn, _this5.config.selector, function(event) {\n                        return _this5._enter(event);\n                    }).on(eventOut, _this5.config.selector, function(event) {\n                        return _this5._leave(event);\n                    });\n                }\n            });\n            this._hideModalHandler = function() {\n                if (_this5.element) _this5.hide();\n            };\n            $__default[\"default\"](this.element).closest('.modal').on('hide.bs.modal', this._hideModalHandler);\n            if (this.config.selector) this.config = _extends$1({}, this.config, {\n                trigger: 'manual',\n                selector: ''\n            });\n            else this._fixTitle();\n        };\n        _proto._fixTitle = function _fixTitle() {\n            var titleType = typeof this.element.getAttribute('data-original-title');\n            if (this.element.getAttribute('title') || titleType !== 'string') {\n                this.element.setAttribute('data-original-title', this.element.getAttribute('title') || '');\n                this.element.setAttribute('title', '');\n            }\n        };\n        _proto._enter = function _enter(event, context) {\n            var dataKey = this.constructor.DATA_KEY;\n            context = context || $__default[\"default\"](event.currentTarget).data(dataKey);\n            if (!context) {\n                context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n                $__default[\"default\"](event.currentTarget).data(dataKey, context);\n            }\n            if (event) context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;\n            if ($__default[\"default\"](context.getTipElement()).hasClass(CLASS_NAME_SHOW$3) || context._hoverState === HOVER_STATE_SHOW) {\n                context._hoverState = HOVER_STATE_SHOW;\n                return;\n            }\n            clearTimeout(context._timeout);\n            context._hoverState = HOVER_STATE_SHOW;\n            if (!context.config.delay || !context.config.delay.show) {\n                context.show();\n                return;\n            }\n            context._timeout = setTimeout(function() {\n                if (context._hoverState === HOVER_STATE_SHOW) context.show();\n            }, context.config.delay.show);\n        };\n        _proto._leave = function _leave(event, context) {\n            var dataKey = this.constructor.DATA_KEY;\n            context = context || $__default[\"default\"](event.currentTarget).data(dataKey);\n            if (!context) {\n                context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n                $__default[\"default\"](event.currentTarget).data(dataKey, context);\n            }\n            if (event) context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = false;\n            if (context._isWithActiveTrigger()) return;\n            clearTimeout(context._timeout);\n            context._hoverState = HOVER_STATE_OUT;\n            if (!context.config.delay || !context.config.delay.hide) {\n                context.hide();\n                return;\n            }\n            context._timeout = setTimeout(function() {\n                if (context._hoverState === HOVER_STATE_OUT) context.hide();\n            }, context.config.delay.hide);\n        };\n        _proto._isWithActiveTrigger = function _isWithActiveTrigger() {\n            for(var trigger in this._activeTrigger){\n                if (this._activeTrigger[trigger]) return true;\n            }\n            return false;\n        };\n        _proto._getConfig = function _getConfig(config) {\n            var dataAttributes = $__default[\"default\"](this.element).data();\n            Object.keys(dataAttributes).forEach(function(dataAttr) {\n                if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) delete dataAttributes[dataAttr];\n            });\n            config = _extends$1({}, this.constructor.Default, dataAttributes, typeof config === 'object' && config ? config : {});\n            if (typeof config.delay === 'number') config.delay = {\n                show: config.delay,\n                hide: config.delay\n            };\n            if (typeof config.title === 'number') config.title = config.title.toString();\n            if (typeof config.content === 'number') config.content = config.content.toString();\n            Util.typeCheckConfig(NAME$4, config, this.constructor.DefaultType);\n            if (config.sanitize) config.template = sanitizeHtml(config.template, config.whiteList, config.sanitizeFn);\n            return config;\n        };\n        _proto._getDelegateConfig = function _getDelegateConfig() {\n            var config = {};\n            if (this.config) {\n                for(var key in this.config)if (this.constructor.Default[key] !== this.config[key]) config[key] = this.config[key];\n            }\n            return config;\n        };\n        _proto._cleanTipClass = function _cleanTipClass() {\n            var $tip = $__default[\"default\"](this.getTipElement());\n            var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX$1);\n            if (tabClass !== null && tabClass.length) $tip.removeClass(tabClass.join(''));\n        };\n        _proto._handlePopperPlacementChange = function _handlePopperPlacementChange(popperData) {\n            this.tip = popperData.instance.popper;\n            this._cleanTipClass();\n            this.addAttachmentClass(this._getAttachment(popperData.placement));\n        };\n        _proto._fixTransition = function _fixTransition() {\n            var tip = this.getTipElement();\n            var initConfigAnimation = this.config.animation;\n            if (tip.getAttribute('x-placement') !== null) return;\n            $__default[\"default\"](tip).removeClass(CLASS_NAME_FADE$3);\n            this.config.animation = false;\n            this.hide();\n            this.show();\n            this.config.animation = initConfigAnimation;\n        } // Static\n        ;\n        Tooltip._jQueryInterface = function _jQueryInterface(config) {\n            return this.each(function() {\n                var $element = $__default[\"default\"](this);\n                var data = $element.data(DATA_KEY$4);\n                var _config = typeof config === 'object' && config;\n                if (!data && /dispose|hide/.test(config)) return;\n                if (!data) {\n                    data = new Tooltip(this, _config);\n                    $element.data(DATA_KEY$4, data);\n                }\n                if (typeof config === 'string') {\n                    if (typeof data[config] === 'undefined') throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n                    data[config]();\n                }\n            });\n        };\n        _createClass(Tooltip, null, [\n            {\n                key: \"VERSION\",\n                get: function get() {\n                    return VERSION$4;\n                }\n            },\n            {\n                key: \"Default\",\n                get: function get() {\n                    return Default$3;\n                }\n            },\n            {\n                key: \"NAME\",\n                get: function get() {\n                    return NAME$4;\n                }\n            },\n            {\n                key: \"DATA_KEY\",\n                get: function get() {\n                    return DATA_KEY$4;\n                }\n            },\n            {\n                key: \"Event\",\n                get: function get() {\n                    return Event$1;\n                }\n            },\n            {\n                key: \"EVENT_KEY\",\n                get: function get() {\n                    return EVENT_KEY$4;\n                }\n            },\n            {\n                key: \"DefaultType\",\n                get: function get() {\n                    return DefaultType$3;\n                }\n            }\n        ]);\n        return Tooltip;\n    }();\n    /**\n   * jQuery\n   */ $__default[\"default\"].fn[NAME$4] = Tooltip._jQueryInterface;\n    $__default[\"default\"].fn[NAME$4].Constructor = Tooltip;\n    $__default[\"default\"].fn[NAME$4].noConflict = function() {\n        $__default[\"default\"].fn[NAME$4] = JQUERY_NO_CONFLICT$4;\n        return Tooltip._jQueryInterface;\n    };\n    /**\n   * Constants\n   */ var NAME$3 = 'popover';\n    var VERSION$3 = '4.6.2';\n    var DATA_KEY$3 = 'bs.popover';\n    var EVENT_KEY$3 = \".\" + DATA_KEY$3;\n    var JQUERY_NO_CONFLICT$3 = $__default[\"default\"].fn[NAME$3];\n    var CLASS_PREFIX = 'bs-popover';\n    var BSCLS_PREFIX_REGEX = new RegExp(\"(^|\\\\s)\" + CLASS_PREFIX + \"\\\\S+\", 'g');\n    var CLASS_NAME_FADE$2 = 'fade';\n    var CLASS_NAME_SHOW$2 = 'show';\n    var SELECTOR_TITLE = '.popover-header';\n    var SELECTOR_CONTENT = '.popover-body';\n    var Default$2 = _extends$1({}, Tooltip.Default, {\n        placement: 'right',\n        trigger: 'click',\n        content: '',\n        template: '<div class=\"popover\" role=\"tooltip\"><div class=\"arrow\"></div><h3 class=\"popover-header\"></h3><div class=\"popover-body\"></div></div>'\n    });\n    var DefaultType$2 = _extends$1({}, Tooltip.DefaultType, {\n        content: '(string|element|function)'\n    });\n    var Event = {\n        HIDE: \"hide\" + EVENT_KEY$3,\n        HIDDEN: \"hidden\" + EVENT_KEY$3,\n        SHOW: \"show\" + EVENT_KEY$3,\n        SHOWN: \"shown\" + EVENT_KEY$3,\n        INSERTED: \"inserted\" + EVENT_KEY$3,\n        CLICK: \"click\" + EVENT_KEY$3,\n        FOCUSIN: \"focusin\" + EVENT_KEY$3,\n        FOCUSOUT: \"focusout\" + EVENT_KEY$3,\n        MOUSEENTER: \"mouseenter\" + EVENT_KEY$3,\n        MOUSELEAVE: \"mouseleave\" + EVENT_KEY$3\n    };\n    /**\n   * Class definition\n   */ var Popover = /*#__PURE__*/ function(_Tooltip) {\n        _inheritsLoose(Popover, _Tooltip);\n        function Popover() {\n            return _Tooltip.apply(this, arguments) || this;\n        }\n        var _proto = Popover.prototype;\n        // Overrides\n        _proto.isWithContent = function isWithContent() {\n            return this.getTitle() || this._getContent();\n        };\n        _proto.addAttachmentClass = function addAttachmentClass(attachment) {\n            $__default[\"default\"](this.getTipElement()).addClass(CLASS_PREFIX + \"-\" + attachment);\n        };\n        _proto.getTipElement = function getTipElement() {\n            this.tip = this.tip || $__default[\"default\"](this.config.template)[0];\n            return this.tip;\n        };\n        _proto.setContent = function setContent() {\n            var $tip = $__default[\"default\"](this.getTipElement()); // We use append for html objects to maintain js events\n            this.setElementContent($tip.find(SELECTOR_TITLE), this.getTitle());\n            var content = this._getContent();\n            if (typeof content === 'function') content = content.call(this.element);\n            this.setElementContent($tip.find(SELECTOR_CONTENT), content);\n            $tip.removeClass(CLASS_NAME_FADE$2 + \" \" + CLASS_NAME_SHOW$2);\n        } // Private\n        ;\n        _proto._getContent = function _getContent() {\n            return this.element.getAttribute('data-content') || this.config.content;\n        };\n        _proto._cleanTipClass = function _cleanTipClass() {\n            var $tip = $__default[\"default\"](this.getTipElement());\n            var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX);\n            if (tabClass !== null && tabClass.length > 0) $tip.removeClass(tabClass.join(''));\n        } // Static\n        ;\n        Popover._jQueryInterface = function _jQueryInterface(config) {\n            return this.each(function() {\n                var data = $__default[\"default\"](this).data(DATA_KEY$3);\n                var _config = typeof config === 'object' ? config : null;\n                if (!data && /dispose|hide/.test(config)) return;\n                if (!data) {\n                    data = new Popover(this, _config);\n                    $__default[\"default\"](this).data(DATA_KEY$3, data);\n                }\n                if (typeof config === 'string') {\n                    if (typeof data[config] === 'undefined') throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n                    data[config]();\n                }\n            });\n        };\n        _createClass(Popover, null, [\n            {\n                key: \"VERSION\",\n                get: function get() {\n                    return VERSION$3;\n                }\n            },\n            {\n                key: \"Default\",\n                get: function get() {\n                    return Default$2;\n                }\n            },\n            {\n                key: \"NAME\",\n                get: function get() {\n                    return NAME$3;\n                }\n            },\n            {\n                key: \"DATA_KEY\",\n                get: function get() {\n                    return DATA_KEY$3;\n                }\n            },\n            {\n                key: \"Event\",\n                get: function get() {\n                    return Event;\n                }\n            },\n            {\n                key: \"EVENT_KEY\",\n                get: function get() {\n                    return EVENT_KEY$3;\n                }\n            },\n            {\n                key: \"DefaultType\",\n                get: function get() {\n                    return DefaultType$2;\n                }\n            }\n        ]);\n        return Popover;\n    }(Tooltip);\n    /**\n   * jQuery\n   */ $__default[\"default\"].fn[NAME$3] = Popover._jQueryInterface;\n    $__default[\"default\"].fn[NAME$3].Constructor = Popover;\n    $__default[\"default\"].fn[NAME$3].noConflict = function() {\n        $__default[\"default\"].fn[NAME$3] = JQUERY_NO_CONFLICT$3;\n        return Popover._jQueryInterface;\n    };\n    /**\n   * Constants\n   */ var NAME$2 = 'scrollspy';\n    var VERSION$2 = '4.6.2';\n    var DATA_KEY$2 = 'bs.scrollspy';\n    var EVENT_KEY$2 = \".\" + DATA_KEY$2;\n    var DATA_API_KEY$1 = '.data-api';\n    var JQUERY_NO_CONFLICT$2 = $__default[\"default\"].fn[NAME$2];\n    var CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\n    var CLASS_NAME_ACTIVE$1 = 'active';\n    var EVENT_ACTIVATE = \"activate\" + EVENT_KEY$2;\n    var EVENT_SCROLL = \"scroll\" + EVENT_KEY$2;\n    var EVENT_LOAD_DATA_API = \"load\" + EVENT_KEY$2 + DATA_API_KEY$1;\n    var METHOD_OFFSET = 'offset';\n    var METHOD_POSITION = 'position';\n    var SELECTOR_DATA_SPY = '[data-spy=\"scroll\"]';\n    var SELECTOR_NAV_LIST_GROUP$1 = '.nav, .list-group';\n    var SELECTOR_NAV_LINKS = '.nav-link';\n    var SELECTOR_NAV_ITEMS = '.nav-item';\n    var SELECTOR_LIST_ITEMS = '.list-group-item';\n    var SELECTOR_DROPDOWN$1 = '.dropdown';\n    var SELECTOR_DROPDOWN_ITEMS = '.dropdown-item';\n    var SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';\n    var Default$1 = {\n        offset: 10,\n        method: 'auto',\n        target: ''\n    };\n    var DefaultType$1 = {\n        offset: 'number',\n        method: 'string',\n        target: '(string|element)'\n    };\n    /**\n   * Class definition\n   */ var ScrollSpy = /*#__PURE__*/ function() {\n        function ScrollSpy(element, config) {\n            var _this = this;\n            this._element = element;\n            this._scrollElement = element.tagName === 'BODY' ? window : element;\n            this._config = this._getConfig(config);\n            this._selector = this._config.target + \" \" + SELECTOR_NAV_LINKS + \",\" + (this._config.target + \" \" + SELECTOR_LIST_ITEMS + \",\") + (this._config.target + \" \" + SELECTOR_DROPDOWN_ITEMS);\n            this._offsets = [];\n            this._targets = [];\n            this._activeTarget = null;\n            this._scrollHeight = 0;\n            $__default[\"default\"](this._scrollElement).on(EVENT_SCROLL, function(event) {\n                return _this._process(event);\n            });\n            this.refresh();\n            this._process();\n        } // Getters\n        var _proto = ScrollSpy.prototype;\n        // Public\n        _proto.refresh = function refresh() {\n            var _this2 = this;\n            var autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION;\n            var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;\n            var offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0;\n            this._offsets = [];\n            this._targets = [];\n            this._scrollHeight = this._getScrollHeight();\n            var targets = [].slice.call(document.querySelectorAll(this._selector));\n            targets.map(function(element) {\n                var target;\n                var targetSelector = Util.getSelectorFromElement(element);\n                if (targetSelector) target = document.querySelector(targetSelector);\n                if (target) {\n                    var targetBCR = target.getBoundingClientRect();\n                    if (targetBCR.width || targetBCR.height) // TODO (fat): remove sketch reliance on jQuery position/offset\n                    return [\n                        $__default[\"default\"](target)[offsetMethod]().top + offsetBase,\n                        targetSelector\n                    ];\n                }\n                return null;\n            }).filter(Boolean).sort(function(a, b) {\n                return a[0] - b[0];\n            }).forEach(function(item) {\n                _this2._offsets.push(item[0]);\n                _this2._targets.push(item[1]);\n            });\n        };\n        _proto.dispose = function dispose() {\n            $__default[\"default\"].removeData(this._element, DATA_KEY$2);\n            $__default[\"default\"](this._scrollElement).off(EVENT_KEY$2);\n            this._element = null;\n            this._scrollElement = null;\n            this._config = null;\n            this._selector = null;\n            this._offsets = null;\n            this._targets = null;\n            this._activeTarget = null;\n            this._scrollHeight = null;\n        } // Private\n        ;\n        _proto._getConfig = function _getConfig(config) {\n            config = _extends$1({}, Default$1, typeof config === 'object' && config ? config : {});\n            if (typeof config.target !== 'string' && Util.isElement(config.target)) {\n                var id = $__default[\"default\"](config.target).attr('id');\n                if (!id) {\n                    id = Util.getUID(NAME$2);\n                    $__default[\"default\"](config.target).attr('id', id);\n                }\n                config.target = \"#\" + id;\n            }\n            Util.typeCheckConfig(NAME$2, config, DefaultType$1);\n            return config;\n        };\n        _proto._getScrollTop = function _getScrollTop() {\n            return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;\n        };\n        _proto._getScrollHeight = function _getScrollHeight() {\n            return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);\n        };\n        _proto._getOffsetHeight = function _getOffsetHeight() {\n            return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;\n        };\n        _proto._process = function _process() {\n            var scrollTop = this._getScrollTop() + this._config.offset;\n            var scrollHeight = this._getScrollHeight();\n            var maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();\n            if (this._scrollHeight !== scrollHeight) this.refresh();\n            if (scrollTop >= maxScroll) {\n                var target = this._targets[this._targets.length - 1];\n                if (this._activeTarget !== target) this._activate(target);\n                return;\n            }\n            if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n                this._activeTarget = null;\n                this._clear();\n                return;\n            }\n            for(var i = this._offsets.length; i--;){\n                var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);\n                if (isActiveTarget) this._activate(this._targets[i]);\n            }\n        };\n        _proto._activate = function _activate(target) {\n            this._activeTarget = target;\n            this._clear();\n            var queries = this._selector.split(',').map(function(selector) {\n                return selector + \"[data-target=\\\"\" + target + \"\\\"],\" + selector + \"[href=\\\"\" + target + \"\\\"]\";\n            });\n            var $link = $__default[\"default\"]([].slice.call(document.querySelectorAll(queries.join(','))));\n            if ($link.hasClass(CLASS_NAME_DROPDOWN_ITEM)) {\n                $link.closest(SELECTOR_DROPDOWN$1).find(SELECTOR_DROPDOWN_TOGGLE$1).addClass(CLASS_NAME_ACTIVE$1);\n                $link.addClass(CLASS_NAME_ACTIVE$1);\n            } else {\n                // Set triggered link as active\n                $link.addClass(CLASS_NAME_ACTIVE$1); // Set triggered links parents as active\n                // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n                $link.parents(SELECTOR_NAV_LIST_GROUP$1).prev(SELECTOR_NAV_LINKS + \", \" + SELECTOR_LIST_ITEMS).addClass(CLASS_NAME_ACTIVE$1); // Handle special case when .nav-link is inside .nav-item\n                $link.parents(SELECTOR_NAV_LIST_GROUP$1).prev(SELECTOR_NAV_ITEMS).children(SELECTOR_NAV_LINKS).addClass(CLASS_NAME_ACTIVE$1);\n            }\n            $__default[\"default\"](this._scrollElement).trigger(EVENT_ACTIVATE, {\n                relatedTarget: target\n            });\n        };\n        _proto._clear = function _clear() {\n            [].slice.call(document.querySelectorAll(this._selector)).filter(function(node) {\n                return node.classList.contains(CLASS_NAME_ACTIVE$1);\n            }).forEach(function(node) {\n                return node.classList.remove(CLASS_NAME_ACTIVE$1);\n            });\n        } // Static\n        ;\n        ScrollSpy._jQueryInterface = function _jQueryInterface(config) {\n            return this.each(function() {\n                var data = $__default[\"default\"](this).data(DATA_KEY$2);\n                var _config = typeof config === 'object' && config;\n                if (!data) {\n                    data = new ScrollSpy(this, _config);\n                    $__default[\"default\"](this).data(DATA_KEY$2, data);\n                }\n                if (typeof config === 'string') {\n                    if (typeof data[config] === 'undefined') throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n                    data[config]();\n                }\n            });\n        };\n        _createClass(ScrollSpy, null, [\n            {\n                key: \"VERSION\",\n                get: function get() {\n                    return VERSION$2;\n                }\n            },\n            {\n                key: \"Default\",\n                get: function get() {\n                    return Default$1;\n                }\n            }\n        ]);\n        return ScrollSpy;\n    }();\n    /**\n   * Data API implementation\n   */ $__default[\"default\"](window).on(EVENT_LOAD_DATA_API, function() {\n        var scrollSpys = [].slice.call(document.querySelectorAll(SELECTOR_DATA_SPY));\n        var scrollSpysLength = scrollSpys.length;\n        for(var i = scrollSpysLength; i--;){\n            var $spy = $__default[\"default\"](scrollSpys[i]);\n            ScrollSpy._jQueryInterface.call($spy, $spy.data());\n        }\n    });\n    /**\n   * jQuery\n   */ $__default[\"default\"].fn[NAME$2] = ScrollSpy._jQueryInterface;\n    $__default[\"default\"].fn[NAME$2].Constructor = ScrollSpy;\n    $__default[\"default\"].fn[NAME$2].noConflict = function() {\n        $__default[\"default\"].fn[NAME$2] = JQUERY_NO_CONFLICT$2;\n        return ScrollSpy._jQueryInterface;\n    };\n    /**\n   * Constants\n   */ var NAME$1 = 'tab';\n    var VERSION$1 = '4.6.2';\n    var DATA_KEY$1 = 'bs.tab';\n    var EVENT_KEY$1 = \".\" + DATA_KEY$1;\n    var DATA_API_KEY = '.data-api';\n    var JQUERY_NO_CONFLICT$1 = $__default[\"default\"].fn[NAME$1];\n    var CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu';\n    var CLASS_NAME_ACTIVE = 'active';\n    var CLASS_NAME_DISABLED = 'disabled';\n    var CLASS_NAME_FADE$1 = 'fade';\n    var CLASS_NAME_SHOW$1 = 'show';\n    var EVENT_HIDE$1 = \"hide\" + EVENT_KEY$1;\n    var EVENT_HIDDEN$1 = \"hidden\" + EVENT_KEY$1;\n    var EVENT_SHOW$1 = \"show\" + EVENT_KEY$1;\n    var EVENT_SHOWN$1 = \"shown\" + EVENT_KEY$1;\n    var EVENT_CLICK_DATA_API = \"click\" + EVENT_KEY$1 + DATA_API_KEY;\n    var SELECTOR_DROPDOWN = '.dropdown';\n    var SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';\n    var SELECTOR_ACTIVE = '.active';\n    var SELECTOR_ACTIVE_UL = '> li > .active';\n    var SELECTOR_DATA_TOGGLE = '[data-toggle=\"tab\"], [data-toggle=\"pill\"], [data-toggle=\"list\"]';\n    var SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';\n    var SELECTOR_DROPDOWN_ACTIVE_CHILD = '> .dropdown-menu .active';\n    /**\n   * Class definition\n   */ var Tab = /*#__PURE__*/ function() {\n        function Tab(element) {\n            this._element = element;\n        } // Getters\n        var _proto = Tab.prototype;\n        // Public\n        _proto.show = function show() {\n            var _this = this;\n            if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $__default[\"default\"](this._element).hasClass(CLASS_NAME_ACTIVE) || $__default[\"default\"](this._element).hasClass(CLASS_NAME_DISABLED) || this._element.hasAttribute('disabled')) return;\n            var target;\n            var previous;\n            var listElement = $__default[\"default\"](this._element).closest(SELECTOR_NAV_LIST_GROUP)[0];\n            var selector = Util.getSelectorFromElement(this._element);\n            if (listElement) {\n                var itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE;\n                previous = $__default[\"default\"].makeArray($__default[\"default\"](listElement).find(itemSelector));\n                previous = previous[previous.length - 1];\n            }\n            var hideEvent = $__default[\"default\"].Event(EVENT_HIDE$1, {\n                relatedTarget: this._element\n            });\n            var showEvent = $__default[\"default\"].Event(EVENT_SHOW$1, {\n                relatedTarget: previous\n            });\n            if (previous) $__default[\"default\"](previous).trigger(hideEvent);\n            $__default[\"default\"](this._element).trigger(showEvent);\n            if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return;\n            if (selector) target = document.querySelector(selector);\n            this._activate(this._element, listElement);\n            var complete = function complete() {\n                var hiddenEvent = $__default[\"default\"].Event(EVENT_HIDDEN$1, {\n                    relatedTarget: _this._element\n                });\n                var shownEvent = $__default[\"default\"].Event(EVENT_SHOWN$1, {\n                    relatedTarget: previous\n                });\n                $__default[\"default\"](previous).trigger(hiddenEvent);\n                $__default[\"default\"](_this._element).trigger(shownEvent);\n            };\n            if (target) this._activate(target, target.parentNode, complete);\n            else complete();\n        };\n        _proto.dispose = function dispose() {\n            $__default[\"default\"].removeData(this._element, DATA_KEY$1);\n            this._element = null;\n        } // Private\n        ;\n        _proto._activate = function _activate(element, container, callback) {\n            var _this2 = this;\n            var activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? $__default[\"default\"](container).find(SELECTOR_ACTIVE_UL) : $__default[\"default\"](container).children(SELECTOR_ACTIVE);\n            var active = activeElements[0];\n            var isTransitioning = callback && active && $__default[\"default\"](active).hasClass(CLASS_NAME_FADE$1);\n            var complete = function complete() {\n                return _this2._transitionComplete(element, active, callback);\n            };\n            if (active && isTransitioning) {\n                var transitionDuration = Util.getTransitionDurationFromElement(active);\n                $__default[\"default\"](active).removeClass(CLASS_NAME_SHOW$1).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n            } else complete();\n        };\n        _proto._transitionComplete = function _transitionComplete(element, active, callback) {\n            if (active) {\n                $__default[\"default\"](active).removeClass(CLASS_NAME_ACTIVE);\n                var dropdownChild = $__default[\"default\"](active.parentNode).find(SELECTOR_DROPDOWN_ACTIVE_CHILD)[0];\n                if (dropdownChild) $__default[\"default\"](dropdownChild).removeClass(CLASS_NAME_ACTIVE);\n                if (active.getAttribute('role') === 'tab') active.setAttribute('aria-selected', false);\n            }\n            $__default[\"default\"](element).addClass(CLASS_NAME_ACTIVE);\n            if (element.getAttribute('role') === 'tab') element.setAttribute('aria-selected', true);\n            Util.reflow(element);\n            if (element.classList.contains(CLASS_NAME_FADE$1)) element.classList.add(CLASS_NAME_SHOW$1);\n            var parent = element.parentNode;\n            if (parent && parent.nodeName === 'LI') parent = parent.parentNode;\n            if (parent && $__default[\"default\"](parent).hasClass(CLASS_NAME_DROPDOWN_MENU)) {\n                var dropdownElement = $__default[\"default\"](element).closest(SELECTOR_DROPDOWN)[0];\n                if (dropdownElement) {\n                    var dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(SELECTOR_DROPDOWN_TOGGLE));\n                    $__default[\"default\"](dropdownToggleList).addClass(CLASS_NAME_ACTIVE);\n                }\n                element.setAttribute('aria-expanded', true);\n            }\n            if (callback) callback();\n        } // Static\n        ;\n        Tab._jQueryInterface = function _jQueryInterface(config) {\n            return this.each(function() {\n                var $this = $__default[\"default\"](this);\n                var data = $this.data(DATA_KEY$1);\n                if (!data) {\n                    data = new Tab(this);\n                    $this.data(DATA_KEY$1, data);\n                }\n                if (typeof config === 'string') {\n                    if (typeof data[config] === 'undefined') throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n                    data[config]();\n                }\n            });\n        };\n        _createClass(Tab, null, [\n            {\n                key: \"VERSION\",\n                get: function get() {\n                    return VERSION$1;\n                }\n            }\n        ]);\n        return Tab;\n    }();\n    /**\n   * Data API implementation\n   */ $__default[\"default\"](document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function(event) {\n        event.preventDefault();\n        Tab._jQueryInterface.call($__default[\"default\"](this), 'show');\n    });\n    /**\n   * jQuery\n   */ $__default[\"default\"].fn[NAME$1] = Tab._jQueryInterface;\n    $__default[\"default\"].fn[NAME$1].Constructor = Tab;\n    $__default[\"default\"].fn[NAME$1].noConflict = function() {\n        $__default[\"default\"].fn[NAME$1] = JQUERY_NO_CONFLICT$1;\n        return Tab._jQueryInterface;\n    };\n    /**\n   * Constants\n   */ var NAME = 'toast';\n    var VERSION = '4.6.2';\n    var DATA_KEY = 'bs.toast';\n    var EVENT_KEY = \".\" + DATA_KEY;\n    var JQUERY_NO_CONFLICT = $__default[\"default\"].fn[NAME];\n    var CLASS_NAME_FADE = 'fade';\n    var CLASS_NAME_HIDE = 'hide';\n    var CLASS_NAME_SHOW = 'show';\n    var CLASS_NAME_SHOWING = 'showing';\n    var EVENT_CLICK_DISMISS = \"click.dismiss\" + EVENT_KEY;\n    var EVENT_HIDE = \"hide\" + EVENT_KEY;\n    var EVENT_HIDDEN = \"hidden\" + EVENT_KEY;\n    var EVENT_SHOW = \"show\" + EVENT_KEY;\n    var EVENT_SHOWN = \"shown\" + EVENT_KEY;\n    var SELECTOR_DATA_DISMISS = '[data-dismiss=\"toast\"]';\n    var Default = {\n        animation: true,\n        autohide: true,\n        delay: 500\n    };\n    var DefaultType = {\n        animation: 'boolean',\n        autohide: 'boolean',\n        delay: 'number'\n    };\n    /**\n   * Class definition\n   */ var Toast = /*#__PURE__*/ function() {\n        function Toast(element, config) {\n            this._element = element;\n            this._config = this._getConfig(config);\n            this._timeout = null;\n            this._setListeners();\n        } // Getters\n        var _proto = Toast.prototype;\n        // Public\n        _proto.show = function show() {\n            var _this = this;\n            var showEvent = $__default[\"default\"].Event(EVENT_SHOW);\n            $__default[\"default\"](this._element).trigger(showEvent);\n            if (showEvent.isDefaultPrevented()) return;\n            this._clearTimeout();\n            if (this._config.animation) this._element.classList.add(CLASS_NAME_FADE);\n            var complete = function complete() {\n                _this._element.classList.remove(CLASS_NAME_SHOWING);\n                _this._element.classList.add(CLASS_NAME_SHOW);\n                $__default[\"default\"](_this._element).trigger(EVENT_SHOWN);\n                if (_this._config.autohide) _this._timeout = setTimeout(function() {\n                    _this.hide();\n                }, _this._config.delay);\n            };\n            this._element.classList.remove(CLASS_NAME_HIDE);\n            Util.reflow(this._element);\n            this._element.classList.add(CLASS_NAME_SHOWING);\n            if (this._config.animation) {\n                var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n                $__default[\"default\"](this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n            } else complete();\n        };\n        _proto.hide = function hide() {\n            if (!this._element.classList.contains(CLASS_NAME_SHOW)) return;\n            var hideEvent = $__default[\"default\"].Event(EVENT_HIDE);\n            $__default[\"default\"](this._element).trigger(hideEvent);\n            if (hideEvent.isDefaultPrevented()) return;\n            this._close();\n        };\n        _proto.dispose = function dispose() {\n            this._clearTimeout();\n            if (this._element.classList.contains(CLASS_NAME_SHOW)) this._element.classList.remove(CLASS_NAME_SHOW);\n            $__default[\"default\"](this._element).off(EVENT_CLICK_DISMISS);\n            $__default[\"default\"].removeData(this._element, DATA_KEY);\n            this._element = null;\n            this._config = null;\n        } // Private\n        ;\n        _proto._getConfig = function _getConfig(config) {\n            config = _extends$1({}, Default, $__default[\"default\"](this._element).data(), typeof config === 'object' && config ? config : {});\n            Util.typeCheckConfig(NAME, config, this.constructor.DefaultType);\n            return config;\n        };\n        _proto._setListeners = function _setListeners() {\n            var _this2 = this;\n            $__default[\"default\"](this._element).on(EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, function() {\n                return _this2.hide();\n            });\n        };\n        _proto._close = function _close() {\n            var _this3 = this;\n            var complete = function complete() {\n                _this3._element.classList.add(CLASS_NAME_HIDE);\n                $__default[\"default\"](_this3._element).trigger(EVENT_HIDDEN);\n            };\n            this._element.classList.remove(CLASS_NAME_SHOW);\n            if (this._config.animation) {\n                var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n                $__default[\"default\"](this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n            } else complete();\n        };\n        _proto._clearTimeout = function _clearTimeout() {\n            clearTimeout(this._timeout);\n            this._timeout = null;\n        } // Static\n        ;\n        Toast._jQueryInterface = function _jQueryInterface(config) {\n            return this.each(function() {\n                var $element = $__default[\"default\"](this);\n                var data = $element.data(DATA_KEY);\n                var _config = typeof config === 'object' && config;\n                if (!data) {\n                    data = new Toast(this, _config);\n                    $element.data(DATA_KEY, data);\n                }\n                if (typeof config === 'string') {\n                    if (typeof data[config] === 'undefined') throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n                    data[config](this);\n                }\n            });\n        };\n        _createClass(Toast, null, [\n            {\n                key: \"VERSION\",\n                get: function get() {\n                    return VERSION;\n                }\n            },\n            {\n                key: \"DefaultType\",\n                get: function get() {\n                    return DefaultType;\n                }\n            },\n            {\n                key: \"Default\",\n                get: function get() {\n                    return Default;\n                }\n            }\n        ]);\n        return Toast;\n    }();\n    /**\n   * jQuery\n   */ $__default[\"default\"].fn[NAME] = Toast._jQueryInterface;\n    $__default[\"default\"].fn[NAME].Constructor = Toast;\n    $__default[\"default\"].fn[NAME].noConflict = function() {\n        $__default[\"default\"].fn[NAME] = JQUERY_NO_CONFLICT;\n        return Toast._jQueryInterface;\n    };\n    exports1.Alert = Alert;\n    exports1.Button = Button;\n    exports1.Carousel = Carousel;\n    exports1.Collapse = Collapse;\n    exports1.Dropdown = Dropdown;\n    exports1.Modal = Modal;\n    exports1.Popover = Popover;\n    exports1.Scrollspy = ScrollSpy;\n    exports1.Tab = Tab;\n    exports1.Toast = Toast;\n    exports1.Tooltip = Tooltip;\n    exports1.Util = Util;\n    Object.defineProperty(exports1, '__esModule', {\n        value: true\n    });\n});\n\n\njQuery(function($) {\n    // Check if there's a hash in the URL\n    const hash = window.location.hash;\n    if (!hash) return;\n    // Wait for DOM to be fully ready\n    $(document).ready(function() {\n        // Find the target element\n        const anchorLink = $(hash);\n        if (anchorLink.length) {\n            const headerHeight = 152;\n            // Get the target offset\n            const targetOffset = anchorLink.offset().top;\n            // Verify we have a valid number\n            if (typeof targetOffset === \"number\" && !isNaN(targetOffset)) {\n                // Prevent default anchor behavior\n                event?.preventDefault();\n                // Scroll with timing adjustment\n                setTimeout(()=>{\n                    window.scrollTo({\n                        top: targetOffset - headerHeight,\n                        behavior: \"smooth\"\n                    });\n                }, 100); // Small delay to ensure DOM is fully loaded\n            } else console.log('Invalid offset for element:', hash);\n        } else console.log('Anchor not found:', hash);\n    });\n});\n(0, (/*@__PURE__*/$parcel$interopDefault($iUSsr)))(\"#skip-to-content\").on(\"click\", function(e) {\n    e.preventDefault();\n    const offset = (0, (/*@__PURE__*/$parcel$interopDefault($iUSsr)))(\"#main\").offset();\n    (0, (/*@__PURE__*/$parcel$interopDefault($iUSsr)))(\"#ecu-skip-links\").removeClass(\"active\");\n    (0, (/*@__PURE__*/$parcel$interopDefault($iUSsr)))(\"html, body\").animate({\n        scrollTop: offset.top - (0, (/*@__PURE__*/$parcel$interopDefault($iUSsr)))(\".ecu-sticky\").outerHeight() - 15\n    }, \"fast\");\n    // move focus to first target in main.\n    (0, (/*@__PURE__*/$parcel$interopDefault($iUSsr)))(\"#main\").trigger(\"focus\");\n});\nfunction $274e4c5b117f7c23$var$getOffsetTop(elem) {\n    var offsetTop = 0;\n    do if (!isNaN(elem.offsetTop)) offsetTop += elem.offsetTop;\n    while (elem = elem.offsetParent);\n    return offsetTop;\n}\n// Internal page anchor links, offset header.\n(0, (/*@__PURE__*/$parcel$interopDefault($iUSsr)))(\"a[href^='#']\").not(\"[href='#']\").not(\"[href='#0']\").on(\"click\", function(e) {\n    e.preventDefault();\n    const $element = (0, (/*@__PURE__*/$parcel$interopDefault($iUSsr)))(this);\n    const url = $element.attr('href');\n    const hash = $element.prop(\"hash\").replace(\"#\", \"\");\n    const $target = (0, (/*@__PURE__*/$parcel$interopDefault($iUSsr)))(`#${hash}`);\n    if ($target.eq(0)) {\n        let header = (0, (/*@__PURE__*/$parcel$interopDefault($iUSsr)))(\"#main-nav\").height() + (0, (/*@__PURE__*/$parcel$interopDefault($iUSsr)))(\"#site-nav\").height();\n        window.scrollTo(0, $274e4c5b117f7c23$var$getOffsetTop($target[0]) - header);\n    } else window.location.href = url;\n});\n(0, (/*@__PURE__*/$parcel$interopDefault($iUSsr)))(\"#theme-resources\").on(\"hide.bs.collapse\", function() {\n    (0, (/*@__PURE__*/$parcel$interopDefault($iUSsr)))(\"#toggle-resources\").attr(\"aria-label\", \"Open Resource Menu\");\n    (0, (/*@__PURE__*/$parcel$interopDefault($iUSsr)))(\"#resource-icon\").addClass(\"fa-bars\").removeClass(\"fa-close\");\n}).on(\"show.bs.collapse\", function() {\n    (0, (/*@__PURE__*/$parcel$interopDefault($iUSsr)))(\"#toggle-resources\").attr(\"aria-label\", \"Close Resource Menu\");\n    (0, (/*@__PURE__*/$parcel$interopDefault($iUSsr)))(\"#resource-icon\").addClass(\"fa-close\").removeClass(\"fa-bars\");\n    setTimeout(function() {\n        (0, (/*@__PURE__*/$parcel$interopDefault($iUSsr)))(\"#search-input\").focus();\n    }, 500);\n});\n(0, (/*@__PURE__*/$parcel$interopDefault($iUSsr)))(\".drop-menu .skip-link\").on(\"focus\", function() {\n    (0, (/*@__PURE__*/$parcel$interopDefault($iUSsr)))(\"#ecu-skip-links\").addClass(\"active\");\n}).on(\"blur\", function() {\n    (0, (/*@__PURE__*/$parcel$interopDefault($iUSsr)))(\"#ecu-skip-links\").removeClass(\"active\");\n});\n(0, (/*@__PURE__*/$parcel$interopDefault($iUSsr)))(document).on(\"keydown\", function(e) {\n    if (e.key === \"Escape\") {\n        let $themeResources = (0, (/*@__PURE__*/$parcel$interopDefault($iUSsr)))(\"#theme-resources\");\n        let $toggleResources = (0, (/*@__PURE__*/$parcel$interopDefault($iUSsr)))(\"#toggle-resources\");\n        let $primaryNav = (0, (/*@__PURE__*/$parcel$interopDefault($iUSsr)))(\"#primary-nav\");\n        let $ecuSkipLinks = (0, (/*@__PURE__*/$parcel$interopDefault($iUSsr)))(\"#ecu-skip-links\");\n        if ($themeResources.hasClass(\"show\")) {\n            $themeResources.removeClass(\"show\");\n            $toggleResources.trigger(\"focus\");\n            $toggleResources.attr(\"aria-label\", \"Open Resource Menu\");\n            (0, (/*@__PURE__*/$parcel$interopDefault($iUSsr)))(\"#resource-icon\").addClass(\"fa-bars\").removeClass(\"fa-close\");\n        } else if ($primaryNav.hasClass(\"show\")) {\n            (0, (/*@__PURE__*/$parcel$interopDefault($iUSsr)))(\"#toggle-site-nav\").trigger(\"focus\");\n            $primaryNav.removeClass(\"show\");\n        } else if ($ecuSkipLinks.hasClass(\"active\")) {\n            $ecuSkipLinks.removeClass(\"show\");\n            (0, (/*@__PURE__*/$parcel$interopDefault($iUSsr)))(\"#main-nav a.navbar-brand\").trigger(\"focus\");\n        }\n    }\n});\n// Close resource menu when items do not have focus.\n(0, (/*@__PURE__*/$parcel$interopDefault($iUSsr))).extend((0, (/*@__PURE__*/$parcel$interopDefault($iUSsr))).expr[':'], {\n    focusable: function(el) {\n        return (0, (/*@__PURE__*/$parcel$interopDefault($iUSsr)))(el).is(':input, a, button');\n    }\n});\n(0, (/*@__PURE__*/$parcel$interopDefault($iUSsr)))(\":focusable\").on(\"focus\", function() {\n    let menu = (0, (/*@__PURE__*/$parcel$interopDefault($iUSsr)))(document.activeElement).data(\"menu\");\n    if (menu !== \"resources\" && (0, (/*@__PURE__*/$parcel$interopDefault($iUSsr)))(\"#theme-resources\").hasClass(\"show\")) (0, (/*@__PURE__*/$parcel$interopDefault($iUSsr)))(\"#toggle-resources\").trigger(\"click\");\n});\n\n})();\n//# sourceMappingURL=public.js.map\n","/*!\n * jQuery JavaScript Library v3.7.1\n * https://jquery.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2023-08-28T13:37Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket trac-14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n// enough that all such attempts are guarded in a try block.\n\"use strict\";\n\nvar arr = [];\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\nvar flat = arr.flat ? function( array ) {\n\treturn arr.flat.call( array );\n} : function( array ) {\n\treturn arr.concat.apply( [], array );\n};\n\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\nvar support = {};\n\nvar isFunction = function isFunction( obj ) {\n\n\t\t// Support: Chrome <=57, Firefox <=52\n\t\t// In some browsers, typeof returns \"function\" for HTML <object> elements\n\t\t// (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n\t\t// We don't want to classify *any* DOM node as a function.\n\t\t// Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5\n\t\t// Plus for old WebKit, typeof returns \"function\" for HTML collections\n\t\t// (e.g., `typeof document.getElementsByTagName(\"div\") === \"function\"`). (gh-4756)\n\t\treturn typeof obj === \"function\" && typeof obj.nodeType !== \"number\" &&\n\t\t\ttypeof obj.item !== \"function\";\n\t};\n\n\nvar isWindow = function isWindow( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\n\nvar document = window.document;\n\n\n\n\tvar preservedScriptAttributes = {\n\t\ttype: true,\n\t\tsrc: true,\n\t\tnonce: true,\n\t\tnoModule: true\n\t};\n\n\tfunction DOMEval( code, node, doc ) {\n\t\tdoc = doc || document;\n\n\t\tvar i, val,\n\t\t\tscript = doc.createElement( \"script\" );\n\n\t\tscript.text = code;\n\t\tif ( node ) {\n\t\t\tfor ( i in preservedScriptAttributes ) {\n\n\t\t\t\t// Support: Firefox 64+, Edge 18+\n\t\t\t\t// Some browsers don't support the \"nonce\" property on scripts.\n\t\t\t\t// On the other hand, just using `getAttribute` is not enough as\n\t\t\t\t// the `nonce` attribute is reset to an empty string whenever it\n\t\t\t\t// becomes browsing-context connected.\n\t\t\t\t// See https://github.com/whatwg/html/issues/2369\n\t\t\t\t// See https://html.spec.whatwg.org/#nonce-attributes\n\t\t\t\t// The `node.getAttribute` check was added for the sake of\n\t\t\t\t// `jQuery.globalEval` so that it can fake a nonce-containing node\n\t\t\t\t// via an object.\n\t\t\t\tval = node[ i ] || node.getAttribute && node.getAttribute( i );\n\t\t\t\tif ( val ) {\n\t\t\t\t\tscript.setAttribute( i, val );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdoc.head.appendChild( script ).parentNode.removeChild( script );\n\t}\n\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\t// Support: Android <=2.3 only (functionish RegExp)\n\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n/* global Symbol */\n// Defining this global in .eslintrc.json would create a danger of using the global\n// unguarded in another place, it seems safer to define global only for this module\n\n\n\nvar version = \"3.7.1\",\n\n\trhtmlSuffix = /HTML$/i,\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teven: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn ( i + 1 ) % 2;\n\t\t} ) );\n\t},\n\n\todd: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn i % 2;\n\t\t} ) );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( name === \"__proto__\" || target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\t\t\t\t\tsrc = target[ name ];\n\n\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\tif ( copyIsArray && !Array.isArray( src ) ) {\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {\n\t\t\t\t\t\tclone = {};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src;\n\t\t\t\t\t}\n\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a provided context; falls back to the global one\n\t// if not specified.\n\tglobalEval: function( code, options, doc ) {\n\t\tDOMEval( code, { nonce: options && options.nonce }, doc );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\n\t// Retrieve the text value of an array of DOM nodes\n\ttext: function( elem ) {\n\t\tvar node,\n\t\t\tret = \"\",\n\t\t\ti = 0,\n\t\t\tnodeType = elem.nodeType;\n\n\t\tif ( !nodeType ) {\n\n\t\t\t// If no nodeType, this is expected to be an array\n\t\t\twhile ( ( node = elem[ i++ ] ) ) {\n\n\t\t\t\t// Do not traverse comment nodes\n\t\t\t\tret += jQuery.text( node );\n\t\t\t}\n\t\t}\n\t\tif ( nodeType === 1 || nodeType === 11 ) {\n\t\t\treturn elem.textContent;\n\t\t}\n\t\tif ( nodeType === 9 ) {\n\t\t\treturn elem.documentElement.textContent;\n\t\t}\n\t\tif ( nodeType === 3 || nodeType === 4 ) {\n\t\t\treturn elem.nodeValue;\n\t\t}\n\n\t\t// Do not include comment or processing instruction nodes\n\n\t\treturn ret;\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\tisXMLDoc: function( elem ) {\n\t\tvar namespace = elem && elem.namespaceURI,\n\t\t\tdocElem = elem && ( elem.ownerDocument || elem ).documentElement;\n\n\t\t// Assume HTML when documentElement doesn't yet exist, such as inside\n\t\t// document fragments.\n\t\treturn !rhtmlSuffix.test( namespace || docElem && docElem.nodeName || \"HTML\" );\n\t},\n\n\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t// push.apply(_, arraylike) throws on ancient WebKit\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn flat( ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\n\tfunction( _i, name ) {\n\t\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n\t} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = toType( obj );\n\n\tif ( isFunction( obj ) || isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\n\n\nfunction nodeName( elem, name ) {\n\n\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n}\nvar pop = arr.pop;\n\n\nvar sort = arr.sort;\n\n\nvar splice = arr.splice;\n\n\nvar whitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\";\n\n\nvar rtrimCSS = new RegExp(\n\t\"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\",\n\t\"g\"\n);\n\n\n\n\n// Note: an element does not contain itself\njQuery.contains = function( a, b ) {\n\tvar bup = b && b.parentNode;\n\n\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\n\t\t// Support: IE 9 - 11+\n\t\t// IE doesn't have `contains` on SVG.\n\t\ta.contains ?\n\t\t\ta.contains( bup ) :\n\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t) );\n};\n\n\n\n\n// CSS string/identifier serialization\n// https://drafts.csswg.org/cssom/#common-serializing-idioms\nvar rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;\n\nfunction fcssescape( ch, asCodePoint ) {\n\tif ( asCodePoint ) {\n\n\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\tif ( ch === \"\\0\" ) {\n\t\t\treturn \"\\uFFFD\";\n\t\t}\n\n\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\treturn ch.slice( 0, -1 ) + \"\\\\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t}\n\n\t// Other potentially-special ASCII characters get backslash-escaped\n\treturn \"\\\\\" + ch;\n}\n\njQuery.escapeSelector = function( sel ) {\n\treturn ( sel + \"\" ).replace( rcssescape, fcssescape );\n};\n\n\n\n\nvar preferredDoc = document,\n\tpushNative = push;\n\n( function() {\n\nvar i,\n\tExpr,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\tpush = pushNative,\n\n\t// Local document vars\n\tdocument,\n\tdocumentElement,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\tmatches,\n\n\t// Instance-specific data\n\texpando = jQuery.expando,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tnonnativeSelectorCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|\" +\n\t\t\"loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\n\tidentifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\",\n\n\t// Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\n\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" +\n\t\twhitespace + \"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trleadingCombinator = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" +\n\t\twhitespace + \"*\" ),\n\trdescend = new RegExp( whitespace + \"|>\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\tID: new RegExp( \"^#(\" + identifier + \")\" ),\n\t\tCLASS: new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\tTAG: new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\tATTR: new RegExp( \"^\" + attributes ),\n\t\tPSEUDO: new RegExp( \"^\" + pseudos ),\n\t\tCHILD: new RegExp(\n\t\t\t\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\t\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\t\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\tbool: new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\tneedsContext: new RegExp( \"^\" + whitespace +\n\t\t\t\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\n\t// CSS escapes\n\t// https://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\" ),\n\tfunescape = function( escape, nonHex ) {\n\t\tvar high = \"0x\" + escape.slice( 1 ) - 0x10000;\n\n\t\tif ( nonHex ) {\n\n\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\treturn nonHex;\n\t\t}\n\n\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t// Support: IE <=11+\n\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t// surrogate pair\n\t\treturn high < 0 ?\n\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// Used for iframes; see `setDocument`.\n\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE/Edge.\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tinDisabledFieldset = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && nodeName( elem, \"fieldset\" );\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\n// Support: IE <=9 only\n// Accessing document.activeElement can throw unexpectedly\n// https://bugs.jquery.com/ticket/13393\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t( arr = slice.call( preferredDoc.childNodes ) ),\n\t\tpreferredDoc.childNodes\n\t);\n\n\t// Support: Android <=4.0\n\t// Detect silently failing push.apply\n\t// eslint-disable-next-line no-unused-expressions\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = {\n\t\tapply: function( target, els ) {\n\t\t\tpushNative.apply( target, slice.call( els ) );\n\t\t},\n\t\tcall: function( target ) {\n\t\t\tpushNative.apply( target, slice.call( arguments, 1 ) );\n\t\t}\n\t};\n}\n\nfunction find( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\t\tsetDocument( context );\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( ( m = match[ 1 ] ) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( ( elem = context.getElementById( m ) ) ) {\n\n\t\t\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && ( elem = newContext.getElementById( m ) ) &&\n\t\t\t\t\t\t\tfind.contains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[ 2 ] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( ( m = match[ 3 ] ) && context.getElementsByClassName ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( !nonnativeSelectorCache[ selector + \" \" ] &&\n\t\t\t\t( !rbuggyQSA || !rbuggyQSA.test( selector ) ) ) {\n\n\t\t\t\tnewSelector = selector;\n\t\t\t\tnewContext = context;\n\n\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\tif ( nodeType === 1 &&\n\t\t\t\t\t( rdescend.test( selector ) || rleadingCombinator.test( selector ) ) ) {\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\n\t\t\t\t\t// We can use :scope instead of the ID hack if the browser\n\t\t\t\t\t// supports it & if we're not changing the context.\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when\n\t\t\t\t\t// strict-comparing two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( newContext != context || !support.scope ) {\n\n\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\tif ( ( nid = context.getAttribute( \"id\" ) ) ) {\n\t\t\t\t\t\t\tnid = jQuery.escapeSelector( nid );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcontext.setAttribute( \"id\", ( nid = expando ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[ i ] = ( nid ? \"#\" + nid : \":scope\" ) + \" \" +\n\t\t\t\t\t\t\ttoSelector( groups[ i ] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\tnonnativeSelectorCache( selector, true );\n\t\t\t\t} finally {\n\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrimCSS, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\n\t\t// Use (key + \" \") to avoid collision with native prototype properties\n\t\t// (see https://github.com/jquery/sizzle/issues/157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn ( cache[ key + \" \" ] = value );\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by jQuery selector module\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created element and returns a boolean result\n */\nfunction assert( fn ) {\n\tvar el = document.createElement( \"fieldset\" );\n\n\ttry {\n\t\treturn !!fn( el );\n\t} catch ( e ) {\n\t\treturn false;\n\t} finally {\n\n\t\t// Remove from its parent by default\n\t\tif ( el.parentNode ) {\n\t\t\tel.parentNode.removeChild( el );\n\t\t}\n\n\t\t// release memory in IE\n\t\tel = null;\n\t}\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\treturn nodeName( elem, \"input\" ) && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\treturn ( nodeName( elem, \"input\" ) || nodeName( elem, \"button\" ) ) &&\n\t\t\telem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11+\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\tinDisabledFieldset( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction( function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction( function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ ( j = matchIndexes[ i ] ) ] ) {\n\t\t\t\t\tseed[ j ] = !( matches[ j ] = seed[ j ] );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t} );\n}\n\n/**\n * Checks a node for validity as a jQuery selector context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [node] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nfunction setDocument( node ) {\n\tvar subWindow,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocumentElement = document.documentElement;\n\tdocumentIsHTML = !jQuery.isXMLDoc( document );\n\n\t// Support: iOS 7 only, IE 9 - 11+\n\t// Older browsers didn't support unprefixed `matches`.\n\tmatches = documentElement.matches ||\n\t\tdocumentElement.webkitMatchesSelector ||\n\t\tdocumentElement.msMatchesSelector;\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t// Accessing iframe documents after unload throws \"permission denied\" errors\n\t// (see trac-13936).\n\t// Limit the fix to IE & Edge Legacy; despite Edge 15+ implementing `matches`,\n\t// all IE 9+ and Edge Legacy versions implement `msMatchesSelector` as well.\n\tif ( documentElement.msMatchesSelector &&\n\n\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tpreferredDoc != document &&\n\t\t( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {\n\n\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\tsubWindow.addEventListener( \"unload\", unloadHandler );\n\t}\n\n\t// Support: IE <10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programmatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert( function( el ) {\n\t\tdocumentElement.appendChild( el ).id = jQuery.expando;\n\t\treturn !document.getElementsByName ||\n\t\t\t!document.getElementsByName( jQuery.expando ).length;\n\t} );\n\n\t// Support: IE 9 only\n\t// Check to see if it's possible to do matchesSelector\n\t// on a disconnected node.\n\tsupport.disconnectedMatch = assert( function( el ) {\n\t\treturn matches.call( el, \"*\" );\n\t} );\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t// IE/Edge don't support the :scope pseudo-class.\n\tsupport.scope = assert( function() {\n\t\treturn document.querySelectorAll( \":scope\" );\n\t} );\n\n\t// Support: Chrome 105 - 111 only, Safari 15.4 - 16.3 only\n\t// Make sure the `:has()` argument is parsed unforgivingly.\n\t// We include `*` in the test to detect buggy implementations that are\n\t// _selectively_ forgiving (specifically when the list includes at least\n\t// one valid selector).\n\t// Note that we treat complete lack of support for `:has()` as if it were\n\t// spec-compliant support, which is fine because use of `:has()` in such\n\t// environments will fail in the qSA path and fall back to jQuery traversal\n\t// anyway.\n\tsupport.cssHas = assert( function() {\n\t\ttry {\n\t\t\tdocument.querySelector( \":has(*,:jqfake)\" );\n\t\t\treturn false;\n\t\t} catch ( e ) {\n\t\t\treturn true;\n\t\t}\n\t} );\n\n\t// ID filter and find\n\tif ( support.getById ) {\n\t\tExpr.filter.ID = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute( \"id\" ) === attrId;\n\t\t\t};\n\t\t};\n\t\tExpr.find.ID = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t};\n\t} else {\n\t\tExpr.filter.ID =  function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode( \"id\" );\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\n\t\t// Support: IE 6 - 7 only\n\t\t// getElementById is not reliable as a find shortcut\n\t\tExpr.find.ID = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar node, i, elems,\n\t\t\t\t\telem = context.getElementById( id );\n\n\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\tnode = elem.getAttributeNode( \"id\" );\n\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\telems = context.getElementsByName( id );\n\t\t\t\t\ti = 0;\n\t\t\t\t\twhile ( ( elem = elems[ i++ ] ) ) {\n\t\t\t\t\t\tnode = elem.getAttributeNode( \"id\" );\n\t\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn [];\n\t\t\t}\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find.TAG = function( tag, context ) {\n\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t// DocumentFragment nodes don't have gEBTN\n\t\t} else {\n\t\t\treturn context.querySelectorAll( tag );\n\t\t}\n\t};\n\n\t// Class\n\tExpr.find.CLASS = function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\trbuggyQSA = [];\n\n\t// Build QSA regex\n\t// Regex strategy adopted from Diego Perini\n\tassert( function( el ) {\n\n\t\tvar input;\n\n\t\tdocumentElement.appendChild( el ).innerHTML =\n\t\t\t\"<a id='\" + expando + \"' href='' disabled='disabled'></a>\" +\n\t\t\t\"<select id='\" + expando + \"-\\r\\\\' disabled='disabled'>\" +\n\t\t\t\"<option selected=''></option></select>\";\n\n\t\t// Support: iOS <=7 - 8 only\n\t\t// Boolean attributes and \"value\" are not treated correctly in some XML documents\n\t\tif ( !el.querySelectorAll( \"[selected]\" ).length ) {\n\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t}\n\n\t\t// Support: iOS <=7 - 8 only\n\t\tif ( !el.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\trbuggyQSA.push( \"~=\" );\n\t\t}\n\n\t\t// Support: iOS 8 only\n\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\tif ( !el.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\trbuggyQSA.push( \".#.+[+~]\" );\n\t\t}\n\n\t\t// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+\n\t\t// In some of the document kinds, these selectors wouldn't work natively.\n\t\t// This is probably OK but for backwards compatibility we want to maintain\n\t\t// handling them through jQuery traversal in jQuery 3.x.\n\t\tif ( !el.querySelectorAll( \":checked\" ).length ) {\n\t\t\trbuggyQSA.push( \":checked\" );\n\t\t}\n\n\t\t// Support: Windows 8 Native Apps\n\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\tinput = document.createElement( \"input\" );\n\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\tel.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t// Support: IE 9 - 11+\n\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+\n\t\t// In some of the document kinds, these selectors wouldn't work natively.\n\t\t// This is probably OK but for backwards compatibility we want to maintain\n\t\t// handling them through jQuery traversal in jQuery 3.x.\n\t\tdocumentElement.appendChild( el ).disabled = true;\n\t\tif ( el.querySelectorAll( \":disabled\" ).length !== 2 ) {\n\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t}\n\n\t\t// Support: IE 11+, Edge 15 - 18+\n\t\t// IE 11/Edge don't find elements on a `[name='']` query in some cases.\n\t\t// Adding a temporary attribute to the document before the selection works\n\t\t// around the issue.\n\t\t// Interestingly, IE 10 & older don't seem to have the issue.\n\t\tinput = document.createElement( \"input\" );\n\t\tinput.setAttribute( \"name\", \"\" );\n\t\tel.appendChild( input );\n\t\tif ( !el.querySelectorAll( \"[name='']\" ).length ) {\n\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\t\t\t\twhitespace + \"*(?:''|\\\"\\\")\" );\n\t\t}\n\t} );\n\n\tif ( !support.cssHas ) {\n\n\t\t// Support: Chrome 105 - 110+, Safari 15.4 - 16.3+\n\t\t// Our regular `try-catch` mechanism fails to detect natively-unsupported\n\t\t// pseudo-classes inside `:has()` (such as `:has(:contains(\"Foo\"))`)\n\t\t// in browsers that parse the `:has()` argument as a forgiving selector list.\n\t\t// https://drafts.csswg.org/selectors/#relational now requires the argument\n\t\t// to be parsed unforgivingly, but browsers have not yet fully adjusted.\n\t\trbuggyQSA.push( \":has\" );\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( \"|\" ) );\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = function( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tcompare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ( a === document || a.ownerDocument == preferredDoc &&\n\t\t\t\tfind.contains( preferredDoc, a ) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ( b === document || b.ownerDocument == preferredDoc &&\n\t\t\t\tfind.contains( preferredDoc, b ) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t};\n\n\treturn document;\n}\n\nfind.matches = function( expr, elements ) {\n\treturn find( expr, null, null, elements );\n};\n\nfind.matchesSelector = function( elem, expr ) {\n\tsetDocument( elem );\n\n\tif ( documentIsHTML &&\n\t\t!nonnativeSelectorCache[ expr + \" \" ] &&\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch ( e ) {\n\t\t\tnonnativeSelectorCache( expr, true );\n\t\t}\n\t}\n\n\treturn find( expr, document, null, [ elem ] ).length > 0;\n};\n\nfind.contains = function( context, elem ) {\n\n\t// Set document vars if needed\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( ( context.ownerDocument || context ) != document ) {\n\t\tsetDocument( context );\n\t}\n\treturn jQuery.contains( context, elem );\n};\n\n\nfind.attr = function( elem, name ) {\n\n\t// Set document vars if needed\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( ( elem.ownerDocument || elem ) != document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\n\t\t// Don't get fooled by Object.prototype properties (see trac-13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\tif ( val !== undefined ) {\n\t\treturn val;\n\t}\n\n\treturn elem.getAttribute( name );\n};\n\nfind.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\njQuery.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\t//\n\t// Support: Android <=4.0+\n\t// Testing for detecting duplicates is unpredictable so instead assume we can't\n\t// depend on duplicate detection in all browsers without a stable sort.\n\thasDuplicate = !support.sortStable;\n\tsortInput = !support.sortStable && slice.call( results, 0 );\n\tsort.call( results, sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tsplice.call( results, duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\njQuery.fn.uniqueSort = function() {\n\treturn this.pushStack( jQuery.uniqueSort( slice.apply( this ) ) );\n};\n\nExpr = jQuery.expr = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\tATTR: function( match ) {\n\t\t\tmatch[ 1 ] = match[ 1 ].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[ 3 ] = ( match[ 3 ] || match[ 4 ] || match[ 5 ] || \"\" )\n\t\t\t\t.replace( runescape, funescape );\n\n\t\t\tif ( match[ 2 ] === \"~=\" ) {\n\t\t\t\tmatch[ 3 ] = \" \" + match[ 3 ] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\tCHILD: function( match ) {\n\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[ 1 ] = match[ 1 ].toLowerCase();\n\n\t\t\tif ( match[ 1 ].slice( 0, 3 ) === \"nth\" ) {\n\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[ 3 ] ) {\n\t\t\t\t\tfind.error( match[ 0 ] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[ 4 ] = +( match[ 4 ] ?\n\t\t\t\t\tmatch[ 5 ] + ( match[ 6 ] || 1 ) :\n\t\t\t\t\t2 * ( match[ 3 ] === \"even\" || match[ 3 ] === \"odd\" )\n\t\t\t\t);\n\t\t\t\tmatch[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === \"odd\" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[ 3 ] ) {\n\t\t\t\tfind.error( match[ 0 ] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\tPSEUDO: function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[ 6 ] && match[ 2 ];\n\n\t\t\tif ( matchExpr.CHILD.test( match[ 0 ] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[ 3 ] ) {\n\t\t\t\tmatch[ 2 ] = match[ 4 ] || match[ 5 ] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t( excess = tokenize( unquoted, true ) ) &&\n\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t( excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length ) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[ 0 ] = match[ 0 ].slice( 0, excess );\n\t\t\t\tmatch[ 2 ] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\tTAG: function( nodeNameSelector ) {\n\t\t\tvar expectedNodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() {\n\t\t\t\t\treturn true;\n\t\t\t\t} :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn nodeName( elem, expectedNodeName );\n\t\t\t\t};\n\t\t},\n\n\t\tCLASS: function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t( pattern = new RegExp( \"(^|\" + whitespace + \")\" + className +\n\t\t\t\t\t\"(\" + whitespace + \"|$)\" ) ) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\telem.getAttribute( \"class\" ) ||\n\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t);\n\t\t\t\t} );\n\t\t},\n\n\t\tATTR: function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = find.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\tif ( operator === \"=\" ) {\n\t\t\t\t\treturn result === check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"!=\" ) {\n\t\t\t\t\treturn result !== check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"^=\" ) {\n\t\t\t\t\treturn check && result.indexOf( check ) === 0;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"*=\" ) {\n\t\t\t\t\treturn check && result.indexOf( check ) > -1;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"$=\" ) {\n\t\t\t\t\treturn check && result.slice( -check.length ) === check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"~=\" ) {\n\t\t\t\t\treturn ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" )\n\t\t\t\t\t\t.indexOf( check ) > -1;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"|=\" ) {\n\t\t\t\t\treturn result === check || result.slice( 0, check.length + 1 ) === check + \"-\";\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t};\n\t\t},\n\n\t\tCHILD: function( type, what, _argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tvar cache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( ( node = node[ dir ] ) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnodeName( node, name ) :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\t\t\t\t\t\t\touterCache = parent[ expando ] || ( parent[ expando ] = {} );\n\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\touterCache = elem[ expando ] || ( elem[ expando ] = {} );\n\t\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnodeName( node, name ) :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( node[ expando ] = {} );\n\t\t\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\tPSEUDO: function( pseudo, argument ) {\n\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// https://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tfind.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as jQuery does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction( function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf.call( seed, matched[ i ] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[ i ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t} ) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\n\t\t// Potentially complex pseudos\n\t\tnot: markFunction( function( selector ) {\n\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrimCSS, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction( function( seed, matches, _context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\t\t\t\t\tseed[ i ] = !( matches[ i ] = elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} ) :\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tinput[ 0 ] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\n\t\t\t\t\t// Don't keep the element\n\t\t\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\t\t\tinput[ 0 ] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t} ),\n\n\t\thas: markFunction( function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn find( selector, elem ).length > 0;\n\t\t\t};\n\t\t} ),\n\n\t\tcontains: markFunction( function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || jQuery.text( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t} ),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// https://www.w3.org/TR/selectors/#lang-pseudo\n\t\tlang: markFunction( function( lang ) {\n\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test( lang || \"\" ) ) {\n\t\t\t\tfind.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( ( elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute( \"xml:lang\" ) || elem.getAttribute( \"lang\" ) ) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( ( elem = elem.parentNode ) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t} ),\n\n\t\t// Miscellaneous\n\t\ttarget: function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\troot: function( elem ) {\n\t\t\treturn elem === documentElement;\n\t\t},\n\n\t\tfocus: function( elem ) {\n\t\t\treturn elem === safeActiveElement() &&\n\t\t\t\tdocument.hasFocus() &&\n\t\t\t\t!!( elem.type || elem.href || ~elem.tabIndex );\n\t\t},\n\n\t\t// Boolean properties\n\t\tenabled: createDisabledPseudo( false ),\n\t\tdisabled: createDisabledPseudo( true ),\n\n\t\tchecked: function( elem ) {\n\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\treturn ( nodeName( elem, \"input\" ) && !!elem.checked ) ||\n\t\t\t\t( nodeName( elem, \"option\" ) && !!elem.selected );\n\t\t},\n\n\t\tselected: function( elem ) {\n\n\t\t\t// Support: IE <=11+\n\t\t\t// Accessing the selectedIndex property\n\t\t\t// forces the browser to treat the default option as\n\t\t\t// selected when in an optgroup.\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\tempty: function( elem ) {\n\n\t\t\t// https://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t//   but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\tparent: function( elem ) {\n\t\t\treturn !Expr.pseudos.empty( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\theader: function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\tinput: function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\tbutton: function( elem ) {\n\t\t\treturn nodeName( elem, \"input\" ) && elem.type === \"button\" ||\n\t\t\t\tnodeName( elem, \"button\" );\n\t\t},\n\n\t\ttext: function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn nodeName( elem, \"input\" ) && elem.type === \"text\" &&\n\n\t\t\t\t// Support: IE <10 only\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear\n\t\t\t\t// with elem.type === \"text\"\n\t\t\t\t( ( attr = elem.getAttribute( \"type\" ) ) == null ||\n\t\t\t\t\tattr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\tfirst: createPositionalPseudo( function() {\n\t\t\treturn [ 0 ];\n\t\t} ),\n\n\t\tlast: createPositionalPseudo( function( _matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t} ),\n\n\t\teq: createPositionalPseudo( function( _matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t} ),\n\n\t\teven: createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\todd: createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\tlt: createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i;\n\n\t\t\tif ( argument < 0 ) {\n\t\t\t\ti = argument + length;\n\t\t\t} else if ( argument > length ) {\n\t\t\t\ti = length;\n\t\t\t} else {\n\t\t\t\ti = argument;\n\t\t\t}\n\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\tgt: createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} )\n\t}\n};\n\nExpr.pseudos.nth = Expr.pseudos.eq;\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\nfunction tokenize( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || ( match = rcomma.exec( soFar ) ) ) {\n\t\t\tif ( match ) {\n\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[ 0 ].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( ( tokens = [] ) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( ( match = rleadingCombinator.exec( soFar ) ) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push( {\n\t\t\t\tvalue: matched,\n\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[ 0 ].replace( rtrimCSS, \" \" )\n\t\t\t} );\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] ||\n\t\t\t\t( match = preFilters[ type ]( match ) ) ) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push( {\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t} );\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\tif ( parseOnly ) {\n\t\treturn soFar.length;\n\t}\n\n\treturn soFar ?\n\t\tfind.error( selector ) :\n\n\t\t// Cache the tokens\n\t\ttokenCache( selector, groups ).slice( 0 );\n}\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[ i ].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || ( elem[ expando ] = {} );\n\n\t\t\t\t\t\tif ( skip && nodeName( elem, skip ) ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( ( oldCache = outerCache[ key ] ) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn ( newCache[ 2 ] = oldCache[ 2 ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\touterCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[ i ]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[ 0 ];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tfind( selector, contexts[ i ], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction( function( seed, results, context, xml ) {\n\t\tvar temp, i, elem, matcherOut,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed ||\n\t\t\t\tmultipleContexts( selector || \"*\",\n\t\t\t\t\tcontext.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems;\n\n\t\tif ( matcher ) {\n\n\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter\n\t\t\t// or preexisting results,\n\t\t\tmatcherOut = postFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t[] :\n\n\t\t\t\t// ...otherwise use results directly\n\t\t\t\tresults;\n\n\t\t\t// Find primary matches\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t} else {\n\t\t\tmatcherOut = matcherIn;\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( ( elem = temp[ i ] ) ) {\n\t\t\t\t\tmatcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) ) {\n\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( ( matcherIn[ i ] = elem ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, ( matcherOut = [] ), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) &&\n\t\t\t\t\t\t( temp = postFinder ? indexOf.call( seed, elem ) : preMap[ i ] ) > -1 ) {\n\n\t\t\t\t\t\tseed[ temp ] = !( results[ temp ] = elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t} );\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[ 0 ].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[ \" \" ],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf.call( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tvar ret = ( !leadingRelative && ( xml || context != outermostContext ) ) || (\n\t\t\t\t( checkContext = context ).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\n\t\t\t// Avoid hanging onto element\n\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) {\n\t\t\tmatchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[ j ].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 )\n\t\t\t\t\t\t\t.concat( { value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" } )\n\t\t\t\t\t).replace( rtrimCSS, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find.TAG( \"*\", outermost ),\n\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\n\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\toutermostContext = context == document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: iOS <=7 - 9 only\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching\n\t\t\t// elements by id. (see trac-14142)\n\t\t\tfor ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( !context && elem.ownerDocument != document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( ( matcher = elementMatchers[ j++ ] ) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml ) ) {\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( ( elem = !matcher && elem ) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( ( matcher = setMatchers[ j++ ] ) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !( unmatched[ i ] || setMatched[ i ] ) ) {\n\t\t\t\t\t\t\t\tsetMatched[ i ] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tjQuery.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\nfunction compile( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[ i ] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector,\n\t\t\tmatcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n}\n\n/**\n * A low-level selection function that works with jQuery's compiled\n *  selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n *  selector function built with jQuery selector compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nfunction select( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( ( selector = compiled.selector || selector ) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[ 0 ] = match[ 0 ].slice( 0 );\n\t\tif ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === \"ID\" &&\n\t\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) {\n\n\t\t\tcontext = ( Expr.find.ID(\n\t\t\t\ttoken.matches[ 0 ].replace( runescape, funescape ),\n\t\t\t\tcontext\n\t\t\t) || [] )[ 0 ];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr.needsContext.test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[ i ];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ ( type = token.type ) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( ( find = Expr.find[ type ] ) ) {\n\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( ( seed = find(\n\t\t\t\t\ttoken.matches[ 0 ].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[ 0 ].type ) &&\n\t\t\t\t\t\ttestContext( context.parentNode ) || context\n\t\t\t\t) ) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n}\n\n// One-time assignments\n\n// Support: Android <=4.0 - 4.1+\n// Sort stability\nsupport.sortStable = expando.split( \"\" ).sort( sortOrder ).join( \"\" ) === expando;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Android <=4.0 - 4.1+\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert( function( el ) {\n\n\t// Should return 1, but returns 4 (following)\n\treturn el.compareDocumentPosition( document.createElement( \"fieldset\" ) ) & 1;\n} );\n\njQuery.find = find;\n\n// Deprecated\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.unique = jQuery.uniqueSort;\n\n// These have always been private, but they used to be documented as part of\n// Sizzle so let's maintain them for now for backwards compatibility purposes.\nfind.compile = compile;\nfind.select = select;\nfind.setDocument = setDocument;\nfind.tokenize = tokenize;\n\nfind.escape = jQuery.escapeSelector;\nfind.getText = jQuery.text;\nfind.isXML = jQuery.isXMLDoc;\nfind.selectors = jQuery.expr;\nfind.support = jQuery.support;\nfind.uniqueSort = jQuery.uniqueSort;\n\n\t/* eslint-enable */\n\n} )();\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\nvar rsingleTag = ( /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i );\n\n\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (trac-9521)\n\t// Strict HTML recognition (trac-11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to jQuery#find\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\tif ( elem.contentDocument != null &&\n\n\t\t\t// Support: IE 11+\n\t\t\t// <object> elements with no `data` attribute has an object\n\t\t\t// `contentDocument` with a `null` prototype.\n\t\t\tgetProto( elem.contentDocument ) ) {\n\n\t\t\treturn elem.contentDocument;\n\t\t}\n\n\t\t// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n\t\t// Treat the template element as a regular one in browsers that\n\t\t// don't support it.\n\t\tif ( nodeName( elem, \"template\" ) ) {\n\t\t\telem = elem.content || elem;\n\t\t}\n\n\t\treturn jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnothtmlwhite = ( /[^\\x20\\t\\r\\n\\f]+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && toType( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && isFunction( ( method = value.promise ) ) ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && isFunction( ( method = value.then ) ) ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\n\t\t// Support: Android 4.0 only\n\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\treject.apply( undefined, [ value ] );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\t\"catch\": function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( _i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( isFunction( then ) ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.error );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the error, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getErrorHook ) {\n\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getErrorHook();\n\n\t\t\t\t\t\t\t\t// The deprecated alias of the above. While the name suggests\n\t\t\t\t\t\t\t\t// returning the stack, not an error instance, jQuery just passes\n\t\t\t\t\t\t\t\t// it directly to `console.warn` so both will work; an instance\n\t\t\t\t\t\t\t\t// just better cooperates with source maps.\n\t\t\t\t\t\t\t\t} else if ( jQuery.Deferred.getStackHook ) {\n\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onProgress ) ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onFulfilled ) ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onRejected ) ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the primary Deferred\n\t\t\tprimary = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tprimary.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( primary.state() === \"pending\" ||\n\t\t\t\tisFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {\n\n\t\t\t\treturn primary.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), primary.reject );\n\t\t}\n\n\t\treturn primary.promise();\n\t}\n} );\n\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\n// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error\n// captured before the async barrier to get the original error cause\n// which may otherwise be hidden.\njQuery.Deferred.exceptionHook = function( error, asyncError ) {\n\n\t// Support: IE 8 - 9 only\n\t// Console exists when dev tools are open, which can happen at any time\n\tif ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn( \"jQuery.Deferred exception: \" + error.message,\n\t\t\terror.stack, asyncError );\n\t}\n};\n\n\n\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n\n\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See trac-6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\n// Support: IE <=9 - 10 only\n// Older IE sometimes signals \"interactive\" too soon\nif ( document.readyState === \"complete\" ||\n\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( toType( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, _key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\t\tvalue :\n\t\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n};\n\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/,\n\trdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( _all, letter ) {\n\treturn letter.toUpperCase();\n}\n\n// Convert dashed to camelCase; used by the css and data modules\n// Support: IE <=9 - 11, Edge 12 - 15\n// Microsoft forgot to hump their vendor prefix (trac-9572)\nfunction camelCase( string ) {\n\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n}\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t//  - Node\n\t//    - Node.ELEMENT_NODE\n\t//    - Node.DOCUMENT_NODE\n\t//  - Object\n\t//    - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see trac-8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t//   1. No key was specified\n\t\t//   2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t//   1. The entire cache object\n\t\t//   2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t//   1. An object of properties\n\t\t//   2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t// The attrs elements can be null (trac-14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar documentElement = document.documentElement;\n\n\n\n\tvar isAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem );\n\t\t},\n\t\tcomposed = { composed: true };\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only\n\t// Check attachment across shadow DOM boundaries when possible (gh-3504)\n\t// Support: iOS 10.0-10.2 only\n\t// Early iOS 10 versions support `attachShadow` but not `getRootNode`,\n\t// leading to errors. We need to check for `getRootNode`.\n\tif ( documentElement.getRootNode ) {\n\t\tisAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem ) ||\n\t\t\t\telem.getRootNode( composed ) === elem.ownerDocument;\n\t\t};\n\t}\nvar isHiddenWithinTree = function( elem, el ) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tisAttached( elem ) &&\n\n\t\t\tjQuery.css( elem, \"display\" ) === \"none\";\n\t};\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = elem.nodeType &&\n\t\t\t( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i );\n\nvar rscriptType = ( /^$|^module$|\\/(?:java|ecma)script/i );\n\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0 - 4.3 only\n\t// Check state lost if the name is set (trac-11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (trac-14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Android <=4.1 only\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE <=11 only\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n\n\t// Support: IE <=9 only\n\t// IE <=9 replaces <option> tags with their contents when inserted outside of\n\t// the select element.\n\tdiv.innerHTML = \"<option></option>\";\n\tsupport.option = !!div.lastChild;\n} )();\n\n\n// We have to close these tags to support XHTML (trac-13200)\nvar wrapMap = {\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting <tbody> or other required elements.\n\tthead: [ 1, \"<table>\", \"</table>\" ],\n\tcol: [ 2, \"<table><colgroup>\", \"</colgroup></table>\" ],\n\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t_default: [ 0, \"\", \"\" ]\n};\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n// Support: IE <=9 only\nif ( !support.option ) {\n\twrapMap.optgroup = wrapMap.option = [ 1, \"<select multiple='multiple'>\", \"</select>\" ];\n}\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11 only\n\t// Use typeof to avoid zero-argument method invocation on host objects (trac-15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\tret = context.getElementsByTagName( tag || \"*\" );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, attached, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( toType( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (trac-12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tattached = isAttached( elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( attached ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\nvar rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Only attach events to objects that accept data\n\t\tif ( !acceptData( elem ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = Object.create( null );\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\n\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\tevent = jQuery.event.fix( nativeEvent ),\n\n\t\t\thandlers = (\n\t\t\t\tdataPriv.get( this, \"events\" ) || Object.create( null )\n\t\t\t)[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\tif ( !event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\tevent.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: IE <=9\n\t\t\t// Black-hole SVG <use> instance trees (trac-13180)\n\t\t\tcur.nodeType &&\n\n\t\t\t// Support: Firefox <=42\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11 only\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (trac-13208)\n\t\t\t\t// Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (trac-13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: isFunction( hook ) ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tclick: {\n\n\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\tsetup: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\tleverageNative( el, \"click\", true );\n\t\t\t\t}\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\ttrigger: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Force setup before triggering a click\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\tleverageNative( el, \"click\" );\n\t\t\t\t}\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t_default: function( event ) {\n\t\t\t\tvar target = event.target;\n\t\t\t\treturn rcheckableType.test( target.type ) &&\n\t\t\t\t\ttarget.click && nodeName( target, \"input\" ) &&\n\t\t\t\t\tdataPriv.get( target, \"click\" ) ||\n\t\t\t\t\tnodeName( target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Ensure the presence of an event listener that handles manually-triggered\n// synthetic events by interrupting progress until reinvoked in response to\n// *native* events that it fires directly, ensuring that state changes have\n// already occurred before other listeners are invoked.\nfunction leverageNative( el, type, isSetup ) {\n\n\t// Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add\n\tif ( !isSetup ) {\n\t\tif ( dataPriv.get( el, type ) === undefined ) {\n\t\t\tjQuery.event.add( el, type, returnTrue );\n\t\t}\n\t\treturn;\n\t}\n\n\t// Register the controller as a special universal handler for all event namespaces\n\tdataPriv.set( el, type, false );\n\tjQuery.event.add( el, type, {\n\t\tnamespace: false,\n\t\thandler: function( event ) {\n\t\t\tvar result,\n\t\t\t\tsaved = dataPriv.get( this, type );\n\n\t\t\tif ( ( event.isTrigger & 1 ) && this[ type ] ) {\n\n\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\tif ( !saved ) {\n\n\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t// There will always be at least one argument (an event object), so this array\n\t\t\t\t\t// will not be confused with a leftover capture object.\n\t\t\t\t\tsaved = slice.call( arguments );\n\t\t\t\t\tdataPriv.set( this, type, saved );\n\n\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\tthis[ type ]();\n\t\t\t\t\tresult = dataPriv.get( this, type );\n\t\t\t\t\tdataPriv.set( this, type, false );\n\n\t\t\t\t\tif ( saved !== result ) {\n\n\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t}\n\n\t\t\t\t// If this is an inner synthetic event for an event with a bubbling surrogate\n\t\t\t\t// (focus or blur), assume that the surrogate already propagated from triggering\n\t\t\t\t// the native event and prevent that from happening again here.\n\t\t\t\t// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the\n\t\t\t\t// bubbling surrogate propagates *after* the non-bubbling base), but that seems\n\t\t\t\t// less bad than duplication.\n\t\t\t\t} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}\n\n\t\t\t// If this is a native event triggered above, everything is now in order\n\t\t\t// Fire an inner synthetic event with the original arguments\n\t\t\t} else if ( saved ) {\n\n\t\t\t\t// ...and capture the result\n\t\t\t\tdataPriv.set( this, type, jQuery.event.trigger(\n\t\t\t\t\tsaved[ 0 ],\n\t\t\t\t\tsaved.slice( 1 ),\n\t\t\t\t\tthis\n\t\t\t\t) );\n\n\t\t\t\t// Abort handling of the native event by all jQuery handlers while allowing\n\t\t\t\t// native handlers on the same element to run. On target, this is achieved\n\t\t\t\t// by stopping immediate propagation just on the jQuery event. However,\n\t\t\t\t// the native event is re-wrapped by a jQuery one on each level of the\n\t\t\t\t// propagation so the only way to stop it for jQuery is to stop it for\n\t\t\t\t// everyone via native `stopPropagation()`. This is not a problem for\n\t\t\t\t// focus/blur which don't bubble, but it does also stop click on checkboxes\n\t\t\t\t// and radios. We accept this limitation.\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tevent.isImmediatePropagationStopped = returnTrue;\n\t\t\t}\n\t\t}\n\t} );\n}\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\t// Support: Safari <=6 - 7 only\n\t\t// Target should not be a text node (trac-504, trac-13143)\n\t\tthis.target = ( src.target && src.target.nodeType === 3 ) ?\n\t\t\tsrc.target.parentNode :\n\t\t\tsrc.target;\n\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcode: true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\twhich: true\n}, jQuery.event.addProp );\n\njQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( type, delegateType ) {\n\n\tfunction focusMappedHandler( nativeEvent ) {\n\t\tif ( document.documentMode ) {\n\n\t\t\t// Support: IE 11+\n\t\t\t// Attach a single focusin/focusout handler on the document while someone wants\n\t\t\t// focus/blur. This is because the former are synchronous in IE while the latter\n\t\t\t// are async. In other browsers, all those handlers are invoked synchronously.\n\n\t\t\t// `handle` from private data would already wrap the event, but we need\n\t\t\t// to change the `type` here.\n\t\t\tvar handle = dataPriv.get( this, \"handle\" ),\n\t\t\t\tevent = jQuery.event.fix( nativeEvent );\n\t\t\tevent.type = nativeEvent.type === \"focusin\" ? \"focus\" : \"blur\";\n\t\t\tevent.isSimulated = true;\n\n\t\t\t// First, handle focusin/focusout\n\t\t\thandle( nativeEvent );\n\n\t\t\t// ...then, handle focus/blur\n\t\t\t//\n\t\t\t// focus/blur don't bubble while focusin/focusout do; simulate the former by only\n\t\t\t// invoking the handler at the lower level.\n\t\t\tif ( event.target === event.currentTarget ) {\n\n\t\t\t\t// The setup part calls `leverageNative`, which, in turn, calls\n\t\t\t\t// `jQuery.event.add`, so event handle will already have been set\n\t\t\t\t// by this point.\n\t\t\t\thandle( event );\n\t\t\t}\n\t\t} else {\n\n\t\t\t// For non-IE browsers, attach a single capturing handler on the document\n\t\t\t// while someone wants focusin/focusout.\n\t\t\tjQuery.event.simulate( delegateType, nativeEvent.target,\n\t\t\t\tjQuery.event.fix( nativeEvent ) );\n\t\t}\n\t}\n\n\tjQuery.event.special[ type ] = {\n\n\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\tsetup: function() {\n\n\t\t\tvar attaches;\n\n\t\t\t// Claim the first handler\n\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\tleverageNative( this, type, true );\n\n\t\t\tif ( document.documentMode ) {\n\n\t\t\t\t// Support: IE 9 - 11+\n\t\t\t\t// We use the same native handler for focusin & focus (and focusout & blur)\n\t\t\t\t// so we need to coordinate setup & teardown parts between those events.\n\t\t\t\t// Use `delegateType` as the key as `type` is already used by `leverageNative`.\n\t\t\t\tattaches = dataPriv.get( this, delegateType );\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tthis.addEventListener( delegateType, focusMappedHandler );\n\t\t\t\t}\n\t\t\t\tdataPriv.set( this, delegateType, ( attaches || 0 ) + 1 );\n\t\t\t} else {\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\ttrigger: function() {\n\n\t\t\t// Force setup before trigger\n\t\t\tleverageNative( this, type );\n\n\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\treturn true;\n\t\t},\n\n\t\tteardown: function() {\n\t\t\tvar attaches;\n\n\t\t\tif ( document.documentMode ) {\n\t\t\t\tattaches = dataPriv.get( this, delegateType ) - 1;\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tthis.removeEventListener( delegateType, focusMappedHandler );\n\t\t\t\t\tdataPriv.remove( this, delegateType );\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.set( this, delegateType, attaches );\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Return false to indicate standard teardown should be applied\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\n\t\t// Suppress native focus or blur if we're currently inside\n\t\t// a leveraged native-event stack\n\t\t_default: function( event ) {\n\t\t\treturn dataPriv.get( event.target, type );\n\t\t},\n\n\t\tdelegateType: delegateType\n\t};\n\n\t// Support: Firefox <=44\n\t// Firefox doesn't have focus(in | out) events\n\t// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n\t//\n\t// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n\t// focus(in | out) events fire after focus & blur events,\n\t// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n\t// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\n\t//\n\t// Support: IE 9 - 11+\n\t// To preserve relative focusin/focus & focusout/blur event order guaranteed on the 3.x branch,\n\t// attach a single handler for both events in IE.\n\tjQuery.event.special[ delegateType ] = {\n\t\tsetup: function() {\n\n\t\t\t// Handle: regular nodes (via `this.ownerDocument`), window\n\t\t\t// (via `this.document`) & document (via `this`).\n\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\tdataHolder = document.documentMode ? this : doc,\n\t\t\t\tattaches = dataPriv.get( dataHolder, delegateType );\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// We use the same native handler for focusin & focus (and focusout & blur)\n\t\t\t// so we need to coordinate setup & teardown parts between those events.\n\t\t\t// Use `delegateType` as the key as `type` is already used by `leverageNative`.\n\t\t\tif ( !attaches ) {\n\t\t\t\tif ( document.documentMode ) {\n\t\t\t\t\tthis.addEventListener( delegateType, focusMappedHandler );\n\t\t\t\t} else {\n\t\t\t\t\tdoc.addEventListener( type, focusMappedHandler, true );\n\t\t\t\t}\n\t\t\t}\n\t\t\tdataPriv.set( dataHolder, delegateType, ( attaches || 0 ) + 1 );\n\t\t},\n\t\tteardown: function() {\n\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\tdataHolder = document.documentMode ? this : doc,\n\t\t\t\tattaches = dataPriv.get( dataHolder, delegateType ) - 1;\n\n\t\t\tif ( !attaches ) {\n\t\t\t\tif ( document.documentMode ) {\n\t\t\t\t\tthis.removeEventListener( delegateType, focusMappedHandler );\n\t\t\t\t} else {\n\t\t\t\t\tdoc.removeEventListener( type, focusMappedHandler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( dataHolder, delegateType );\n\t\t\t} else {\n\t\t\t\tdataPriv.set( dataHolder, delegateType, attaches );\n\t\t\t}\n\t\t}\n\t};\n} );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\n\t// Support: IE <=10 - 11, Edge 12 - 13 only\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /<script|<style|<link/i,\n\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\n\trcleanScript = /^\\s*<!\\[CDATA\\[|\\]\\]>\\s*$/g;\n\n// Prefer a tbody over its parent table for containing new rows\nfunction manipulationTarget( elem, content ) {\n\tif ( nodeName( elem, \"table\" ) &&\n\t\tnodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ) {\n\n\t\treturn jQuery( elem ).children( \"tbody\" )[ 0 ] || elem;\n\t}\n\n\treturn elem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tif ( ( elem.type || \"\" ).slice( 0, 5 ) === \"true/\" ) {\n\t\telem.type = elem.type.slice( 5 );\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.get( src );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdataPriv.remove( dest, \"handle events\" );\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = flat( args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tvalueIsFunction = isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( valueIsFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (trac-8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Re-enable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src && ( node.type || \"\" ).toLowerCase()  !== \"module\" ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl && !node.noModule ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src, {\n\t\t\t\t\t\t\t\t\tnonce: node.nonce || node.getAttribute( \"nonce\" )\n\t\t\t\t\t\t\t\t}, doc );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Unwrap a CDATA section containing script contents. This shouldn't be\n\t\t\t\t\t\t\t// needed as in XML documents they're already not visible when\n\t\t\t\t\t\t\t// inspecting element contents and in HTML documents they have no\n\t\t\t\t\t\t\t// meaning but we're preserving that logic for backwards compatibility.\n\t\t\t\t\t\t\t// This will be removed completely in 4.0. See gh-4904.\n\t\t\t\t\t\t\tDOMEval( node.textContent.replace( rcleanScript, \"\" ), node, doc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && isAttached( node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html;\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = isAttached( elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew jQuery#find here for performance reasons:\n\t\t\t// https://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar rcustomProp = /^--/;\n\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (trac-15098, trac-14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\nvar swap = function( elem, options, callback ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.call( elem );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\nvar rboxStyle = new RegExp( cssExpand.join( \"|\" ), \"i\" );\n\n\n\n( function() {\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computeStyleTests() {\n\n\t\t// This is a singleton, we need to execute it only once\n\t\tif ( !div ) {\n\t\t\treturn;\n\t\t}\n\n\t\tcontainer.style.cssText = \"position:absolute;left:-11111px;width:60px;\" +\n\t\t\t\"margin-top:1px;padding:0;border:0\";\n\t\tdiv.style.cssText =\n\t\t\t\"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"width:60%;top:1%\";\n\t\tdocumentElement.appendChild( container ).appendChild( div );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\treliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;\n\n\t\t// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\tdiv.style.right = \"60%\";\n\t\tpixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;\n\n\t\t// Support: IE 9 - 11 only\n\t\t// Detect misreporting of content dimensions for box-sizing:border-box elements\n\t\tboxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;\n\n\t\t// Support: IE 9 only\n\t\t// Detect overflow:scroll screwiness (gh-3699)\n\t\t// Support: Chrome <=64\n\t\t// Don't get tricked when zoom affects offsetWidth (gh-4029)\n\t\tdiv.style.position = \"absolute\";\n\t\tscrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12;\n\n\t\tdocumentElement.removeChild( container );\n\n\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t// it will also be a sign that checks already performed\n\t\tdiv = null;\n\t}\n\n\tfunction roundPixelMeasures( measure ) {\n\t\treturn Math.round( parseFloat( measure ) );\n\t}\n\n\tvar pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,\n\t\treliableTrDimensionsVal, reliableMarginLeftVal,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE <=9 - 11 only\n\t// Style of cloned element affects source element cloned (trac-8908)\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tjQuery.extend( support, {\n\t\tboxSizingReliable: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\t\tpixelBoxStyles: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelBoxStylesVal;\n\t\t},\n\t\tpixelPosition: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelPositionVal;\n\t\t},\n\t\treliableMarginLeft: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn reliableMarginLeftVal;\n\t\t},\n\t\tscrollboxSize: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn scrollboxSizeVal;\n\t\t},\n\n\t\t// Support: IE 9 - 11+, Edge 15 - 18+\n\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t// set in CSS while `offset*` properties report correct values.\n\t\t// Behavior in IE 9 is more subtle than in newer versions & it passes\n\t\t// some versions of this test; make sure not to make it pass there!\n\t\t//\n\t\t// Support: Firefox 70+\n\t\t// Only Firefox includes border widths\n\t\t// in computed dimensions. (gh-4529)\n\t\treliableTrDimensions: function() {\n\t\t\tvar table, tr, trChild, trStyle;\n\t\t\tif ( reliableTrDimensionsVal == null ) {\n\t\t\t\ttable = document.createElement( \"table\" );\n\t\t\t\ttr = document.createElement( \"tr\" );\n\t\t\t\ttrChild = document.createElement( \"div\" );\n\n\t\t\t\ttable.style.cssText = \"position:absolute;left:-11111px;border-collapse:separate\";\n\t\t\t\ttr.style.cssText = \"box-sizing:content-box;border:1px solid\";\n\n\t\t\t\t// Support: Chrome 86+\n\t\t\t\t// Height set through cssText does not get applied.\n\t\t\t\t// Computed height then comes back as 0.\n\t\t\t\ttr.style.height = \"1px\";\n\t\t\t\ttrChild.style.height = \"9px\";\n\n\t\t\t\t// Support: Android 8 Chrome 86+\n\t\t\t\t// In our bodyBackground.html iframe,\n\t\t\t\t// display for all div elements is set to \"inline\",\n\t\t\t\t// which causes a problem only in Android 8 Chrome 86.\n\t\t\t\t// Ensuring the div is `display: block`\n\t\t\t\t// gets around this issue.\n\t\t\t\ttrChild.style.display = \"block\";\n\n\t\t\t\tdocumentElement\n\t\t\t\t\t.appendChild( table )\n\t\t\t\t\t.appendChild( tr )\n\t\t\t\t\t.appendChild( trChild );\n\n\t\t\t\ttrStyle = window.getComputedStyle( tr );\n\t\t\t\treliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) +\n\t\t\t\t\tparseInt( trStyle.borderTopWidth, 10 ) +\n\t\t\t\t\tparseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight;\n\n\t\t\t\tdocumentElement.removeChild( table );\n\t\t\t}\n\t\t\treturn reliableTrDimensionsVal;\n\t\t}\n\t} );\n} )();\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\t\tisCustomProp = rcustomProp.test( name ),\n\n\t\t// Support: Firefox 51+\n\t\t// Retrieving style before computed somehow\n\t\t// fixes an issue with getting wrong values\n\t\t// on detached elements\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for:\n\t//   .css('filter') (IE 9 only, trac-12537)\n\t//   .css('--customProperty) (gh-3144)\n\tif ( computed ) {\n\n\t\t// Support: IE <=9 - 11+\n\t\t// IE only supports `\"float\"` in `getPropertyValue`; in computed styles\n\t\t// it's only available as `\"cssFloat\"`. We no longer modify properties\n\t\t// sent to `.css()` apart from camelCasing, so we need to check both.\n\t\t// Normally, this would create difference in behavior: if\n\t\t// `getPropertyValue` returns an empty string, the value returned\n\t\t// by `.css()` would be `undefined`. This is usually the case for\n\t\t// disconnected elements. However, in IE even disconnected elements\n\t\t// with no styles return `\"none\"` for `getPropertyValue( \"float\" )`\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( isCustomProp && ret ) {\n\n\t\t\t// Support: Firefox 105+, Chrome <=105+\n\t\t\t// Spec requires trimming whitespace for custom properties (gh-4926).\n\t\t\t// Firefox only trims leading whitespace. Chrome just collapses\n\t\t\t// both leading & trailing whitespace to a single space.\n\t\t\t//\n\t\t\t// Fall back to `undefined` if empty string returned.\n\t\t\t// This collapses a missing definition with property defined\n\t\t\t// and set to an empty string but there's no standard API\n\t\t\t// allowing us to differentiate them without a performance penalty\n\t\t\t// and returning `undefined` aligns with older jQuery.\n\t\t\t//\n\t\t\t// rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED\n\t\t\t// as whitespace while CSS does not, but this is not a problem\n\t\t\t// because CSS preprocessing replaces them with U+000A LINE FEED\n\t\t\t// (which *is* CSS whitespace)\n\t\t\t// https://www.w3.org/TR/css-syntax-3/#input-preprocessing\n\t\t\tret = ret.replace( rtrimCSS, \"$1\" ) || undefined;\n\t\t}\n\n\t\tif ( ret === \"\" && !isAttached( elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\tif ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar cssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style,\n\tvendorProps = {};\n\n// Return a vendor-prefixed property or undefined\nfunction vendorPropName( name ) {\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a potentially-mapped jQuery.cssProps or vendor prefixed property\nfunction finalPropName( name ) {\n\tvar final = jQuery.cssProps[ name ] || vendorProps[ name ];\n\n\tif ( final ) {\n\t\treturn final;\n\t}\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\treturn vendorProps[ name ] = vendorPropName( name ) || name;\n}\n\n\nvar\n\n\t// Swappable if display is none or starts with table\n\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t};\n\nfunction setPositiveNumber( _elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === \"width\" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0,\n\t\tmarginDelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\t// Count margin delta separately to only add it after scroll gutter adjustment.\n\t\t// This is needed to make negative margins work with `outerHeight( true )` (gh-3982).\n\t\tif ( box === \"margin\" ) {\n\t\t\tmarginDelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// For \"border\" or \"margin\", add border\n\t\t\tif ( box !== \"padding\" ) {\n\t\t\t\tdelta += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t// \"padding\" or \"margin\"\n\t\t} else {\n\n\t\t\t// For \"content\", subtract padding\n\t\t\tif ( box === \"content\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\tif ( box !== \"margin\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\n\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t) ) || 0;\n\t}\n\n\treturn delta + marginDelta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\n\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t// Fake content-box until we know it's needed to know the true value.\n\t\tboxSizingNeeded = !support.boxSizingReliable() || extra,\n\t\tisBorderBox = boxSizingNeeded &&\n\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\tvalueIsBorderBox = isBorderBox,\n\n\t\tval = curCSS( elem, dimension, styles ),\n\t\toffsetProp = \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );\n\n\t// Support: Firefox <=54\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = \"auto\";\n\t}\n\n\n\t// Support: IE 9 - 11 only\n\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\n\t// In those cases, the computed value can be trusted to be border-box.\n\tif ( ( !support.boxSizingReliable() && isBorderBox ||\n\n\t\t// Support: IE 10 - 11+, Edge 15 - 18+\n\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t// set in CSS while `offset*` properties report correct values.\n\t\t// Interestingly, in some cases IE 9 doesn't suffer from this issue.\n\t\t!support.reliableTrDimensions() && nodeName( elem, \"tr\" ) ||\n\n\t\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t\t// This happens for inline elements with no explicit setting (gh-3571)\n\t\tval === \"auto\" ||\n\n\t\t// Support: Android <=4.1 - 4.3 only\n\t\t// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n\t\t!parseFloat( val ) && jQuery.css( elem, \"display\", false, styles ) === \"inline\" ) &&\n\n\t\t// Make sure the element is visible & connected\n\t\telem.getClientRects().length ) {\n\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t// retrieved value as a content box dimension.\n\t\tvalueIsBorderBox = offsetProp in elem;\n\t\tif ( valueIsBorderBox ) {\n\t\t\tval = elem[ offsetProp ];\n\t\t}\n\t}\n\n\t// Normalize \"\" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element's box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\tanimationIterationCount: true,\n\t\taspectRatio: true,\n\t\tborderImageSlice: true,\n\t\tcolumnCount: true,\n\t\tflexGrow: true,\n\t\tflexShrink: true,\n\t\tfontWeight: true,\n\t\tgridArea: true,\n\t\tgridColumn: true,\n\t\tgridColumnEnd: true,\n\t\tgridColumnStart: true,\n\t\tgridRow: true,\n\t\tgridRowEnd: true,\n\t\tgridRowStart: true,\n\t\tlineHeight: true,\n\t\topacity: true,\n\t\torder: true,\n\t\torphans: true,\n\t\tscale: true,\n\t\twidows: true,\n\t\tzIndex: true,\n\t\tzoom: true,\n\n\t\t// SVG-related\n\t\tfillOpacity: true,\n\t\tfloodOpacity: true,\n\t\tstopOpacity: true,\n\t\tstrokeMiterlimit: true,\n\t\tstrokeOpacity: true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (trac-7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug trac-9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (trac-7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\t// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append\n\t\t\t// \"px\" to a few hardcoded values.\n\t\t\tif ( type === \"number\" && !isCustomProp ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\n\t\t\t// background-* props affect original clone's values\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( _i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\n\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?\n\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t} ) :\n\t\t\t\t\tgetWidthOrHeight( elem, dimension, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = getStyles( elem ),\n\n\t\t\t\t// Only read styles.position if the test has a chance to fail\n\t\t\t\t// to avoid forcing a reflow.\n\t\t\t\tscrollboxSizeBuggy = !support.scrollboxSize() &&\n\t\t\t\t\tstyles.position === \"absolute\",\n\n\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\tboxSizingNeeded = scrollboxSizeBuggy || extra,\n\t\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\tsubtract = extra ?\n\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\telem,\n\t\t\t\t\t\tdimension,\n\t\t\t\t\t\textra,\n\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\tstyles\n\t\t\t\t\t) :\n\t\t\t\t\t0;\n\n\t\t\t// Account for unreliable border-box dimensions by comparing offset* to computed and\n\t\t\t// faking a content-box to get border and padding (gh-3699)\n\t\t\tif ( isBorderBox && scrollboxSizeBuggy ) {\n\t\t\t\tsubtract -= Math.ceil(\n\t\t\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\t\t\tparseFloat( styles[ dimension ] ) -\n\t\t\t\t\tboxModelAdjustment( elem, dimension, \"border\", false, styles ) -\n\t\t\t\t\t0.5\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t) + \"px\";\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( prefix !== \"margin\" ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 && (\n\t\t\t\tjQuery.cssHooks[ tween.prop ] ||\n\t\t\t\t\ttween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE <=9 only\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, jQuery.fx.interval );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11, Edge 12 - 15\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY and Edge just mirrors\n\t\t// the overflowX value there.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.access( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\tanim.done( function() {\n\n\t\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (trac-12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tisFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !isFunction( easing ) && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\n\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( _i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.interval = 13;\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: Android <=4.3 only\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE <=11 only\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: IE <=11 only\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n} )();\n\n\nvar boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tnodeName( elem, \"input\" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\n\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( _i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle,\n\t\t\tlowercaseName = name.toLowerCase();\n\n\t\tif ( !isXML ) {\n\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ lowercaseName ];\n\t\t\tattrHandle[ lowercaseName ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tlowercaseName :\n\t\t\t\tnull;\n\t\t\tattrHandle[ lowercaseName ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n} );\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// Use proper attribute retrieval (trac-12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\trclickable.test( elem.nodeName ) &&\n\t\t\t\t\telem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11 only\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\n// eslint rule \"no-unused-expressions\" is disabled for this code\n// since it considers such accessions noop\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\tfunction stripAndCollapse( value ) {\n\t\tvar tokens = value.match( rnothtmlwhite ) || [];\n\t\treturn tokens.join( \" \" );\n\t}\n\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === \"string\" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + className + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += className + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + className + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + className + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar classNames, className, i, self,\n\t\t\ttype = typeof value,\n\t\t\tisValidValue = type === \"string\" || Array.isArray( value );\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\tif ( typeof stateVal === \"boolean\" && isValidValue ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\treturn this.each( function() {\n\t\t\tif ( isValidValue ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\tself = jQuery( this );\n\n\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( value === undefined || type === \"boolean\" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// Store className if set\n\t\t\t\t\tdataPriv.set( this, \"__className__\", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tif ( this.setAttribute ) {\n\t\t\t\t\tthis.setAttribute( \"class\",\n\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\t\tdataPriv.get( this, \"__className__\" ) || \"\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\nvar rreturn = /\\r/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, valueIsFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle most common string cases\n\t\t\t\tif ( typeof ret === \"string\" ) {\n\t\t\t\t\treturn ret.replace( rreturn, \"\" );\n\t\t\t\t}\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t// option.text throws exceptions (trac-14686, trac-14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t// IE8-9 doesn't update selected after form reset (trac-2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\tif ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( \"value\" ) === null ? \"on\" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\nvar location = window.location;\n\nvar nonce = { guid: Date.now() };\n\nvar rquery = ( /\\?/ );\n\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml, parserErrorElem;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11 only\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {}\n\n\tparserErrorElem = xml && xml.getElementsByTagName( \"parsererror\" )[ 0 ];\n\tif ( !xml || parserErrorElem ) {\n\t\tjQuery.error( \"Invalid XML: \" + (\n\t\t\tparserErrorElem ?\n\t\t\t\tjQuery.map( parserErrorElem.childNodes, function( el ) {\n\t\t\t\t\treturn el.textContent;\n\t\t\t\t} ).join( \"\\n\" ) :\n\t\t\t\tdata\n\t\t) );\n\t}\n\treturn xml;\n};\n\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = lastElement = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (trac-9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tlastElement = cur;\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || Object.create( null ) )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (trac-6170)\n\t\t\t\tif ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && toType( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = isFunction( valueOrFunction ) ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\tif ( a == null ) {\n\t\treturn \"\";\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} ).filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} ).map( function( _i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// trac-7653, trac-8125, trac-8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t *    - BEFORE asking for a transport\n\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document.createElement( \"a\" );\n\noriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( isFunction( func ) ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes trac-9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() + \" \" ] =\n\t\t\t\t\t\t\t\t\t( responseHeaders[ match[ 1 ].toLowerCase() + \" \" ] || [] )\n\t\t\t\t\t\t\t\t\t\t.concat( match[ 2 ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() + \" \" ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match.join( \", \" );\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (trac-10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket trac-12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11, Edge 12 - 15\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (trac-15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === \"string\" ) ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// trac-9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + ( nonce.guid++ ) +\n\t\t\t\t\tuncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Use a noop converter for missing script but not if jsonp\n\t\t\tif ( !isSuccess &&\n\t\t\t\tjQuery.inArray( \"script\", s.dataTypes ) > -1 &&\n\t\t\t\tjQuery.inArray( \"json\", s.dataTypes ) < 0 ) {\n\t\t\t\ts.converters[ \"text script\" ] = function() {};\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( _i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\njQuery.ajaxPrefilter( function( s ) {\n\tvar i;\n\tfor ( i in s.headers ) {\n\t\tif ( i.toLowerCase() === \"content-type\" ) {\n\t\t\ts.contentType = s.headers[ i ] || \"\";\n\t\t}\n\t}\n} );\n\n\njQuery._evalUrl = function( url, options, doc ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (trac-11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\n\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t// of the default converter is kludgy but it works.\n\t\tconverters: {\n\t\t\t\"text script\": function() {}\n\t\t},\n\t\tdataFilter: function( response ) {\n\t\t\tjQuery.globalEval( response, options, doc );\n\t\t}\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( isFunction( html ) ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar htmlIsFunction = isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\n\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n};\n\nvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// trac-1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback, errorCallback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\txhr.open(\n\t\t\t\t\toptions.type,\n\t\t\t\t\toptions.url,\n\t\t\t\t\toptions.async,\n\t\t\t\t\toptions.username,\n\t\t\t\t\toptions.password\n\t\t\t\t);\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.ontimeout =\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\n\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\tif ( typeof xhr.status !== \"number\" ) {\n\t\t\t\t\t\t\t\t\tcomplete( 0, \"error\" );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see trac-8605, trac-14207\n\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) !== \"text\"  ||\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\terrorCallback = xhr.onerror = xhr.ontimeout = callback( \"error\" );\n\n\t\t\t\t// Support: IE 9 only\n\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t// to handle uncaught aborts\n\t\t\t\tif ( xhr.onabort !== undefined ) {\n\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t} else {\n\t\t\t\t\txhr.onreadystatechange = function() {\n\n\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\tif ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\twindow.setTimeout( function() {\n\t\t\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = callback( \"abort\" );\n\n\t\t\t\ttry {\n\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// trac-14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\n// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\njQuery.ajaxPrefilter( function( s ) {\n\tif ( s.crossDomain ) {\n\t\ts.contents.script = false;\n\t}\n} );\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\n\t// This transport only deals with cross domain or forced-by-attrs requests\n\tif ( s.crossDomain || s.scriptAttrs ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"<script>\" )\n\t\t\t\t\t.attr( s.scriptAttrs || {} )\n\t\t\t\t\t.prop( { charset: s.scriptCharset, src: s.url } )\n\t\t\t\t\t.on( \"load error\", callback = function( evt ) {\n\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\tif ( evt ) {\n\t\t\t\t\t\t\tcomplete( evt.type === \"error\" ? 404 : 200, evt.type );\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\tdocument.head.appendChild( script[ 0 ] );\n\t\t\t},\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup( {\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce.guid++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n} );\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t( s.contentType || \"\" )\n\t\t\t\t\t.indexOf( \"application/x-www-form-urlencoded\" ) === 0 &&\n\t\t\t\trjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[ \"script json\" ] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// Force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always( function() {\n\n\t\t\t// If previous value didn't exist - remove it\n\t\t\tif ( overwritten === undefined ) {\n\t\t\t\tjQuery( window ).removeProp( callbackName );\n\n\t\t\t// Otherwise restore preexisting value\n\t\t\t} else {\n\t\t\t\twindow[ callbackName ] = overwritten;\n\t\t\t}\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\n\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// Save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t} );\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n} );\n\n\n\n\n// Support: Safari 8 only\n// In Safari 8 documents created via document.implementation.createHTMLDocument\n// collapse sibling forms: the second one becomes a child of the first one.\n// Because of that, this security measure has to be disabled in Safari 8.\n// https://bugs.webkit.org/show_bug.cgi?id=137337\nsupport.createHTMLDocument = ( function() {\n\tvar body = document.implementation.createHTMLDocument( \"\" ).body;\n\tbody.innerHTML = \"<form></form><form></form>\";\n\treturn body.childNodes.length === 2;\n} )();\n\n\n// Argument \"data\" should be string of html\n// context (optional): If specified, the fragment will be created in this context,\n// defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( typeof data !== \"string\" ) {\n\t\treturn [];\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\n\tvar base, parsed, scripts;\n\n\tif ( !context ) {\n\n\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t// by using document.implementation\n\t\tif ( support.createHTMLDocument ) {\n\t\t\tcontext = document.implementation.createHTMLDocument( \"\" );\n\n\t\t\t// Set the base href for the created document\n\t\t\t// so any parsed elements with URLs\n\t\t\t// are based on the document's URL (gh-2965)\n\t\t\tbase = context.createElement( \"base\" );\n\t\t\tbase.href = document.location.href;\n\t\t\tcontext.head.appendChild( base );\n\t\t} else {\n\t\t\tcontext = document;\n\t\t}\n\t}\n\n\tparsed = rsingleTag.exec( data );\n\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[ 1 ] ) ];\n\t}\n\n\tparsed = buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf( \" \" );\n\n\tif ( off > -1 ) {\n\t\tselector = stripAndCollapse( url.slice( off ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax( {\n\t\t\turl: url,\n\n\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t// Make value of this field explicit since\n\t\t\t// user can override it through ajaxSetup method\n\t\t\ttype: type || \"GET\",\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t} ).done( function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery( \"<div>\" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t// but they are ignored because response was set above.\n\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t} ).always( callback && function( jqXHR, status ) {\n\t\t\tself.each( function() {\n\t\t\t\tcallback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t\t} );\n\t\t} );\n\t}\n\n\treturn this;\n};\n\n\n\n\njQuery.expr.pseudos.animated = function( elem ) {\n\treturn jQuery.grep( jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t} ).length;\n};\n\n\n\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// Set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\t( curCSSTop + curCSSLeft ).indexOf( \"auto\" ) > -1;\n\n\t\t// Need to be able to calculate position if either\n\t\t// top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( isFunction( options ) ) {\n\n\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\toptions = options.call( elem, i, jQuery.extend( {}, curOffset ) );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend( {\n\n\t// offset() relates an element's border box to the document origin\n\toffset: function( options ) {\n\n\t\t// Preserve chaining for setter\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each( function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t} );\n\t\t}\n\n\t\tvar rect, win,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !elem ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n\t\t// Support: IE <=11 only\n\t\t// Running getBoundingClientRect on a\n\t\t// disconnected node in IE throws an error\n\t\tif ( !elem.getClientRects().length ) {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t\t// Get document-relative position by adding viewport scroll to viewport-relative gBCR\n\t\trect = elem.getBoundingClientRect();\n\t\twin = elem.ownerDocument.defaultView;\n\t\treturn {\n\t\t\ttop: rect.top + win.pageYOffset,\n\t\t\tleft: rect.left + win.pageXOffset\n\t\t};\n\t},\n\n\t// position() relates an element's margin box to its offset parent's padding box\n\t// This corresponds to the behavior of CSS absolute positioning\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset, doc,\n\t\t\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// position:fixed elements are offset from the viewport, which itself always has zero offset\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\n\t\t\t// Assume position:fixed implies availability of getBoundingClientRect\n\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t} else {\n\t\t\toffset = this.offset();\n\n\t\t\t// Account for the *real* offset parent, which can be the document or its root element\n\t\t\t// when a statically positioned element is identified\n\t\t\tdoc = elem.ownerDocument;\n\t\t\toffsetParent = elem.offsetParent || doc.documentElement;\n\t\t\twhile ( offsetParent &&\n\t\t\t\t( offsetParent === doc.body || offsetParent === doc.documentElement ) &&\n\t\t\t\tjQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\n\t\t\t\toffsetParent = offsetParent.parentNode;\n\t\t\t}\n\t\t\tif ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) {\n\n\t\t\t\t// Incorporate borders into its offset, since they are outside its content origin\n\t\t\t\tparentOffset = jQuery( offsetParent ).offset();\n\t\t\t\tparentOffset.top += jQuery.css( offsetParent, \"borderTopWidth\", true );\n\t\t\t\tparentOffset.left += jQuery.css( offsetParent, \"borderLeftWidth\", true );\n\t\t\t}\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\treturn {\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t};\n\t},\n\n\t// This method will return documentElement in the following cases:\n\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t//    documentElement of the parent window\n\t// 2) For the hidden or detached element\n\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t//\n\t// but those exceptions were never presented as a real life use-cases\n\t// and might be considered as more preferable results.\n\t//\n\t// This logic, however, is not guaranteed and can change at any point in the future\n\toffsetParent: function() {\n\t\treturn this.map( function() {\n\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\twhile ( offsetParent && jQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\n\t\t\treturn offsetParent || documentElement;\n\t\t} );\n\t}\n} );\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = \"pageYOffset\" === prop;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\n\t\t\t// Coalesce documents and windows\n\t\t\tvar win;\n\t\t\tif ( isWindow( elem ) ) {\n\t\t\t\twin = elem;\n\t\t\t} else if ( elem.nodeType === 9 ) {\n\t\t\t\twin = elem.defaultView;\n\t\t\t}\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? win[ prop ] : elem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length );\n\t};\n} );\n\n// Support: Safari <=7 - 9.1, Chrome <=37 - 49\n// Add the top/left cssHooks using jQuery.fn.position\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347\n// getComputedStyle returns percent when specified for top/left/bottom/right;\n// rather than make the css module depend on the offset module, just check for it here\njQuery.each( [ \"top\", \"left\" ], function( _i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\n\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n} );\n\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( {\n\t\tpadding: \"inner\" + name,\n\t\tcontent: type,\n\t\t\"\": \"outer\" + name\n\t}, function( defaultExtra, funcName ) {\n\n\t\t// Margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( isWindow( elem ) ) {\n\n\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\treturn funcName.indexOf( \"outer\" ) === 0 ?\n\t\t\t\t\t\telem[ \"inner\" + name ] :\n\t\t\t\t\t\telem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable );\n\t\t};\n\t} );\n} );\n\n\njQuery.each( [\n\t\"ajaxStart\",\n\t\"ajaxStop\",\n\t\"ajaxComplete\",\n\t\"ajaxError\",\n\t\"ajaxSuccess\",\n\t\"ajaxSend\"\n], function( _i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n} );\n\n\n\n\njQuery.fn.extend( {\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ?\n\t\t\tthis.off( selector, \"**\" ) :\n\t\t\tthis.off( types, selector || \"**\", fn );\n\t},\n\n\thover: function( fnOver, fnOut ) {\n\t\treturn this\n\t\t\t.on( \"mouseenter\", fnOver )\n\t\t\t.on( \"mouseleave\", fnOut || fnOver );\n\t}\n} );\n\njQuery.each(\n\t( \"blur focus focusin focusout resize scroll click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup contextmenu\" ).split( \" \" ),\n\tfunction( _i, name ) {\n\n\t\t// Handle event binding\n\t\tjQuery.fn[ name ] = function( data, fn ) {\n\t\t\treturn arguments.length > 0 ?\n\t\t\t\tthis.on( name, null, data, fn ) :\n\t\t\t\tthis.trigger( name );\n\t\t};\n\t}\n);\n\n\n\n\n// Support: Android <=4.0 only\n// Make sure we trim BOM and NBSP\n// Require that the \"whitespace run\" starts from a non-whitespace\n// to avoid O(N^2) behavior when the engine would try matching \"\\s+$\" at each space position.\nvar rtrim = /^[\\s\\uFEFF\\xA0]+|([^\\s\\uFEFF\\xA0])[\\s\\uFEFF\\xA0]+$/g;\n\n// Bind a function to a context, optionally partially applying any\n// arguments.\n// jQuery.proxy is deprecated to promote standards (specifically Function#bind)\n// However, it is not slated for removal any time soon\njQuery.proxy = function( fn, context ) {\n\tvar tmp, args, proxy;\n\n\tif ( typeof context === \"string\" ) {\n\t\ttmp = fn[ context ];\n\t\tcontext = fn;\n\t\tfn = tmp;\n\t}\n\n\t// Quick check to determine if target is callable, in the spec\n\t// this throws a TypeError, but we will just return undefined.\n\tif ( !isFunction( fn ) ) {\n\t\treturn undefined;\n\t}\n\n\t// Simulated bind\n\targs = slice.call( arguments, 2 );\n\tproxy = function() {\n\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t};\n\n\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\treturn proxy;\n};\n\njQuery.holdReady = function( hold ) {\n\tif ( hold ) {\n\t\tjQuery.readyWait++;\n\t} else {\n\t\tjQuery.ready( true );\n\t}\n};\njQuery.isArray = Array.isArray;\njQuery.parseJSON = JSON.parse;\njQuery.nodeName = nodeName;\njQuery.isFunction = isFunction;\njQuery.isWindow = isWindow;\njQuery.camelCase = camelCase;\njQuery.type = toType;\n\njQuery.now = Date.now;\n\njQuery.isNumeric = function( obj ) {\n\n\t// As of jQuery 3.0, isNumeric is limited to\n\t// strings and numbers (primitives or objects)\n\t// that can be coerced to finite numbers (gh-2662)\n\tvar type = jQuery.type( obj );\n\treturn ( type === \"number\" || type === \"string\" ) &&\n\n\t\t// parseFloat NaNs numeric-cast false positives (\"\")\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t// subtraction forces infinities to NaN\n\t\t!isNaN( obj - parseFloat( obj ) );\n};\n\njQuery.trim = function( text ) {\n\treturn text == null ?\n\t\t\"\" :\n\t\t( text + \"\" ).replace( rtrim, \"$1\" );\n};\n\n\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( typeof define === \"function\" && define.amd ) {\n\tdefine( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t} );\n}\n\n\n\n\nvar\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in AMD\n// (trac-7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (trac-13566)\nif ( typeof noGlobal === \"undefined\" ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\n\n\n\nreturn jQuery;\n} );\n","import $ from \"jquery\"\r\nimport './scss/public.scss'\r\nimport \"bootstrap/dist/js/bootstrap.bundle\"\r\n\r\njQuery(function ($) {\r\n    // Check if there's a hash in the URL\r\n    const hash = window.location.hash;\r\n    if (!hash) return;\r\n\r\n    // Wait for DOM to be fully ready\r\n    $(document).ready(function() {\r\n        // Find the target element\r\n        const anchorLink = $(hash);\r\n        if (anchorLink.length) {\r\n            const headerHeight = 152;\r\n\r\n            // Get the target offset\r\n            const targetOffset = anchorLink.offset().top;\r\n\r\n            // Verify we have a valid number\r\n            if (typeof targetOffset === \"number\" && !isNaN(targetOffset)) {\r\n                // Prevent default anchor behavior\r\n                event?.preventDefault();\r\n\r\n                // Scroll with timing adjustment\r\n                setTimeout(() => {\r\n                    window.scrollTo({\r\n                        top: targetOffset - headerHeight,\r\n                        behavior: \"smooth\"\r\n                    });\r\n                }, 100); // Small delay to ensure DOM is fully loaded\r\n            } else {\r\n                console.log('Invalid offset for element:', hash);\r\n            }\r\n        } else {\r\n            console.log('Anchor not found:', hash);\r\n        }\r\n    });\r\n});\r\n\r\n$(\"#skip-to-content\").on(\"click\", function (e) {\r\n\te.preventDefault();\r\n\tconst offset = $(\"#main\").offset();\r\n\t$(\"#ecu-skip-links\").removeClass(\"active\");\r\n\t$(\"html, body\").animate(\r\n\t\t{ scrollTop: offset.top - $(\".ecu-sticky\").outerHeight() - 15 },\r\n\t\t\"fast\"\r\n\t);\r\n\t// move focus to first target in main.\r\n\t$(\"#main\").trigger(\"focus\");\r\n});\r\n\r\nfunction getOffsetTop(elem) {\r\n    var offsetTop = 0;\r\n\r\n    do {\r\n        if (!isNaN(elem.offsetTop)) {\r\n            offsetTop += elem.offsetTop;\r\n        }\r\n    } while (\r\n\t\t(elem = elem.offsetParent)\r\n\t);\r\n\r\n    return offsetTop;\r\n}\r\n\r\n// Internal page anchor links, offset header.\r\n$(\"a[href^='#']\").not(\"[href='#']\").not(\"[href='#0']\").on(\"click\", function (e) {\r\n    e.preventDefault();\r\n\tconst $element = $(this);\r\n    const url = $element.attr('href');\r\n    const hash = $element.prop(\"hash\").replace(\"#\", \"\");\r\n    const $target = $(`#${hash}`);\r\n\r\n    if ($target.eq(0)) {\r\n        let header = $(\"#main-nav\").height() + $(\"#site-nav\").height();\r\n        window.scrollTo(0, getOffsetTop($target[0]) - header);\r\n    } else {\r\n        window.location.href = url;\r\n    }\r\n});\r\n\r\n$(\"#theme-resources\").on(\"hide.bs.collapse\", function () {\r\n    $(\"#toggle-resources\").attr(\"aria-label\", \"Open Resource Menu\");\r\n    $(\"#resource-icon\").addClass(\"fa-bars\").removeClass(\"fa-close\");\r\n}).on(\"show.bs.collapse\", function () {\r\n    $(\"#toggle-resources\").attr(\"aria-label\", \"Close Resource Menu\");\r\n    $(\"#resource-icon\").addClass(\"fa-close\").removeClass(\"fa-bars\");\r\n\r\n    setTimeout(function () {\r\n        $(\"#search-input\").focus();\r\n    }, 500);\r\n});\r\n\r\n$(\".drop-menu .skip-link\").on(\"focus\", function () {\r\n    $(\"#ecu-skip-links\").addClass(\"active\");\r\n}).on(\"blur\", function () {\r\n    $(\"#ecu-skip-links\").removeClass(\"active\");\r\n});\r\n\r\n$(document).on(\"keydown\", function(e) {\r\n    if (e.key === \"Escape\") {\r\n\t\tlet $themeResources = $(\"#theme-resources\");\r\n\t\tlet $toggleResources = $(\"#toggle-resources\");\r\n\t\tlet $primaryNav = $(\"#primary-nav\");\r\n\t\tlet $ecuSkipLinks = $(\"#ecu-skip-links\");\r\n\r\n        if ($themeResources.hasClass(\"show\")) {\r\n            $themeResources.removeClass(\"show\");\r\n            $toggleResources.trigger(\"focus\");\r\n            $toggleResources.attr(\"aria-label\", \"Open Resource Menu\");\r\n            $(\"#resource-icon\").addClass(\"fa-bars\").removeClass(\"fa-close\");\r\n        } else if ($primaryNav.hasClass(\"show\")) {\r\n            $(\"#toggle-site-nav\").trigger(\"focus\");\r\n            $primaryNav.removeClass(\"show\");\r\n        } else if ($ecuSkipLinks.hasClass(\"active\")) {\r\n            $ecuSkipLinks.removeClass(\"show\");\r\n            $(\"#main-nav a.navbar-brand\").trigger(\"focus\");\r\n        }\r\n    }\r\n});\r\n\r\n// Close resource menu when items do not have focus.\r\n$.extend($.expr[':'], {\r\n\tfocusable: function(el) {\r\n\t\treturn $(el).is(':input, a, button');\r\n\t}\r\n});\r\n\r\n$(\":focusable\").on(\"focus\", function() {\r\n\tlet menu = $(document.activeElement).data(\"menu\");\r\n\r\n\tif (menu !== \"resources\" && $(\"#theme-resources\").hasClass(\"show\")) {\r\n\t\t$(\"#toggle-resources\").trigger(\"click\");\r\n\t}\r\n});\r\n","/*!\n  * Bootstrap v4.6.2 (https://getbootstrap.com/)\n  * Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n  */\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('jquery')) :\n  typeof define === 'function' && define.amd ? define(['exports', 'jquery'], factory) :\n  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.bootstrap = {}, global.jQuery));\n})(this, (function (exports, $) { 'use strict';\n\n  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\n  var $__default = /*#__PURE__*/_interopDefaultLegacy($);\n\n  function _defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if (\"value\" in descriptor) descriptor.writable = true;\n      Object.defineProperty(target, descriptor.key, descriptor);\n    }\n  }\n\n  function _createClass(Constructor, protoProps, staticProps) {\n    if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) _defineProperties(Constructor, staticProps);\n    Object.defineProperty(Constructor, \"prototype\", {\n      writable: false\n    });\n    return Constructor;\n  }\n\n  function _extends$1() {\n    _extends$1 = Object.assign ? Object.assign.bind() : function (target) {\n      for (var i = 1; i < arguments.length; i++) {\n        var source = arguments[i];\n\n        for (var key in source) {\n          if (Object.prototype.hasOwnProperty.call(source, key)) {\n            target[key] = source[key];\n          }\n        }\n      }\n\n      return target;\n    };\n    return _extends$1.apply(this, arguments);\n  }\n\n  function _inheritsLoose(subClass, superClass) {\n    subClass.prototype = Object.create(superClass.prototype);\n    subClass.prototype.constructor = subClass;\n\n    _setPrototypeOf(subClass, superClass);\n  }\n\n  function _setPrototypeOf(o, p) {\n    _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {\n      o.__proto__ = p;\n      return o;\n    };\n    return _setPrototypeOf(o, p);\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v4.6.2): util.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * Private TransitionEnd Helpers\n   */\n\n  var TRANSITION_END = 'transitionend';\n  var MAX_UID = 1000000;\n  var MILLISECONDS_MULTIPLIER = 1000; // Shoutout AngusCroll (https://goo.gl/pxwQGp)\n\n  function toType(obj) {\n    if (obj === null || typeof obj === 'undefined') {\n      return \"\" + obj;\n    }\n\n    return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase();\n  }\n\n  function getSpecialTransitionEndEvent() {\n    return {\n      bindType: TRANSITION_END,\n      delegateType: TRANSITION_END,\n      handle: function handle(event) {\n        if ($__default[\"default\"](event.target).is(this)) {\n          return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params\n        }\n\n        return undefined;\n      }\n    };\n  }\n\n  function transitionEndEmulator(duration) {\n    var _this = this;\n\n    var called = false;\n    $__default[\"default\"](this).one(Util.TRANSITION_END, function () {\n      called = true;\n    });\n    setTimeout(function () {\n      if (!called) {\n        Util.triggerTransitionEnd(_this);\n      }\n    }, duration);\n    return this;\n  }\n\n  function setTransitionEndSupport() {\n    $__default[\"default\"].fn.emulateTransitionEnd = transitionEndEmulator;\n    $__default[\"default\"].event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent();\n  }\n  /**\n   * Public Util API\n   */\n\n\n  var Util = {\n    TRANSITION_END: 'bsTransitionEnd',\n    getUID: function getUID(prefix) {\n      do {\n        // eslint-disable-next-line no-bitwise\n        prefix += ~~(Math.random() * MAX_UID); // \"~~\" acts like a faster Math.floor() here\n      } while (document.getElementById(prefix));\n\n      return prefix;\n    },\n    getSelectorFromElement: function getSelectorFromElement(element) {\n      var selector = element.getAttribute('data-target');\n\n      if (!selector || selector === '#') {\n        var hrefAttr = element.getAttribute('href');\n        selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : '';\n      }\n\n      try {\n        return document.querySelector(selector) ? selector : null;\n      } catch (_) {\n        return null;\n      }\n    },\n    getTransitionDurationFromElement: function getTransitionDurationFromElement(element) {\n      if (!element) {\n        return 0;\n      } // Get transition-duration of the element\n\n\n      var transitionDuration = $__default[\"default\"](element).css('transition-duration');\n      var transitionDelay = $__default[\"default\"](element).css('transition-delay');\n      var floatTransitionDuration = parseFloat(transitionDuration);\n      var floatTransitionDelay = parseFloat(transitionDelay); // Return 0 if element or transition duration is not found\n\n      if (!floatTransitionDuration && !floatTransitionDelay) {\n        return 0;\n      } // If multiple durations are defined, take the first\n\n\n      transitionDuration = transitionDuration.split(',')[0];\n      transitionDelay = transitionDelay.split(',')[0];\n      return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n    },\n    reflow: function reflow(element) {\n      return element.offsetHeight;\n    },\n    triggerTransitionEnd: function triggerTransitionEnd(element) {\n      $__default[\"default\"](element).trigger(TRANSITION_END);\n    },\n    supportsTransitionEnd: function supportsTransitionEnd() {\n      return Boolean(TRANSITION_END);\n    },\n    isElement: function isElement(obj) {\n      return (obj[0] || obj).nodeType;\n    },\n    typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) {\n      for (var property in configTypes) {\n        if (Object.prototype.hasOwnProperty.call(configTypes, property)) {\n          var expectedTypes = configTypes[property];\n          var value = config[property];\n          var valueType = value && Util.isElement(value) ? 'element' : toType(value);\n\n          if (!new RegExp(expectedTypes).test(valueType)) {\n            throw new Error(componentName.toUpperCase() + \": \" + (\"Option \\\"\" + property + \"\\\" provided type \\\"\" + valueType + \"\\\" \") + (\"but expected type \\\"\" + expectedTypes + \"\\\".\"));\n          }\n        }\n      }\n    },\n    findShadowRoot: function findShadowRoot(element) {\n      if (!document.documentElement.attachShadow) {\n        return null;\n      } // Can find the shadow root otherwise it'll return the document\n\n\n      if (typeof element.getRootNode === 'function') {\n        var root = element.getRootNode();\n        return root instanceof ShadowRoot ? root : null;\n      }\n\n      if (element instanceof ShadowRoot) {\n        return element;\n      } // when we don't find a shadow root\n\n\n      if (!element.parentNode) {\n        return null;\n      }\n\n      return Util.findShadowRoot(element.parentNode);\n    },\n    jQueryDetection: function jQueryDetection() {\n      if (typeof $__default[\"default\"] === 'undefined') {\n        throw new TypeError('Bootstrap\\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\\'s JavaScript.');\n      }\n\n      var version = $__default[\"default\"].fn.jquery.split(' ')[0].split('.');\n      var minMajor = 1;\n      var ltMajor = 2;\n      var minMinor = 9;\n      var minPatch = 1;\n      var maxMajor = 4;\n\n      if (version[0] < ltMajor && version[1] < minMinor || version[0] === minMajor && version[1] === minMinor && version[2] < minPatch || version[0] >= maxMajor) {\n        throw new Error('Bootstrap\\'s JavaScript requires at least jQuery v1.9.1 but less than v4.0.0');\n      }\n    }\n  };\n  Util.jQueryDetection();\n  setTransitionEndSupport();\n\n  /**\n   * Constants\n   */\n\n  var NAME$a = 'alert';\n  var VERSION$a = '4.6.2';\n  var DATA_KEY$a = 'bs.alert';\n  var EVENT_KEY$a = \".\" + DATA_KEY$a;\n  var DATA_API_KEY$7 = '.data-api';\n  var JQUERY_NO_CONFLICT$a = $__default[\"default\"].fn[NAME$a];\n  var CLASS_NAME_ALERT = 'alert';\n  var CLASS_NAME_FADE$5 = 'fade';\n  var CLASS_NAME_SHOW$7 = 'show';\n  var EVENT_CLOSE = \"close\" + EVENT_KEY$a;\n  var EVENT_CLOSED = \"closed\" + EVENT_KEY$a;\n  var EVENT_CLICK_DATA_API$6 = \"click\" + EVENT_KEY$a + DATA_API_KEY$7;\n  var SELECTOR_DISMISS = '[data-dismiss=\"alert\"]';\n  /**\n   * Class definition\n   */\n\n  var Alert = /*#__PURE__*/function () {\n    function Alert(element) {\n      this._element = element;\n    } // Getters\n\n\n    var _proto = Alert.prototype;\n\n    // Public\n    _proto.close = function close(element) {\n      var rootElement = this._element;\n\n      if (element) {\n        rootElement = this._getRootElement(element);\n      }\n\n      var customEvent = this._triggerCloseEvent(rootElement);\n\n      if (customEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      this._removeElement(rootElement);\n    };\n\n    _proto.dispose = function dispose() {\n      $__default[\"default\"].removeData(this._element, DATA_KEY$a);\n      this._element = null;\n    } // Private\n    ;\n\n    _proto._getRootElement = function _getRootElement(element) {\n      var selector = Util.getSelectorFromElement(element);\n      var parent = false;\n\n      if (selector) {\n        parent = document.querySelector(selector);\n      }\n\n      if (!parent) {\n        parent = $__default[\"default\"](element).closest(\".\" + CLASS_NAME_ALERT)[0];\n      }\n\n      return parent;\n    };\n\n    _proto._triggerCloseEvent = function _triggerCloseEvent(element) {\n      var closeEvent = $__default[\"default\"].Event(EVENT_CLOSE);\n      $__default[\"default\"](element).trigger(closeEvent);\n      return closeEvent;\n    };\n\n    _proto._removeElement = function _removeElement(element) {\n      var _this = this;\n\n      $__default[\"default\"](element).removeClass(CLASS_NAME_SHOW$7);\n\n      if (!$__default[\"default\"](element).hasClass(CLASS_NAME_FADE$5)) {\n        this._destroyElement(element);\n\n        return;\n      }\n\n      var transitionDuration = Util.getTransitionDurationFromElement(element);\n      $__default[\"default\"](element).one(Util.TRANSITION_END, function (event) {\n        return _this._destroyElement(element, event);\n      }).emulateTransitionEnd(transitionDuration);\n    };\n\n    _proto._destroyElement = function _destroyElement(element) {\n      $__default[\"default\"](element).detach().trigger(EVENT_CLOSED).remove();\n    } // Static\n    ;\n\n    Alert._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var $element = $__default[\"default\"](this);\n        var data = $element.data(DATA_KEY$a);\n\n        if (!data) {\n          data = new Alert(this);\n          $element.data(DATA_KEY$a, data);\n        }\n\n        if (config === 'close') {\n          data[config](this);\n        }\n      });\n    };\n\n    Alert._handleDismiss = function _handleDismiss(alertInstance) {\n      return function (event) {\n        if (event) {\n          event.preventDefault();\n        }\n\n        alertInstance.close(this);\n      };\n    };\n\n    _createClass(Alert, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$a;\n      }\n    }]);\n\n    return Alert;\n  }();\n  /**\n   * Data API implementation\n   */\n\n\n  $__default[\"default\"](document).on(EVENT_CLICK_DATA_API$6, SELECTOR_DISMISS, Alert._handleDismiss(new Alert()));\n  /**\n   * jQuery\n   */\n\n  $__default[\"default\"].fn[NAME$a] = Alert._jQueryInterface;\n  $__default[\"default\"].fn[NAME$a].Constructor = Alert;\n\n  $__default[\"default\"].fn[NAME$a].noConflict = function () {\n    $__default[\"default\"].fn[NAME$a] = JQUERY_NO_CONFLICT$a;\n    return Alert._jQueryInterface;\n  };\n\n  /**\n   * Constants\n   */\n\n  var NAME$9 = 'button';\n  var VERSION$9 = '4.6.2';\n  var DATA_KEY$9 = 'bs.button';\n  var EVENT_KEY$9 = \".\" + DATA_KEY$9;\n  var DATA_API_KEY$6 = '.data-api';\n  var JQUERY_NO_CONFLICT$9 = $__default[\"default\"].fn[NAME$9];\n  var CLASS_NAME_ACTIVE$3 = 'active';\n  var CLASS_NAME_BUTTON = 'btn';\n  var CLASS_NAME_FOCUS = 'focus';\n  var EVENT_CLICK_DATA_API$5 = \"click\" + EVENT_KEY$9 + DATA_API_KEY$6;\n  var EVENT_FOCUS_BLUR_DATA_API = \"focus\" + EVENT_KEY$9 + DATA_API_KEY$6 + \" \" + (\"blur\" + EVENT_KEY$9 + DATA_API_KEY$6);\n  var EVENT_LOAD_DATA_API$2 = \"load\" + EVENT_KEY$9 + DATA_API_KEY$6;\n  var SELECTOR_DATA_TOGGLE_CARROT = '[data-toggle^=\"button\"]';\n  var SELECTOR_DATA_TOGGLES = '[data-toggle=\"buttons\"]';\n  var SELECTOR_DATA_TOGGLE$4 = '[data-toggle=\"button\"]';\n  var SELECTOR_DATA_TOGGLES_BUTTONS = '[data-toggle=\"buttons\"] .btn';\n  var SELECTOR_INPUT = 'input:not([type=\"hidden\"])';\n  var SELECTOR_ACTIVE$2 = '.active';\n  var SELECTOR_BUTTON = '.btn';\n  /**\n   * Class definition\n   */\n\n  var Button = /*#__PURE__*/function () {\n    function Button(element) {\n      this._element = element;\n      this.shouldAvoidTriggerChange = false;\n    } // Getters\n\n\n    var _proto = Button.prototype;\n\n    // Public\n    _proto.toggle = function toggle() {\n      var triggerChangeEvent = true;\n      var addAriaPressed = true;\n      var rootElement = $__default[\"default\"](this._element).closest(SELECTOR_DATA_TOGGLES)[0];\n\n      if (rootElement) {\n        var input = this._element.querySelector(SELECTOR_INPUT);\n\n        if (input) {\n          if (input.type === 'radio') {\n            if (input.checked && this._element.classList.contains(CLASS_NAME_ACTIVE$3)) {\n              triggerChangeEvent = false;\n            } else {\n              var activeElement = rootElement.querySelector(SELECTOR_ACTIVE$2);\n\n              if (activeElement) {\n                $__default[\"default\"](activeElement).removeClass(CLASS_NAME_ACTIVE$3);\n              }\n            }\n          }\n\n          if (triggerChangeEvent) {\n            // if it's not a radio button or checkbox don't add a pointless/invalid checked property to the input\n            if (input.type === 'checkbox' || input.type === 'radio') {\n              input.checked = !this._element.classList.contains(CLASS_NAME_ACTIVE$3);\n            }\n\n            if (!this.shouldAvoidTriggerChange) {\n              $__default[\"default\"](input).trigger('change');\n            }\n          }\n\n          input.focus();\n          addAriaPressed = false;\n        }\n      }\n\n      if (!(this._element.hasAttribute('disabled') || this._element.classList.contains('disabled'))) {\n        if (addAriaPressed) {\n          this._element.setAttribute('aria-pressed', !this._element.classList.contains(CLASS_NAME_ACTIVE$3));\n        }\n\n        if (triggerChangeEvent) {\n          $__default[\"default\"](this._element).toggleClass(CLASS_NAME_ACTIVE$3);\n        }\n      }\n    };\n\n    _proto.dispose = function dispose() {\n      $__default[\"default\"].removeData(this._element, DATA_KEY$9);\n      this._element = null;\n    } // Static\n    ;\n\n    Button._jQueryInterface = function _jQueryInterface(config, avoidTriggerChange) {\n      return this.each(function () {\n        var $element = $__default[\"default\"](this);\n        var data = $element.data(DATA_KEY$9);\n\n        if (!data) {\n          data = new Button(this);\n          $element.data(DATA_KEY$9, data);\n        }\n\n        data.shouldAvoidTriggerChange = avoidTriggerChange;\n\n        if (config === 'toggle') {\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(Button, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$9;\n      }\n    }]);\n\n    return Button;\n  }();\n  /**\n   * Data API implementation\n   */\n\n\n  $__default[\"default\"](document).on(EVENT_CLICK_DATA_API$5, SELECTOR_DATA_TOGGLE_CARROT, function (event) {\n    var button = event.target;\n    var initialButton = button;\n\n    if (!$__default[\"default\"](button).hasClass(CLASS_NAME_BUTTON)) {\n      button = $__default[\"default\"](button).closest(SELECTOR_BUTTON)[0];\n    }\n\n    if (!button || button.hasAttribute('disabled') || button.classList.contains('disabled')) {\n      event.preventDefault(); // work around Firefox bug #1540995\n    } else {\n      var inputBtn = button.querySelector(SELECTOR_INPUT);\n\n      if (inputBtn && (inputBtn.hasAttribute('disabled') || inputBtn.classList.contains('disabled'))) {\n        event.preventDefault(); // work around Firefox bug #1540995\n\n        return;\n      }\n\n      if (initialButton.tagName === 'INPUT' || button.tagName !== 'LABEL') {\n        Button._jQueryInterface.call($__default[\"default\"](button), 'toggle', initialButton.tagName === 'INPUT');\n      }\n    }\n  }).on(EVENT_FOCUS_BLUR_DATA_API, SELECTOR_DATA_TOGGLE_CARROT, function (event) {\n    var button = $__default[\"default\"](event.target).closest(SELECTOR_BUTTON)[0];\n    $__default[\"default\"](button).toggleClass(CLASS_NAME_FOCUS, /^focus(in)?$/.test(event.type));\n  });\n  $__default[\"default\"](window).on(EVENT_LOAD_DATA_API$2, function () {\n    // ensure correct active class is set to match the controls' actual values/states\n    // find all checkboxes/readio buttons inside data-toggle groups\n    var buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLES_BUTTONS));\n\n    for (var i = 0, len = buttons.length; i < len; i++) {\n      var button = buttons[i];\n      var input = button.querySelector(SELECTOR_INPUT);\n\n      if (input.checked || input.hasAttribute('checked')) {\n        button.classList.add(CLASS_NAME_ACTIVE$3);\n      } else {\n        button.classList.remove(CLASS_NAME_ACTIVE$3);\n      }\n    } // find all button toggles\n\n\n    buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE$4));\n\n    for (var _i = 0, _len = buttons.length; _i < _len; _i++) {\n      var _button = buttons[_i];\n\n      if (_button.getAttribute('aria-pressed') === 'true') {\n        _button.classList.add(CLASS_NAME_ACTIVE$3);\n      } else {\n        _button.classList.remove(CLASS_NAME_ACTIVE$3);\n      }\n    }\n  });\n  /**\n   * jQuery\n   */\n\n  $__default[\"default\"].fn[NAME$9] = Button._jQueryInterface;\n  $__default[\"default\"].fn[NAME$9].Constructor = Button;\n\n  $__default[\"default\"].fn[NAME$9].noConflict = function () {\n    $__default[\"default\"].fn[NAME$9] = JQUERY_NO_CONFLICT$9;\n    return Button._jQueryInterface;\n  };\n\n  /**\n   * Constants\n   */\n\n  var NAME$8 = 'carousel';\n  var VERSION$8 = '4.6.2';\n  var DATA_KEY$8 = 'bs.carousel';\n  var EVENT_KEY$8 = \".\" + DATA_KEY$8;\n  var DATA_API_KEY$5 = '.data-api';\n  var JQUERY_NO_CONFLICT$8 = $__default[\"default\"].fn[NAME$8];\n  var ARROW_LEFT_KEYCODE = 37; // KeyboardEvent.which value for left arrow key\n\n  var ARROW_RIGHT_KEYCODE = 39; // KeyboardEvent.which value for right arrow key\n\n  var TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\n  var SWIPE_THRESHOLD = 40;\n  var CLASS_NAME_CAROUSEL = 'carousel';\n  var CLASS_NAME_ACTIVE$2 = 'active';\n  var CLASS_NAME_SLIDE = 'slide';\n  var CLASS_NAME_RIGHT = 'carousel-item-right';\n  var CLASS_NAME_LEFT = 'carousel-item-left';\n  var CLASS_NAME_NEXT = 'carousel-item-next';\n  var CLASS_NAME_PREV = 'carousel-item-prev';\n  var CLASS_NAME_POINTER_EVENT = 'pointer-event';\n  var DIRECTION_NEXT = 'next';\n  var DIRECTION_PREV = 'prev';\n  var DIRECTION_LEFT = 'left';\n  var DIRECTION_RIGHT = 'right';\n  var EVENT_SLIDE = \"slide\" + EVENT_KEY$8;\n  var EVENT_SLID = \"slid\" + EVENT_KEY$8;\n  var EVENT_KEYDOWN = \"keydown\" + EVENT_KEY$8;\n  var EVENT_MOUSEENTER = \"mouseenter\" + EVENT_KEY$8;\n  var EVENT_MOUSELEAVE = \"mouseleave\" + EVENT_KEY$8;\n  var EVENT_TOUCHSTART = \"touchstart\" + EVENT_KEY$8;\n  var EVENT_TOUCHMOVE = \"touchmove\" + EVENT_KEY$8;\n  var EVENT_TOUCHEND = \"touchend\" + EVENT_KEY$8;\n  var EVENT_POINTERDOWN = \"pointerdown\" + EVENT_KEY$8;\n  var EVENT_POINTERUP = \"pointerup\" + EVENT_KEY$8;\n  var EVENT_DRAG_START = \"dragstart\" + EVENT_KEY$8;\n  var EVENT_LOAD_DATA_API$1 = \"load\" + EVENT_KEY$8 + DATA_API_KEY$5;\n  var EVENT_CLICK_DATA_API$4 = \"click\" + EVENT_KEY$8 + DATA_API_KEY$5;\n  var SELECTOR_ACTIVE$1 = '.active';\n  var SELECTOR_ACTIVE_ITEM = '.active.carousel-item';\n  var SELECTOR_ITEM = '.carousel-item';\n  var SELECTOR_ITEM_IMG = '.carousel-item img';\n  var SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev';\n  var SELECTOR_INDICATORS = '.carousel-indicators';\n  var SELECTOR_DATA_SLIDE = '[data-slide], [data-slide-to]';\n  var SELECTOR_DATA_RIDE = '[data-ride=\"carousel\"]';\n  var Default$7 = {\n    interval: 5000,\n    keyboard: true,\n    slide: false,\n    pause: 'hover',\n    wrap: true,\n    touch: true\n  };\n  var DefaultType$7 = {\n    interval: '(number|boolean)',\n    keyboard: 'boolean',\n    slide: '(boolean|string)',\n    pause: '(string|boolean)',\n    wrap: 'boolean',\n    touch: 'boolean'\n  };\n  var PointerType = {\n    TOUCH: 'touch',\n    PEN: 'pen'\n  };\n  /**\n   * Class definition\n   */\n\n  var Carousel = /*#__PURE__*/function () {\n    function Carousel(element, config) {\n      this._items = null;\n      this._interval = null;\n      this._activeElement = null;\n      this._isPaused = false;\n      this._isSliding = false;\n      this.touchTimeout = null;\n      this.touchStartX = 0;\n      this.touchDeltaX = 0;\n      this._config = this._getConfig(config);\n      this._element = element;\n      this._indicatorsElement = this._element.querySelector(SELECTOR_INDICATORS);\n      this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n      this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent);\n\n      this._addEventListeners();\n    } // Getters\n\n\n    var _proto = Carousel.prototype;\n\n    // Public\n    _proto.next = function next() {\n      if (!this._isSliding) {\n        this._slide(DIRECTION_NEXT);\n      }\n    };\n\n    _proto.nextWhenVisible = function nextWhenVisible() {\n      var $element = $__default[\"default\"](this._element); // Don't call next when the page isn't visible\n      // or the carousel or its parent isn't visible\n\n      if (!document.hidden && $element.is(':visible') && $element.css('visibility') !== 'hidden') {\n        this.next();\n      }\n    };\n\n    _proto.prev = function prev() {\n      if (!this._isSliding) {\n        this._slide(DIRECTION_PREV);\n      }\n    };\n\n    _proto.pause = function pause(event) {\n      if (!event) {\n        this._isPaused = true;\n      }\n\n      if (this._element.querySelector(SELECTOR_NEXT_PREV)) {\n        Util.triggerTransitionEnd(this._element);\n        this.cycle(true);\n      }\n\n      clearInterval(this._interval);\n      this._interval = null;\n    };\n\n    _proto.cycle = function cycle(event) {\n      if (!event) {\n        this._isPaused = false;\n      }\n\n      if (this._interval) {\n        clearInterval(this._interval);\n        this._interval = null;\n      }\n\n      if (this._config.interval && !this._isPaused) {\n        this._updateInterval();\n\n        this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);\n      }\n    };\n\n    _proto.to = function to(index) {\n      var _this = this;\n\n      this._activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM);\n\n      var activeIndex = this._getItemIndex(this._activeElement);\n\n      if (index > this._items.length - 1 || index < 0) {\n        return;\n      }\n\n      if (this._isSliding) {\n        $__default[\"default\"](this._element).one(EVENT_SLID, function () {\n          return _this.to(index);\n        });\n        return;\n      }\n\n      if (activeIndex === index) {\n        this.pause();\n        this.cycle();\n        return;\n      }\n\n      var direction = index > activeIndex ? DIRECTION_NEXT : DIRECTION_PREV;\n\n      this._slide(direction, this._items[index]);\n    };\n\n    _proto.dispose = function dispose() {\n      $__default[\"default\"](this._element).off(EVENT_KEY$8);\n      $__default[\"default\"].removeData(this._element, DATA_KEY$8);\n      this._items = null;\n      this._config = null;\n      this._element = null;\n      this._interval = null;\n      this._isPaused = null;\n      this._isSliding = null;\n      this._activeElement = null;\n      this._indicatorsElement = null;\n    } // Private\n    ;\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _extends$1({}, Default$7, config);\n      Util.typeCheckConfig(NAME$8, config, DefaultType$7);\n      return config;\n    };\n\n    _proto._handleSwipe = function _handleSwipe() {\n      var absDeltax = Math.abs(this.touchDeltaX);\n\n      if (absDeltax <= SWIPE_THRESHOLD) {\n        return;\n      }\n\n      var direction = absDeltax / this.touchDeltaX;\n      this.touchDeltaX = 0; // swipe left\n\n      if (direction > 0) {\n        this.prev();\n      } // swipe right\n\n\n      if (direction < 0) {\n        this.next();\n      }\n    };\n\n    _proto._addEventListeners = function _addEventListeners() {\n      var _this2 = this;\n\n      if (this._config.keyboard) {\n        $__default[\"default\"](this._element).on(EVENT_KEYDOWN, function (event) {\n          return _this2._keydown(event);\n        });\n      }\n\n      if (this._config.pause === 'hover') {\n        $__default[\"default\"](this._element).on(EVENT_MOUSEENTER, function (event) {\n          return _this2.pause(event);\n        }).on(EVENT_MOUSELEAVE, function (event) {\n          return _this2.cycle(event);\n        });\n      }\n\n      if (this._config.touch) {\n        this._addTouchEventListeners();\n      }\n    };\n\n    _proto._addTouchEventListeners = function _addTouchEventListeners() {\n      var _this3 = this;\n\n      if (!this._touchSupported) {\n        return;\n      }\n\n      var start = function start(event) {\n        if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n          _this3.touchStartX = event.originalEvent.clientX;\n        } else if (!_this3._pointerEvent) {\n          _this3.touchStartX = event.originalEvent.touches[0].clientX;\n        }\n      };\n\n      var move = function move(event) {\n        // ensure swiping with one touch and not pinching\n        _this3.touchDeltaX = event.originalEvent.touches && event.originalEvent.touches.length > 1 ? 0 : event.originalEvent.touches[0].clientX - _this3.touchStartX;\n      };\n\n      var end = function end(event) {\n        if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n          _this3.touchDeltaX = event.originalEvent.clientX - _this3.touchStartX;\n        }\n\n        _this3._handleSwipe();\n\n        if (_this3._config.pause === 'hover') {\n          // If it's a touch-enabled device, mouseenter/leave are fired as\n          // part of the mouse compatibility events on first tap - the carousel\n          // would stop cycling until user tapped out of it;\n          // here, we listen for touchend, explicitly pause the carousel\n          // (as if it's the second time we tap on it, mouseenter compat event\n          // is NOT fired) and after a timeout (to allow for mouse compatibility\n          // events to fire) we explicitly restart cycling\n          _this3.pause();\n\n          if (_this3.touchTimeout) {\n            clearTimeout(_this3.touchTimeout);\n          }\n\n          _this3.touchTimeout = setTimeout(function (event) {\n            return _this3.cycle(event);\n          }, TOUCHEVENT_COMPAT_WAIT + _this3._config.interval);\n        }\n      };\n\n      $__default[\"default\"](this._element.querySelectorAll(SELECTOR_ITEM_IMG)).on(EVENT_DRAG_START, function (e) {\n        return e.preventDefault();\n      });\n\n      if (this._pointerEvent) {\n        $__default[\"default\"](this._element).on(EVENT_POINTERDOWN, function (event) {\n          return start(event);\n        });\n        $__default[\"default\"](this._element).on(EVENT_POINTERUP, function (event) {\n          return end(event);\n        });\n\n        this._element.classList.add(CLASS_NAME_POINTER_EVENT);\n      } else {\n        $__default[\"default\"](this._element).on(EVENT_TOUCHSTART, function (event) {\n          return start(event);\n        });\n        $__default[\"default\"](this._element).on(EVENT_TOUCHMOVE, function (event) {\n          return move(event);\n        });\n        $__default[\"default\"](this._element).on(EVENT_TOUCHEND, function (event) {\n          return end(event);\n        });\n      }\n    };\n\n    _proto._keydown = function _keydown(event) {\n      if (/input|textarea/i.test(event.target.tagName)) {\n        return;\n      }\n\n      switch (event.which) {\n        case ARROW_LEFT_KEYCODE:\n          event.preventDefault();\n          this.prev();\n          break;\n\n        case ARROW_RIGHT_KEYCODE:\n          event.preventDefault();\n          this.next();\n          break;\n      }\n    };\n\n    _proto._getItemIndex = function _getItemIndex(element) {\n      this._items = element && element.parentNode ? [].slice.call(element.parentNode.querySelectorAll(SELECTOR_ITEM)) : [];\n      return this._items.indexOf(element);\n    };\n\n    _proto._getItemByDirection = function _getItemByDirection(direction, activeElement) {\n      var isNextDirection = direction === DIRECTION_NEXT;\n      var isPrevDirection = direction === DIRECTION_PREV;\n\n      var activeIndex = this._getItemIndex(activeElement);\n\n      var lastItemIndex = this._items.length - 1;\n      var isGoingToWrap = isPrevDirection && activeIndex === 0 || isNextDirection && activeIndex === lastItemIndex;\n\n      if (isGoingToWrap && !this._config.wrap) {\n        return activeElement;\n      }\n\n      var delta = direction === DIRECTION_PREV ? -1 : 1;\n      var itemIndex = (activeIndex + delta) % this._items.length;\n      return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex];\n    };\n\n    _proto._triggerSlideEvent = function _triggerSlideEvent(relatedTarget, eventDirectionName) {\n      var targetIndex = this._getItemIndex(relatedTarget);\n\n      var fromIndex = this._getItemIndex(this._element.querySelector(SELECTOR_ACTIVE_ITEM));\n\n      var slideEvent = $__default[\"default\"].Event(EVENT_SLIDE, {\n        relatedTarget: relatedTarget,\n        direction: eventDirectionName,\n        from: fromIndex,\n        to: targetIndex\n      });\n      $__default[\"default\"](this._element).trigger(slideEvent);\n      return slideEvent;\n    };\n\n    _proto._setActiveIndicatorElement = function _setActiveIndicatorElement(element) {\n      if (this._indicatorsElement) {\n        var indicators = [].slice.call(this._indicatorsElement.querySelectorAll(SELECTOR_ACTIVE$1));\n        $__default[\"default\"](indicators).removeClass(CLASS_NAME_ACTIVE$2);\n\n        var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)];\n\n        if (nextIndicator) {\n          $__default[\"default\"](nextIndicator).addClass(CLASS_NAME_ACTIVE$2);\n        }\n      }\n    };\n\n    _proto._updateInterval = function _updateInterval() {\n      var element = this._activeElement || this._element.querySelector(SELECTOR_ACTIVE_ITEM);\n\n      if (!element) {\n        return;\n      }\n\n      var elementInterval = parseInt(element.getAttribute('data-interval'), 10);\n\n      if (elementInterval) {\n        this._config.defaultInterval = this._config.defaultInterval || this._config.interval;\n        this._config.interval = elementInterval;\n      } else {\n        this._config.interval = this._config.defaultInterval || this._config.interval;\n      }\n    };\n\n    _proto._slide = function _slide(direction, element) {\n      var _this4 = this;\n\n      var activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM);\n\n      var activeElementIndex = this._getItemIndex(activeElement);\n\n      var nextElement = element || activeElement && this._getItemByDirection(direction, activeElement);\n\n      var nextElementIndex = this._getItemIndex(nextElement);\n\n      var isCycling = Boolean(this._interval);\n      var directionalClassName;\n      var orderClassName;\n      var eventDirectionName;\n\n      if (direction === DIRECTION_NEXT) {\n        directionalClassName = CLASS_NAME_LEFT;\n        orderClassName = CLASS_NAME_NEXT;\n        eventDirectionName = DIRECTION_LEFT;\n      } else {\n        directionalClassName = CLASS_NAME_RIGHT;\n        orderClassName = CLASS_NAME_PREV;\n        eventDirectionName = DIRECTION_RIGHT;\n      }\n\n      if (nextElement && $__default[\"default\"](nextElement).hasClass(CLASS_NAME_ACTIVE$2)) {\n        this._isSliding = false;\n        return;\n      }\n\n      var slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);\n\n      if (slideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      if (!activeElement || !nextElement) {\n        // Some weirdness is happening, so we bail\n        return;\n      }\n\n      this._isSliding = true;\n\n      if (isCycling) {\n        this.pause();\n      }\n\n      this._setActiveIndicatorElement(nextElement);\n\n      this._activeElement = nextElement;\n      var slidEvent = $__default[\"default\"].Event(EVENT_SLID, {\n        relatedTarget: nextElement,\n        direction: eventDirectionName,\n        from: activeElementIndex,\n        to: nextElementIndex\n      });\n\n      if ($__default[\"default\"](this._element).hasClass(CLASS_NAME_SLIDE)) {\n        $__default[\"default\"](nextElement).addClass(orderClassName);\n        Util.reflow(nextElement);\n        $__default[\"default\"](activeElement).addClass(directionalClassName);\n        $__default[\"default\"](nextElement).addClass(directionalClassName);\n        var transitionDuration = Util.getTransitionDurationFromElement(activeElement);\n        $__default[\"default\"](activeElement).one(Util.TRANSITION_END, function () {\n          $__default[\"default\"](nextElement).removeClass(directionalClassName + \" \" + orderClassName).addClass(CLASS_NAME_ACTIVE$2);\n          $__default[\"default\"](activeElement).removeClass(CLASS_NAME_ACTIVE$2 + \" \" + orderClassName + \" \" + directionalClassName);\n          _this4._isSliding = false;\n          setTimeout(function () {\n            return $__default[\"default\"](_this4._element).trigger(slidEvent);\n          }, 0);\n        }).emulateTransitionEnd(transitionDuration);\n      } else {\n        $__default[\"default\"](activeElement).removeClass(CLASS_NAME_ACTIVE$2);\n        $__default[\"default\"](nextElement).addClass(CLASS_NAME_ACTIVE$2);\n        this._isSliding = false;\n        $__default[\"default\"](this._element).trigger(slidEvent);\n      }\n\n      if (isCycling) {\n        this.cycle();\n      }\n    } // Static\n    ;\n\n    Carousel._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $__default[\"default\"](this).data(DATA_KEY$8);\n\n        var _config = _extends$1({}, Default$7, $__default[\"default\"](this).data());\n\n        if (typeof config === 'object') {\n          _config = _extends$1({}, _config, config);\n        }\n\n        var action = typeof config === 'string' ? config : _config.slide;\n\n        if (!data) {\n          data = new Carousel(this, _config);\n          $__default[\"default\"](this).data(DATA_KEY$8, data);\n        }\n\n        if (typeof config === 'number') {\n          data.to(config);\n        } else if (typeof action === 'string') {\n          if (typeof data[action] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + action + \"\\\"\");\n          }\n\n          data[action]();\n        } else if (_config.interval && _config.ride) {\n          data.pause();\n          data.cycle();\n        }\n      });\n    };\n\n    Carousel._dataApiClickHandler = function _dataApiClickHandler(event) {\n      var selector = Util.getSelectorFromElement(this);\n\n      if (!selector) {\n        return;\n      }\n\n      var target = $__default[\"default\"](selector)[0];\n\n      if (!target || !$__default[\"default\"](target).hasClass(CLASS_NAME_CAROUSEL)) {\n        return;\n      }\n\n      var config = _extends$1({}, $__default[\"default\"](target).data(), $__default[\"default\"](this).data());\n\n      var slideIndex = this.getAttribute('data-slide-to');\n\n      if (slideIndex) {\n        config.interval = false;\n      }\n\n      Carousel._jQueryInterface.call($__default[\"default\"](target), config);\n\n      if (slideIndex) {\n        $__default[\"default\"](target).data(DATA_KEY$8).to(slideIndex);\n      }\n\n      event.preventDefault();\n    };\n\n    _createClass(Carousel, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$8;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$7;\n      }\n    }]);\n\n    return Carousel;\n  }();\n  /**\n   * Data API implementation\n   */\n\n\n  $__default[\"default\"](document).on(EVENT_CLICK_DATA_API$4, SELECTOR_DATA_SLIDE, Carousel._dataApiClickHandler);\n  $__default[\"default\"](window).on(EVENT_LOAD_DATA_API$1, function () {\n    var carousels = [].slice.call(document.querySelectorAll(SELECTOR_DATA_RIDE));\n\n    for (var i = 0, len = carousels.length; i < len; i++) {\n      var $carousel = $__default[\"default\"](carousels[i]);\n\n      Carousel._jQueryInterface.call($carousel, $carousel.data());\n    }\n  });\n  /**\n   * jQuery\n   */\n\n  $__default[\"default\"].fn[NAME$8] = Carousel._jQueryInterface;\n  $__default[\"default\"].fn[NAME$8].Constructor = Carousel;\n\n  $__default[\"default\"].fn[NAME$8].noConflict = function () {\n    $__default[\"default\"].fn[NAME$8] = JQUERY_NO_CONFLICT$8;\n    return Carousel._jQueryInterface;\n  };\n\n  /**\n   * Constants\n   */\n\n  var NAME$7 = 'collapse';\n  var VERSION$7 = '4.6.2';\n  var DATA_KEY$7 = 'bs.collapse';\n  var EVENT_KEY$7 = \".\" + DATA_KEY$7;\n  var DATA_API_KEY$4 = '.data-api';\n  var JQUERY_NO_CONFLICT$7 = $__default[\"default\"].fn[NAME$7];\n  var CLASS_NAME_SHOW$6 = 'show';\n  var CLASS_NAME_COLLAPSE = 'collapse';\n  var CLASS_NAME_COLLAPSING = 'collapsing';\n  var CLASS_NAME_COLLAPSED = 'collapsed';\n  var DIMENSION_WIDTH = 'width';\n  var DIMENSION_HEIGHT = 'height';\n  var EVENT_SHOW$4 = \"show\" + EVENT_KEY$7;\n  var EVENT_SHOWN$4 = \"shown\" + EVENT_KEY$7;\n  var EVENT_HIDE$4 = \"hide\" + EVENT_KEY$7;\n  var EVENT_HIDDEN$4 = \"hidden\" + EVENT_KEY$7;\n  var EVENT_CLICK_DATA_API$3 = \"click\" + EVENT_KEY$7 + DATA_API_KEY$4;\n  var SELECTOR_ACTIVES = '.show, .collapsing';\n  var SELECTOR_DATA_TOGGLE$3 = '[data-toggle=\"collapse\"]';\n  var Default$6 = {\n    toggle: true,\n    parent: ''\n  };\n  var DefaultType$6 = {\n    toggle: 'boolean',\n    parent: '(string|element)'\n  };\n  /**\n   * Class definition\n   */\n\n  var Collapse = /*#__PURE__*/function () {\n    function Collapse(element, config) {\n      this._isTransitioning = false;\n      this._element = element;\n      this._config = this._getConfig(config);\n      this._triggerArray = [].slice.call(document.querySelectorAll(\"[data-toggle=\\\"collapse\\\"][href=\\\"#\" + element.id + \"\\\"],\" + (\"[data-toggle=\\\"collapse\\\"][data-target=\\\"#\" + element.id + \"\\\"]\")));\n      var toggleList = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE$3));\n\n      for (var i = 0, len = toggleList.length; i < len; i++) {\n        var elem = toggleList[i];\n        var selector = Util.getSelectorFromElement(elem);\n        var filterElement = [].slice.call(document.querySelectorAll(selector)).filter(function (foundElem) {\n          return foundElem === element;\n        });\n\n        if (selector !== null && filterElement.length > 0) {\n          this._selector = selector;\n\n          this._triggerArray.push(elem);\n        }\n      }\n\n      this._parent = this._config.parent ? this._getParent() : null;\n\n      if (!this._config.parent) {\n        this._addAriaAndCollapsedClass(this._element, this._triggerArray);\n      }\n\n      if (this._config.toggle) {\n        this.toggle();\n      }\n    } // Getters\n\n\n    var _proto = Collapse.prototype;\n\n    // Public\n    _proto.toggle = function toggle() {\n      if ($__default[\"default\"](this._element).hasClass(CLASS_NAME_SHOW$6)) {\n        this.hide();\n      } else {\n        this.show();\n      }\n    };\n\n    _proto.show = function show() {\n      var _this = this;\n\n      if (this._isTransitioning || $__default[\"default\"](this._element).hasClass(CLASS_NAME_SHOW$6)) {\n        return;\n      }\n\n      var actives;\n      var activesData;\n\n      if (this._parent) {\n        actives = [].slice.call(this._parent.querySelectorAll(SELECTOR_ACTIVES)).filter(function (elem) {\n          if (typeof _this._config.parent === 'string') {\n            return elem.getAttribute('data-parent') === _this._config.parent;\n          }\n\n          return elem.classList.contains(CLASS_NAME_COLLAPSE);\n        });\n\n        if (actives.length === 0) {\n          actives = null;\n        }\n      }\n\n      if (actives) {\n        activesData = $__default[\"default\"](actives).not(this._selector).data(DATA_KEY$7);\n\n        if (activesData && activesData._isTransitioning) {\n          return;\n        }\n      }\n\n      var startEvent = $__default[\"default\"].Event(EVENT_SHOW$4);\n      $__default[\"default\"](this._element).trigger(startEvent);\n\n      if (startEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      if (actives) {\n        Collapse._jQueryInterface.call($__default[\"default\"](actives).not(this._selector), 'hide');\n\n        if (!activesData) {\n          $__default[\"default\"](actives).data(DATA_KEY$7, null);\n        }\n      }\n\n      var dimension = this._getDimension();\n\n      $__default[\"default\"](this._element).removeClass(CLASS_NAME_COLLAPSE).addClass(CLASS_NAME_COLLAPSING);\n      this._element.style[dimension] = 0;\n\n      if (this._triggerArray.length) {\n        $__default[\"default\"](this._triggerArray).removeClass(CLASS_NAME_COLLAPSED).attr('aria-expanded', true);\n      }\n\n      this.setTransitioning(true);\n\n      var complete = function complete() {\n        $__default[\"default\"](_this._element).removeClass(CLASS_NAME_COLLAPSING).addClass(CLASS_NAME_COLLAPSE + \" \" + CLASS_NAME_SHOW$6);\n        _this._element.style[dimension] = '';\n\n        _this.setTransitioning(false);\n\n        $__default[\"default\"](_this._element).trigger(EVENT_SHOWN$4);\n      };\n\n      var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n      var scrollSize = \"scroll\" + capitalizedDimension;\n      var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n      $__default[\"default\"](this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n      this._element.style[dimension] = this._element[scrollSize] + \"px\";\n    };\n\n    _proto.hide = function hide() {\n      var _this2 = this;\n\n      if (this._isTransitioning || !$__default[\"default\"](this._element).hasClass(CLASS_NAME_SHOW$6)) {\n        return;\n      }\n\n      var startEvent = $__default[\"default\"].Event(EVENT_HIDE$4);\n      $__default[\"default\"](this._element).trigger(startEvent);\n\n      if (startEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      var dimension = this._getDimension();\n\n      this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + \"px\";\n      Util.reflow(this._element);\n      $__default[\"default\"](this._element).addClass(CLASS_NAME_COLLAPSING).removeClass(CLASS_NAME_COLLAPSE + \" \" + CLASS_NAME_SHOW$6);\n      var triggerArrayLength = this._triggerArray.length;\n\n      if (triggerArrayLength > 0) {\n        for (var i = 0; i < triggerArrayLength; i++) {\n          var trigger = this._triggerArray[i];\n          var selector = Util.getSelectorFromElement(trigger);\n\n          if (selector !== null) {\n            var $elem = $__default[\"default\"]([].slice.call(document.querySelectorAll(selector)));\n\n            if (!$elem.hasClass(CLASS_NAME_SHOW$6)) {\n              $__default[\"default\"](trigger).addClass(CLASS_NAME_COLLAPSED).attr('aria-expanded', false);\n            }\n          }\n        }\n      }\n\n      this.setTransitioning(true);\n\n      var complete = function complete() {\n        _this2.setTransitioning(false);\n\n        $__default[\"default\"](_this2._element).removeClass(CLASS_NAME_COLLAPSING).addClass(CLASS_NAME_COLLAPSE).trigger(EVENT_HIDDEN$4);\n      };\n\n      this._element.style[dimension] = '';\n      var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n      $__default[\"default\"](this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n    };\n\n    _proto.setTransitioning = function setTransitioning(isTransitioning) {\n      this._isTransitioning = isTransitioning;\n    };\n\n    _proto.dispose = function dispose() {\n      $__default[\"default\"].removeData(this._element, DATA_KEY$7);\n      this._config = null;\n      this._parent = null;\n      this._element = null;\n      this._triggerArray = null;\n      this._isTransitioning = null;\n    } // Private\n    ;\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _extends$1({}, Default$6, config);\n      config.toggle = Boolean(config.toggle); // Coerce string values\n\n      Util.typeCheckConfig(NAME$7, config, DefaultType$6);\n      return config;\n    };\n\n    _proto._getDimension = function _getDimension() {\n      var hasWidth = $__default[\"default\"](this._element).hasClass(DIMENSION_WIDTH);\n      return hasWidth ? DIMENSION_WIDTH : DIMENSION_HEIGHT;\n    };\n\n    _proto._getParent = function _getParent() {\n      var _this3 = this;\n\n      var parent;\n\n      if (Util.isElement(this._config.parent)) {\n        parent = this._config.parent; // It's a jQuery object\n\n        if (typeof this._config.parent.jquery !== 'undefined') {\n          parent = this._config.parent[0];\n        }\n      } else {\n        parent = document.querySelector(this._config.parent);\n      }\n\n      var selector = \"[data-toggle=\\\"collapse\\\"][data-parent=\\\"\" + this._config.parent + \"\\\"]\";\n      var children = [].slice.call(parent.querySelectorAll(selector));\n      $__default[\"default\"](children).each(function (i, element) {\n        _this3._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]);\n      });\n      return parent;\n    };\n\n    _proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) {\n      var isOpen = $__default[\"default\"](element).hasClass(CLASS_NAME_SHOW$6);\n\n      if (triggerArray.length) {\n        $__default[\"default\"](triggerArray).toggleClass(CLASS_NAME_COLLAPSED, !isOpen).attr('aria-expanded', isOpen);\n      }\n    } // Static\n    ;\n\n    Collapse._getTargetFromElement = function _getTargetFromElement(element) {\n      var selector = Util.getSelectorFromElement(element);\n      return selector ? document.querySelector(selector) : null;\n    };\n\n    Collapse._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var $element = $__default[\"default\"](this);\n        var data = $element.data(DATA_KEY$7);\n\n        var _config = _extends$1({}, Default$6, $element.data(), typeof config === 'object' && config ? config : {});\n\n        if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {\n          _config.toggle = false;\n        }\n\n        if (!data) {\n          data = new Collapse(this, _config);\n          $element.data(DATA_KEY$7, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(Collapse, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$7;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$6;\n      }\n    }]);\n\n    return Collapse;\n  }();\n  /**\n   * Data API implementation\n   */\n\n\n  $__default[\"default\"](document).on(EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {\n    // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n    if (event.currentTarget.tagName === 'A') {\n      event.preventDefault();\n    }\n\n    var $trigger = $__default[\"default\"](this);\n    var selector = Util.getSelectorFromElement(this);\n    var selectors = [].slice.call(document.querySelectorAll(selector));\n    $__default[\"default\"](selectors).each(function () {\n      var $target = $__default[\"default\"](this);\n      var data = $target.data(DATA_KEY$7);\n      var config = data ? 'toggle' : $trigger.data();\n\n      Collapse._jQueryInterface.call($target, config);\n    });\n  });\n  /**\n   * jQuery\n   */\n\n  $__default[\"default\"].fn[NAME$7] = Collapse._jQueryInterface;\n  $__default[\"default\"].fn[NAME$7].Constructor = Collapse;\n\n  $__default[\"default\"].fn[NAME$7].noConflict = function () {\n    $__default[\"default\"].fn[NAME$7] = JQUERY_NO_CONFLICT$7;\n    return Collapse._jQueryInterface;\n  };\n\n  /**!\n   * @fileOverview Kickass library to create and place poppers near their reference elements.\n   * @version 1.16.1\n   * @license\n   * Copyright (c) 2016 Federico Zivolo and contributors\n   *\n   * Permission is hereby granted, free of charge, to any person obtaining a copy\n   * of this software and associated documentation files (the \"Software\"), to deal\n   * in the Software without restriction, including without limitation the rights\n   * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n   * copies of the Software, and to permit persons to whom the Software is\n   * furnished to do so, subject to the following conditions:\n   *\n   * The above copyright notice and this permission notice shall be included in all\n   * copies or substantial portions of the Software.\n   *\n   * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n   * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n   * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n   * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n   * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n   * SOFTWARE.\n   */\n  var isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && typeof navigator !== 'undefined';\n\n  var timeoutDuration = function () {\n    var longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\n    for (var i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n      if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n        return 1;\n      }\n    }\n    return 0;\n  }();\n\n  function microtaskDebounce(fn) {\n    var called = false;\n    return function () {\n      if (called) {\n        return;\n      }\n      called = true;\n      window.Promise.resolve().then(function () {\n        called = false;\n        fn();\n      });\n    };\n  }\n\n  function taskDebounce(fn) {\n    var scheduled = false;\n    return function () {\n      if (!scheduled) {\n        scheduled = true;\n        setTimeout(function () {\n          scheduled = false;\n          fn();\n        }, timeoutDuration);\n      }\n    };\n  }\n\n  var supportsMicroTasks = isBrowser && window.Promise;\n\n  /**\n  * Create a debounced version of a method, that's asynchronously deferred\n  * but called in the minimum time possible.\n  *\n  * @method\n  * @memberof Popper.Utils\n  * @argument {Function} fn\n  * @returns {Function}\n  */\n  var debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce;\n\n  /**\n   * Check if the given variable is a function\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Any} functionToCheck - variable to check\n   * @returns {Boolean} answer to: is a function?\n   */\n  function isFunction(functionToCheck) {\n    var getType = {};\n    return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';\n  }\n\n  /**\n   * Get CSS computed property of the given element\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Eement} element\n   * @argument {String} property\n   */\n  function getStyleComputedProperty(element, property) {\n    if (element.nodeType !== 1) {\n      return [];\n    }\n    // NOTE: 1 DOM access here\n    var window = element.ownerDocument.defaultView;\n    var css = window.getComputedStyle(element, null);\n    return property ? css[property] : css;\n  }\n\n  /**\n   * Returns the parentNode or the host of the element\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Element} element\n   * @returns {Element} parent\n   */\n  function getParentNode(element) {\n    if (element.nodeName === 'HTML') {\n      return element;\n    }\n    return element.parentNode || element.host;\n  }\n\n  /**\n   * Returns the scrolling parent of the given element\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Element} element\n   * @returns {Element} scroll parent\n   */\n  function getScrollParent(element) {\n    // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n    if (!element) {\n      return document.body;\n    }\n\n    switch (element.nodeName) {\n      case 'HTML':\n      case 'BODY':\n        return element.ownerDocument.body;\n      case '#document':\n        return element.body;\n    }\n\n    // Firefox want us to check `-x` and `-y` variations as well\n\n    var _getStyleComputedProp = getStyleComputedProperty(element),\n        overflow = _getStyleComputedProp.overflow,\n        overflowX = _getStyleComputedProp.overflowX,\n        overflowY = _getStyleComputedProp.overflowY;\n\n    if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {\n      return element;\n    }\n\n    return getScrollParent(getParentNode(element));\n  }\n\n  /**\n   * Returns the reference node of the reference object, or the reference object itself.\n   * @method\n   * @memberof Popper.Utils\n   * @param {Element|Object} reference - the reference element (the popper will be relative to this)\n   * @returns {Element} parent\n   */\n  function getReferenceNode(reference) {\n    return reference && reference.referenceNode ? reference.referenceNode : reference;\n  }\n\n  var isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);\n  var isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);\n\n  /**\n   * Determines if the browser is Internet Explorer\n   * @method\n   * @memberof Popper.Utils\n   * @param {Number} version to check\n   * @returns {Boolean} isIE\n   */\n  function isIE(version) {\n    if (version === 11) {\n      return isIE11;\n    }\n    if (version === 10) {\n      return isIE10;\n    }\n    return isIE11 || isIE10;\n  }\n\n  /**\n   * Returns the offset parent of the given element\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Element} element\n   * @returns {Element} offset parent\n   */\n  function getOffsetParent(element) {\n    if (!element) {\n      return document.documentElement;\n    }\n\n    var noOffsetParent = isIE(10) ? document.body : null;\n\n    // NOTE: 1 DOM access here\n    var offsetParent = element.offsetParent || null;\n    // Skip hidden elements which don't have an offsetParent\n    while (offsetParent === noOffsetParent && element.nextElementSibling) {\n      offsetParent = (element = element.nextElementSibling).offsetParent;\n    }\n\n    var nodeName = offsetParent && offsetParent.nodeName;\n\n    if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n      return element ? element.ownerDocument.documentElement : document.documentElement;\n    }\n\n    // .offsetParent will return the closest TH, TD or TABLE in case\n    // no offsetParent is present, I hate this job...\n    if (['TH', 'TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static') {\n      return getOffsetParent(offsetParent);\n    }\n\n    return offsetParent;\n  }\n\n  function isOffsetContainer(element) {\n    var nodeName = element.nodeName;\n\n    if (nodeName === 'BODY') {\n      return false;\n    }\n    return nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element;\n  }\n\n  /**\n   * Finds the root node (document, shadowDOM root) of the given element\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Element} node\n   * @returns {Element} root node\n   */\n  function getRoot(node) {\n    if (node.parentNode !== null) {\n      return getRoot(node.parentNode);\n    }\n\n    return node;\n  }\n\n  /**\n   * Finds the offset parent common to the two provided nodes\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Element} element1\n   * @argument {Element} element2\n   * @returns {Element} common offset parent\n   */\n  function findCommonOffsetParent(element1, element2) {\n    // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n    if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n      return document.documentElement;\n    }\n\n    // Here we make sure to give as \"start\" the element that comes first in the DOM\n    var order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING;\n    var start = order ? element1 : element2;\n    var end = order ? element2 : element1;\n\n    // Get common ancestor container\n    var range = document.createRange();\n    range.setStart(start, 0);\n    range.setEnd(end, 0);\n    var commonAncestorContainer = range.commonAncestorContainer;\n\n    // Both nodes are inside #document\n\n    if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) {\n      if (isOffsetContainer(commonAncestorContainer)) {\n        return commonAncestorContainer;\n      }\n\n      return getOffsetParent(commonAncestorContainer);\n    }\n\n    // one of the nodes is inside shadowDOM, find which one\n    var element1root = getRoot(element1);\n    if (element1root.host) {\n      return findCommonOffsetParent(element1root.host, element2);\n    } else {\n      return findCommonOffsetParent(element1, getRoot(element2).host);\n    }\n  }\n\n  /**\n   * Gets the scroll value of the given element in the given side (top and left)\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Element} element\n   * @argument {String} side `top` or `left`\n   * @returns {number} amount of scrolled pixels\n   */\n  function getScroll(element) {\n    var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top';\n\n    var upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n    var nodeName = element.nodeName;\n\n    if (nodeName === 'BODY' || nodeName === 'HTML') {\n      var html = element.ownerDocument.documentElement;\n      var scrollingElement = element.ownerDocument.scrollingElement || html;\n      return scrollingElement[upperSide];\n    }\n\n    return element[upperSide];\n  }\n\n  /*\n   * Sum or subtract the element scroll values (left and top) from a given rect object\n   * @method\n   * @memberof Popper.Utils\n   * @param {Object} rect - Rect object you want to change\n   * @param {HTMLElement} element - The element from the function reads the scroll values\n   * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n   * @return {Object} rect - The modifier rect object\n   */\n  function includeScroll(rect, element) {\n    var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n    var scrollTop = getScroll(element, 'top');\n    var scrollLeft = getScroll(element, 'left');\n    var modifier = subtract ? -1 : 1;\n    rect.top += scrollTop * modifier;\n    rect.bottom += scrollTop * modifier;\n    rect.left += scrollLeft * modifier;\n    rect.right += scrollLeft * modifier;\n    return rect;\n  }\n\n  /*\n   * Helper to detect borders of a given element\n   * @method\n   * @memberof Popper.Utils\n   * @param {CSSStyleDeclaration} styles\n   * Result of `getStyleComputedProperty` on the given element\n   * @param {String} axis - `x` or `y`\n   * @return {number} borders - The borders size of the given axis\n   */\n\n  function getBordersSize(styles, axis) {\n    var sideA = axis === 'x' ? 'Left' : 'Top';\n    var sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n    return parseFloat(styles['border' + sideA + 'Width']) + parseFloat(styles['border' + sideB + 'Width']);\n  }\n\n  function getSize(axis, body, html, computedStyle) {\n    return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE(10) ? parseInt(html['offset' + axis]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')]) : 0);\n  }\n\n  function getWindowSizes(document) {\n    var body = document.body;\n    var html = document.documentElement;\n    var computedStyle = isIE(10) && getComputedStyle(html);\n\n    return {\n      height: getSize('Height', body, html, computedStyle),\n      width: getSize('Width', body, html, computedStyle)\n    };\n  }\n\n  var classCallCheck = function (instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  };\n\n  var createClass = function () {\n    function defineProperties(target, props) {\n      for (var i = 0; i < props.length; i++) {\n        var descriptor = props[i];\n        descriptor.enumerable = descriptor.enumerable || false;\n        descriptor.configurable = true;\n        if (\"value\" in descriptor) descriptor.writable = true;\n        Object.defineProperty(target, descriptor.key, descriptor);\n      }\n    }\n\n    return function (Constructor, protoProps, staticProps) {\n      if (protoProps) defineProperties(Constructor.prototype, protoProps);\n      if (staticProps) defineProperties(Constructor, staticProps);\n      return Constructor;\n    };\n  }();\n\n\n\n\n\n  var defineProperty = function (obj, key, value) {\n    if (key in obj) {\n      Object.defineProperty(obj, key, {\n        value: value,\n        enumerable: true,\n        configurable: true,\n        writable: true\n      });\n    } else {\n      obj[key] = value;\n    }\n\n    return obj;\n  };\n\n  var _extends = Object.assign || function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n\n    return target;\n  };\n\n  /**\n   * Given element offsets, generate an output similar to getBoundingClientRect\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Object} offsets\n   * @returns {Object} ClientRect like output\n   */\n  function getClientRect(offsets) {\n    return _extends({}, offsets, {\n      right: offsets.left + offsets.width,\n      bottom: offsets.top + offsets.height\n    });\n  }\n\n  /**\n   * Get bounding client rect of given element\n   * @method\n   * @memberof Popper.Utils\n   * @param {HTMLElement} element\n   * @return {Object} client rect\n   */\n  function getBoundingClientRect(element) {\n    var rect = {};\n\n    // IE10 10 FIX: Please, don't ask, the element isn't\n    // considered in DOM in some circumstances...\n    // This isn't reproducible in IE10 compatibility mode of IE11\n    try {\n      if (isIE(10)) {\n        rect = element.getBoundingClientRect();\n        var scrollTop = getScroll(element, 'top');\n        var scrollLeft = getScroll(element, 'left');\n        rect.top += scrollTop;\n        rect.left += scrollLeft;\n        rect.bottom += scrollTop;\n        rect.right += scrollLeft;\n      } else {\n        rect = element.getBoundingClientRect();\n      }\n    } catch (e) {}\n\n    var result = {\n      left: rect.left,\n      top: rect.top,\n      width: rect.right - rect.left,\n      height: rect.bottom - rect.top\n    };\n\n    // subtract scrollbar size from sizes\n    var sizes = element.nodeName === 'HTML' ? getWindowSizes(element.ownerDocument) : {};\n    var width = sizes.width || element.clientWidth || result.width;\n    var height = sizes.height || element.clientHeight || result.height;\n\n    var horizScrollbar = element.offsetWidth - width;\n    var vertScrollbar = element.offsetHeight - height;\n\n    // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n    // we make this check conditional for performance reasons\n    if (horizScrollbar || vertScrollbar) {\n      var styles = getStyleComputedProperty(element);\n      horizScrollbar -= getBordersSize(styles, 'x');\n      vertScrollbar -= getBordersSize(styles, 'y');\n\n      result.width -= horizScrollbar;\n      result.height -= vertScrollbar;\n    }\n\n    return getClientRect(result);\n  }\n\n  function getOffsetRectRelativeToArbitraryNode(children, parent) {\n    var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n    var isIE10 = isIE(10);\n    var isHTML = parent.nodeName === 'HTML';\n    var childrenRect = getBoundingClientRect(children);\n    var parentRect = getBoundingClientRect(parent);\n    var scrollParent = getScrollParent(children);\n\n    var styles = getStyleComputedProperty(parent);\n    var borderTopWidth = parseFloat(styles.borderTopWidth);\n    var borderLeftWidth = parseFloat(styles.borderLeftWidth);\n\n    // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n    if (fixedPosition && isHTML) {\n      parentRect.top = Math.max(parentRect.top, 0);\n      parentRect.left = Math.max(parentRect.left, 0);\n    }\n    var offsets = getClientRect({\n      top: childrenRect.top - parentRect.top - borderTopWidth,\n      left: childrenRect.left - parentRect.left - borderLeftWidth,\n      width: childrenRect.width,\n      height: childrenRect.height\n    });\n    offsets.marginTop = 0;\n    offsets.marginLeft = 0;\n\n    // Subtract margins of documentElement in case it's being used as parent\n    // we do this only on HTML because it's the only element that behaves\n    // differently when margins are applied to it. The margins are included in\n    // the box of the documentElement, in the other cases not.\n    if (!isIE10 && isHTML) {\n      var marginTop = parseFloat(styles.marginTop);\n      var marginLeft = parseFloat(styles.marginLeft);\n\n      offsets.top -= borderTopWidth - marginTop;\n      offsets.bottom -= borderTopWidth - marginTop;\n      offsets.left -= borderLeftWidth - marginLeft;\n      offsets.right -= borderLeftWidth - marginLeft;\n\n      // Attach marginTop and marginLeft because in some circumstances we may need them\n      offsets.marginTop = marginTop;\n      offsets.marginLeft = marginLeft;\n    }\n\n    if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {\n      offsets = includeScroll(offsets, parent);\n    }\n\n    return offsets;\n  }\n\n  function getViewportOffsetRectRelativeToArtbitraryNode(element) {\n    var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n    var html = element.ownerDocument.documentElement;\n    var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n    var width = Math.max(html.clientWidth, window.innerWidth || 0);\n    var height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n    var scrollTop = !excludeScroll ? getScroll(html) : 0;\n    var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n\n    var offset = {\n      top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n      left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n      width: width,\n      height: height\n    };\n\n    return getClientRect(offset);\n  }\n\n  /**\n   * Check if the given element is fixed or is inside a fixed parent\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Element} element\n   * @argument {Element} customContainer\n   * @returns {Boolean} answer to \"isFixed?\"\n   */\n  function isFixed(element) {\n    var nodeName = element.nodeName;\n    if (nodeName === 'BODY' || nodeName === 'HTML') {\n      return false;\n    }\n    if (getStyleComputedProperty(element, 'position') === 'fixed') {\n      return true;\n    }\n    var parentNode = getParentNode(element);\n    if (!parentNode) {\n      return false;\n    }\n    return isFixed(parentNode);\n  }\n\n  /**\n   * Finds the first parent of an element that has a transformed property defined\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Element} element\n   * @returns {Element} first transformed parent or documentElement\n   */\n\n  function getFixedPositionOffsetParent(element) {\n    // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n    if (!element || !element.parentElement || isIE()) {\n      return document.documentElement;\n    }\n    var el = element.parentElement;\n    while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n      el = el.parentElement;\n    }\n    return el || document.documentElement;\n  }\n\n  /**\n   * Computed the boundaries limits and return them\n   * @method\n   * @memberof Popper.Utils\n   * @param {HTMLElement} popper\n   * @param {HTMLElement} reference\n   * @param {number} padding\n   * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n   * @param {Boolean} fixedPosition - Is in fixed position mode\n   * @returns {Object} Coordinates of the boundaries\n   */\n  function getBoundaries(popper, reference, padding, boundariesElement) {\n    var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n    // NOTE: 1 DOM access here\n\n    var boundaries = { top: 0, left: 0 };\n    var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n\n    // Handle viewport case\n    if (boundariesElement === 'viewport') {\n      boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n    } else {\n      // Handle other cases based on DOM element used as boundaries\n      var boundariesNode = void 0;\n      if (boundariesElement === 'scrollParent') {\n        boundariesNode = getScrollParent(getParentNode(reference));\n        if (boundariesNode.nodeName === 'BODY') {\n          boundariesNode = popper.ownerDocument.documentElement;\n        }\n      } else if (boundariesElement === 'window') {\n        boundariesNode = popper.ownerDocument.documentElement;\n      } else {\n        boundariesNode = boundariesElement;\n      }\n\n      var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition);\n\n      // In case of HTML, we need a different computation\n      if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n        var _getWindowSizes = getWindowSizes(popper.ownerDocument),\n            height = _getWindowSizes.height,\n            width = _getWindowSizes.width;\n\n        boundaries.top += offsets.top - offsets.marginTop;\n        boundaries.bottom = height + offsets.top;\n        boundaries.left += offsets.left - offsets.marginLeft;\n        boundaries.right = width + offsets.left;\n      } else {\n        // for all the other DOM elements, this one is good\n        boundaries = offsets;\n      }\n    }\n\n    // Add paddings\n    padding = padding || 0;\n    var isPaddingNumber = typeof padding === 'number';\n    boundaries.left += isPaddingNumber ? padding : padding.left || 0;\n    boundaries.top += isPaddingNumber ? padding : padding.top || 0;\n    boundaries.right -= isPaddingNumber ? padding : padding.right || 0;\n    boundaries.bottom -= isPaddingNumber ? padding : padding.bottom || 0;\n\n    return boundaries;\n  }\n\n  function getArea(_ref) {\n    var width = _ref.width,\n        height = _ref.height;\n\n    return width * height;\n  }\n\n  /**\n   * Utility used to transform the `auto` placement to the placement with more\n   * available space.\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Object} data - The data object generated by update method\n   * @argument {Object} options - Modifiers configuration and options\n   * @returns {Object} The data object, properly modified\n   */\n  function computeAutoPlacement(placement, refRect, popper, reference, boundariesElement) {\n    var padding = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;\n\n    if (placement.indexOf('auto') === -1) {\n      return placement;\n    }\n\n    var boundaries = getBoundaries(popper, reference, padding, boundariesElement);\n\n    var rects = {\n      top: {\n        width: boundaries.width,\n        height: refRect.top - boundaries.top\n      },\n      right: {\n        width: boundaries.right - refRect.right,\n        height: boundaries.height\n      },\n      bottom: {\n        width: boundaries.width,\n        height: boundaries.bottom - refRect.bottom\n      },\n      left: {\n        width: refRect.left - boundaries.left,\n        height: boundaries.height\n      }\n    };\n\n    var sortedAreas = Object.keys(rects).map(function (key) {\n      return _extends({\n        key: key\n      }, rects[key], {\n        area: getArea(rects[key])\n      });\n    }).sort(function (a, b) {\n      return b.area - a.area;\n    });\n\n    var filteredAreas = sortedAreas.filter(function (_ref2) {\n      var width = _ref2.width,\n          height = _ref2.height;\n      return width >= popper.clientWidth && height >= popper.clientHeight;\n    });\n\n    var computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key;\n\n    var variation = placement.split('-')[1];\n\n    return computedPlacement + (variation ? '-' + variation : '');\n  }\n\n  /**\n   * Get offsets to the reference element\n   * @method\n   * @memberof Popper.Utils\n   * @param {Object} state\n   * @param {Element} popper - the popper element\n   * @param {Element} reference - the reference element (the popper will be relative to this)\n   * @param {Element} fixedPosition - is in fixed position mode\n   * @returns {Object} An object containing the offsets which will be applied to the popper\n   */\n  function getReferenceOffsets(state, popper, reference) {\n    var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n\n    var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n    return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n  }\n\n  /**\n   * Get the outer sizes of the given element (offset size + margins)\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Element} element\n   * @returns {Object} object containing width and height properties\n   */\n  function getOuterSizes(element) {\n    var window = element.ownerDocument.defaultView;\n    var styles = window.getComputedStyle(element);\n    var x = parseFloat(styles.marginTop || 0) + parseFloat(styles.marginBottom || 0);\n    var y = parseFloat(styles.marginLeft || 0) + parseFloat(styles.marginRight || 0);\n    var result = {\n      width: element.offsetWidth + y,\n      height: element.offsetHeight + x\n    };\n    return result;\n  }\n\n  /**\n   * Get the opposite placement of the given one\n   * @method\n   * @memberof Popper.Utils\n   * @argument {String} placement\n   * @returns {String} flipped placement\n   */\n  function getOppositePlacement(placement) {\n    var hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n    return placement.replace(/left|right|bottom|top/g, function (matched) {\n      return hash[matched];\n    });\n  }\n\n  /**\n   * Get offsets to the popper\n   * @method\n   * @memberof Popper.Utils\n   * @param {Object} position - CSS position the Popper will get applied\n   * @param {HTMLElement} popper - the popper element\n   * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n   * @param {String} placement - one of the valid placement options\n   * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n   */\n  function getPopperOffsets(popper, referenceOffsets, placement) {\n    placement = placement.split('-')[0];\n\n    // Get popper node sizes\n    var popperRect = getOuterSizes(popper);\n\n    // Add position, width and height to our offsets object\n    var popperOffsets = {\n      width: popperRect.width,\n      height: popperRect.height\n    };\n\n    // depending by the popper placement we have to compute its offsets slightly differently\n    var isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n    var mainSide = isHoriz ? 'top' : 'left';\n    var secondarySide = isHoriz ? 'left' : 'top';\n    var measurement = isHoriz ? 'height' : 'width';\n    var secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n    popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2;\n    if (placement === secondarySide) {\n      popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n    } else {\n      popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)];\n    }\n\n    return popperOffsets;\n  }\n\n  /**\n   * Mimics the `find` method of Array\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Array} arr\n   * @argument prop\n   * @argument value\n   * @returns index or -1\n   */\n  function find(arr, check) {\n    // use native find if supported\n    if (Array.prototype.find) {\n      return arr.find(check);\n    }\n\n    // use `filter` to obtain the same behavior of `find`\n    return arr.filter(check)[0];\n  }\n\n  /**\n   * Return the index of the matching object\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Array} arr\n   * @argument prop\n   * @argument value\n   * @returns index or -1\n   */\n  function findIndex(arr, prop, value) {\n    // use native findIndex if supported\n    if (Array.prototype.findIndex) {\n      return arr.findIndex(function (cur) {\n        return cur[prop] === value;\n      });\n    }\n\n    // use `find` + `indexOf` if `findIndex` isn't supported\n    var match = find(arr, function (obj) {\n      return obj[prop] === value;\n    });\n    return arr.indexOf(match);\n  }\n\n  /**\n   * Loop trough the list of modifiers and run them in order,\n   * each of them will then edit the data object.\n   * @method\n   * @memberof Popper.Utils\n   * @param {dataObject} data\n   * @param {Array} modifiers\n   * @param {String} ends - Optional modifier name used as stopper\n   * @returns {dataObject}\n   */\n  function runModifiers(modifiers, data, ends) {\n    var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n    modifiersToRun.forEach(function (modifier) {\n      if (modifier['function']) {\n        // eslint-disable-line dot-notation\n        console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n      }\n      var fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n      if (modifier.enabled && isFunction(fn)) {\n        // Add properties to offsets to make them a complete clientRect object\n        // we do this before each modifier to make sure the previous one doesn't\n        // mess with these values\n        data.offsets.popper = getClientRect(data.offsets.popper);\n        data.offsets.reference = getClientRect(data.offsets.reference);\n\n        data = fn(data, modifier);\n      }\n    });\n\n    return data;\n  }\n\n  /**\n   * Updates the position of the popper, computing the new offsets and applying\n   * the new style.<br />\n   * Prefer `scheduleUpdate` over `update` because of performance reasons.\n   * @method\n   * @memberof Popper\n   */\n  function update() {\n    // if popper is destroyed, don't perform any further update\n    if (this.state.isDestroyed) {\n      return;\n    }\n\n    var data = {\n      instance: this,\n      styles: {},\n      arrowStyles: {},\n      attributes: {},\n      flipped: false,\n      offsets: {}\n    };\n\n    // compute reference element offsets\n    data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed);\n\n    // compute auto placement, store placement inside the data object,\n    // modifiers will be able to edit `placement` if needed\n    // and refer to originalPlacement to know the original value\n    data.placement = computeAutoPlacement(this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding);\n\n    // store the computed placement inside `originalPlacement`\n    data.originalPlacement = data.placement;\n\n    data.positionFixed = this.options.positionFixed;\n\n    // compute the popper offsets\n    data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement);\n\n    data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute';\n\n    // run the modifiers\n    data = runModifiers(this.modifiers, data);\n\n    // the first `update` will call `onCreate` callback\n    // the other ones will call `onUpdate` callback\n    if (!this.state.isCreated) {\n      this.state.isCreated = true;\n      this.options.onCreate(data);\n    } else {\n      this.options.onUpdate(data);\n    }\n  }\n\n  /**\n   * Helper used to know if the given modifier is enabled.\n   * @method\n   * @memberof Popper.Utils\n   * @returns {Boolean}\n   */\n  function isModifierEnabled(modifiers, modifierName) {\n    return modifiers.some(function (_ref) {\n      var name = _ref.name,\n          enabled = _ref.enabled;\n      return enabled && name === modifierName;\n    });\n  }\n\n  /**\n   * Get the prefixed supported property name\n   * @method\n   * @memberof Popper.Utils\n   * @argument {String} property (camelCase)\n   * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n   */\n  function getSupportedPropertyName(property) {\n    var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n    var upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n    for (var i = 0; i < prefixes.length; i++) {\n      var prefix = prefixes[i];\n      var toCheck = prefix ? '' + prefix + upperProp : property;\n      if (typeof document.body.style[toCheck] !== 'undefined') {\n        return toCheck;\n      }\n    }\n    return null;\n  }\n\n  /**\n   * Destroys the popper.\n   * @method\n   * @memberof Popper\n   */\n  function destroy() {\n    this.state.isDestroyed = true;\n\n    // touch DOM only if `applyStyle` modifier is enabled\n    if (isModifierEnabled(this.modifiers, 'applyStyle')) {\n      this.popper.removeAttribute('x-placement');\n      this.popper.style.position = '';\n      this.popper.style.top = '';\n      this.popper.style.left = '';\n      this.popper.style.right = '';\n      this.popper.style.bottom = '';\n      this.popper.style.willChange = '';\n      this.popper.style[getSupportedPropertyName('transform')] = '';\n    }\n\n    this.disableEventListeners();\n\n    // remove the popper if user explicitly asked for the deletion on destroy\n    // do not use `remove` because IE11 doesn't support it\n    if (this.options.removeOnDestroy) {\n      this.popper.parentNode.removeChild(this.popper);\n    }\n    return this;\n  }\n\n  /**\n   * Get the window associated with the element\n   * @argument {Element} element\n   * @returns {Window}\n   */\n  function getWindow(element) {\n    var ownerDocument = element.ownerDocument;\n    return ownerDocument ? ownerDocument.defaultView : window;\n  }\n\n  function attachToScrollParents(scrollParent, event, callback, scrollParents) {\n    var isBody = scrollParent.nodeName === 'BODY';\n    var target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n    target.addEventListener(event, callback, { passive: true });\n\n    if (!isBody) {\n      attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents);\n    }\n    scrollParents.push(target);\n  }\n\n  /**\n   * Setup needed event listeners used to update the popper position\n   * @method\n   * @memberof Popper.Utils\n   * @private\n   */\n  function setupEventListeners(reference, options, state, updateBound) {\n    // Resize event listener on window\n    state.updateBound = updateBound;\n    getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });\n\n    // Scroll event listener on scroll parents\n    var scrollElement = getScrollParent(reference);\n    attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents);\n    state.scrollElement = scrollElement;\n    state.eventsEnabled = true;\n\n    return state;\n  }\n\n  /**\n   * It will add resize/scroll events and start recalculating\n   * position of the popper element when they are triggered.\n   * @method\n   * @memberof Popper\n   */\n  function enableEventListeners() {\n    if (!this.state.eventsEnabled) {\n      this.state = setupEventListeners(this.reference, this.options, this.state, this.scheduleUpdate);\n    }\n  }\n\n  /**\n   * Remove event listeners used to update the popper position\n   * @method\n   * @memberof Popper.Utils\n   * @private\n   */\n  function removeEventListeners(reference, state) {\n    // Remove resize event listener on window\n    getWindow(reference).removeEventListener('resize', state.updateBound);\n\n    // Remove scroll event listener on scroll parents\n    state.scrollParents.forEach(function (target) {\n      target.removeEventListener('scroll', state.updateBound);\n    });\n\n    // Reset state\n    state.updateBound = null;\n    state.scrollParents = [];\n    state.scrollElement = null;\n    state.eventsEnabled = false;\n    return state;\n  }\n\n  /**\n   * It will remove resize/scroll events and won't recalculate popper position\n   * when they are triggered. It also won't trigger `onUpdate` callback anymore,\n   * unless you call `update` method manually.\n   * @method\n   * @memberof Popper\n   */\n  function disableEventListeners() {\n    if (this.state.eventsEnabled) {\n      cancelAnimationFrame(this.scheduleUpdate);\n      this.state = removeEventListeners(this.reference, this.state);\n    }\n  }\n\n  /**\n   * Tells if a given input is a number\n   * @method\n   * @memberof Popper.Utils\n   * @param {*} input to check\n   * @return {Boolean}\n   */\n  function isNumeric(n) {\n    return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n  }\n\n  /**\n   * Set the style to the given popper\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Element} element - Element to apply the style to\n   * @argument {Object} styles\n   * Object with a list of properties and values which will be applied to the element\n   */\n  function setStyles(element, styles) {\n    Object.keys(styles).forEach(function (prop) {\n      var unit = '';\n      // add unit if the value is numeric and is one of the following\n      if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) {\n        unit = 'px';\n      }\n      element.style[prop] = styles[prop] + unit;\n    });\n  }\n\n  /**\n   * Set the attributes to the given popper\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Element} element - Element to apply the attributes to\n   * @argument {Object} styles\n   * Object with a list of properties and values which will be applied to the element\n   */\n  function setAttributes(element, attributes) {\n    Object.keys(attributes).forEach(function (prop) {\n      var value = attributes[prop];\n      if (value !== false) {\n        element.setAttribute(prop, attributes[prop]);\n      } else {\n        element.removeAttribute(prop);\n      }\n    });\n  }\n\n  /**\n   * @function\n   * @memberof Modifiers\n   * @argument {Object} data - The data object generated by `update` method\n   * @argument {Object} data.styles - List of style properties - values to apply to popper element\n   * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element\n   * @argument {Object} options - Modifiers configuration and options\n   * @returns {Object} The same data object\n   */\n  function applyStyle(data) {\n    // any property present in `data.styles` will be applied to the popper,\n    // in this way we can make the 3rd party modifiers add custom styles to it\n    // Be aware, modifiers could override the properties defined in the previous\n    // lines of this modifier!\n    setStyles(data.instance.popper, data.styles);\n\n    // any property present in `data.attributes` will be applied to the popper,\n    // they will be set as HTML attributes of the element\n    setAttributes(data.instance.popper, data.attributes);\n\n    // if arrowElement is defined and arrowStyles has some properties\n    if (data.arrowElement && Object.keys(data.arrowStyles).length) {\n      setStyles(data.arrowElement, data.arrowStyles);\n    }\n\n    return data;\n  }\n\n  /**\n   * Set the x-placement attribute before everything else because it could be used\n   * to add margins to the popper margins needs to be calculated to get the\n   * correct popper offsets.\n   * @method\n   * @memberof Popper.modifiers\n   * @param {HTMLElement} reference - The reference element used to position the popper\n   * @param {HTMLElement} popper - The HTML element used as popper\n   * @param {Object} options - Popper.js options\n   */\n  function applyStyleOnLoad(reference, popper, options, modifierOptions, state) {\n    // compute reference element offsets\n    var referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);\n\n    // compute auto placement, store placement inside the data object,\n    // modifiers will be able to edit `placement` if needed\n    // and refer to originalPlacement to know the original value\n    var placement = computeAutoPlacement(options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement, options.modifiers.flip.padding);\n\n    popper.setAttribute('x-placement', placement);\n\n    // Apply `position` to popper before anything else because\n    // without the position applied we can't guarantee correct computations\n    setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });\n\n    return options;\n  }\n\n  /**\n   * @function\n   * @memberof Popper.Utils\n   * @argument {Object} data - The data object generated by `update` method\n   * @argument {Boolean} shouldRound - If the offsets should be rounded at all\n   * @returns {Object} The popper's position offsets rounded\n   *\n   * The tale of pixel-perfect positioning. It's still not 100% perfect, but as\n   * good as it can be within reason.\n   * Discussion here: https://github.com/FezVrasta/popper.js/pull/715\n   *\n   * Low DPI screens cause a popper to be blurry if not using full pixels (Safari\n   * as well on High DPI screens).\n   *\n   * Firefox prefers no rounding for positioning and does not have blurriness on\n   * high DPI screens.\n   *\n   * Only horizontal placement and left/right values need to be considered.\n   */\n  function getRoundedOffsets(data, shouldRound) {\n    var _data$offsets = data.offsets,\n        popper = _data$offsets.popper,\n        reference = _data$offsets.reference;\n    var round = Math.round,\n        floor = Math.floor;\n\n    var noRound = function noRound(v) {\n      return v;\n    };\n\n    var referenceWidth = round(reference.width);\n    var popperWidth = round(popper.width);\n\n    var isVertical = ['left', 'right'].indexOf(data.placement) !== -1;\n    var isVariation = data.placement.indexOf('-') !== -1;\n    var sameWidthParity = referenceWidth % 2 === popperWidth % 2;\n    var bothOddWidth = referenceWidth % 2 === 1 && popperWidth % 2 === 1;\n\n    var horizontalToInteger = !shouldRound ? noRound : isVertical || isVariation || sameWidthParity ? round : floor;\n    var verticalToInteger = !shouldRound ? noRound : round;\n\n    return {\n      left: horizontalToInteger(bothOddWidth && !isVariation && shouldRound ? popper.left - 1 : popper.left),\n      top: verticalToInteger(popper.top),\n      bottom: verticalToInteger(popper.bottom),\n      right: horizontalToInteger(popper.right)\n    };\n  }\n\n  var isFirefox = isBrowser && /Firefox/i.test(navigator.userAgent);\n\n  /**\n   * @function\n   * @memberof Modifiers\n   * @argument {Object} data - The data object generated by `update` method\n   * @argument {Object} options - Modifiers configuration and options\n   * @returns {Object} The data object, properly modified\n   */\n  function computeStyle(data, options) {\n    var x = options.x,\n        y = options.y;\n    var popper = data.offsets.popper;\n\n    // Remove this legacy support in Popper.js v2\n\n    var legacyGpuAccelerationOption = find(data.instance.modifiers, function (modifier) {\n      return modifier.name === 'applyStyle';\n    }).gpuAcceleration;\n    if (legacyGpuAccelerationOption !== undefined) {\n      console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!');\n    }\n    var gpuAcceleration = legacyGpuAccelerationOption !== undefined ? legacyGpuAccelerationOption : options.gpuAcceleration;\n\n    var offsetParent = getOffsetParent(data.instance.popper);\n    var offsetParentRect = getBoundingClientRect(offsetParent);\n\n    // Styles\n    var styles = {\n      position: popper.position\n    };\n\n    var offsets = getRoundedOffsets(data, window.devicePixelRatio < 2 || !isFirefox);\n\n    var sideA = x === 'bottom' ? 'top' : 'bottom';\n    var sideB = y === 'right' ? 'left' : 'right';\n\n    // if gpuAcceleration is set to `true` and transform is supported,\n    //  we use `translate3d` to apply the position to the popper we\n    // automatically use the supported prefixed version if needed\n    var prefixedProperty = getSupportedPropertyName('transform');\n\n    // now, let's make a step back and look at this code closely (wtf?)\n    // If the content of the popper grows once it's been positioned, it\n    // may happen that the popper gets misplaced because of the new content\n    // overflowing its reference element\n    // To avoid this problem, we provide two options (x and y), which allow\n    // the consumer to define the offset origin.\n    // If we position a popper on top of a reference element, we can set\n    // `x` to `top` to make the popper grow towards its top instead of\n    // its bottom.\n    var left = void 0,\n        top = void 0;\n    if (sideA === 'bottom') {\n      // when offsetParent is <html> the positioning is relative to the bottom of the screen (excluding the scrollbar)\n      // and not the bottom of the html element\n      if (offsetParent.nodeName === 'HTML') {\n        top = -offsetParent.clientHeight + offsets.bottom;\n      } else {\n        top = -offsetParentRect.height + offsets.bottom;\n      }\n    } else {\n      top = offsets.top;\n    }\n    if (sideB === 'right') {\n      if (offsetParent.nodeName === 'HTML') {\n        left = -offsetParent.clientWidth + offsets.right;\n      } else {\n        left = -offsetParentRect.width + offsets.right;\n      }\n    } else {\n      left = offsets.left;\n    }\n    if (gpuAcceleration && prefixedProperty) {\n      styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)';\n      styles[sideA] = 0;\n      styles[sideB] = 0;\n      styles.willChange = 'transform';\n    } else {\n      // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties\n      var invertTop = sideA === 'bottom' ? -1 : 1;\n      var invertLeft = sideB === 'right' ? -1 : 1;\n      styles[sideA] = top * invertTop;\n      styles[sideB] = left * invertLeft;\n      styles.willChange = sideA + ', ' + sideB;\n    }\n\n    // Attributes\n    var attributes = {\n      'x-placement': data.placement\n    };\n\n    // Update `data` attributes, styles and arrowStyles\n    data.attributes = _extends({}, attributes, data.attributes);\n    data.styles = _extends({}, styles, data.styles);\n    data.arrowStyles = _extends({}, data.offsets.arrow, data.arrowStyles);\n\n    return data;\n  }\n\n  /**\n   * Helper used to know if the given modifier depends from another one.<br />\n   * It checks if the needed modifier is listed and enabled.\n   * @method\n   * @memberof Popper.Utils\n   * @param {Array} modifiers - list of modifiers\n   * @param {String} requestingName - name of requesting modifier\n   * @param {String} requestedName - name of requested modifier\n   * @returns {Boolean}\n   */\n  function isModifierRequired(modifiers, requestingName, requestedName) {\n    var requesting = find(modifiers, function (_ref) {\n      var name = _ref.name;\n      return name === requestingName;\n    });\n\n    var isRequired = !!requesting && modifiers.some(function (modifier) {\n      return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order;\n    });\n\n    if (!isRequired) {\n      var _requesting = '`' + requestingName + '`';\n      var requested = '`' + requestedName + '`';\n      console.warn(requested + ' modifier is required by ' + _requesting + ' modifier in order to work, be sure to include it before ' + _requesting + '!');\n    }\n    return isRequired;\n  }\n\n  /**\n   * @function\n   * @memberof Modifiers\n   * @argument {Object} data - The data object generated by update method\n   * @argument {Object} options - Modifiers configuration and options\n   * @returns {Object} The data object, properly modified\n   */\n  function arrow(data, options) {\n    var _data$offsets$arrow;\n\n    // arrow depends on keepTogether in order to work\n    if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n      return data;\n    }\n\n    var arrowElement = options.element;\n\n    // if arrowElement is a string, suppose it's a CSS selector\n    if (typeof arrowElement === 'string') {\n      arrowElement = data.instance.popper.querySelector(arrowElement);\n\n      // if arrowElement is not found, don't run the modifier\n      if (!arrowElement) {\n        return data;\n      }\n    } else {\n      // if the arrowElement isn't a query selector we must check that the\n      // provided DOM node is child of its popper node\n      if (!data.instance.popper.contains(arrowElement)) {\n        console.warn('WARNING: `arrow.element` must be child of its popper element!');\n        return data;\n      }\n    }\n\n    var placement = data.placement.split('-')[0];\n    var _data$offsets = data.offsets,\n        popper = _data$offsets.popper,\n        reference = _data$offsets.reference;\n\n    var isVertical = ['left', 'right'].indexOf(placement) !== -1;\n\n    var len = isVertical ? 'height' : 'width';\n    var sideCapitalized = isVertical ? 'Top' : 'Left';\n    var side = sideCapitalized.toLowerCase();\n    var altSide = isVertical ? 'left' : 'top';\n    var opSide = isVertical ? 'bottom' : 'right';\n    var arrowElementSize = getOuterSizes(arrowElement)[len];\n\n    //\n    // extends keepTogether behavior making sure the popper and its\n    // reference have enough pixels in conjunction\n    //\n\n    // top/left side\n    if (reference[opSide] - arrowElementSize < popper[side]) {\n      data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize);\n    }\n    // bottom/right side\n    if (reference[side] + arrowElementSize > popper[opSide]) {\n      data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide];\n    }\n    data.offsets.popper = getClientRect(data.offsets.popper);\n\n    // compute center of the popper\n    var center = reference[side] + reference[len] / 2 - arrowElementSize / 2;\n\n    // Compute the sideValue using the updated popper offsets\n    // take popper margin in account because we don't have this info available\n    var css = getStyleComputedProperty(data.instance.popper);\n    var popperMarginSide = parseFloat(css['margin' + sideCapitalized]);\n    var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width']);\n    var sideValue = center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;\n\n    // prevent arrowElement from being placed not contiguously to its popper\n    sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\n\n    data.arrowElement = arrowElement;\n    data.offsets.arrow = (_data$offsets$arrow = {}, defineProperty(_data$offsets$arrow, side, Math.round(sideValue)), defineProperty(_data$offsets$arrow, altSide, ''), _data$offsets$arrow);\n\n    return data;\n  }\n\n  /**\n   * Get the opposite placement variation of the given one\n   * @method\n   * @memberof Popper.Utils\n   * @argument {String} placement variation\n   * @returns {String} flipped placement variation\n   */\n  function getOppositeVariation(variation) {\n    if (variation === 'end') {\n      return 'start';\n    } else if (variation === 'start') {\n      return 'end';\n    }\n    return variation;\n  }\n\n  /**\n   * List of accepted placements to use as values of the `placement` option.<br />\n   * Valid placements are:\n   * - `auto`\n   * - `top`\n   * - `right`\n   * - `bottom`\n   * - `left`\n   *\n   * Each placement can have a variation from this list:\n   * - `-start`\n   * - `-end`\n   *\n   * Variations are interpreted easily if you think of them as the left to right\n   * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`\n   * is right.<br />\n   * Vertically (`left` and `right`), `start` is top and `end` is bottom.\n   *\n   * Some valid examples are:\n   * - `top-end` (on top of reference, right aligned)\n   * - `right-start` (on right of reference, top aligned)\n   * - `bottom` (on bottom, centered)\n   * - `auto-end` (on the side with more space available, alignment depends by placement)\n   *\n   * @static\n   * @type {Array}\n   * @enum {String}\n   * @readonly\n   * @method placements\n   * @memberof Popper\n   */\n  var placements = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start'];\n\n  // Get rid of `auto` `auto-start` and `auto-end`\n  var validPlacements = placements.slice(3);\n\n  /**\n   * Given an initial placement, returns all the subsequent placements\n   * clockwise (or counter-clockwise).\n   *\n   * @method\n   * @memberof Popper.Utils\n   * @argument {String} placement - A valid placement (it accepts variations)\n   * @argument {Boolean} counter - Set to true to walk the placements counterclockwise\n   * @returns {Array} placements including their variations\n   */\n  function clockwise(placement) {\n    var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n    var index = validPlacements.indexOf(placement);\n    var arr = validPlacements.slice(index + 1).concat(validPlacements.slice(0, index));\n    return counter ? arr.reverse() : arr;\n  }\n\n  var BEHAVIORS = {\n    FLIP: 'flip',\n    CLOCKWISE: 'clockwise',\n    COUNTERCLOCKWISE: 'counterclockwise'\n  };\n\n  /**\n   * @function\n   * @memberof Modifiers\n   * @argument {Object} data - The data object generated by update method\n   * @argument {Object} options - Modifiers configuration and options\n   * @returns {Object} The data object, properly modified\n   */\n  function flip(data, options) {\n    // if `inner` modifier is enabled, we can't use the `flip` modifier\n    if (isModifierEnabled(data.instance.modifiers, 'inner')) {\n      return data;\n    }\n\n    if (data.flipped && data.placement === data.originalPlacement) {\n      // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\n      return data;\n    }\n\n    var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed);\n\n    var placement = data.placement.split('-')[0];\n    var placementOpposite = getOppositePlacement(placement);\n    var variation = data.placement.split('-')[1] || '';\n\n    var flipOrder = [];\n\n    switch (options.behavior) {\n      case BEHAVIORS.FLIP:\n        flipOrder = [placement, placementOpposite];\n        break;\n      case BEHAVIORS.CLOCKWISE:\n        flipOrder = clockwise(placement);\n        break;\n      case BEHAVIORS.COUNTERCLOCKWISE:\n        flipOrder = clockwise(placement, true);\n        break;\n      default:\n        flipOrder = options.behavior;\n    }\n\n    flipOrder.forEach(function (step, index) {\n      if (placement !== step || flipOrder.length === index + 1) {\n        return data;\n      }\n\n      placement = data.placement.split('-')[0];\n      placementOpposite = getOppositePlacement(placement);\n\n      var popperOffsets = data.offsets.popper;\n      var refOffsets = data.offsets.reference;\n\n      // using floor because the reference offsets may contain decimals we are not going to consider here\n      var floor = Math.floor;\n      var overlapsRef = placement === 'left' && floor(popperOffsets.right) > floor(refOffsets.left) || placement === 'right' && floor(popperOffsets.left) < floor(refOffsets.right) || placement === 'top' && floor(popperOffsets.bottom) > floor(refOffsets.top) || placement === 'bottom' && floor(popperOffsets.top) < floor(refOffsets.bottom);\n\n      var overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);\n      var overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);\n      var overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);\n      var overflowsBottom = floor(popperOffsets.bottom) > floor(boundaries.bottom);\n\n      var overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom;\n\n      // flip the variation if required\n      var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n\n      // flips variation if reference element overflows boundaries\n      var flippedVariationByRef = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom);\n\n      // flips variation if popper content overflows boundaries\n      var flippedVariationByContent = !!options.flipVariationsByContent && (isVertical && variation === 'start' && overflowsRight || isVertical && variation === 'end' && overflowsLeft || !isVertical && variation === 'start' && overflowsBottom || !isVertical && variation === 'end' && overflowsTop);\n\n      var flippedVariation = flippedVariationByRef || flippedVariationByContent;\n\n      if (overlapsRef || overflowsBoundaries || flippedVariation) {\n        // this boolean to detect any flip loop\n        data.flipped = true;\n\n        if (overlapsRef || overflowsBoundaries) {\n          placement = flipOrder[index + 1];\n        }\n\n        if (flippedVariation) {\n          variation = getOppositeVariation(variation);\n        }\n\n        data.placement = placement + (variation ? '-' + variation : '');\n\n        // this object contains `position`, we want to preserve it along with\n        // any additional property we may add in the future\n        data.offsets.popper = _extends({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement));\n\n        data = runModifiers(data.instance.modifiers, data, 'flip');\n      }\n    });\n    return data;\n  }\n\n  /**\n   * @function\n   * @memberof Modifiers\n   * @argument {Object} data - The data object generated by update method\n   * @argument {Object} options - Modifiers configuration and options\n   * @returns {Object} The data object, properly modified\n   */\n  function keepTogether(data) {\n    var _data$offsets = data.offsets,\n        popper = _data$offsets.popper,\n        reference = _data$offsets.reference;\n\n    var placement = data.placement.split('-')[0];\n    var floor = Math.floor;\n    var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n    var side = isVertical ? 'right' : 'bottom';\n    var opSide = isVertical ? 'left' : 'top';\n    var measurement = isVertical ? 'width' : 'height';\n\n    if (popper[side] < floor(reference[opSide])) {\n      data.offsets.popper[opSide] = floor(reference[opSide]) - popper[measurement];\n    }\n    if (popper[opSide] > floor(reference[side])) {\n      data.offsets.popper[opSide] = floor(reference[side]);\n    }\n\n    return data;\n  }\n\n  /**\n   * Converts a string containing value + unit into a px value number\n   * @function\n   * @memberof {modifiers~offset}\n   * @private\n   * @argument {String} str - Value + unit string\n   * @argument {String} measurement - `height` or `width`\n   * @argument {Object} popperOffsets\n   * @argument {Object} referenceOffsets\n   * @returns {Number|String}\n   * Value in pixels, or original string if no values were extracted\n   */\n  function toValue(str, measurement, popperOffsets, referenceOffsets) {\n    // separate value from unit\n    var split = str.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/);\n    var value = +split[1];\n    var unit = split[2];\n\n    // If it's not a number it's an operator, I guess\n    if (!value) {\n      return str;\n    }\n\n    if (unit.indexOf('%') === 0) {\n      var element = void 0;\n      switch (unit) {\n        case '%p':\n          element = popperOffsets;\n          break;\n        case '%':\n        case '%r':\n        default:\n          element = referenceOffsets;\n      }\n\n      var rect = getClientRect(element);\n      return rect[measurement] / 100 * value;\n    } else if (unit === 'vh' || unit === 'vw') {\n      // if is a vh or vw, we calculate the size based on the viewport\n      var size = void 0;\n      if (unit === 'vh') {\n        size = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);\n      } else {\n        size = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\n      }\n      return size / 100 * value;\n    } else {\n      // if is an explicit pixel unit, we get rid of the unit and keep the value\n      // if is an implicit unit, it's px, and we return just the value\n      return value;\n    }\n  }\n\n  /**\n   * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.\n   * @function\n   * @memberof {modifiers~offset}\n   * @private\n   * @argument {String} offset\n   * @argument {Object} popperOffsets\n   * @argument {Object} referenceOffsets\n   * @argument {String} basePlacement\n   * @returns {Array} a two cells array with x and y offsets in numbers\n   */\n  function parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) {\n    var offsets = [0, 0];\n\n    // Use height if placement is left or right and index is 0 otherwise use width\n    // in this way the first offset will use an axis and the second one\n    // will use the other one\n    var useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;\n\n    // Split the offset string to obtain a list of values and operands\n    // The regex addresses values with the plus or minus sign in front (+10, -20, etc)\n    var fragments = offset.split(/(\\+|\\-)/).map(function (frag) {\n      return frag.trim();\n    });\n\n    // Detect if the offset string contains a pair of values or a single one\n    // they could be separated by comma or space\n    var divider = fragments.indexOf(find(fragments, function (frag) {\n      return frag.search(/,|\\s/) !== -1;\n    }));\n\n    if (fragments[divider] && fragments[divider].indexOf(',') === -1) {\n      console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');\n    }\n\n    // If divider is found, we divide the list of values and operands to divide\n    // them by ofset X and Y.\n    var splitRegex = /\\s*,\\s*|\\s+/;\n    var ops = divider !== -1 ? [fragments.slice(0, divider).concat([fragments[divider].split(splitRegex)[0]]), [fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider + 1))] : [fragments];\n\n    // Convert the values with units to absolute pixels to allow our computations\n    ops = ops.map(function (op, index) {\n      // Most of the units rely on the orientation of the popper\n      var measurement = (index === 1 ? !useHeight : useHeight) ? 'height' : 'width';\n      var mergeWithPrevious = false;\n      return op\n      // This aggregates any `+` or `-` sign that aren't considered operators\n      // e.g.: 10 + +5 => [10, +, +5]\n      .reduce(function (a, b) {\n        if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {\n          a[a.length - 1] = b;\n          mergeWithPrevious = true;\n          return a;\n        } else if (mergeWithPrevious) {\n          a[a.length - 1] += b;\n          mergeWithPrevious = false;\n          return a;\n        } else {\n          return a.concat(b);\n        }\n      }, [])\n      // Here we convert the string values into number values (in px)\n      .map(function (str) {\n        return toValue(str, measurement, popperOffsets, referenceOffsets);\n      });\n    });\n\n    // Loop trough the offsets arrays and execute the operations\n    ops.forEach(function (op, index) {\n      op.forEach(function (frag, index2) {\n        if (isNumeric(frag)) {\n          offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);\n        }\n      });\n    });\n    return offsets;\n  }\n\n  /**\n   * @function\n   * @memberof Modifiers\n   * @argument {Object} data - The data object generated by update method\n   * @argument {Object} options - Modifiers configuration and options\n   * @argument {Number|String} options.offset=0\n   * The offset value as described in the modifier description\n   * @returns {Object} The data object, properly modified\n   */\n  function offset(data, _ref) {\n    var offset = _ref.offset;\n    var placement = data.placement,\n        _data$offsets = data.offsets,\n        popper = _data$offsets.popper,\n        reference = _data$offsets.reference;\n\n    var basePlacement = placement.split('-')[0];\n\n    var offsets = void 0;\n    if (isNumeric(+offset)) {\n      offsets = [+offset, 0];\n    } else {\n      offsets = parseOffset(offset, popper, reference, basePlacement);\n    }\n\n    if (basePlacement === 'left') {\n      popper.top += offsets[0];\n      popper.left -= offsets[1];\n    } else if (basePlacement === 'right') {\n      popper.top += offsets[0];\n      popper.left += offsets[1];\n    } else if (basePlacement === 'top') {\n      popper.left += offsets[0];\n      popper.top -= offsets[1];\n    } else if (basePlacement === 'bottom') {\n      popper.left += offsets[0];\n      popper.top += offsets[1];\n    }\n\n    data.popper = popper;\n    return data;\n  }\n\n  /**\n   * @function\n   * @memberof Modifiers\n   * @argument {Object} data - The data object generated by `update` method\n   * @argument {Object} options - Modifiers configuration and options\n   * @returns {Object} The data object, properly modified\n   */\n  function preventOverflow(data, options) {\n    var boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper);\n\n    // If offsetParent is the reference element, we really want to\n    // go one step up and use the next offsetParent as reference to\n    // avoid to make this modifier completely useless and look like broken\n    if (data.instance.reference === boundariesElement) {\n      boundariesElement = getOffsetParent(boundariesElement);\n    }\n\n    // NOTE: DOM access here\n    // resets the popper's position so that the document size can be calculated excluding\n    // the size of the popper element itself\n    var transformProp = getSupportedPropertyName('transform');\n    var popperStyles = data.instance.popper.style; // assignment to help minification\n    var top = popperStyles.top,\n        left = popperStyles.left,\n        transform = popperStyles[transformProp];\n\n    popperStyles.top = '';\n    popperStyles.left = '';\n    popperStyles[transformProp] = '';\n\n    var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed);\n\n    // NOTE: DOM access here\n    // restores the original style properties after the offsets have been computed\n    popperStyles.top = top;\n    popperStyles.left = left;\n    popperStyles[transformProp] = transform;\n\n    options.boundaries = boundaries;\n\n    var order = options.priority;\n    var popper = data.offsets.popper;\n\n    var check = {\n      primary: function primary(placement) {\n        var value = popper[placement];\n        if (popper[placement] < boundaries[placement] && !options.escapeWithReference) {\n          value = Math.max(popper[placement], boundaries[placement]);\n        }\n        return defineProperty({}, placement, value);\n      },\n      secondary: function secondary(placement) {\n        var mainSide = placement === 'right' ? 'left' : 'top';\n        var value = popper[mainSide];\n        if (popper[placement] > boundaries[placement] && !options.escapeWithReference) {\n          value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height));\n        }\n        return defineProperty({}, mainSide, value);\n      }\n    };\n\n    order.forEach(function (placement) {\n      var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';\n      popper = _extends({}, popper, check[side](placement));\n    });\n\n    data.offsets.popper = popper;\n\n    return data;\n  }\n\n  /**\n   * @function\n   * @memberof Modifiers\n   * @argument {Object} data - The data object generated by `update` method\n   * @argument {Object} options - Modifiers configuration and options\n   * @returns {Object} The data object, properly modified\n   */\n  function shift(data) {\n    var placement = data.placement;\n    var basePlacement = placement.split('-')[0];\n    var shiftvariation = placement.split('-')[1];\n\n    // if shift shiftvariation is specified, run the modifier\n    if (shiftvariation) {\n      var _data$offsets = data.offsets,\n          reference = _data$offsets.reference,\n          popper = _data$offsets.popper;\n\n      var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n      var side = isVertical ? 'left' : 'top';\n      var measurement = isVertical ? 'width' : 'height';\n\n      var shiftOffsets = {\n        start: defineProperty({}, side, reference[side]),\n        end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement])\n      };\n\n      data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]);\n    }\n\n    return data;\n  }\n\n  /**\n   * @function\n   * @memberof Modifiers\n   * @argument {Object} data - The data object generated by update method\n   * @argument {Object} options - Modifiers configuration and options\n   * @returns {Object} The data object, properly modified\n   */\n  function hide(data) {\n    if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {\n      return data;\n    }\n\n    var refRect = data.offsets.reference;\n    var bound = find(data.instance.modifiers, function (modifier) {\n      return modifier.name === 'preventOverflow';\n    }).boundaries;\n\n    if (refRect.bottom < bound.top || refRect.left > bound.right || refRect.top > bound.bottom || refRect.right < bound.left) {\n      // Avoid unnecessary DOM access if visibility hasn't changed\n      if (data.hide === true) {\n        return data;\n      }\n\n      data.hide = true;\n      data.attributes['x-out-of-boundaries'] = '';\n    } else {\n      // Avoid unnecessary DOM access if visibility hasn't changed\n      if (data.hide === false) {\n        return data;\n      }\n\n      data.hide = false;\n      data.attributes['x-out-of-boundaries'] = false;\n    }\n\n    return data;\n  }\n\n  /**\n   * @function\n   * @memberof Modifiers\n   * @argument {Object} data - The data object generated by `update` method\n   * @argument {Object} options - Modifiers configuration and options\n   * @returns {Object} The data object, properly modified\n   */\n  function inner(data) {\n    var placement = data.placement;\n    var basePlacement = placement.split('-')[0];\n    var _data$offsets = data.offsets,\n        popper = _data$offsets.popper,\n        reference = _data$offsets.reference;\n\n    var isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n\n    var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n\n    popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n\n    data.placement = getOppositePlacement(placement);\n    data.offsets.popper = getClientRect(popper);\n\n    return data;\n  }\n\n  /**\n   * Modifier function, each modifier can have a function of this type assigned\n   * to its `fn` property.<br />\n   * These functions will be called on each update, this means that you must\n   * make sure they are performant enough to avoid performance bottlenecks.\n   *\n   * @function ModifierFn\n   * @argument {dataObject} data - The data object generated by `update` method\n   * @argument {Object} options - Modifiers configuration and options\n   * @returns {dataObject} The data object, properly modified\n   */\n\n  /**\n   * Modifiers are plugins used to alter the behavior of your poppers.<br />\n   * Popper.js uses a set of 9 modifiers to provide all the basic functionalities\n   * needed by the library.\n   *\n   * Usually you don't want to override the `order`, `fn` and `onLoad` props.\n   * All the other properties are configurations that could be tweaked.\n   * @namespace modifiers\n   */\n  var modifiers = {\n    /**\n     * Modifier used to shift the popper on the start or end of its reference\n     * element.<br />\n     * It will read the variation of the `placement` property.<br />\n     * It can be one either `-end` or `-start`.\n     * @memberof modifiers\n     * @inner\n     */\n    shift: {\n      /** @prop {number} order=100 - Index used to define the order of execution */\n      order: 100,\n      /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n      enabled: true,\n      /** @prop {ModifierFn} */\n      fn: shift\n    },\n\n    /**\n     * The `offset` modifier can shift your popper on both its axis.\n     *\n     * It accepts the following units:\n     * - `px` or unit-less, interpreted as pixels\n     * - `%` or `%r`, percentage relative to the length of the reference element\n     * - `%p`, percentage relative to the length of the popper element\n     * - `vw`, CSS viewport width unit\n     * - `vh`, CSS viewport height unit\n     *\n     * For length is intended the main axis relative to the placement of the popper.<br />\n     * This means that if the placement is `top` or `bottom`, the length will be the\n     * `width`. In case of `left` or `right`, it will be the `height`.\n     *\n     * You can provide a single value (as `Number` or `String`), or a pair of values\n     * as `String` divided by a comma or one (or more) white spaces.<br />\n     * The latter is a deprecated method because it leads to confusion and will be\n     * removed in v2.<br />\n     * Additionally, it accepts additions and subtractions between different units.\n     * Note that multiplications and divisions aren't supported.\n     *\n     * Valid examples are:\n     * ```\n     * 10\n     * '10%'\n     * '10, 10'\n     * '10%, 10'\n     * '10 + 10%'\n     * '10 - 5vh + 3%'\n     * '-10px + 5vh, 5px - 6%'\n     * ```\n     * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap\n     * > with their reference element, unfortunately, you will have to disable the `flip` modifier.\n     * > You can read more on this at this [issue](https://github.com/FezVrasta/popper.js/issues/373).\n     *\n     * @memberof modifiers\n     * @inner\n     */\n    offset: {\n      /** @prop {number} order=200 - Index used to define the order of execution */\n      order: 200,\n      /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n      enabled: true,\n      /** @prop {ModifierFn} */\n      fn: offset,\n      /** @prop {Number|String} offset=0\n       * The offset value as described in the modifier description\n       */\n      offset: 0\n    },\n\n    /**\n     * Modifier used to prevent the popper from being positioned outside the boundary.\n     *\n     * A scenario exists where the reference itself is not within the boundaries.<br />\n     * We can say it has \"escaped the boundaries\" — or just \"escaped\".<br />\n     * In this case we need to decide whether the popper should either:\n     *\n     * - detach from the reference and remain \"trapped\" in the boundaries, or\n     * - if it should ignore the boundary and \"escape with its reference\"\n     *\n     * When `escapeWithReference` is set to`true` and reference is completely\n     * outside its boundaries, the popper will overflow (or completely leave)\n     * the boundaries in order to remain attached to the edge of the reference.\n     *\n     * @memberof modifiers\n     * @inner\n     */\n    preventOverflow: {\n      /** @prop {number} order=300 - Index used to define the order of execution */\n      order: 300,\n      /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n      enabled: true,\n      /** @prop {ModifierFn} */\n      fn: preventOverflow,\n      /**\n       * @prop {Array} [priority=['left','right','top','bottom']]\n       * Popper will try to prevent overflow following these priorities by default,\n       * then, it could overflow on the left and on top of the `boundariesElement`\n       */\n      priority: ['left', 'right', 'top', 'bottom'],\n      /**\n       * @prop {number} padding=5\n       * Amount of pixel used to define a minimum distance between the boundaries\n       * and the popper. This makes sure the popper always has a little padding\n       * between the edges of its container\n       */\n      padding: 5,\n      /**\n       * @prop {String|HTMLElement} boundariesElement='scrollParent'\n       * Boundaries used by the modifier. Can be `scrollParent`, `window`,\n       * `viewport` or any DOM element.\n       */\n      boundariesElement: 'scrollParent'\n    },\n\n    /**\n     * Modifier used to make sure the reference and its popper stay near each other\n     * without leaving any gap between the two. Especially useful when the arrow is\n     * enabled and you want to ensure that it points to its reference element.\n     * It cares only about the first axis. You can still have poppers with margin\n     * between the popper and its reference element.\n     * @memberof modifiers\n     * @inner\n     */\n    keepTogether: {\n      /** @prop {number} order=400 - Index used to define the order of execution */\n      order: 400,\n      /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n      enabled: true,\n      /** @prop {ModifierFn} */\n      fn: keepTogether\n    },\n\n    /**\n     * This modifier is used to move the `arrowElement` of the popper to make\n     * sure it is positioned between the reference element and its popper element.\n     * It will read the outer size of the `arrowElement` node to detect how many\n     * pixels of conjunction are needed.\n     *\n     * It has no effect if no `arrowElement` is provided.\n     * @memberof modifiers\n     * @inner\n     */\n    arrow: {\n      /** @prop {number} order=500 - Index used to define the order of execution */\n      order: 500,\n      /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n      enabled: true,\n      /** @prop {ModifierFn} */\n      fn: arrow,\n      /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */\n      element: '[x-arrow]'\n    },\n\n    /**\n     * Modifier used to flip the popper's placement when it starts to overlap its\n     * reference element.\n     *\n     * Requires the `preventOverflow` modifier before it in order to work.\n     *\n     * **NOTE:** this modifier will interrupt the current update cycle and will\n     * restart it if it detects the need to flip the placement.\n     * @memberof modifiers\n     * @inner\n     */\n    flip: {\n      /** @prop {number} order=600 - Index used to define the order of execution */\n      order: 600,\n      /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n      enabled: true,\n      /** @prop {ModifierFn} */\n      fn: flip,\n      /**\n       * @prop {String|Array} behavior='flip'\n       * The behavior used to change the popper's placement. It can be one of\n       * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid\n       * placements (with optional variations)\n       */\n      behavior: 'flip',\n      /**\n       * @prop {number} padding=5\n       * The popper will flip if it hits the edges of the `boundariesElement`\n       */\n      padding: 5,\n      /**\n       * @prop {String|HTMLElement} boundariesElement='viewport'\n       * The element which will define the boundaries of the popper position.\n       * The popper will never be placed outside of the defined boundaries\n       * (except if `keepTogether` is enabled)\n       */\n      boundariesElement: 'viewport',\n      /**\n       * @prop {Boolean} flipVariations=false\n       * The popper will switch placement variation between `-start` and `-end` when\n       * the reference element overlaps its boundaries.\n       *\n       * The original placement should have a set variation.\n       */\n      flipVariations: false,\n      /**\n       * @prop {Boolean} flipVariationsByContent=false\n       * The popper will switch placement variation between `-start` and `-end` when\n       * the popper element overlaps its reference boundaries.\n       *\n       * The original placement should have a set variation.\n       */\n      flipVariationsByContent: false\n    },\n\n    /**\n     * Modifier used to make the popper flow toward the inner of the reference element.\n     * By default, when this modifier is disabled, the popper will be placed outside\n     * the reference element.\n     * @memberof modifiers\n     * @inner\n     */\n    inner: {\n      /** @prop {number} order=700 - Index used to define the order of execution */\n      order: 700,\n      /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */\n      enabled: false,\n      /** @prop {ModifierFn} */\n      fn: inner\n    },\n\n    /**\n     * Modifier used to hide the popper when its reference element is outside of the\n     * popper boundaries. It will set a `x-out-of-boundaries` attribute which can\n     * be used to hide with a CSS selector the popper when its reference is\n     * out of boundaries.\n     *\n     * Requires the `preventOverflow` modifier before it in order to work.\n     * @memberof modifiers\n     * @inner\n     */\n    hide: {\n      /** @prop {number} order=800 - Index used to define the order of execution */\n      order: 800,\n      /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n      enabled: true,\n      /** @prop {ModifierFn} */\n      fn: hide\n    },\n\n    /**\n     * Computes the style that will be applied to the popper element to gets\n     * properly positioned.\n     *\n     * Note that this modifier will not touch the DOM, it just prepares the styles\n     * so that `applyStyle` modifier can apply it. This separation is useful\n     * in case you need to replace `applyStyle` with a custom implementation.\n     *\n     * This modifier has `850` as `order` value to maintain backward compatibility\n     * with previous versions of Popper.js. Expect the modifiers ordering method\n     * to change in future major versions of the library.\n     *\n     * @memberof modifiers\n     * @inner\n     */\n    computeStyle: {\n      /** @prop {number} order=850 - Index used to define the order of execution */\n      order: 850,\n      /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n      enabled: true,\n      /** @prop {ModifierFn} */\n      fn: computeStyle,\n      /**\n       * @prop {Boolean} gpuAcceleration=true\n       * If true, it uses the CSS 3D transformation to position the popper.\n       * Otherwise, it will use the `top` and `left` properties\n       */\n      gpuAcceleration: true,\n      /**\n       * @prop {string} [x='bottom']\n       * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.\n       * Change this if your popper should grow in a direction different from `bottom`\n       */\n      x: 'bottom',\n      /**\n       * @prop {string} [x='left']\n       * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.\n       * Change this if your popper should grow in a direction different from `right`\n       */\n      y: 'right'\n    },\n\n    /**\n     * Applies the computed styles to the popper element.\n     *\n     * All the DOM manipulations are limited to this modifier. This is useful in case\n     * you want to integrate Popper.js inside a framework or view library and you\n     * want to delegate all the DOM manipulations to it.\n     *\n     * Note that if you disable this modifier, you must make sure the popper element\n     * has its position set to `absolute` before Popper.js can do its work!\n     *\n     * Just disable this modifier and define your own to achieve the desired effect.\n     *\n     * @memberof modifiers\n     * @inner\n     */\n    applyStyle: {\n      /** @prop {number} order=900 - Index used to define the order of execution */\n      order: 900,\n      /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n      enabled: true,\n      /** @prop {ModifierFn} */\n      fn: applyStyle,\n      /** @prop {Function} */\n      onLoad: applyStyleOnLoad,\n      /**\n       * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier\n       * @prop {Boolean} gpuAcceleration=true\n       * If true, it uses the CSS 3D transformation to position the popper.\n       * Otherwise, it will use the `top` and `left` properties\n       */\n      gpuAcceleration: undefined\n    }\n  };\n\n  /**\n   * The `dataObject` is an object containing all the information used by Popper.js.\n   * This object is passed to modifiers and to the `onCreate` and `onUpdate` callbacks.\n   * @name dataObject\n   * @property {Object} data.instance The Popper.js instance\n   * @property {String} data.placement Placement applied to popper\n   * @property {String} data.originalPlacement Placement originally defined on init\n   * @property {Boolean} data.flipped True if popper has been flipped by flip modifier\n   * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper\n   * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier\n   * @property {Object} data.styles Any CSS property defined here will be applied to the popper. It expects the JavaScript nomenclature (eg. `marginBottom`)\n   * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow. It expects the JavaScript nomenclature (eg. `marginBottom`)\n   * @property {Object} data.boundaries Offsets of the popper boundaries\n   * @property {Object} data.offsets The measurements of popper, reference and arrow elements\n   * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values\n   * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values\n   * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0\n   */\n\n  /**\n   * Default options provided to Popper.js constructor.<br />\n   * These can be overridden using the `options` argument of Popper.js.<br />\n   * To override an option, simply pass an object with the same\n   * structure of the `options` object, as the 3rd argument. For example:\n   * ```\n   * new Popper(ref, pop, {\n   *   modifiers: {\n   *     preventOverflow: { enabled: false }\n   *   }\n   * })\n   * ```\n   * @type {Object}\n   * @static\n   * @memberof Popper\n   */\n  var Defaults = {\n    /**\n     * Popper's placement.\n     * @prop {Popper.placements} placement='bottom'\n     */\n    placement: 'bottom',\n\n    /**\n     * Set this to true if you want popper to position it self in 'fixed' mode\n     * @prop {Boolean} positionFixed=false\n     */\n    positionFixed: false,\n\n    /**\n     * Whether events (resize, scroll) are initially enabled.\n     * @prop {Boolean} eventsEnabled=true\n     */\n    eventsEnabled: true,\n\n    /**\n     * Set to true if you want to automatically remove the popper when\n     * you call the `destroy` method.\n     * @prop {Boolean} removeOnDestroy=false\n     */\n    removeOnDestroy: false,\n\n    /**\n     * Callback called when the popper is created.<br />\n     * By default, it is set to no-op.<br />\n     * Access Popper.js instance with `data.instance`.\n     * @prop {onCreate}\n     */\n    onCreate: function onCreate() {},\n\n    /**\n     * Callback called when the popper is updated. This callback is not called\n     * on the initialization/creation of the popper, but only on subsequent\n     * updates.<br />\n     * By default, it is set to no-op.<br />\n     * Access Popper.js instance with `data.instance`.\n     * @prop {onUpdate}\n     */\n    onUpdate: function onUpdate() {},\n\n    /**\n     * List of modifiers used to modify the offsets before they are applied to the popper.\n     * They provide most of the functionalities of Popper.js.\n     * @prop {modifiers}\n     */\n    modifiers: modifiers\n  };\n\n  /**\n   * @callback onCreate\n   * @param {dataObject} data\n   */\n\n  /**\n   * @callback onUpdate\n   * @param {dataObject} data\n   */\n\n  // Utils\n  // Methods\n  var Popper = function () {\n    /**\n     * Creates a new Popper.js instance.\n     * @class Popper\n     * @param {Element|referenceObject} reference - The reference element used to position the popper\n     * @param {Element} popper - The HTML / XML element used as the popper\n     * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)\n     * @return {Object} instance - The generated Popper.js instance\n     */\n    function Popper(reference, popper) {\n      var _this = this;\n\n      var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n      classCallCheck(this, Popper);\n\n      this.scheduleUpdate = function () {\n        return requestAnimationFrame(_this.update);\n      };\n\n      // make update() debounced, so that it only runs at most once-per-tick\n      this.update = debounce(this.update.bind(this));\n\n      // with {} we create a new object with the options inside it\n      this.options = _extends({}, Popper.Defaults, options);\n\n      // init state\n      this.state = {\n        isDestroyed: false,\n        isCreated: false,\n        scrollParents: []\n      };\n\n      // get reference and popper elements (allow jQuery wrappers)\n      this.reference = reference && reference.jquery ? reference[0] : reference;\n      this.popper = popper && popper.jquery ? popper[0] : popper;\n\n      // Deep merge modifiers options\n      this.options.modifiers = {};\n      Object.keys(_extends({}, Popper.Defaults.modifiers, options.modifiers)).forEach(function (name) {\n        _this.options.modifiers[name] = _extends({}, Popper.Defaults.modifiers[name] || {}, options.modifiers ? options.modifiers[name] : {});\n      });\n\n      // Refactoring modifiers' list (Object => Array)\n      this.modifiers = Object.keys(this.options.modifiers).map(function (name) {\n        return _extends({\n          name: name\n        }, _this.options.modifiers[name]);\n      })\n      // sort the modifiers by order\n      .sort(function (a, b) {\n        return a.order - b.order;\n      });\n\n      // modifiers have the ability to execute arbitrary code when Popper.js get inited\n      // such code is executed in the same order of its modifier\n      // they could add new properties to their options configuration\n      // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!\n      this.modifiers.forEach(function (modifierOptions) {\n        if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {\n          modifierOptions.onLoad(_this.reference, _this.popper, _this.options, modifierOptions, _this.state);\n        }\n      });\n\n      // fire the first update to position the popper in the right place\n      this.update();\n\n      var eventsEnabled = this.options.eventsEnabled;\n      if (eventsEnabled) {\n        // setup event listeners, they will take care of update the position in specific situations\n        this.enableEventListeners();\n      }\n\n      this.state.eventsEnabled = eventsEnabled;\n    }\n\n    // We can't use class properties because they don't get listed in the\n    // class prototype and break stuff like Sinon stubs\n\n\n    createClass(Popper, [{\n      key: 'update',\n      value: function update$$1() {\n        return update.call(this);\n      }\n    }, {\n      key: 'destroy',\n      value: function destroy$$1() {\n        return destroy.call(this);\n      }\n    }, {\n      key: 'enableEventListeners',\n      value: function enableEventListeners$$1() {\n        return enableEventListeners.call(this);\n      }\n    }, {\n      key: 'disableEventListeners',\n      value: function disableEventListeners$$1() {\n        return disableEventListeners.call(this);\n      }\n\n      /**\n       * Schedules an update. It will run on the next UI update available.\n       * @method scheduleUpdate\n       * @memberof Popper\n       */\n\n\n      /**\n       * Collection of utilities useful when writing custom modifiers.\n       * Starting from version 1.7, this method is available only if you\n       * include `popper-utils.js` before `popper.js`.\n       *\n       * **DEPRECATION**: This way to access PopperUtils is deprecated\n       * and will be removed in v2! Use the PopperUtils module directly instead.\n       * Due to the high instability of the methods contained in Utils, we can't\n       * guarantee them to follow semver. Use them at your own risk!\n       * @static\n       * @private\n       * @type {Object}\n       * @deprecated since version 1.8\n       * @member Utils\n       * @memberof Popper\n       */\n\n    }]);\n    return Popper;\n  }();\n\n  /**\n   * The `referenceObject` is an object that provides an interface compatible with Popper.js\n   * and lets you use it as replacement of a real DOM node.<br />\n   * You can use this method to position a popper relatively to a set of coordinates\n   * in case you don't have a DOM node to use as reference.\n   *\n   * ```\n   * new Popper(referenceObject, popperNode);\n   * ```\n   *\n   * NB: This feature isn't supported in Internet Explorer 10.\n   * @name referenceObject\n   * @property {Function} data.getBoundingClientRect\n   * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.\n   * @property {number} data.clientWidth\n   * An ES6 getter that will return the width of the virtual reference element.\n   * @property {number} data.clientHeight\n   * An ES6 getter that will return the height of the virtual reference element.\n   */\n\n\n  Popper.Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;\n  Popper.placements = placements;\n  Popper.Defaults = Defaults;\n\n  var Popper$1 = Popper;\n\n  /**\n   * Constants\n   */\n\n  var NAME$6 = 'dropdown';\n  var VERSION$6 = '4.6.2';\n  var DATA_KEY$6 = 'bs.dropdown';\n  var EVENT_KEY$6 = \".\" + DATA_KEY$6;\n  var DATA_API_KEY$3 = '.data-api';\n  var JQUERY_NO_CONFLICT$6 = $__default[\"default\"].fn[NAME$6];\n  var ESCAPE_KEYCODE$1 = 27; // KeyboardEvent.which value for Escape (Esc) key\n\n  var SPACE_KEYCODE = 32; // KeyboardEvent.which value for space key\n\n  var TAB_KEYCODE = 9; // KeyboardEvent.which value for tab key\n\n  var ARROW_UP_KEYCODE = 38; // KeyboardEvent.which value for up arrow key\n\n  var ARROW_DOWN_KEYCODE = 40; // KeyboardEvent.which value for down arrow key\n\n  var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse)\n\n  var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + \"|\" + ARROW_DOWN_KEYCODE + \"|\" + ESCAPE_KEYCODE$1);\n  var CLASS_NAME_DISABLED$1 = 'disabled';\n  var CLASS_NAME_SHOW$5 = 'show';\n  var CLASS_NAME_DROPUP = 'dropup';\n  var CLASS_NAME_DROPRIGHT = 'dropright';\n  var CLASS_NAME_DROPLEFT = 'dropleft';\n  var CLASS_NAME_MENURIGHT = 'dropdown-menu-right';\n  var CLASS_NAME_POSITION_STATIC = 'position-static';\n  var EVENT_HIDE$3 = \"hide\" + EVENT_KEY$6;\n  var EVENT_HIDDEN$3 = \"hidden\" + EVENT_KEY$6;\n  var EVENT_SHOW$3 = \"show\" + EVENT_KEY$6;\n  var EVENT_SHOWN$3 = \"shown\" + EVENT_KEY$6;\n  var EVENT_CLICK = \"click\" + EVENT_KEY$6;\n  var EVENT_CLICK_DATA_API$2 = \"click\" + EVENT_KEY$6 + DATA_API_KEY$3;\n  var EVENT_KEYDOWN_DATA_API = \"keydown\" + EVENT_KEY$6 + DATA_API_KEY$3;\n  var EVENT_KEYUP_DATA_API = \"keyup\" + EVENT_KEY$6 + DATA_API_KEY$3;\n  var SELECTOR_DATA_TOGGLE$2 = '[data-toggle=\"dropdown\"]';\n  var SELECTOR_FORM_CHILD = '.dropdown form';\n  var SELECTOR_MENU = '.dropdown-menu';\n  var SELECTOR_NAVBAR_NAV = '.navbar-nav';\n  var SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';\n  var PLACEMENT_TOP = 'top-start';\n  var PLACEMENT_TOPEND = 'top-end';\n  var PLACEMENT_BOTTOM = 'bottom-start';\n  var PLACEMENT_BOTTOMEND = 'bottom-end';\n  var PLACEMENT_RIGHT = 'right-start';\n  var PLACEMENT_LEFT = 'left-start';\n  var Default$5 = {\n    offset: 0,\n    flip: true,\n    boundary: 'scrollParent',\n    reference: 'toggle',\n    display: 'dynamic',\n    popperConfig: null\n  };\n  var DefaultType$5 = {\n    offset: '(number|string|function)',\n    flip: 'boolean',\n    boundary: '(string|element)',\n    reference: '(string|element)',\n    display: 'string',\n    popperConfig: '(null|object)'\n  };\n  /**\n   * Class definition\n   */\n\n  var Dropdown = /*#__PURE__*/function () {\n    function Dropdown(element, config) {\n      this._element = element;\n      this._popper = null;\n      this._config = this._getConfig(config);\n      this._menu = this._getMenuElement();\n      this._inNavbar = this._detectNavbar();\n\n      this._addEventListeners();\n    } // Getters\n\n\n    var _proto = Dropdown.prototype;\n\n    // Public\n    _proto.toggle = function toggle() {\n      if (this._element.disabled || $__default[\"default\"](this._element).hasClass(CLASS_NAME_DISABLED$1)) {\n        return;\n      }\n\n      var isActive = $__default[\"default\"](this._menu).hasClass(CLASS_NAME_SHOW$5);\n\n      Dropdown._clearMenus();\n\n      if (isActive) {\n        return;\n      }\n\n      this.show(true);\n    };\n\n    _proto.show = function show(usePopper) {\n      if (usePopper === void 0) {\n        usePopper = false;\n      }\n\n      if (this._element.disabled || $__default[\"default\"](this._element).hasClass(CLASS_NAME_DISABLED$1) || $__default[\"default\"](this._menu).hasClass(CLASS_NAME_SHOW$5)) {\n        return;\n      }\n\n      var relatedTarget = {\n        relatedTarget: this._element\n      };\n      var showEvent = $__default[\"default\"].Event(EVENT_SHOW$3, relatedTarget);\n\n      var parent = Dropdown._getParentFromElement(this._element);\n\n      $__default[\"default\"](parent).trigger(showEvent);\n\n      if (showEvent.isDefaultPrevented()) {\n        return;\n      } // Totally disable Popper for Dropdowns in Navbar\n\n\n      if (!this._inNavbar && usePopper) {\n        // Check for Popper dependency\n        if (typeof Popper$1 === 'undefined') {\n          throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)');\n        }\n\n        var referenceElement = this._element;\n\n        if (this._config.reference === 'parent') {\n          referenceElement = parent;\n        } else if (Util.isElement(this._config.reference)) {\n          referenceElement = this._config.reference; // Check if it's jQuery element\n\n          if (typeof this._config.reference.jquery !== 'undefined') {\n            referenceElement = this._config.reference[0];\n          }\n        } // If boundary is not `scrollParent`, then set position to `static`\n        // to allow the menu to \"escape\" the scroll parent's boundaries\n        // https://github.com/twbs/bootstrap/issues/24251\n\n\n        if (this._config.boundary !== 'scrollParent') {\n          $__default[\"default\"](parent).addClass(CLASS_NAME_POSITION_STATIC);\n        }\n\n        this._popper = new Popper$1(referenceElement, this._menu, this._getPopperConfig());\n      } // If this is a touch-enabled device we add extra\n      // empty mouseover listeners to the body's immediate children;\n      // only needed because of broken event delegation on iOS\n      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n      if ('ontouchstart' in document.documentElement && $__default[\"default\"](parent).closest(SELECTOR_NAVBAR_NAV).length === 0) {\n        $__default[\"default\"](document.body).children().on('mouseover', null, $__default[\"default\"].noop);\n      }\n\n      this._element.focus();\n\n      this._element.setAttribute('aria-expanded', true);\n\n      $__default[\"default\"](this._menu).toggleClass(CLASS_NAME_SHOW$5);\n      $__default[\"default\"](parent).toggleClass(CLASS_NAME_SHOW$5).trigger($__default[\"default\"].Event(EVENT_SHOWN$3, relatedTarget));\n    };\n\n    _proto.hide = function hide() {\n      if (this._element.disabled || $__default[\"default\"](this._element).hasClass(CLASS_NAME_DISABLED$1) || !$__default[\"default\"](this._menu).hasClass(CLASS_NAME_SHOW$5)) {\n        return;\n      }\n\n      var relatedTarget = {\n        relatedTarget: this._element\n      };\n      var hideEvent = $__default[\"default\"].Event(EVENT_HIDE$3, relatedTarget);\n\n      var parent = Dropdown._getParentFromElement(this._element);\n\n      $__default[\"default\"](parent).trigger(hideEvent);\n\n      if (hideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      $__default[\"default\"](this._menu).toggleClass(CLASS_NAME_SHOW$5);\n      $__default[\"default\"](parent).toggleClass(CLASS_NAME_SHOW$5).trigger($__default[\"default\"].Event(EVENT_HIDDEN$3, relatedTarget));\n    };\n\n    _proto.dispose = function dispose() {\n      $__default[\"default\"].removeData(this._element, DATA_KEY$6);\n      $__default[\"default\"](this._element).off(EVENT_KEY$6);\n      this._element = null;\n      this._menu = null;\n\n      if (this._popper !== null) {\n        this._popper.destroy();\n\n        this._popper = null;\n      }\n    };\n\n    _proto.update = function update() {\n      this._inNavbar = this._detectNavbar();\n\n      if (this._popper !== null) {\n        this._popper.scheduleUpdate();\n      }\n    } // Private\n    ;\n\n    _proto._addEventListeners = function _addEventListeners() {\n      var _this = this;\n\n      $__default[\"default\"](this._element).on(EVENT_CLICK, function (event) {\n        event.preventDefault();\n        event.stopPropagation();\n\n        _this.toggle();\n      });\n    };\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _extends$1({}, this.constructor.Default, $__default[\"default\"](this._element).data(), config);\n      Util.typeCheckConfig(NAME$6, config, this.constructor.DefaultType);\n      return config;\n    };\n\n    _proto._getMenuElement = function _getMenuElement() {\n      if (!this._menu) {\n        var parent = Dropdown._getParentFromElement(this._element);\n\n        if (parent) {\n          this._menu = parent.querySelector(SELECTOR_MENU);\n        }\n      }\n\n      return this._menu;\n    };\n\n    _proto._getPlacement = function _getPlacement() {\n      var $parentDropdown = $__default[\"default\"](this._element.parentNode);\n      var placement = PLACEMENT_BOTTOM; // Handle dropup\n\n      if ($parentDropdown.hasClass(CLASS_NAME_DROPUP)) {\n        placement = $__default[\"default\"](this._menu).hasClass(CLASS_NAME_MENURIGHT) ? PLACEMENT_TOPEND : PLACEMENT_TOP;\n      } else if ($parentDropdown.hasClass(CLASS_NAME_DROPRIGHT)) {\n        placement = PLACEMENT_RIGHT;\n      } else if ($parentDropdown.hasClass(CLASS_NAME_DROPLEFT)) {\n        placement = PLACEMENT_LEFT;\n      } else if ($__default[\"default\"](this._menu).hasClass(CLASS_NAME_MENURIGHT)) {\n        placement = PLACEMENT_BOTTOMEND;\n      }\n\n      return placement;\n    };\n\n    _proto._detectNavbar = function _detectNavbar() {\n      return $__default[\"default\"](this._element).closest('.navbar').length > 0;\n    };\n\n    _proto._getOffset = function _getOffset() {\n      var _this2 = this;\n\n      var offset = {};\n\n      if (typeof this._config.offset === 'function') {\n        offset.fn = function (data) {\n          data.offsets = _extends$1({}, data.offsets, _this2._config.offset(data.offsets, _this2._element));\n          return data;\n        };\n      } else {\n        offset.offset = this._config.offset;\n      }\n\n      return offset;\n    };\n\n    _proto._getPopperConfig = function _getPopperConfig() {\n      var popperConfig = {\n        placement: this._getPlacement(),\n        modifiers: {\n          offset: this._getOffset(),\n          flip: {\n            enabled: this._config.flip\n          },\n          preventOverflow: {\n            boundariesElement: this._config.boundary\n          }\n        }\n      }; // Disable Popper if we have a static display\n\n      if (this._config.display === 'static') {\n        popperConfig.modifiers.applyStyle = {\n          enabled: false\n        };\n      }\n\n      return _extends$1({}, popperConfig, this._config.popperConfig);\n    } // Static\n    ;\n\n    Dropdown._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $__default[\"default\"](this).data(DATA_KEY$6);\n\n        var _config = typeof config === 'object' ? config : null;\n\n        if (!data) {\n          data = new Dropdown(this, _config);\n          $__default[\"default\"](this).data(DATA_KEY$6, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    Dropdown._clearMenus = function _clearMenus(event) {\n      if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH || event.type === 'keyup' && event.which !== TAB_KEYCODE)) {\n        return;\n      }\n\n      var toggles = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE$2));\n\n      for (var i = 0, len = toggles.length; i < len; i++) {\n        var parent = Dropdown._getParentFromElement(toggles[i]);\n\n        var context = $__default[\"default\"](toggles[i]).data(DATA_KEY$6);\n        var relatedTarget = {\n          relatedTarget: toggles[i]\n        };\n\n        if (event && event.type === 'click') {\n          relatedTarget.clickEvent = event;\n        }\n\n        if (!context) {\n          continue;\n        }\n\n        var dropdownMenu = context._menu;\n\n        if (!$__default[\"default\"](parent).hasClass(CLASS_NAME_SHOW$5)) {\n          continue;\n        }\n\n        if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) && $__default[\"default\"].contains(parent, event.target)) {\n          continue;\n        }\n\n        var hideEvent = $__default[\"default\"].Event(EVENT_HIDE$3, relatedTarget);\n        $__default[\"default\"](parent).trigger(hideEvent);\n\n        if (hideEvent.isDefaultPrevented()) {\n          continue;\n        } // If this is a touch-enabled device we remove the extra\n        // empty mouseover listeners we added for iOS support\n\n\n        if ('ontouchstart' in document.documentElement) {\n          $__default[\"default\"](document.body).children().off('mouseover', null, $__default[\"default\"].noop);\n        }\n\n        toggles[i].setAttribute('aria-expanded', 'false');\n\n        if (context._popper) {\n          context._popper.destroy();\n        }\n\n        $__default[\"default\"](dropdownMenu).removeClass(CLASS_NAME_SHOW$5);\n        $__default[\"default\"](parent).removeClass(CLASS_NAME_SHOW$5).trigger($__default[\"default\"].Event(EVENT_HIDDEN$3, relatedTarget));\n      }\n    };\n\n    Dropdown._getParentFromElement = function _getParentFromElement(element) {\n      var parent;\n      var selector = Util.getSelectorFromElement(element);\n\n      if (selector) {\n        parent = document.querySelector(selector);\n      }\n\n      return parent || element.parentNode;\n    } // eslint-disable-next-line complexity\n    ;\n\n    Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) {\n      // If not input/textarea:\n      //  - And not a key in REGEXP_KEYDOWN => not a dropdown command\n      // If input/textarea:\n      //  - If space key => not a dropdown command\n      //  - If key is other than escape\n      //    - If key is not up or down => not a dropdown command\n      //    - If trigger inside the menu => not a dropdown command\n      if (/input|textarea/i.test(event.target.tagName) ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE$1 && (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || $__default[\"default\"](event.target).closest(SELECTOR_MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {\n        return;\n      }\n\n      if (this.disabled || $__default[\"default\"](this).hasClass(CLASS_NAME_DISABLED$1)) {\n        return;\n      }\n\n      var parent = Dropdown._getParentFromElement(this);\n\n      var isActive = $__default[\"default\"](parent).hasClass(CLASS_NAME_SHOW$5);\n\n      if (!isActive && event.which === ESCAPE_KEYCODE$1) {\n        return;\n      }\n\n      event.preventDefault();\n      event.stopPropagation();\n\n      if (!isActive || event.which === ESCAPE_KEYCODE$1 || event.which === SPACE_KEYCODE) {\n        if (event.which === ESCAPE_KEYCODE$1) {\n          $__default[\"default\"](parent.querySelector(SELECTOR_DATA_TOGGLE$2)).trigger('focus');\n        }\n\n        $__default[\"default\"](this).trigger('click');\n        return;\n      }\n\n      var items = [].slice.call(parent.querySelectorAll(SELECTOR_VISIBLE_ITEMS)).filter(function (item) {\n        return $__default[\"default\"](item).is(':visible');\n      });\n\n      if (items.length === 0) {\n        return;\n      }\n\n      var index = items.indexOf(event.target);\n\n      if (event.which === ARROW_UP_KEYCODE && index > 0) {\n        // Up\n        index--;\n      }\n\n      if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) {\n        // Down\n        index++;\n      }\n\n      if (index < 0) {\n        index = 0;\n      }\n\n      items[index].focus();\n    };\n\n    _createClass(Dropdown, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$6;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$5;\n      }\n    }, {\n      key: \"DefaultType\",\n      get: function get() {\n        return DefaultType$5;\n      }\n    }]);\n\n    return Dropdown;\n  }();\n  /**\n   * Data API implementation\n   */\n\n\n  $__default[\"default\"](document).on(EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$2, Dropdown._dataApiKeydownHandler).on(EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown._dataApiKeydownHandler).on(EVENT_CLICK_DATA_API$2 + \" \" + EVENT_KEYUP_DATA_API, Dropdown._clearMenus).on(EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {\n    event.preventDefault();\n    event.stopPropagation();\n\n    Dropdown._jQueryInterface.call($__default[\"default\"](this), 'toggle');\n  }).on(EVENT_CLICK_DATA_API$2, SELECTOR_FORM_CHILD, function (e) {\n    e.stopPropagation();\n  });\n  /**\n   * jQuery\n   */\n\n  $__default[\"default\"].fn[NAME$6] = Dropdown._jQueryInterface;\n  $__default[\"default\"].fn[NAME$6].Constructor = Dropdown;\n\n  $__default[\"default\"].fn[NAME$6].noConflict = function () {\n    $__default[\"default\"].fn[NAME$6] = JQUERY_NO_CONFLICT$6;\n    return Dropdown._jQueryInterface;\n  };\n\n  /**\n   * Constants\n   */\n\n  var NAME$5 = 'modal';\n  var VERSION$5 = '4.6.2';\n  var DATA_KEY$5 = 'bs.modal';\n  var EVENT_KEY$5 = \".\" + DATA_KEY$5;\n  var DATA_API_KEY$2 = '.data-api';\n  var JQUERY_NO_CONFLICT$5 = $__default[\"default\"].fn[NAME$5];\n  var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key\n\n  var CLASS_NAME_SCROLLABLE = 'modal-dialog-scrollable';\n  var CLASS_NAME_SCROLLBAR_MEASURER = 'modal-scrollbar-measure';\n  var CLASS_NAME_BACKDROP = 'modal-backdrop';\n  var CLASS_NAME_OPEN = 'modal-open';\n  var CLASS_NAME_FADE$4 = 'fade';\n  var CLASS_NAME_SHOW$4 = 'show';\n  var CLASS_NAME_STATIC = 'modal-static';\n  var EVENT_HIDE$2 = \"hide\" + EVENT_KEY$5;\n  var EVENT_HIDE_PREVENTED = \"hidePrevented\" + EVENT_KEY$5;\n  var EVENT_HIDDEN$2 = \"hidden\" + EVENT_KEY$5;\n  var EVENT_SHOW$2 = \"show\" + EVENT_KEY$5;\n  var EVENT_SHOWN$2 = \"shown\" + EVENT_KEY$5;\n  var EVENT_FOCUSIN = \"focusin\" + EVENT_KEY$5;\n  var EVENT_RESIZE = \"resize\" + EVENT_KEY$5;\n  var EVENT_CLICK_DISMISS$1 = \"click.dismiss\" + EVENT_KEY$5;\n  var EVENT_KEYDOWN_DISMISS = \"keydown.dismiss\" + EVENT_KEY$5;\n  var EVENT_MOUSEUP_DISMISS = \"mouseup.dismiss\" + EVENT_KEY$5;\n  var EVENT_MOUSEDOWN_DISMISS = \"mousedown.dismiss\" + EVENT_KEY$5;\n  var EVENT_CLICK_DATA_API$1 = \"click\" + EVENT_KEY$5 + DATA_API_KEY$2;\n  var SELECTOR_DIALOG = '.modal-dialog';\n  var SELECTOR_MODAL_BODY = '.modal-body';\n  var SELECTOR_DATA_TOGGLE$1 = '[data-toggle=\"modal\"]';\n  var SELECTOR_DATA_DISMISS$1 = '[data-dismiss=\"modal\"]';\n  var SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\n  var SELECTOR_STICKY_CONTENT = '.sticky-top';\n  var Default$4 = {\n    backdrop: true,\n    keyboard: true,\n    focus: true,\n    show: true\n  };\n  var DefaultType$4 = {\n    backdrop: '(boolean|string)',\n    keyboard: 'boolean',\n    focus: 'boolean',\n    show: 'boolean'\n  };\n  /**\n   * Class definition\n   */\n\n  var Modal = /*#__PURE__*/function () {\n    function Modal(element, config) {\n      this._config = this._getConfig(config);\n      this._element = element;\n      this._dialog = element.querySelector(SELECTOR_DIALOG);\n      this._backdrop = null;\n      this._isShown = false;\n      this._isBodyOverflowing = false;\n      this._ignoreBackdropClick = false;\n      this._isTransitioning = false;\n      this._scrollbarWidth = 0;\n    } // Getters\n\n\n    var _proto = Modal.prototype;\n\n    // Public\n    _proto.toggle = function toggle(relatedTarget) {\n      return this._isShown ? this.hide() : this.show(relatedTarget);\n    };\n\n    _proto.show = function show(relatedTarget) {\n      var _this = this;\n\n      if (this._isShown || this._isTransitioning) {\n        return;\n      }\n\n      var showEvent = $__default[\"default\"].Event(EVENT_SHOW$2, {\n        relatedTarget: relatedTarget\n      });\n      $__default[\"default\"](this._element).trigger(showEvent);\n\n      if (showEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      this._isShown = true;\n\n      if ($__default[\"default\"](this._element).hasClass(CLASS_NAME_FADE$4)) {\n        this._isTransitioning = true;\n      }\n\n      this._checkScrollbar();\n\n      this._setScrollbar();\n\n      this._adjustDialog();\n\n      this._setEscapeEvent();\n\n      this._setResizeEvent();\n\n      $__default[\"default\"](this._element).on(EVENT_CLICK_DISMISS$1, SELECTOR_DATA_DISMISS$1, function (event) {\n        return _this.hide(event);\n      });\n      $__default[\"default\"](this._dialog).on(EVENT_MOUSEDOWN_DISMISS, function () {\n        $__default[\"default\"](_this._element).one(EVENT_MOUSEUP_DISMISS, function (event) {\n          if ($__default[\"default\"](event.target).is(_this._element)) {\n            _this._ignoreBackdropClick = true;\n          }\n        });\n      });\n\n      this._showBackdrop(function () {\n        return _this._showElement(relatedTarget);\n      });\n    };\n\n    _proto.hide = function hide(event) {\n      var _this2 = this;\n\n      if (event) {\n        event.preventDefault();\n      }\n\n      if (!this._isShown || this._isTransitioning) {\n        return;\n      }\n\n      var hideEvent = $__default[\"default\"].Event(EVENT_HIDE$2);\n      $__default[\"default\"](this._element).trigger(hideEvent);\n\n      if (!this._isShown || hideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      this._isShown = false;\n      var transition = $__default[\"default\"](this._element).hasClass(CLASS_NAME_FADE$4);\n\n      if (transition) {\n        this._isTransitioning = true;\n      }\n\n      this._setEscapeEvent();\n\n      this._setResizeEvent();\n\n      $__default[\"default\"](document).off(EVENT_FOCUSIN);\n      $__default[\"default\"](this._element).removeClass(CLASS_NAME_SHOW$4);\n      $__default[\"default\"](this._element).off(EVENT_CLICK_DISMISS$1);\n      $__default[\"default\"](this._dialog).off(EVENT_MOUSEDOWN_DISMISS);\n\n      if (transition) {\n        var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n        $__default[\"default\"](this._element).one(Util.TRANSITION_END, function (event) {\n          return _this2._hideModal(event);\n        }).emulateTransitionEnd(transitionDuration);\n      } else {\n        this._hideModal();\n      }\n    };\n\n    _proto.dispose = function dispose() {\n      [window, this._element, this._dialog].forEach(function (htmlElement) {\n        return $__default[\"default\"](htmlElement).off(EVENT_KEY$5);\n      });\n      /**\n       * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`\n       * Do not move `document` in `htmlElements` array\n       * It will remove `EVENT_CLICK_DATA_API` event that should remain\n       */\n\n      $__default[\"default\"](document).off(EVENT_FOCUSIN);\n      $__default[\"default\"].removeData(this._element, DATA_KEY$5);\n      this._config = null;\n      this._element = null;\n      this._dialog = null;\n      this._backdrop = null;\n      this._isShown = null;\n      this._isBodyOverflowing = null;\n      this._ignoreBackdropClick = null;\n      this._isTransitioning = null;\n      this._scrollbarWidth = null;\n    };\n\n    _proto.handleUpdate = function handleUpdate() {\n      this._adjustDialog();\n    } // Private\n    ;\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _extends$1({}, Default$4, config);\n      Util.typeCheckConfig(NAME$5, config, DefaultType$4);\n      return config;\n    };\n\n    _proto._triggerBackdropTransition = function _triggerBackdropTransition() {\n      var _this3 = this;\n\n      var hideEventPrevented = $__default[\"default\"].Event(EVENT_HIDE_PREVENTED);\n      $__default[\"default\"](this._element).trigger(hideEventPrevented);\n\n      if (hideEventPrevented.isDefaultPrevented()) {\n        return;\n      }\n\n      var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n      if (!isModalOverflowing) {\n        this._element.style.overflowY = 'hidden';\n      }\n\n      this._element.classList.add(CLASS_NAME_STATIC);\n\n      var modalTransitionDuration = Util.getTransitionDurationFromElement(this._dialog);\n      $__default[\"default\"](this._element).off(Util.TRANSITION_END);\n      $__default[\"default\"](this._element).one(Util.TRANSITION_END, function () {\n        _this3._element.classList.remove(CLASS_NAME_STATIC);\n\n        if (!isModalOverflowing) {\n          $__default[\"default\"](_this3._element).one(Util.TRANSITION_END, function () {\n            _this3._element.style.overflowY = '';\n          }).emulateTransitionEnd(_this3._element, modalTransitionDuration);\n        }\n      }).emulateTransitionEnd(modalTransitionDuration);\n\n      this._element.focus();\n    };\n\n    _proto._showElement = function _showElement(relatedTarget) {\n      var _this4 = this;\n\n      var transition = $__default[\"default\"](this._element).hasClass(CLASS_NAME_FADE$4);\n      var modalBody = this._dialog ? this._dialog.querySelector(SELECTOR_MODAL_BODY) : null;\n\n      if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n        // Don't move modal's DOM position\n        document.body.appendChild(this._element);\n      }\n\n      this._element.style.display = 'block';\n\n      this._element.removeAttribute('aria-hidden');\n\n      this._element.setAttribute('aria-modal', true);\n\n      this._element.setAttribute('role', 'dialog');\n\n      if ($__default[\"default\"](this._dialog).hasClass(CLASS_NAME_SCROLLABLE) && modalBody) {\n        modalBody.scrollTop = 0;\n      } else {\n        this._element.scrollTop = 0;\n      }\n\n      if (transition) {\n        Util.reflow(this._element);\n      }\n\n      $__default[\"default\"](this._element).addClass(CLASS_NAME_SHOW$4);\n\n      if (this._config.focus) {\n        this._enforceFocus();\n      }\n\n      var shownEvent = $__default[\"default\"].Event(EVENT_SHOWN$2, {\n        relatedTarget: relatedTarget\n      });\n\n      var transitionComplete = function transitionComplete() {\n        if (_this4._config.focus) {\n          _this4._element.focus();\n        }\n\n        _this4._isTransitioning = false;\n        $__default[\"default\"](_this4._element).trigger(shownEvent);\n      };\n\n      if (transition) {\n        var transitionDuration = Util.getTransitionDurationFromElement(this._dialog);\n        $__default[\"default\"](this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(transitionDuration);\n      } else {\n        transitionComplete();\n      }\n    };\n\n    _proto._enforceFocus = function _enforceFocus() {\n      var _this5 = this;\n\n      $__default[\"default\"](document).off(EVENT_FOCUSIN) // Guard against infinite focus loop\n      .on(EVENT_FOCUSIN, function (event) {\n        if (document !== event.target && _this5._element !== event.target && $__default[\"default\"](_this5._element).has(event.target).length === 0) {\n          _this5._element.focus();\n        }\n      });\n    };\n\n    _proto._setEscapeEvent = function _setEscapeEvent() {\n      var _this6 = this;\n\n      if (this._isShown) {\n        $__default[\"default\"](this._element).on(EVENT_KEYDOWN_DISMISS, function (event) {\n          if (_this6._config.keyboard && event.which === ESCAPE_KEYCODE) {\n            event.preventDefault();\n\n            _this6.hide();\n          } else if (!_this6._config.keyboard && event.which === ESCAPE_KEYCODE) {\n            _this6._triggerBackdropTransition();\n          }\n        });\n      } else if (!this._isShown) {\n        $__default[\"default\"](this._element).off(EVENT_KEYDOWN_DISMISS);\n      }\n    };\n\n    _proto._setResizeEvent = function _setResizeEvent() {\n      var _this7 = this;\n\n      if (this._isShown) {\n        $__default[\"default\"](window).on(EVENT_RESIZE, function (event) {\n          return _this7.handleUpdate(event);\n        });\n      } else {\n        $__default[\"default\"](window).off(EVENT_RESIZE);\n      }\n    };\n\n    _proto._hideModal = function _hideModal() {\n      var _this8 = this;\n\n      this._element.style.display = 'none';\n\n      this._element.setAttribute('aria-hidden', true);\n\n      this._element.removeAttribute('aria-modal');\n\n      this._element.removeAttribute('role');\n\n      this._isTransitioning = false;\n\n      this._showBackdrop(function () {\n        $__default[\"default\"](document.body).removeClass(CLASS_NAME_OPEN);\n\n        _this8._resetAdjustments();\n\n        _this8._resetScrollbar();\n\n        $__default[\"default\"](_this8._element).trigger(EVENT_HIDDEN$2);\n      });\n    };\n\n    _proto._removeBackdrop = function _removeBackdrop() {\n      if (this._backdrop) {\n        $__default[\"default\"](this._backdrop).remove();\n        this._backdrop = null;\n      }\n    };\n\n    _proto._showBackdrop = function _showBackdrop(callback) {\n      var _this9 = this;\n\n      var animate = $__default[\"default\"](this._element).hasClass(CLASS_NAME_FADE$4) ? CLASS_NAME_FADE$4 : '';\n\n      if (this._isShown && this._config.backdrop) {\n        this._backdrop = document.createElement('div');\n        this._backdrop.className = CLASS_NAME_BACKDROP;\n\n        if (animate) {\n          this._backdrop.classList.add(animate);\n        }\n\n        $__default[\"default\"](this._backdrop).appendTo(document.body);\n        $__default[\"default\"](this._element).on(EVENT_CLICK_DISMISS$1, function (event) {\n          if (_this9._ignoreBackdropClick) {\n            _this9._ignoreBackdropClick = false;\n            return;\n          }\n\n          if (event.target !== event.currentTarget) {\n            return;\n          }\n\n          if (_this9._config.backdrop === 'static') {\n            _this9._triggerBackdropTransition();\n          } else {\n            _this9.hide();\n          }\n        });\n\n        if (animate) {\n          Util.reflow(this._backdrop);\n        }\n\n        $__default[\"default\"](this._backdrop).addClass(CLASS_NAME_SHOW$4);\n\n        if (!callback) {\n          return;\n        }\n\n        if (!animate) {\n          callback();\n          return;\n        }\n\n        var backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);\n        $__default[\"default\"](this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration);\n      } else if (!this._isShown && this._backdrop) {\n        $__default[\"default\"](this._backdrop).removeClass(CLASS_NAME_SHOW$4);\n\n        var callbackRemove = function callbackRemove() {\n          _this9._removeBackdrop();\n\n          if (callback) {\n            callback();\n          }\n        };\n\n        if ($__default[\"default\"](this._element).hasClass(CLASS_NAME_FADE$4)) {\n          var _backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);\n\n          $__default[\"default\"](this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration);\n        } else {\n          callbackRemove();\n        }\n      } else if (callback) {\n        callback();\n      }\n    } // ----------------------------------------------------------------------\n    // the following methods are used to handle overflowing modals\n    // todo (fat): these should probably be refactored out of modal.js\n    // ----------------------------------------------------------------------\n    ;\n\n    _proto._adjustDialog = function _adjustDialog() {\n      var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n      if (!this._isBodyOverflowing && isModalOverflowing) {\n        this._element.style.paddingLeft = this._scrollbarWidth + \"px\";\n      }\n\n      if (this._isBodyOverflowing && !isModalOverflowing) {\n        this._element.style.paddingRight = this._scrollbarWidth + \"px\";\n      }\n    };\n\n    _proto._resetAdjustments = function _resetAdjustments() {\n      this._element.style.paddingLeft = '';\n      this._element.style.paddingRight = '';\n    };\n\n    _proto._checkScrollbar = function _checkScrollbar() {\n      var rect = document.body.getBoundingClientRect();\n      this._isBodyOverflowing = Math.round(rect.left + rect.right) < window.innerWidth;\n      this._scrollbarWidth = this._getScrollbarWidth();\n    };\n\n    _proto._setScrollbar = function _setScrollbar() {\n      var _this10 = this;\n\n      if (this._isBodyOverflowing) {\n        // Note: DOMNode.style.paddingRight returns the actual value or '' if not set\n        //   while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set\n        var fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT));\n        var stickyContent = [].slice.call(document.querySelectorAll(SELECTOR_STICKY_CONTENT)); // Adjust fixed content padding\n\n        $__default[\"default\"](fixedContent).each(function (index, element) {\n          var actualPadding = element.style.paddingRight;\n          var calculatedPadding = $__default[\"default\"](element).css('padding-right');\n          $__default[\"default\"](element).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + _this10._scrollbarWidth + \"px\");\n        }); // Adjust sticky content margin\n\n        $__default[\"default\"](stickyContent).each(function (index, element) {\n          var actualMargin = element.style.marginRight;\n          var calculatedMargin = $__default[\"default\"](element).css('margin-right');\n          $__default[\"default\"](element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) - _this10._scrollbarWidth + \"px\");\n        }); // Adjust body padding\n\n        var actualPadding = document.body.style.paddingRight;\n        var calculatedPadding = $__default[\"default\"](document.body).css('padding-right');\n        $__default[\"default\"](document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + \"px\");\n      }\n\n      $__default[\"default\"](document.body).addClass(CLASS_NAME_OPEN);\n    };\n\n    _proto._resetScrollbar = function _resetScrollbar() {\n      // Restore fixed content padding\n      var fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT));\n      $__default[\"default\"](fixedContent).each(function (index, element) {\n        var padding = $__default[\"default\"](element).data('padding-right');\n        $__default[\"default\"](element).removeData('padding-right');\n        element.style.paddingRight = padding ? padding : '';\n      }); // Restore sticky content\n\n      var elements = [].slice.call(document.querySelectorAll(\"\" + SELECTOR_STICKY_CONTENT));\n      $__default[\"default\"](elements).each(function (index, element) {\n        var margin = $__default[\"default\"](element).data('margin-right');\n\n        if (typeof margin !== 'undefined') {\n          $__default[\"default\"](element).css('margin-right', margin).removeData('margin-right');\n        }\n      }); // Restore body padding\n\n      var padding = $__default[\"default\"](document.body).data('padding-right');\n      $__default[\"default\"](document.body).removeData('padding-right');\n      document.body.style.paddingRight = padding ? padding : '';\n    };\n\n    _proto._getScrollbarWidth = function _getScrollbarWidth() {\n      // thx d.walsh\n      var scrollDiv = document.createElement('div');\n      scrollDiv.className = CLASS_NAME_SCROLLBAR_MEASURER;\n      document.body.appendChild(scrollDiv);\n      var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;\n      document.body.removeChild(scrollDiv);\n      return scrollbarWidth;\n    } // Static\n    ;\n\n    Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) {\n      return this.each(function () {\n        var data = $__default[\"default\"](this).data(DATA_KEY$5);\n\n        var _config = _extends$1({}, Default$4, $__default[\"default\"](this).data(), typeof config === 'object' && config ? config : {});\n\n        if (!data) {\n          data = new Modal(this, _config);\n          $__default[\"default\"](this).data(DATA_KEY$5, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config](relatedTarget);\n        } else if (_config.show) {\n          data.show(relatedTarget);\n        }\n      });\n    };\n\n    _createClass(Modal, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$5;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$4;\n      }\n    }]);\n\n    return Modal;\n  }();\n  /**\n   * Data API implementation\n   */\n\n\n  $__default[\"default\"](document).on(EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {\n    var _this11 = this;\n\n    var target;\n    var selector = Util.getSelectorFromElement(this);\n\n    if (selector) {\n      target = document.querySelector(selector);\n    }\n\n    var config = $__default[\"default\"](target).data(DATA_KEY$5) ? 'toggle' : _extends$1({}, $__default[\"default\"](target).data(), $__default[\"default\"](this).data());\n\n    if (this.tagName === 'A' || this.tagName === 'AREA') {\n      event.preventDefault();\n    }\n\n    var $target = $__default[\"default\"](target).one(EVENT_SHOW$2, function (showEvent) {\n      if (showEvent.isDefaultPrevented()) {\n        // Only register focus restorer if modal will actually get shown\n        return;\n      }\n\n      $target.one(EVENT_HIDDEN$2, function () {\n        if ($__default[\"default\"](_this11).is(':visible')) {\n          _this11.focus();\n        }\n      });\n    });\n\n    Modal._jQueryInterface.call($__default[\"default\"](target), config, this);\n  });\n  /**\n   * jQuery\n   */\n\n  $__default[\"default\"].fn[NAME$5] = Modal._jQueryInterface;\n  $__default[\"default\"].fn[NAME$5].Constructor = Modal;\n\n  $__default[\"default\"].fn[NAME$5].noConflict = function () {\n    $__default[\"default\"].fn[NAME$5] = JQUERY_NO_CONFLICT$5;\n    return Modal._jQueryInterface;\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v4.6.2): tools/sanitizer.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  var uriAttrs = ['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href'];\n  var ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n  var DefaultWhitelist = {\n    // Global attributes allowed on any supplied element below.\n    '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n    a: ['target', 'href', 'title', 'rel'],\n    area: [],\n    b: [],\n    br: [],\n    col: [],\n    code: [],\n    div: [],\n    em: [],\n    hr: [],\n    h1: [],\n    h2: [],\n    h3: [],\n    h4: [],\n    h5: [],\n    h6: [],\n    i: [],\n    img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n    li: [],\n    ol: [],\n    p: [],\n    pre: [],\n    s: [],\n    small: [],\n    span: [],\n    sub: [],\n    sup: [],\n    strong: [],\n    u: [],\n    ul: []\n  };\n  /**\n   * A pattern that recognizes a commonly useful subset of URLs that are safe.\n   *\n   * Shoutout to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts\n   */\n\n  var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i;\n  /**\n   * A pattern that matches safe data URLs. Only matches image, video and audio types.\n   *\n   * Shoutout to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts\n   */\n\n  var DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i;\n\n  function allowedAttribute(attr, allowedAttributeList) {\n    var attrName = attr.nodeName.toLowerCase();\n\n    if (allowedAttributeList.indexOf(attrName) !== -1) {\n      if (uriAttrs.indexOf(attrName) !== -1) {\n        return Boolean(SAFE_URL_PATTERN.test(attr.nodeValue) || DATA_URL_PATTERN.test(attr.nodeValue));\n      }\n\n      return true;\n    }\n\n    var regExp = allowedAttributeList.filter(function (attrRegex) {\n      return attrRegex instanceof RegExp;\n    }); // Check if a regular expression validates the attribute.\n\n    for (var i = 0, len = regExp.length; i < len; i++) {\n      if (regExp[i].test(attrName)) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {\n    if (unsafeHtml.length === 0) {\n      return unsafeHtml;\n    }\n\n    if (sanitizeFn && typeof sanitizeFn === 'function') {\n      return sanitizeFn(unsafeHtml);\n    }\n\n    var domParser = new window.DOMParser();\n    var createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n    var whitelistKeys = Object.keys(whiteList);\n    var elements = [].slice.call(createdDocument.body.querySelectorAll('*'));\n\n    var _loop = function _loop(i, len) {\n      var el = elements[i];\n      var elName = el.nodeName.toLowerCase();\n\n      if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) {\n        el.parentNode.removeChild(el);\n        return \"continue\";\n      }\n\n      var attributeList = [].slice.call(el.attributes); // eslint-disable-next-line unicorn/prefer-spread\n\n      var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || []);\n      attributeList.forEach(function (attr) {\n        if (!allowedAttribute(attr, whitelistedAttributes)) {\n          el.removeAttribute(attr.nodeName);\n        }\n      });\n    };\n\n    for (var i = 0, len = elements.length; i < len; i++) {\n      var _ret = _loop(i);\n\n      if (_ret === \"continue\") continue;\n    }\n\n    return createdDocument.body.innerHTML;\n  }\n\n  /**\n   * Constants\n   */\n\n  var NAME$4 = 'tooltip';\n  var VERSION$4 = '4.6.2';\n  var DATA_KEY$4 = 'bs.tooltip';\n  var EVENT_KEY$4 = \".\" + DATA_KEY$4;\n  var JQUERY_NO_CONFLICT$4 = $__default[\"default\"].fn[NAME$4];\n  var CLASS_PREFIX$1 = 'bs-tooltip';\n  var BSCLS_PREFIX_REGEX$1 = new RegExp(\"(^|\\\\s)\" + CLASS_PREFIX$1 + \"\\\\S+\", 'g');\n  var DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn'];\n  var CLASS_NAME_FADE$3 = 'fade';\n  var CLASS_NAME_SHOW$3 = 'show';\n  var HOVER_STATE_SHOW = 'show';\n  var HOVER_STATE_OUT = 'out';\n  var SELECTOR_TOOLTIP_INNER = '.tooltip-inner';\n  var SELECTOR_ARROW = '.arrow';\n  var TRIGGER_HOVER = 'hover';\n  var TRIGGER_FOCUS = 'focus';\n  var TRIGGER_CLICK = 'click';\n  var TRIGGER_MANUAL = 'manual';\n  var AttachmentMap = {\n    AUTO: 'auto',\n    TOP: 'top',\n    RIGHT: 'right',\n    BOTTOM: 'bottom',\n    LEFT: 'left'\n  };\n  var Default$3 = {\n    animation: true,\n    template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"arrow\"></div>' + '<div class=\"tooltip-inner\"></div></div>',\n    trigger: 'hover focus',\n    title: '',\n    delay: 0,\n    html: false,\n    selector: false,\n    placement: 'top',\n    offset: 0,\n    container: false,\n    fallbackPlacement: 'flip',\n    boundary: 'scrollParent',\n    customClass: '',\n    sanitize: true,\n    sanitizeFn: null,\n    whiteList: DefaultWhitelist,\n    popperConfig: null\n  };\n  var DefaultType$3 = {\n    animation: 'boolean',\n    template: 'string',\n    title: '(string|element|function)',\n    trigger: 'string',\n    delay: '(number|object)',\n    html: 'boolean',\n    selector: '(string|boolean)',\n    placement: '(string|function)',\n    offset: '(number|string|function)',\n    container: '(string|element|boolean)',\n    fallbackPlacement: '(string|array)',\n    boundary: '(string|element)',\n    customClass: '(string|function)',\n    sanitize: 'boolean',\n    sanitizeFn: '(null|function)',\n    whiteList: 'object',\n    popperConfig: '(null|object)'\n  };\n  var Event$1 = {\n    HIDE: \"hide\" + EVENT_KEY$4,\n    HIDDEN: \"hidden\" + EVENT_KEY$4,\n    SHOW: \"show\" + EVENT_KEY$4,\n    SHOWN: \"shown\" + EVENT_KEY$4,\n    INSERTED: \"inserted\" + EVENT_KEY$4,\n    CLICK: \"click\" + EVENT_KEY$4,\n    FOCUSIN: \"focusin\" + EVENT_KEY$4,\n    FOCUSOUT: \"focusout\" + EVENT_KEY$4,\n    MOUSEENTER: \"mouseenter\" + EVENT_KEY$4,\n    MOUSELEAVE: \"mouseleave\" + EVENT_KEY$4\n  };\n  /**\n   * Class definition\n   */\n\n  var Tooltip = /*#__PURE__*/function () {\n    function Tooltip(element, config) {\n      if (typeof Popper$1 === 'undefined') {\n        throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)');\n      } // Private\n\n\n      this._isEnabled = true;\n      this._timeout = 0;\n      this._hoverState = '';\n      this._activeTrigger = {};\n      this._popper = null; // Protected\n\n      this.element = element;\n      this.config = this._getConfig(config);\n      this.tip = null;\n\n      this._setListeners();\n    } // Getters\n\n\n    var _proto = Tooltip.prototype;\n\n    // Public\n    _proto.enable = function enable() {\n      this._isEnabled = true;\n    };\n\n    _proto.disable = function disable() {\n      this._isEnabled = false;\n    };\n\n    _proto.toggleEnabled = function toggleEnabled() {\n      this._isEnabled = !this._isEnabled;\n    };\n\n    _proto.toggle = function toggle(event) {\n      if (!this._isEnabled) {\n        return;\n      }\n\n      if (event) {\n        var dataKey = this.constructor.DATA_KEY;\n        var context = $__default[\"default\"](event.currentTarget).data(dataKey);\n\n        if (!context) {\n          context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n          $__default[\"default\"](event.currentTarget).data(dataKey, context);\n        }\n\n        context._activeTrigger.click = !context._activeTrigger.click;\n\n        if (context._isWithActiveTrigger()) {\n          context._enter(null, context);\n        } else {\n          context._leave(null, context);\n        }\n      } else {\n        if ($__default[\"default\"](this.getTipElement()).hasClass(CLASS_NAME_SHOW$3)) {\n          this._leave(null, this);\n\n          return;\n        }\n\n        this._enter(null, this);\n      }\n    };\n\n    _proto.dispose = function dispose() {\n      clearTimeout(this._timeout);\n      $__default[\"default\"].removeData(this.element, this.constructor.DATA_KEY);\n      $__default[\"default\"](this.element).off(this.constructor.EVENT_KEY);\n      $__default[\"default\"](this.element).closest('.modal').off('hide.bs.modal', this._hideModalHandler);\n\n      if (this.tip) {\n        $__default[\"default\"](this.tip).remove();\n      }\n\n      this._isEnabled = null;\n      this._timeout = null;\n      this._hoverState = null;\n      this._activeTrigger = null;\n\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      this._popper = null;\n      this.element = null;\n      this.config = null;\n      this.tip = null;\n    };\n\n    _proto.show = function show() {\n      var _this = this;\n\n      if ($__default[\"default\"](this.element).css('display') === 'none') {\n        throw new Error('Please use show on visible elements');\n      }\n\n      var showEvent = $__default[\"default\"].Event(this.constructor.Event.SHOW);\n\n      if (this.isWithContent() && this._isEnabled) {\n        $__default[\"default\"](this.element).trigger(showEvent);\n        var shadowRoot = Util.findShadowRoot(this.element);\n        var isInTheDom = $__default[\"default\"].contains(shadowRoot !== null ? shadowRoot : this.element.ownerDocument.documentElement, this.element);\n\n        if (showEvent.isDefaultPrevented() || !isInTheDom) {\n          return;\n        }\n\n        var tip = this.getTipElement();\n        var tipId = Util.getUID(this.constructor.NAME);\n        tip.setAttribute('id', tipId);\n        this.element.setAttribute('aria-describedby', tipId);\n        this.setContent();\n\n        if (this.config.animation) {\n          $__default[\"default\"](tip).addClass(CLASS_NAME_FADE$3);\n        }\n\n        var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement;\n\n        var attachment = this._getAttachment(placement);\n\n        this.addAttachmentClass(attachment);\n\n        var container = this._getContainer();\n\n        $__default[\"default\"](tip).data(this.constructor.DATA_KEY, this);\n\n        if (!$__default[\"default\"].contains(this.element.ownerDocument.documentElement, this.tip)) {\n          $__default[\"default\"](tip).appendTo(container);\n        }\n\n        $__default[\"default\"](this.element).trigger(this.constructor.Event.INSERTED);\n        this._popper = new Popper$1(this.element, tip, this._getPopperConfig(attachment));\n        $__default[\"default\"](tip).addClass(CLASS_NAME_SHOW$3);\n        $__default[\"default\"](tip).addClass(this.config.customClass); // If this is a touch-enabled device we add extra\n        // empty mouseover listeners to the body's immediate children;\n        // only needed because of broken event delegation on iOS\n        // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n        if ('ontouchstart' in document.documentElement) {\n          $__default[\"default\"](document.body).children().on('mouseover', null, $__default[\"default\"].noop);\n        }\n\n        var complete = function complete() {\n          if (_this.config.animation) {\n            _this._fixTransition();\n          }\n\n          var prevHoverState = _this._hoverState;\n          _this._hoverState = null;\n          $__default[\"default\"](_this.element).trigger(_this.constructor.Event.SHOWN);\n\n          if (prevHoverState === HOVER_STATE_OUT) {\n            _this._leave(null, _this);\n          }\n        };\n\n        if ($__default[\"default\"](this.tip).hasClass(CLASS_NAME_FADE$3)) {\n          var transitionDuration = Util.getTransitionDurationFromElement(this.tip);\n          $__default[\"default\"](this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n        } else {\n          complete();\n        }\n      }\n    };\n\n    _proto.hide = function hide(callback) {\n      var _this2 = this;\n\n      var tip = this.getTipElement();\n      var hideEvent = $__default[\"default\"].Event(this.constructor.Event.HIDE);\n\n      var complete = function complete() {\n        if (_this2._hoverState !== HOVER_STATE_SHOW && tip.parentNode) {\n          tip.parentNode.removeChild(tip);\n        }\n\n        _this2._cleanTipClass();\n\n        _this2.element.removeAttribute('aria-describedby');\n\n        $__default[\"default\"](_this2.element).trigger(_this2.constructor.Event.HIDDEN);\n\n        if (_this2._popper !== null) {\n          _this2._popper.destroy();\n        }\n\n        if (callback) {\n          callback();\n        }\n      };\n\n      $__default[\"default\"](this.element).trigger(hideEvent);\n\n      if (hideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      $__default[\"default\"](tip).removeClass(CLASS_NAME_SHOW$3); // If this is a touch-enabled device we remove the extra\n      // empty mouseover listeners we added for iOS support\n\n      if ('ontouchstart' in document.documentElement) {\n        $__default[\"default\"](document.body).children().off('mouseover', null, $__default[\"default\"].noop);\n      }\n\n      this._activeTrigger[TRIGGER_CLICK] = false;\n      this._activeTrigger[TRIGGER_FOCUS] = false;\n      this._activeTrigger[TRIGGER_HOVER] = false;\n\n      if ($__default[\"default\"](this.tip).hasClass(CLASS_NAME_FADE$3)) {\n        var transitionDuration = Util.getTransitionDurationFromElement(tip);\n        $__default[\"default\"](tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n      } else {\n        complete();\n      }\n\n      this._hoverState = '';\n    };\n\n    _proto.update = function update() {\n      if (this._popper !== null) {\n        this._popper.scheduleUpdate();\n      }\n    } // Protected\n    ;\n\n    _proto.isWithContent = function isWithContent() {\n      return Boolean(this.getTitle());\n    };\n\n    _proto.addAttachmentClass = function addAttachmentClass(attachment) {\n      $__default[\"default\"](this.getTipElement()).addClass(CLASS_PREFIX$1 + \"-\" + attachment);\n    };\n\n    _proto.getTipElement = function getTipElement() {\n      this.tip = this.tip || $__default[\"default\"](this.config.template)[0];\n      return this.tip;\n    };\n\n    _proto.setContent = function setContent() {\n      var tip = this.getTipElement();\n      this.setElementContent($__default[\"default\"](tip.querySelectorAll(SELECTOR_TOOLTIP_INNER)), this.getTitle());\n      $__default[\"default\"](tip).removeClass(CLASS_NAME_FADE$3 + \" \" + CLASS_NAME_SHOW$3);\n    };\n\n    _proto.setElementContent = function setElementContent($element, content) {\n      if (typeof content === 'object' && (content.nodeType || content.jquery)) {\n        // Content is a DOM node or a jQuery\n        if (this.config.html) {\n          if (!$__default[\"default\"](content).parent().is($element)) {\n            $element.empty().append(content);\n          }\n        } else {\n          $element.text($__default[\"default\"](content).text());\n        }\n\n        return;\n      }\n\n      if (this.config.html) {\n        if (this.config.sanitize) {\n          content = sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn);\n        }\n\n        $element.html(content);\n      } else {\n        $element.text(content);\n      }\n    };\n\n    _proto.getTitle = function getTitle() {\n      var title = this.element.getAttribute('data-original-title');\n\n      if (!title) {\n        title = typeof this.config.title === 'function' ? this.config.title.call(this.element) : this.config.title;\n      }\n\n      return title;\n    } // Private\n    ;\n\n    _proto._getPopperConfig = function _getPopperConfig(attachment) {\n      var _this3 = this;\n\n      var defaultBsConfig = {\n        placement: attachment,\n        modifiers: {\n          offset: this._getOffset(),\n          flip: {\n            behavior: this.config.fallbackPlacement\n          },\n          arrow: {\n            element: SELECTOR_ARROW\n          },\n          preventOverflow: {\n            boundariesElement: this.config.boundary\n          }\n        },\n        onCreate: function onCreate(data) {\n          if (data.originalPlacement !== data.placement) {\n            _this3._handlePopperPlacementChange(data);\n          }\n        },\n        onUpdate: function onUpdate(data) {\n          return _this3._handlePopperPlacementChange(data);\n        }\n      };\n      return _extends$1({}, defaultBsConfig, this.config.popperConfig);\n    };\n\n    _proto._getOffset = function _getOffset() {\n      var _this4 = this;\n\n      var offset = {};\n\n      if (typeof this.config.offset === 'function') {\n        offset.fn = function (data) {\n          data.offsets = _extends$1({}, data.offsets, _this4.config.offset(data.offsets, _this4.element));\n          return data;\n        };\n      } else {\n        offset.offset = this.config.offset;\n      }\n\n      return offset;\n    };\n\n    _proto._getContainer = function _getContainer() {\n      if (this.config.container === false) {\n        return document.body;\n      }\n\n      if (Util.isElement(this.config.container)) {\n        return $__default[\"default\"](this.config.container);\n      }\n\n      return $__default[\"default\"](document).find(this.config.container);\n    };\n\n    _proto._getAttachment = function _getAttachment(placement) {\n      return AttachmentMap[placement.toUpperCase()];\n    };\n\n    _proto._setListeners = function _setListeners() {\n      var _this5 = this;\n\n      var triggers = this.config.trigger.split(' ');\n      triggers.forEach(function (trigger) {\n        if (trigger === 'click') {\n          $__default[\"default\"](_this5.element).on(_this5.constructor.Event.CLICK, _this5.config.selector, function (event) {\n            return _this5.toggle(event);\n          });\n        } else if (trigger !== TRIGGER_MANUAL) {\n          var eventIn = trigger === TRIGGER_HOVER ? _this5.constructor.Event.MOUSEENTER : _this5.constructor.Event.FOCUSIN;\n          var eventOut = trigger === TRIGGER_HOVER ? _this5.constructor.Event.MOUSELEAVE : _this5.constructor.Event.FOCUSOUT;\n          $__default[\"default\"](_this5.element).on(eventIn, _this5.config.selector, function (event) {\n            return _this5._enter(event);\n          }).on(eventOut, _this5.config.selector, function (event) {\n            return _this5._leave(event);\n          });\n        }\n      });\n\n      this._hideModalHandler = function () {\n        if (_this5.element) {\n          _this5.hide();\n        }\n      };\n\n      $__default[\"default\"](this.element).closest('.modal').on('hide.bs.modal', this._hideModalHandler);\n\n      if (this.config.selector) {\n        this.config = _extends$1({}, this.config, {\n          trigger: 'manual',\n          selector: ''\n        });\n      } else {\n        this._fixTitle();\n      }\n    };\n\n    _proto._fixTitle = function _fixTitle() {\n      var titleType = typeof this.element.getAttribute('data-original-title');\n\n      if (this.element.getAttribute('title') || titleType !== 'string') {\n        this.element.setAttribute('data-original-title', this.element.getAttribute('title') || '');\n        this.element.setAttribute('title', '');\n      }\n    };\n\n    _proto._enter = function _enter(event, context) {\n      var dataKey = this.constructor.DATA_KEY;\n      context = context || $__default[\"default\"](event.currentTarget).data(dataKey);\n\n      if (!context) {\n        context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n        $__default[\"default\"](event.currentTarget).data(dataKey, context);\n      }\n\n      if (event) {\n        context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;\n      }\n\n      if ($__default[\"default\"](context.getTipElement()).hasClass(CLASS_NAME_SHOW$3) || context._hoverState === HOVER_STATE_SHOW) {\n        context._hoverState = HOVER_STATE_SHOW;\n        return;\n      }\n\n      clearTimeout(context._timeout);\n      context._hoverState = HOVER_STATE_SHOW;\n\n      if (!context.config.delay || !context.config.delay.show) {\n        context.show();\n        return;\n      }\n\n      context._timeout = setTimeout(function () {\n        if (context._hoverState === HOVER_STATE_SHOW) {\n          context.show();\n        }\n      }, context.config.delay.show);\n    };\n\n    _proto._leave = function _leave(event, context) {\n      var dataKey = this.constructor.DATA_KEY;\n      context = context || $__default[\"default\"](event.currentTarget).data(dataKey);\n\n      if (!context) {\n        context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n        $__default[\"default\"](event.currentTarget).data(dataKey, context);\n      }\n\n      if (event) {\n        context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = false;\n      }\n\n      if (context._isWithActiveTrigger()) {\n        return;\n      }\n\n      clearTimeout(context._timeout);\n      context._hoverState = HOVER_STATE_OUT;\n\n      if (!context.config.delay || !context.config.delay.hide) {\n        context.hide();\n        return;\n      }\n\n      context._timeout = setTimeout(function () {\n        if (context._hoverState === HOVER_STATE_OUT) {\n          context.hide();\n        }\n      }, context.config.delay.hide);\n    };\n\n    _proto._isWithActiveTrigger = function _isWithActiveTrigger() {\n      for (var trigger in this._activeTrigger) {\n        if (this._activeTrigger[trigger]) {\n          return true;\n        }\n      }\n\n      return false;\n    };\n\n    _proto._getConfig = function _getConfig(config) {\n      var dataAttributes = $__default[\"default\"](this.element).data();\n      Object.keys(dataAttributes).forEach(function (dataAttr) {\n        if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) {\n          delete dataAttributes[dataAttr];\n        }\n      });\n      config = _extends$1({}, this.constructor.Default, dataAttributes, typeof config === 'object' && config ? config : {});\n\n      if (typeof config.delay === 'number') {\n        config.delay = {\n          show: config.delay,\n          hide: config.delay\n        };\n      }\n\n      if (typeof config.title === 'number') {\n        config.title = config.title.toString();\n      }\n\n      if (typeof config.content === 'number') {\n        config.content = config.content.toString();\n      }\n\n      Util.typeCheckConfig(NAME$4, config, this.constructor.DefaultType);\n\n      if (config.sanitize) {\n        config.template = sanitizeHtml(config.template, config.whiteList, config.sanitizeFn);\n      }\n\n      return config;\n    };\n\n    _proto._getDelegateConfig = function _getDelegateConfig() {\n      var config = {};\n\n      if (this.config) {\n        for (var key in this.config) {\n          if (this.constructor.Default[key] !== this.config[key]) {\n            config[key] = this.config[key];\n          }\n        }\n      }\n\n      return config;\n    };\n\n    _proto._cleanTipClass = function _cleanTipClass() {\n      var $tip = $__default[\"default\"](this.getTipElement());\n      var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX$1);\n\n      if (tabClass !== null && tabClass.length) {\n        $tip.removeClass(tabClass.join(''));\n      }\n    };\n\n    _proto._handlePopperPlacementChange = function _handlePopperPlacementChange(popperData) {\n      this.tip = popperData.instance.popper;\n\n      this._cleanTipClass();\n\n      this.addAttachmentClass(this._getAttachment(popperData.placement));\n    };\n\n    _proto._fixTransition = function _fixTransition() {\n      var tip = this.getTipElement();\n      var initConfigAnimation = this.config.animation;\n\n      if (tip.getAttribute('x-placement') !== null) {\n        return;\n      }\n\n      $__default[\"default\"](tip).removeClass(CLASS_NAME_FADE$3);\n      this.config.animation = false;\n      this.hide();\n      this.show();\n      this.config.animation = initConfigAnimation;\n    } // Static\n    ;\n\n    Tooltip._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var $element = $__default[\"default\"](this);\n        var data = $element.data(DATA_KEY$4);\n\n        var _config = typeof config === 'object' && config;\n\n        if (!data && /dispose|hide/.test(config)) {\n          return;\n        }\n\n        if (!data) {\n          data = new Tooltip(this, _config);\n          $element.data(DATA_KEY$4, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(Tooltip, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$4;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$3;\n      }\n    }, {\n      key: \"NAME\",\n      get: function get() {\n        return NAME$4;\n      }\n    }, {\n      key: \"DATA_KEY\",\n      get: function get() {\n        return DATA_KEY$4;\n      }\n    }, {\n      key: \"Event\",\n      get: function get() {\n        return Event$1;\n      }\n    }, {\n      key: \"EVENT_KEY\",\n      get: function get() {\n        return EVENT_KEY$4;\n      }\n    }, {\n      key: \"DefaultType\",\n      get: function get() {\n        return DefaultType$3;\n      }\n    }]);\n\n    return Tooltip;\n  }();\n  /**\n   * jQuery\n   */\n\n\n  $__default[\"default\"].fn[NAME$4] = Tooltip._jQueryInterface;\n  $__default[\"default\"].fn[NAME$4].Constructor = Tooltip;\n\n  $__default[\"default\"].fn[NAME$4].noConflict = function () {\n    $__default[\"default\"].fn[NAME$4] = JQUERY_NO_CONFLICT$4;\n    return Tooltip._jQueryInterface;\n  };\n\n  /**\n   * Constants\n   */\n\n  var NAME$3 = 'popover';\n  var VERSION$3 = '4.6.2';\n  var DATA_KEY$3 = 'bs.popover';\n  var EVENT_KEY$3 = \".\" + DATA_KEY$3;\n  var JQUERY_NO_CONFLICT$3 = $__default[\"default\"].fn[NAME$3];\n  var CLASS_PREFIX = 'bs-popover';\n  var BSCLS_PREFIX_REGEX = new RegExp(\"(^|\\\\s)\" + CLASS_PREFIX + \"\\\\S+\", 'g');\n  var CLASS_NAME_FADE$2 = 'fade';\n  var CLASS_NAME_SHOW$2 = 'show';\n  var SELECTOR_TITLE = '.popover-header';\n  var SELECTOR_CONTENT = '.popover-body';\n\n  var Default$2 = _extends$1({}, Tooltip.Default, {\n    placement: 'right',\n    trigger: 'click',\n    content: '',\n    template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div></div>'\n  });\n\n  var DefaultType$2 = _extends$1({}, Tooltip.DefaultType, {\n    content: '(string|element|function)'\n  });\n\n  var Event = {\n    HIDE: \"hide\" + EVENT_KEY$3,\n    HIDDEN: \"hidden\" + EVENT_KEY$3,\n    SHOW: \"show\" + EVENT_KEY$3,\n    SHOWN: \"shown\" + EVENT_KEY$3,\n    INSERTED: \"inserted\" + EVENT_KEY$3,\n    CLICK: \"click\" + EVENT_KEY$3,\n    FOCUSIN: \"focusin\" + EVENT_KEY$3,\n    FOCUSOUT: \"focusout\" + EVENT_KEY$3,\n    MOUSEENTER: \"mouseenter\" + EVENT_KEY$3,\n    MOUSELEAVE: \"mouseleave\" + EVENT_KEY$3\n  };\n  /**\n   * Class definition\n   */\n\n  var Popover = /*#__PURE__*/function (_Tooltip) {\n    _inheritsLoose(Popover, _Tooltip);\n\n    function Popover() {\n      return _Tooltip.apply(this, arguments) || this;\n    }\n\n    var _proto = Popover.prototype;\n\n    // Overrides\n    _proto.isWithContent = function isWithContent() {\n      return this.getTitle() || this._getContent();\n    };\n\n    _proto.addAttachmentClass = function addAttachmentClass(attachment) {\n      $__default[\"default\"](this.getTipElement()).addClass(CLASS_PREFIX + \"-\" + attachment);\n    };\n\n    _proto.getTipElement = function getTipElement() {\n      this.tip = this.tip || $__default[\"default\"](this.config.template)[0];\n      return this.tip;\n    };\n\n    _proto.setContent = function setContent() {\n      var $tip = $__default[\"default\"](this.getTipElement()); // We use append for html objects to maintain js events\n\n      this.setElementContent($tip.find(SELECTOR_TITLE), this.getTitle());\n\n      var content = this._getContent();\n\n      if (typeof content === 'function') {\n        content = content.call(this.element);\n      }\n\n      this.setElementContent($tip.find(SELECTOR_CONTENT), content);\n      $tip.removeClass(CLASS_NAME_FADE$2 + \" \" + CLASS_NAME_SHOW$2);\n    } // Private\n    ;\n\n    _proto._getContent = function _getContent() {\n      return this.element.getAttribute('data-content') || this.config.content;\n    };\n\n    _proto._cleanTipClass = function _cleanTipClass() {\n      var $tip = $__default[\"default\"](this.getTipElement());\n      var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX);\n\n      if (tabClass !== null && tabClass.length > 0) {\n        $tip.removeClass(tabClass.join(''));\n      }\n    } // Static\n    ;\n\n    Popover._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $__default[\"default\"](this).data(DATA_KEY$3);\n\n        var _config = typeof config === 'object' ? config : null;\n\n        if (!data && /dispose|hide/.test(config)) {\n          return;\n        }\n\n        if (!data) {\n          data = new Popover(this, _config);\n          $__default[\"default\"](this).data(DATA_KEY$3, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(Popover, null, [{\n      key: \"VERSION\",\n      get: // Getters\n      function get() {\n        return VERSION$3;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$2;\n      }\n    }, {\n      key: \"NAME\",\n      get: function get() {\n        return NAME$3;\n      }\n    }, {\n      key: \"DATA_KEY\",\n      get: function get() {\n        return DATA_KEY$3;\n      }\n    }, {\n      key: \"Event\",\n      get: function get() {\n        return Event;\n      }\n    }, {\n      key: \"EVENT_KEY\",\n      get: function get() {\n        return EVENT_KEY$3;\n      }\n    }, {\n      key: \"DefaultType\",\n      get: function get() {\n        return DefaultType$2;\n      }\n    }]);\n\n    return Popover;\n  }(Tooltip);\n  /**\n   * jQuery\n   */\n\n\n  $__default[\"default\"].fn[NAME$3] = Popover._jQueryInterface;\n  $__default[\"default\"].fn[NAME$3].Constructor = Popover;\n\n  $__default[\"default\"].fn[NAME$3].noConflict = function () {\n    $__default[\"default\"].fn[NAME$3] = JQUERY_NO_CONFLICT$3;\n    return Popover._jQueryInterface;\n  };\n\n  /**\n   * Constants\n   */\n\n  var NAME$2 = 'scrollspy';\n  var VERSION$2 = '4.6.2';\n  var DATA_KEY$2 = 'bs.scrollspy';\n  var EVENT_KEY$2 = \".\" + DATA_KEY$2;\n  var DATA_API_KEY$1 = '.data-api';\n  var JQUERY_NO_CONFLICT$2 = $__default[\"default\"].fn[NAME$2];\n  var CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\n  var CLASS_NAME_ACTIVE$1 = 'active';\n  var EVENT_ACTIVATE = \"activate\" + EVENT_KEY$2;\n  var EVENT_SCROLL = \"scroll\" + EVENT_KEY$2;\n  var EVENT_LOAD_DATA_API = \"load\" + EVENT_KEY$2 + DATA_API_KEY$1;\n  var METHOD_OFFSET = 'offset';\n  var METHOD_POSITION = 'position';\n  var SELECTOR_DATA_SPY = '[data-spy=\"scroll\"]';\n  var SELECTOR_NAV_LIST_GROUP$1 = '.nav, .list-group';\n  var SELECTOR_NAV_LINKS = '.nav-link';\n  var SELECTOR_NAV_ITEMS = '.nav-item';\n  var SELECTOR_LIST_ITEMS = '.list-group-item';\n  var SELECTOR_DROPDOWN$1 = '.dropdown';\n  var SELECTOR_DROPDOWN_ITEMS = '.dropdown-item';\n  var SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';\n  var Default$1 = {\n    offset: 10,\n    method: 'auto',\n    target: ''\n  };\n  var DefaultType$1 = {\n    offset: 'number',\n    method: 'string',\n    target: '(string|element)'\n  };\n  /**\n   * Class definition\n   */\n\n  var ScrollSpy = /*#__PURE__*/function () {\n    function ScrollSpy(element, config) {\n      var _this = this;\n\n      this._element = element;\n      this._scrollElement = element.tagName === 'BODY' ? window : element;\n      this._config = this._getConfig(config);\n      this._selector = this._config.target + \" \" + SELECTOR_NAV_LINKS + \",\" + (this._config.target + \" \" + SELECTOR_LIST_ITEMS + \",\") + (this._config.target + \" \" + SELECTOR_DROPDOWN_ITEMS);\n      this._offsets = [];\n      this._targets = [];\n      this._activeTarget = null;\n      this._scrollHeight = 0;\n      $__default[\"default\"](this._scrollElement).on(EVENT_SCROLL, function (event) {\n        return _this._process(event);\n      });\n      this.refresh();\n\n      this._process();\n    } // Getters\n\n\n    var _proto = ScrollSpy.prototype;\n\n    // Public\n    _proto.refresh = function refresh() {\n      var _this2 = this;\n\n      var autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION;\n      var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;\n      var offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0;\n      this._offsets = [];\n      this._targets = [];\n      this._scrollHeight = this._getScrollHeight();\n      var targets = [].slice.call(document.querySelectorAll(this._selector));\n      targets.map(function (element) {\n        var target;\n        var targetSelector = Util.getSelectorFromElement(element);\n\n        if (targetSelector) {\n          target = document.querySelector(targetSelector);\n        }\n\n        if (target) {\n          var targetBCR = target.getBoundingClientRect();\n\n          if (targetBCR.width || targetBCR.height) {\n            // TODO (fat): remove sketch reliance on jQuery position/offset\n            return [$__default[\"default\"](target)[offsetMethod]().top + offsetBase, targetSelector];\n          }\n        }\n\n        return null;\n      }).filter(Boolean).sort(function (a, b) {\n        return a[0] - b[0];\n      }).forEach(function (item) {\n        _this2._offsets.push(item[0]);\n\n        _this2._targets.push(item[1]);\n      });\n    };\n\n    _proto.dispose = function dispose() {\n      $__default[\"default\"].removeData(this._element, DATA_KEY$2);\n      $__default[\"default\"](this._scrollElement).off(EVENT_KEY$2);\n      this._element = null;\n      this._scrollElement = null;\n      this._config = null;\n      this._selector = null;\n      this._offsets = null;\n      this._targets = null;\n      this._activeTarget = null;\n      this._scrollHeight = null;\n    } // Private\n    ;\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _extends$1({}, Default$1, typeof config === 'object' && config ? config : {});\n\n      if (typeof config.target !== 'string' && Util.isElement(config.target)) {\n        var id = $__default[\"default\"](config.target).attr('id');\n\n        if (!id) {\n          id = Util.getUID(NAME$2);\n          $__default[\"default\"](config.target).attr('id', id);\n        }\n\n        config.target = \"#\" + id;\n      }\n\n      Util.typeCheckConfig(NAME$2, config, DefaultType$1);\n      return config;\n    };\n\n    _proto._getScrollTop = function _getScrollTop() {\n      return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;\n    };\n\n    _proto._getScrollHeight = function _getScrollHeight() {\n      return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);\n    };\n\n    _proto._getOffsetHeight = function _getOffsetHeight() {\n      return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;\n    };\n\n    _proto._process = function _process() {\n      var scrollTop = this._getScrollTop() + this._config.offset;\n\n      var scrollHeight = this._getScrollHeight();\n\n      var maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();\n\n      if (this._scrollHeight !== scrollHeight) {\n        this.refresh();\n      }\n\n      if (scrollTop >= maxScroll) {\n        var target = this._targets[this._targets.length - 1];\n\n        if (this._activeTarget !== target) {\n          this._activate(target);\n        }\n\n        return;\n      }\n\n      if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n        this._activeTarget = null;\n\n        this._clear();\n\n        return;\n      }\n\n      for (var i = this._offsets.length; i--;) {\n        var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);\n\n        if (isActiveTarget) {\n          this._activate(this._targets[i]);\n        }\n      }\n    };\n\n    _proto._activate = function _activate(target) {\n      this._activeTarget = target;\n\n      this._clear();\n\n      var queries = this._selector.split(',').map(function (selector) {\n        return selector + \"[data-target=\\\"\" + target + \"\\\"],\" + selector + \"[href=\\\"\" + target + \"\\\"]\";\n      });\n\n      var $link = $__default[\"default\"]([].slice.call(document.querySelectorAll(queries.join(','))));\n\n      if ($link.hasClass(CLASS_NAME_DROPDOWN_ITEM)) {\n        $link.closest(SELECTOR_DROPDOWN$1).find(SELECTOR_DROPDOWN_TOGGLE$1).addClass(CLASS_NAME_ACTIVE$1);\n        $link.addClass(CLASS_NAME_ACTIVE$1);\n      } else {\n        // Set triggered link as active\n        $link.addClass(CLASS_NAME_ACTIVE$1); // Set triggered links parents as active\n        // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n\n        $link.parents(SELECTOR_NAV_LIST_GROUP$1).prev(SELECTOR_NAV_LINKS + \", \" + SELECTOR_LIST_ITEMS).addClass(CLASS_NAME_ACTIVE$1); // Handle special case when .nav-link is inside .nav-item\n\n        $link.parents(SELECTOR_NAV_LIST_GROUP$1).prev(SELECTOR_NAV_ITEMS).children(SELECTOR_NAV_LINKS).addClass(CLASS_NAME_ACTIVE$1);\n      }\n\n      $__default[\"default\"](this._scrollElement).trigger(EVENT_ACTIVATE, {\n        relatedTarget: target\n      });\n    };\n\n    _proto._clear = function _clear() {\n      [].slice.call(document.querySelectorAll(this._selector)).filter(function (node) {\n        return node.classList.contains(CLASS_NAME_ACTIVE$1);\n      }).forEach(function (node) {\n        return node.classList.remove(CLASS_NAME_ACTIVE$1);\n      });\n    } // Static\n    ;\n\n    ScrollSpy._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $__default[\"default\"](this).data(DATA_KEY$2);\n\n        var _config = typeof config === 'object' && config;\n\n        if (!data) {\n          data = new ScrollSpy(this, _config);\n          $__default[\"default\"](this).data(DATA_KEY$2, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(ScrollSpy, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$2;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$1;\n      }\n    }]);\n\n    return ScrollSpy;\n  }();\n  /**\n   * Data API implementation\n   */\n\n\n  $__default[\"default\"](window).on(EVENT_LOAD_DATA_API, function () {\n    var scrollSpys = [].slice.call(document.querySelectorAll(SELECTOR_DATA_SPY));\n    var scrollSpysLength = scrollSpys.length;\n\n    for (var i = scrollSpysLength; i--;) {\n      var $spy = $__default[\"default\"](scrollSpys[i]);\n\n      ScrollSpy._jQueryInterface.call($spy, $spy.data());\n    }\n  });\n  /**\n   * jQuery\n   */\n\n  $__default[\"default\"].fn[NAME$2] = ScrollSpy._jQueryInterface;\n  $__default[\"default\"].fn[NAME$2].Constructor = ScrollSpy;\n\n  $__default[\"default\"].fn[NAME$2].noConflict = function () {\n    $__default[\"default\"].fn[NAME$2] = JQUERY_NO_CONFLICT$2;\n    return ScrollSpy._jQueryInterface;\n  };\n\n  /**\n   * Constants\n   */\n\n  var NAME$1 = 'tab';\n  var VERSION$1 = '4.6.2';\n  var DATA_KEY$1 = 'bs.tab';\n  var EVENT_KEY$1 = \".\" + DATA_KEY$1;\n  var DATA_API_KEY = '.data-api';\n  var JQUERY_NO_CONFLICT$1 = $__default[\"default\"].fn[NAME$1];\n  var CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu';\n  var CLASS_NAME_ACTIVE = 'active';\n  var CLASS_NAME_DISABLED = 'disabled';\n  var CLASS_NAME_FADE$1 = 'fade';\n  var CLASS_NAME_SHOW$1 = 'show';\n  var EVENT_HIDE$1 = \"hide\" + EVENT_KEY$1;\n  var EVENT_HIDDEN$1 = \"hidden\" + EVENT_KEY$1;\n  var EVENT_SHOW$1 = \"show\" + EVENT_KEY$1;\n  var EVENT_SHOWN$1 = \"shown\" + EVENT_KEY$1;\n  var EVENT_CLICK_DATA_API = \"click\" + EVENT_KEY$1 + DATA_API_KEY;\n  var SELECTOR_DROPDOWN = '.dropdown';\n  var SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';\n  var SELECTOR_ACTIVE = '.active';\n  var SELECTOR_ACTIVE_UL = '> li > .active';\n  var SELECTOR_DATA_TOGGLE = '[data-toggle=\"tab\"], [data-toggle=\"pill\"], [data-toggle=\"list\"]';\n  var SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';\n  var SELECTOR_DROPDOWN_ACTIVE_CHILD = '> .dropdown-menu .active';\n  /**\n   * Class definition\n   */\n\n  var Tab = /*#__PURE__*/function () {\n    function Tab(element) {\n      this._element = element;\n    } // Getters\n\n\n    var _proto = Tab.prototype;\n\n    // Public\n    _proto.show = function show() {\n      var _this = this;\n\n      if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $__default[\"default\"](this._element).hasClass(CLASS_NAME_ACTIVE) || $__default[\"default\"](this._element).hasClass(CLASS_NAME_DISABLED) || this._element.hasAttribute('disabled')) {\n        return;\n      }\n\n      var target;\n      var previous;\n      var listElement = $__default[\"default\"](this._element).closest(SELECTOR_NAV_LIST_GROUP)[0];\n      var selector = Util.getSelectorFromElement(this._element);\n\n      if (listElement) {\n        var itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE;\n        previous = $__default[\"default\"].makeArray($__default[\"default\"](listElement).find(itemSelector));\n        previous = previous[previous.length - 1];\n      }\n\n      var hideEvent = $__default[\"default\"].Event(EVENT_HIDE$1, {\n        relatedTarget: this._element\n      });\n      var showEvent = $__default[\"default\"].Event(EVENT_SHOW$1, {\n        relatedTarget: previous\n      });\n\n      if (previous) {\n        $__default[\"default\"](previous).trigger(hideEvent);\n      }\n\n      $__default[\"default\"](this._element).trigger(showEvent);\n\n      if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      if (selector) {\n        target = document.querySelector(selector);\n      }\n\n      this._activate(this._element, listElement);\n\n      var complete = function complete() {\n        var hiddenEvent = $__default[\"default\"].Event(EVENT_HIDDEN$1, {\n          relatedTarget: _this._element\n        });\n        var shownEvent = $__default[\"default\"].Event(EVENT_SHOWN$1, {\n          relatedTarget: previous\n        });\n        $__default[\"default\"](previous).trigger(hiddenEvent);\n        $__default[\"default\"](_this._element).trigger(shownEvent);\n      };\n\n      if (target) {\n        this._activate(target, target.parentNode, complete);\n      } else {\n        complete();\n      }\n    };\n\n    _proto.dispose = function dispose() {\n      $__default[\"default\"].removeData(this._element, DATA_KEY$1);\n      this._element = null;\n    } // Private\n    ;\n\n    _proto._activate = function _activate(element, container, callback) {\n      var _this2 = this;\n\n      var activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? $__default[\"default\"](container).find(SELECTOR_ACTIVE_UL) : $__default[\"default\"](container).children(SELECTOR_ACTIVE);\n      var active = activeElements[0];\n      var isTransitioning = callback && active && $__default[\"default\"](active).hasClass(CLASS_NAME_FADE$1);\n\n      var complete = function complete() {\n        return _this2._transitionComplete(element, active, callback);\n      };\n\n      if (active && isTransitioning) {\n        var transitionDuration = Util.getTransitionDurationFromElement(active);\n        $__default[\"default\"](active).removeClass(CLASS_NAME_SHOW$1).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n      } else {\n        complete();\n      }\n    };\n\n    _proto._transitionComplete = function _transitionComplete(element, active, callback) {\n      if (active) {\n        $__default[\"default\"](active).removeClass(CLASS_NAME_ACTIVE);\n        var dropdownChild = $__default[\"default\"](active.parentNode).find(SELECTOR_DROPDOWN_ACTIVE_CHILD)[0];\n\n        if (dropdownChild) {\n          $__default[\"default\"](dropdownChild).removeClass(CLASS_NAME_ACTIVE);\n        }\n\n        if (active.getAttribute('role') === 'tab') {\n          active.setAttribute('aria-selected', false);\n        }\n      }\n\n      $__default[\"default\"](element).addClass(CLASS_NAME_ACTIVE);\n\n      if (element.getAttribute('role') === 'tab') {\n        element.setAttribute('aria-selected', true);\n      }\n\n      Util.reflow(element);\n\n      if (element.classList.contains(CLASS_NAME_FADE$1)) {\n        element.classList.add(CLASS_NAME_SHOW$1);\n      }\n\n      var parent = element.parentNode;\n\n      if (parent && parent.nodeName === 'LI') {\n        parent = parent.parentNode;\n      }\n\n      if (parent && $__default[\"default\"](parent).hasClass(CLASS_NAME_DROPDOWN_MENU)) {\n        var dropdownElement = $__default[\"default\"](element).closest(SELECTOR_DROPDOWN)[0];\n\n        if (dropdownElement) {\n          var dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(SELECTOR_DROPDOWN_TOGGLE));\n          $__default[\"default\"](dropdownToggleList).addClass(CLASS_NAME_ACTIVE);\n        }\n\n        element.setAttribute('aria-expanded', true);\n      }\n\n      if (callback) {\n        callback();\n      }\n    } // Static\n    ;\n\n    Tab._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var $this = $__default[\"default\"](this);\n        var data = $this.data(DATA_KEY$1);\n\n        if (!data) {\n          data = new Tab(this);\n          $this.data(DATA_KEY$1, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(Tab, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$1;\n      }\n    }]);\n\n    return Tab;\n  }();\n  /**\n   * Data API implementation\n   */\n\n\n  $__default[\"default\"](document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n    event.preventDefault();\n\n    Tab._jQueryInterface.call($__default[\"default\"](this), 'show');\n  });\n  /**\n   * jQuery\n   */\n\n  $__default[\"default\"].fn[NAME$1] = Tab._jQueryInterface;\n  $__default[\"default\"].fn[NAME$1].Constructor = Tab;\n\n  $__default[\"default\"].fn[NAME$1].noConflict = function () {\n    $__default[\"default\"].fn[NAME$1] = JQUERY_NO_CONFLICT$1;\n    return Tab._jQueryInterface;\n  };\n\n  /**\n   * Constants\n   */\n\n  var NAME = 'toast';\n  var VERSION = '4.6.2';\n  var DATA_KEY = 'bs.toast';\n  var EVENT_KEY = \".\" + DATA_KEY;\n  var JQUERY_NO_CONFLICT = $__default[\"default\"].fn[NAME];\n  var CLASS_NAME_FADE = 'fade';\n  var CLASS_NAME_HIDE = 'hide';\n  var CLASS_NAME_SHOW = 'show';\n  var CLASS_NAME_SHOWING = 'showing';\n  var EVENT_CLICK_DISMISS = \"click.dismiss\" + EVENT_KEY;\n  var EVENT_HIDE = \"hide\" + EVENT_KEY;\n  var EVENT_HIDDEN = \"hidden\" + EVENT_KEY;\n  var EVENT_SHOW = \"show\" + EVENT_KEY;\n  var EVENT_SHOWN = \"shown\" + EVENT_KEY;\n  var SELECTOR_DATA_DISMISS = '[data-dismiss=\"toast\"]';\n  var Default = {\n    animation: true,\n    autohide: true,\n    delay: 500\n  };\n  var DefaultType = {\n    animation: 'boolean',\n    autohide: 'boolean',\n    delay: 'number'\n  };\n  /**\n   * Class definition\n   */\n\n  var Toast = /*#__PURE__*/function () {\n    function Toast(element, config) {\n      this._element = element;\n      this._config = this._getConfig(config);\n      this._timeout = null;\n\n      this._setListeners();\n    } // Getters\n\n\n    var _proto = Toast.prototype;\n\n    // Public\n    _proto.show = function show() {\n      var _this = this;\n\n      var showEvent = $__default[\"default\"].Event(EVENT_SHOW);\n      $__default[\"default\"](this._element).trigger(showEvent);\n\n      if (showEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      this._clearTimeout();\n\n      if (this._config.animation) {\n        this._element.classList.add(CLASS_NAME_FADE);\n      }\n\n      var complete = function complete() {\n        _this._element.classList.remove(CLASS_NAME_SHOWING);\n\n        _this._element.classList.add(CLASS_NAME_SHOW);\n\n        $__default[\"default\"](_this._element).trigger(EVENT_SHOWN);\n\n        if (_this._config.autohide) {\n          _this._timeout = setTimeout(function () {\n            _this.hide();\n          }, _this._config.delay);\n        }\n      };\n\n      this._element.classList.remove(CLASS_NAME_HIDE);\n\n      Util.reflow(this._element);\n\n      this._element.classList.add(CLASS_NAME_SHOWING);\n\n      if (this._config.animation) {\n        var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n        $__default[\"default\"](this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n      } else {\n        complete();\n      }\n    };\n\n    _proto.hide = function hide() {\n      if (!this._element.classList.contains(CLASS_NAME_SHOW)) {\n        return;\n      }\n\n      var hideEvent = $__default[\"default\"].Event(EVENT_HIDE);\n      $__default[\"default\"](this._element).trigger(hideEvent);\n\n      if (hideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      this._close();\n    };\n\n    _proto.dispose = function dispose() {\n      this._clearTimeout();\n\n      if (this._element.classList.contains(CLASS_NAME_SHOW)) {\n        this._element.classList.remove(CLASS_NAME_SHOW);\n      }\n\n      $__default[\"default\"](this._element).off(EVENT_CLICK_DISMISS);\n      $__default[\"default\"].removeData(this._element, DATA_KEY);\n      this._element = null;\n      this._config = null;\n    } // Private\n    ;\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _extends$1({}, Default, $__default[\"default\"](this._element).data(), typeof config === 'object' && config ? config : {});\n      Util.typeCheckConfig(NAME, config, this.constructor.DefaultType);\n      return config;\n    };\n\n    _proto._setListeners = function _setListeners() {\n      var _this2 = this;\n\n      $__default[\"default\"](this._element).on(EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, function () {\n        return _this2.hide();\n      });\n    };\n\n    _proto._close = function _close() {\n      var _this3 = this;\n\n      var complete = function complete() {\n        _this3._element.classList.add(CLASS_NAME_HIDE);\n\n        $__default[\"default\"](_this3._element).trigger(EVENT_HIDDEN);\n      };\n\n      this._element.classList.remove(CLASS_NAME_SHOW);\n\n      if (this._config.animation) {\n        var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n        $__default[\"default\"](this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n      } else {\n        complete();\n      }\n    };\n\n    _proto._clearTimeout = function _clearTimeout() {\n      clearTimeout(this._timeout);\n      this._timeout = null;\n    } // Static\n    ;\n\n    Toast._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var $element = $__default[\"default\"](this);\n        var data = $element.data(DATA_KEY);\n\n        var _config = typeof config === 'object' && config;\n\n        if (!data) {\n          data = new Toast(this, _config);\n          $element.data(DATA_KEY, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config](this);\n        }\n      });\n    };\n\n    _createClass(Toast, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION;\n      }\n    }, {\n      key: \"DefaultType\",\n      get: function get() {\n        return DefaultType;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default;\n      }\n    }]);\n\n    return Toast;\n  }();\n  /**\n   * jQuery\n   */\n\n\n  $__default[\"default\"].fn[NAME] = Toast._jQueryInterface;\n  $__default[\"default\"].fn[NAME].Constructor = Toast;\n\n  $__default[\"default\"].fn[NAME].noConflict = function () {\n    $__default[\"default\"].fn[NAME] = JQUERY_NO_CONFLICT;\n    return Toast._jQueryInterface;\n  };\n\n  exports.Alert = Alert;\n  exports.Button = Button;\n  exports.Carousel = Carousel;\n  exports.Collapse = Collapse;\n  exports.Dropdown = Dropdown;\n  exports.Modal = Modal;\n  exports.Popover = Popover;\n  exports.Scrollspy = ScrollSpy;\n  exports.Tab = Tab;\n  exports.Toast = Toast;\n  exports.Tooltip = Tooltip;\n  exports.Util = Util;\n\n  Object.defineProperty(exports, '__esModule', { value: true });\n\n}));\n//# sourceMappingURL=bootstrap.bundle.js.map\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.2): util.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\n\n/**\n * Private TransitionEnd Helpers\n */\n\nconst TRANSITION_END = 'transitionend'\nconst MAX_UID = 1000000\nconst MILLISECONDS_MULTIPLIER = 1000\n\n// Shoutout AngusCroll (https://goo.gl/pxwQGp)\nfunction toType(obj) {\n  if (obj === null || typeof obj === 'undefined') {\n    return `${obj}`\n  }\n\n  return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase()\n}\n\nfunction getSpecialTransitionEndEvent() {\n  return {\n    bindType: TRANSITION_END,\n    delegateType: TRANSITION_END,\n    handle(event) {\n      if ($(event.target).is(this)) {\n        return event.handleObj.handler.apply(this, arguments) // eslint-disable-line prefer-rest-params\n      }\n\n      return undefined\n    }\n  }\n}\n\nfunction transitionEndEmulator(duration) {\n  let called = false\n\n  $(this).one(Util.TRANSITION_END, () => {\n    called = true\n  })\n\n  setTimeout(() => {\n    if (!called) {\n      Util.triggerTransitionEnd(this)\n    }\n  }, duration)\n\n  return this\n}\n\nfunction setTransitionEndSupport() {\n  $.fn.emulateTransitionEnd = transitionEndEmulator\n  $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent()\n}\n\n/**\n * Public Util API\n */\n\nconst Util = {\n  TRANSITION_END: 'bsTransitionEnd',\n\n  getUID(prefix) {\n    do {\n      // eslint-disable-next-line no-bitwise\n      prefix += ~~(Math.random() * MAX_UID) // \"~~\" acts like a faster Math.floor() here\n    } while (document.getElementById(prefix))\n\n    return prefix\n  },\n\n  getSelectorFromElement(element) {\n    let selector = element.getAttribute('data-target')\n\n    if (!selector || selector === '#') {\n      const hrefAttr = element.getAttribute('href')\n      selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : ''\n    }\n\n    try {\n      return document.querySelector(selector) ? selector : null\n    } catch (_) {\n      return null\n    }\n  },\n\n  getTransitionDurationFromElement(element) {\n    if (!element) {\n      return 0\n    }\n\n    // Get transition-duration of the element\n    let transitionDuration = $(element).css('transition-duration')\n    let transitionDelay = $(element).css('transition-delay')\n\n    const floatTransitionDuration = parseFloat(transitionDuration)\n    const floatTransitionDelay = parseFloat(transitionDelay)\n\n    // Return 0 if element or transition duration is not found\n    if (!floatTransitionDuration && !floatTransitionDelay) {\n      return 0\n    }\n\n    // If multiple durations are defined, take the first\n    transitionDuration = transitionDuration.split(',')[0]\n    transitionDelay = transitionDelay.split(',')[0]\n\n    return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER\n  },\n\n  reflow(element) {\n    return element.offsetHeight\n  },\n\n  triggerTransitionEnd(element) {\n    $(element).trigger(TRANSITION_END)\n  },\n\n  supportsTransitionEnd() {\n    return Boolean(TRANSITION_END)\n  },\n\n  isElement(obj) {\n    return (obj[0] || obj).nodeType\n  },\n\n  typeCheckConfig(componentName, config, configTypes) {\n    for (const property in configTypes) {\n      if (Object.prototype.hasOwnProperty.call(configTypes, property)) {\n        const expectedTypes = configTypes[property]\n        const value = config[property]\n        const valueType = value && Util.isElement(value) ?\n          'element' : toType(value)\n\n        if (!new RegExp(expectedTypes).test(valueType)) {\n          throw new Error(\n            `${componentName.toUpperCase()}: ` +\n            `Option \"${property}\" provided type \"${valueType}\" ` +\n            `but expected type \"${expectedTypes}\".`)\n        }\n      }\n    }\n  },\n\n  findShadowRoot(element) {\n    if (!document.documentElement.attachShadow) {\n      return null\n    }\n\n    // Can find the shadow root otherwise it'll return the document\n    if (typeof element.getRootNode === 'function') {\n      const root = element.getRootNode()\n      return root instanceof ShadowRoot ? root : null\n    }\n\n    if (element instanceof ShadowRoot) {\n      return element\n    }\n\n    // when we don't find a shadow root\n    if (!element.parentNode) {\n      return null\n    }\n\n    return Util.findShadowRoot(element.parentNode)\n  },\n\n  jQueryDetection() {\n    if (typeof $ === 'undefined') {\n      throw new TypeError('Bootstrap\\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\\'s JavaScript.')\n    }\n\n    const version = $.fn.jquery.split(' ')[0].split('.')\n    const minMajor = 1\n    const ltMajor = 2\n    const minMinor = 9\n    const minPatch = 1\n    const maxMajor = 4\n\n    if (version[0] < ltMajor && version[1] < minMinor || version[0] === minMajor && version[1] === minMinor && version[2] < minPatch || version[0] >= maxMajor) {\n      throw new Error('Bootstrap\\'s JavaScript requires at least jQuery v1.9.1 but less than v4.0.0')\n    }\n  }\n}\n\nUtil.jQueryDetection()\nsetTransitionEndSupport()\n\nexport default Util\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.2): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * Constants\n */\n\nconst NAME = 'alert'\nconst VERSION = '4.6.2'\nconst DATA_KEY = 'bs.alert'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst CLASS_NAME_ALERT = 'alert'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\nconst EVENT_CLOSE = `close${EVENT_KEY}`\nconst EVENT_CLOSED = `closed${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst SELECTOR_DISMISS = '[data-dismiss=\"alert\"]'\n\n/**\n * Class definition\n */\n\nclass Alert {\n  constructor(element) {\n    this._element = element\n  }\n\n  // Getters\n  static get VERSION() {\n    return VERSION\n  }\n\n  // Public\n  close(element) {\n    let rootElement = this._element\n    if (element) {\n      rootElement = this._getRootElement(element)\n    }\n\n    const customEvent = this._triggerCloseEvent(rootElement)\n\n    if (customEvent.isDefaultPrevented()) {\n      return\n    }\n\n    this._removeElement(rootElement)\n  }\n\n  dispose() {\n    $.removeData(this._element, DATA_KEY)\n    this._element = null\n  }\n\n  // Private\n  _getRootElement(element) {\n    const selector = Util.getSelectorFromElement(element)\n    let parent = false\n\n    if (selector) {\n      parent = document.querySelector(selector)\n    }\n\n    if (!parent) {\n      parent = $(element).closest(`.${CLASS_NAME_ALERT}`)[0]\n    }\n\n    return parent\n  }\n\n  _triggerCloseEvent(element) {\n    const closeEvent = $.Event(EVENT_CLOSE)\n\n    $(element).trigger(closeEvent)\n    return closeEvent\n  }\n\n  _removeElement(element) {\n    $(element).removeClass(CLASS_NAME_SHOW)\n\n    if (!$(element).hasClass(CLASS_NAME_FADE)) {\n      this._destroyElement(element)\n      return\n    }\n\n    const transitionDuration = Util.getTransitionDurationFromElement(element)\n\n    $(element)\n      .one(Util.TRANSITION_END, event => this._destroyElement(element, event))\n      .emulateTransitionEnd(transitionDuration)\n  }\n\n  _destroyElement(element) {\n    $(element)\n      .detach()\n      .trigger(EVENT_CLOSED)\n      .remove()\n  }\n\n  // Static\n  static _jQueryInterface(config) {\n    return this.each(function () {\n      const $element = $(this)\n      let data = $element.data(DATA_KEY)\n\n      if (!data) {\n        data = new Alert(this)\n        $element.data(DATA_KEY, data)\n      }\n\n      if (config === 'close') {\n        data[config](this)\n      }\n    })\n  }\n\n  static _handleDismiss(alertInstance) {\n    return function (event) {\n      if (event) {\n        event.preventDefault()\n      }\n\n      alertInstance.close(this)\n    }\n  }\n}\n\n/**\n * Data API implementation\n */\n\n$(document).on(\n  EVENT_CLICK_DATA_API,\n  SELECTOR_DISMISS,\n  Alert._handleDismiss(new Alert())\n)\n\n/**\n * jQuery\n */\n\n$.fn[NAME] = Alert._jQueryInterface\n$.fn[NAME].Constructor = Alert\n$.fn[NAME].noConflict = () => {\n  $.fn[NAME] = JQUERY_NO_CONFLICT\n  return Alert._jQueryInterface\n}\n\nexport default Alert\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.2): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\n\n/**\n * Constants\n */\n\nconst NAME = 'button'\nconst VERSION = '4.6.2'\nconst DATA_KEY = 'bs.button'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_BUTTON = 'btn'\nconst CLASS_NAME_FOCUS = 'focus'\n\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_FOCUS_BLUR_DATA_API = `focus${EVENT_KEY}${DATA_API_KEY} ` +\n                          `blur${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\n\nconst SELECTOR_DATA_TOGGLE_CARROT = '[data-toggle^=\"button\"]'\nconst SELECTOR_DATA_TOGGLES = '[data-toggle=\"buttons\"]'\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"button\"]'\nconst SELECTOR_DATA_TOGGLES_BUTTONS = '[data-toggle=\"buttons\"] .btn'\nconst SELECTOR_INPUT = 'input:not([type=\"hidden\"])'\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_BUTTON = '.btn'\n\n/**\n * Class definition\n */\n\nclass Button {\n  constructor(element) {\n    this._element = element\n    this.shouldAvoidTriggerChange = false\n  }\n\n  // Getters\n  static get VERSION() {\n    return VERSION\n  }\n\n  // Public\n  toggle() {\n    let triggerChangeEvent = true\n    let addAriaPressed = true\n    const rootElement = $(this._element).closest(SELECTOR_DATA_TOGGLES)[0]\n\n    if (rootElement) {\n      const input = this._element.querySelector(SELECTOR_INPUT)\n\n      if (input) {\n        if (input.type === 'radio') {\n          if (input.checked && this._element.classList.contains(CLASS_NAME_ACTIVE)) {\n            triggerChangeEvent = false\n          } else {\n            const activeElement = rootElement.querySelector(SELECTOR_ACTIVE)\n\n            if (activeElement) {\n              $(activeElement).removeClass(CLASS_NAME_ACTIVE)\n            }\n          }\n        }\n\n        if (triggerChangeEvent) {\n          // if it's not a radio button or checkbox don't add a pointless/invalid checked property to the input\n          if (input.type === 'checkbox' || input.type === 'radio') {\n            input.checked = !this._element.classList.contains(CLASS_NAME_ACTIVE)\n          }\n\n          if (!this.shouldAvoidTriggerChange) {\n            $(input).trigger('change')\n          }\n        }\n\n        input.focus()\n        addAriaPressed = false\n      }\n    }\n\n    if (!(this._element.hasAttribute('disabled') || this._element.classList.contains('disabled'))) {\n      if (addAriaPressed) {\n        this._element.setAttribute('aria-pressed', !this._element.classList.contains(CLASS_NAME_ACTIVE))\n      }\n\n      if (triggerChangeEvent) {\n        $(this._element).toggleClass(CLASS_NAME_ACTIVE)\n      }\n    }\n  }\n\n  dispose() {\n    $.removeData(this._element, DATA_KEY)\n    this._element = null\n  }\n\n  // Static\n  static _jQueryInterface(config, avoidTriggerChange) {\n    return this.each(function () {\n      const $element = $(this)\n      let data = $element.data(DATA_KEY)\n\n      if (!data) {\n        data = new Button(this)\n        $element.data(DATA_KEY, data)\n      }\n\n      data.shouldAvoidTriggerChange = avoidTriggerChange\n\n      if (config === 'toggle') {\n        data[config]()\n      }\n    })\n  }\n}\n\n/**\n * Data API implementation\n */\n\n$(document)\n  .on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE_CARROT, event => {\n    let button = event.target\n    const initialButton = button\n\n    if (!$(button).hasClass(CLASS_NAME_BUTTON)) {\n      button = $(button).closest(SELECTOR_BUTTON)[0]\n    }\n\n    if (!button || button.hasAttribute('disabled') || button.classList.contains('disabled')) {\n      event.preventDefault() // work around Firefox bug #1540995\n    } else {\n      const inputBtn = button.querySelector(SELECTOR_INPUT)\n\n      if (inputBtn && (inputBtn.hasAttribute('disabled') || inputBtn.classList.contains('disabled'))) {\n        event.preventDefault() // work around Firefox bug #1540995\n        return\n      }\n\n      if (initialButton.tagName === 'INPUT' || button.tagName !== 'LABEL') {\n        Button._jQueryInterface.call($(button), 'toggle', initialButton.tagName === 'INPUT')\n      }\n    }\n  })\n  .on(EVENT_FOCUS_BLUR_DATA_API, SELECTOR_DATA_TOGGLE_CARROT, event => {\n    const button = $(event.target).closest(SELECTOR_BUTTON)[0]\n    $(button).toggleClass(CLASS_NAME_FOCUS, /^focus(in)?$/.test(event.type))\n  })\n\n$(window).on(EVENT_LOAD_DATA_API, () => {\n  // ensure correct active class is set to match the controls' actual values/states\n\n  // find all checkboxes/readio buttons inside data-toggle groups\n  let buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLES_BUTTONS))\n  for (let i = 0, len = buttons.length; i < len; i++) {\n    const button = buttons[i]\n    const input = button.querySelector(SELECTOR_INPUT)\n    if (input.checked || input.hasAttribute('checked')) {\n      button.classList.add(CLASS_NAME_ACTIVE)\n    } else {\n      button.classList.remove(CLASS_NAME_ACTIVE)\n    }\n  }\n\n  // find all button toggles\n  buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE))\n  for (let i = 0, len = buttons.length; i < len; i++) {\n    const button = buttons[i]\n    if (button.getAttribute('aria-pressed') === 'true') {\n      button.classList.add(CLASS_NAME_ACTIVE)\n    } else {\n      button.classList.remove(CLASS_NAME_ACTIVE)\n    }\n  }\n})\n\n/**\n * jQuery\n */\n\n$.fn[NAME] = Button._jQueryInterface\n$.fn[NAME].Constructor = Button\n$.fn[NAME].noConflict = () => {\n  $.fn[NAME] = JQUERY_NO_CONFLICT\n  return Button._jQueryInterface\n}\n\nexport default Button\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.2): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * Constants\n */\n\nconst NAME = 'carousel'\nconst VERSION = '4.6.2'\nconst DATA_KEY = 'bs.carousel'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst ARROW_LEFT_KEYCODE = 37 // KeyboardEvent.which value for left arrow key\nconst ARROW_RIGHT_KEYCODE = 39 // KeyboardEvent.which value for right arrow key\nconst TOUCHEVENT_COMPAT_WAIT = 500 // Time for mouse compat events to fire after touch\nconst SWIPE_THRESHOLD = 40\n\nconst CLASS_NAME_CAROUSEL = 'carousel'\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_SLIDE = 'slide'\nconst CLASS_NAME_RIGHT = 'carousel-item-right'\nconst CLASS_NAME_LEFT = 'carousel-item-left'\nconst CLASS_NAME_NEXT = 'carousel-item-next'\nconst CLASS_NAME_PREV = 'carousel-item-prev'\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event'\n\nconst DIRECTION_NEXT = 'next'\nconst DIRECTION_PREV = 'prev'\nconst DIRECTION_LEFT = 'left'\nconst DIRECTION_RIGHT = 'right'\n\nconst EVENT_SLIDE = `slide${EVENT_KEY}`\nconst EVENT_SLID = `slid${EVENT_KEY}`\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`\nconst EVENT_MOUSEENTER = `mouseenter${EVENT_KEY}`\nconst EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY}`\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY}`\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY}`\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY}`\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY}`\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY}`\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_ACTIVE_ITEM = '.active.carousel-item'\nconst SELECTOR_ITEM = '.carousel-item'\nconst SELECTOR_ITEM_IMG = '.carousel-item img'\nconst SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev'\nconst SELECTOR_INDICATORS = '.carousel-indicators'\nconst SELECTOR_DATA_SLIDE = '[data-slide], [data-slide-to]'\nconst SELECTOR_DATA_RIDE = '[data-ride=\"carousel\"]'\n\nconst Default = {\n  interval: 5000,\n  keyboard: true,\n  slide: false,\n  pause: 'hover',\n  wrap: true,\n  touch: true\n}\n\nconst DefaultType = {\n  interval: '(number|boolean)',\n  keyboard: 'boolean',\n  slide: '(boolean|string)',\n  pause: '(string|boolean)',\n  wrap: 'boolean',\n  touch: 'boolean'\n}\n\nconst PointerType = {\n  TOUCH: 'touch',\n  PEN: 'pen'\n}\n\n/**\n * Class definition\n */\n\nclass Carousel {\n  constructor(element, config) {\n    this._items = null\n    this._interval = null\n    this._activeElement = null\n    this._isPaused = false\n    this._isSliding = false\n    this.touchTimeout = null\n    this.touchStartX = 0\n    this.touchDeltaX = 0\n\n    this._config = this._getConfig(config)\n    this._element = element\n    this._indicatorsElement = this._element.querySelector(SELECTOR_INDICATORS)\n    this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0\n    this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent)\n\n    this._addEventListeners()\n  }\n\n  // Getters\n  static get VERSION() {\n    return VERSION\n  }\n\n  static get Default() {\n    return Default\n  }\n\n  // Public\n  next() {\n    if (!this._isSliding) {\n      this._slide(DIRECTION_NEXT)\n    }\n  }\n\n  nextWhenVisible() {\n    const $element = $(this._element)\n    // Don't call next when the page isn't visible\n    // or the carousel or its parent isn't visible\n    if (!document.hidden &&\n      ($element.is(':visible') && $element.css('visibility') !== 'hidden')) {\n      this.next()\n    }\n  }\n\n  prev() {\n    if (!this._isSliding) {\n      this._slide(DIRECTION_PREV)\n    }\n  }\n\n  pause(event) {\n    if (!event) {\n      this._isPaused = true\n    }\n\n    if (this._element.querySelector(SELECTOR_NEXT_PREV)) {\n      Util.triggerTransitionEnd(this._element)\n      this.cycle(true)\n    }\n\n    clearInterval(this._interval)\n    this._interval = null\n  }\n\n  cycle(event) {\n    if (!event) {\n      this._isPaused = false\n    }\n\n    if (this._interval) {\n      clearInterval(this._interval)\n      this._interval = null\n    }\n\n    if (this._config.interval && !this._isPaused) {\n      this._updateInterval()\n\n      this._interval = setInterval(\n        (document.visibilityState ? this.nextWhenVisible : this.next).bind(this),\n        this._config.interval\n      )\n    }\n  }\n\n  to(index) {\n    this._activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM)\n\n    const activeIndex = this._getItemIndex(this._activeElement)\n\n    if (index > this._items.length - 1 || index < 0) {\n      return\n    }\n\n    if (this._isSliding) {\n      $(this._element).one(EVENT_SLID, () => this.to(index))\n      return\n    }\n\n    if (activeIndex === index) {\n      this.pause()\n      this.cycle()\n      return\n    }\n\n    const direction = index > activeIndex ?\n      DIRECTION_NEXT :\n      DIRECTION_PREV\n\n    this._slide(direction, this._items[index])\n  }\n\n  dispose() {\n    $(this._element).off(EVENT_KEY)\n    $.removeData(this._element, DATA_KEY)\n\n    this._items = null\n    this._config = null\n    this._element = null\n    this._interval = null\n    this._isPaused = null\n    this._isSliding = null\n    this._activeElement = null\n    this._indicatorsElement = null\n  }\n\n  // Private\n  _getConfig(config) {\n    config = {\n      ...Default,\n      ...config\n    }\n    Util.typeCheckConfig(NAME, config, DefaultType)\n    return config\n  }\n\n  _handleSwipe() {\n    const absDeltax = Math.abs(this.touchDeltaX)\n\n    if (absDeltax <= SWIPE_THRESHOLD) {\n      return\n    }\n\n    const direction = absDeltax / this.touchDeltaX\n\n    this.touchDeltaX = 0\n\n    // swipe left\n    if (direction > 0) {\n      this.prev()\n    }\n\n    // swipe right\n    if (direction < 0) {\n      this.next()\n    }\n  }\n\n  _addEventListeners() {\n    if (this._config.keyboard) {\n      $(this._element).on(EVENT_KEYDOWN, event => this._keydown(event))\n    }\n\n    if (this._config.pause === 'hover') {\n      $(this._element)\n        .on(EVENT_MOUSEENTER, event => this.pause(event))\n        .on(EVENT_MOUSELEAVE, event => this.cycle(event))\n    }\n\n    if (this._config.touch) {\n      this._addTouchEventListeners()\n    }\n  }\n\n  _addTouchEventListeners() {\n    if (!this._touchSupported) {\n      return\n    }\n\n    const start = event => {\n      if (this._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n        this.touchStartX = event.originalEvent.clientX\n      } else if (!this._pointerEvent) {\n        this.touchStartX = event.originalEvent.touches[0].clientX\n      }\n    }\n\n    const move = event => {\n      // ensure swiping with one touch and not pinching\n      this.touchDeltaX = event.originalEvent.touches && event.originalEvent.touches.length > 1 ?\n        0 :\n        event.originalEvent.touches[0].clientX - this.touchStartX\n    }\n\n    const end = event => {\n      if (this._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n        this.touchDeltaX = event.originalEvent.clientX - this.touchStartX\n      }\n\n      this._handleSwipe()\n      if (this._config.pause === 'hover') {\n        // If it's a touch-enabled device, mouseenter/leave are fired as\n        // part of the mouse compatibility events on first tap - the carousel\n        // would stop cycling until user tapped out of it;\n        // here, we listen for touchend, explicitly pause the carousel\n        // (as if it's the second time we tap on it, mouseenter compat event\n        // is NOT fired) and after a timeout (to allow for mouse compatibility\n        // events to fire) we explicitly restart cycling\n\n        this.pause()\n        if (this.touchTimeout) {\n          clearTimeout(this.touchTimeout)\n        }\n\n        this.touchTimeout = setTimeout(event => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval)\n      }\n    }\n\n    $(this._element.querySelectorAll(SELECTOR_ITEM_IMG))\n      .on(EVENT_DRAG_START, e => e.preventDefault())\n\n    if (this._pointerEvent) {\n      $(this._element).on(EVENT_POINTERDOWN, event => start(event))\n      $(this._element).on(EVENT_POINTERUP, event => end(event))\n\n      this._element.classList.add(CLASS_NAME_POINTER_EVENT)\n    } else {\n      $(this._element).on(EVENT_TOUCHSTART, event => start(event))\n      $(this._element).on(EVENT_TOUCHMOVE, event => move(event))\n      $(this._element).on(EVENT_TOUCHEND, event => end(event))\n    }\n  }\n\n  _keydown(event) {\n    if (/input|textarea/i.test(event.target.tagName)) {\n      return\n    }\n\n    switch (event.which) {\n      case ARROW_LEFT_KEYCODE:\n        event.preventDefault()\n        this.prev()\n        break\n      case ARROW_RIGHT_KEYCODE:\n        event.preventDefault()\n        this.next()\n        break\n      default:\n    }\n  }\n\n  _getItemIndex(element) {\n    this._items = element && element.parentNode ?\n      [].slice.call(element.parentNode.querySelectorAll(SELECTOR_ITEM)) :\n      []\n    return this._items.indexOf(element)\n  }\n\n  _getItemByDirection(direction, activeElement) {\n    const isNextDirection = direction === DIRECTION_NEXT\n    const isPrevDirection = direction === DIRECTION_PREV\n    const activeIndex = this._getItemIndex(activeElement)\n    const lastItemIndex = this._items.length - 1\n    const isGoingToWrap = isPrevDirection && activeIndex === 0 ||\n                            isNextDirection && activeIndex === lastItemIndex\n\n    if (isGoingToWrap && !this._config.wrap) {\n      return activeElement\n    }\n\n    const delta = direction === DIRECTION_PREV ? -1 : 1\n    const itemIndex = (activeIndex + delta) % this._items.length\n\n    return itemIndex === -1 ?\n      this._items[this._items.length - 1] : this._items[itemIndex]\n  }\n\n  _triggerSlideEvent(relatedTarget, eventDirectionName) {\n    const targetIndex = this._getItemIndex(relatedTarget)\n    const fromIndex = this._getItemIndex(this._element.querySelector(SELECTOR_ACTIVE_ITEM))\n    const slideEvent = $.Event(EVENT_SLIDE, {\n      relatedTarget,\n      direction: eventDirectionName,\n      from: fromIndex,\n      to: targetIndex\n    })\n\n    $(this._element).trigger(slideEvent)\n\n    return slideEvent\n  }\n\n  _setActiveIndicatorElement(element) {\n    if (this._indicatorsElement) {\n      const indicators = [].slice.call(this._indicatorsElement.querySelectorAll(SELECTOR_ACTIVE))\n      $(indicators).removeClass(CLASS_NAME_ACTIVE)\n\n      const nextIndicator = this._indicatorsElement.children[\n        this._getItemIndex(element)\n      ]\n\n      if (nextIndicator) {\n        $(nextIndicator).addClass(CLASS_NAME_ACTIVE)\n      }\n    }\n  }\n\n  _updateInterval() {\n    const element = this._activeElement || this._element.querySelector(SELECTOR_ACTIVE_ITEM)\n\n    if (!element) {\n      return\n    }\n\n    const elementInterval = parseInt(element.getAttribute('data-interval'), 10)\n\n    if (elementInterval) {\n      this._config.defaultInterval = this._config.defaultInterval || this._config.interval\n      this._config.interval = elementInterval\n    } else {\n      this._config.interval = this._config.defaultInterval || this._config.interval\n    }\n  }\n\n  _slide(direction, element) {\n    const activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM)\n    const activeElementIndex = this._getItemIndex(activeElement)\n    const nextElement = element || activeElement &&\n      this._getItemByDirection(direction, activeElement)\n    const nextElementIndex = this._getItemIndex(nextElement)\n    const isCycling = Boolean(this._interval)\n\n    let directionalClassName\n    let orderClassName\n    let eventDirectionName\n\n    if (direction === DIRECTION_NEXT) {\n      directionalClassName = CLASS_NAME_LEFT\n      orderClassName = CLASS_NAME_NEXT\n      eventDirectionName = DIRECTION_LEFT\n    } else {\n      directionalClassName = CLASS_NAME_RIGHT\n      orderClassName = CLASS_NAME_PREV\n      eventDirectionName = DIRECTION_RIGHT\n    }\n\n    if (nextElement && $(nextElement).hasClass(CLASS_NAME_ACTIVE)) {\n      this._isSliding = false\n      return\n    }\n\n    const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName)\n    if (slideEvent.isDefaultPrevented()) {\n      return\n    }\n\n    if (!activeElement || !nextElement) {\n      // Some weirdness is happening, so we bail\n      return\n    }\n\n    this._isSliding = true\n\n    if (isCycling) {\n      this.pause()\n    }\n\n    this._setActiveIndicatorElement(nextElement)\n    this._activeElement = nextElement\n\n    const slidEvent = $.Event(EVENT_SLID, {\n      relatedTarget: nextElement,\n      direction: eventDirectionName,\n      from: activeElementIndex,\n      to: nextElementIndex\n    })\n\n    if ($(this._element).hasClass(CLASS_NAME_SLIDE)) {\n      $(nextElement).addClass(orderClassName)\n\n      Util.reflow(nextElement)\n\n      $(activeElement).addClass(directionalClassName)\n      $(nextElement).addClass(directionalClassName)\n\n      const transitionDuration = Util.getTransitionDurationFromElement(activeElement)\n\n      $(activeElement)\n        .one(Util.TRANSITION_END, () => {\n          $(nextElement)\n            .removeClass(`${directionalClassName} ${orderClassName}`)\n            .addClass(CLASS_NAME_ACTIVE)\n\n          $(activeElement).removeClass(`${CLASS_NAME_ACTIVE} ${orderClassName} ${directionalClassName}`)\n\n          this._isSliding = false\n\n          setTimeout(() => $(this._element).trigger(slidEvent), 0)\n        })\n        .emulateTransitionEnd(transitionDuration)\n    } else {\n      $(activeElement).removeClass(CLASS_NAME_ACTIVE)\n      $(nextElement).addClass(CLASS_NAME_ACTIVE)\n\n      this._isSliding = false\n      $(this._element).trigger(slidEvent)\n    }\n\n    if (isCycling) {\n      this.cycle()\n    }\n  }\n\n  // Static\n  static _jQueryInterface(config) {\n    return this.each(function () {\n      let data = $(this).data(DATA_KEY)\n      let _config = {\n        ...Default,\n        ...$(this).data()\n      }\n\n      if (typeof config === 'object') {\n        _config = {\n          ..._config,\n          ...config\n        }\n      }\n\n      const action = typeof config === 'string' ? config : _config.slide\n\n      if (!data) {\n        data = new Carousel(this, _config)\n        $(this).data(DATA_KEY, data)\n      }\n\n      if (typeof config === 'number') {\n        data.to(config)\n      } else if (typeof action === 'string') {\n        if (typeof data[action] === 'undefined') {\n          throw new TypeError(`No method named \"${action}\"`)\n        }\n\n        data[action]()\n      } else if (_config.interval && _config.ride) {\n        data.pause()\n        data.cycle()\n      }\n    })\n  }\n\n  static _dataApiClickHandler(event) {\n    const selector = Util.getSelectorFromElement(this)\n\n    if (!selector) {\n      return\n    }\n\n    const target = $(selector)[0]\n\n    if (!target || !$(target).hasClass(CLASS_NAME_CAROUSEL)) {\n      return\n    }\n\n    const config = {\n      ...$(target).data(),\n      ...$(this).data()\n    }\n    const slideIndex = this.getAttribute('data-slide-to')\n\n    if (slideIndex) {\n      config.interval = false\n    }\n\n    Carousel._jQueryInterface.call($(target), config)\n\n    if (slideIndex) {\n      $(target).data(DATA_KEY).to(slideIndex)\n    }\n\n    event.preventDefault()\n  }\n}\n\n/**\n * Data API implementation\n */\n\n$(document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_SLIDE, Carousel._dataApiClickHandler)\n\n$(window).on(EVENT_LOAD_DATA_API, () => {\n  const carousels = [].slice.call(document.querySelectorAll(SELECTOR_DATA_RIDE))\n  for (let i = 0, len = carousels.length; i < len; i++) {\n    const $carousel = $(carousels[i])\n    Carousel._jQueryInterface.call($carousel, $carousel.data())\n  }\n})\n\n/**\n * jQuery\n */\n\n$.fn[NAME] = Carousel._jQueryInterface\n$.fn[NAME].Constructor = Carousel\n$.fn[NAME].noConflict = () => {\n  $.fn[NAME] = JQUERY_NO_CONFLICT\n  return Carousel._jQueryInterface\n}\n\nexport default Carousel\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.2): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * Constants\n */\n\nconst NAME = 'collapse'\nconst VERSION = '4.6.2'\nconst DATA_KEY = 'bs.collapse'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_COLLAPSE = 'collapse'\nconst CLASS_NAME_COLLAPSING = 'collapsing'\nconst CLASS_NAME_COLLAPSED = 'collapsed'\n\nconst DIMENSION_WIDTH = 'width'\nconst DIMENSION_HEIGHT = 'height'\n\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst SELECTOR_ACTIVES = '.show, .collapsing'\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"collapse\"]'\n\nconst Default = {\n  toggle: true,\n  parent: ''\n}\n\nconst DefaultType = {\n  toggle: 'boolean',\n  parent: '(string|element)'\n}\n\n/**\n * Class definition\n */\n\nclass Collapse {\n  constructor(element, config) {\n    this._isTransitioning = false\n    this._element = element\n    this._config = this._getConfig(config)\n    this._triggerArray = [].slice.call(document.querySelectorAll(\n      `[data-toggle=\"collapse\"][href=\"#${element.id}\"],` +\n      `[data-toggle=\"collapse\"][data-target=\"#${element.id}\"]`\n    ))\n\n    const toggleList = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE))\n    for (let i = 0, len = toggleList.length; i < len; i++) {\n      const elem = toggleList[i]\n      const selector = Util.getSelectorFromElement(elem)\n      const filterElement = [].slice.call(document.querySelectorAll(selector))\n        .filter(foundElem => foundElem === element)\n\n      if (selector !== null && filterElement.length > 0) {\n        this._selector = selector\n        this._triggerArray.push(elem)\n      }\n    }\n\n    this._parent = this._config.parent ? this._getParent() : null\n\n    if (!this._config.parent) {\n      this._addAriaAndCollapsedClass(this._element, this._triggerArray)\n    }\n\n    if (this._config.toggle) {\n      this.toggle()\n    }\n  }\n\n  // Getters\n  static get VERSION() {\n    return VERSION\n  }\n\n  static get Default() {\n    return Default\n  }\n\n  // Public\n  toggle() {\n    if ($(this._element).hasClass(CLASS_NAME_SHOW)) {\n      this.hide()\n    } else {\n      this.show()\n    }\n  }\n\n  show() {\n    if (this._isTransitioning ||\n      $(this._element).hasClass(CLASS_NAME_SHOW)) {\n      return\n    }\n\n    let actives\n    let activesData\n\n    if (this._parent) {\n      actives = [].slice.call(this._parent.querySelectorAll(SELECTOR_ACTIVES))\n        .filter(elem => {\n          if (typeof this._config.parent === 'string') {\n            return elem.getAttribute('data-parent') === this._config.parent\n          }\n\n          return elem.classList.contains(CLASS_NAME_COLLAPSE)\n        })\n\n      if (actives.length === 0) {\n        actives = null\n      }\n    }\n\n    if (actives) {\n      activesData = $(actives).not(this._selector).data(DATA_KEY)\n      if (activesData && activesData._isTransitioning) {\n        return\n      }\n    }\n\n    const startEvent = $.Event(EVENT_SHOW)\n    $(this._element).trigger(startEvent)\n    if (startEvent.isDefaultPrevented()) {\n      return\n    }\n\n    if (actives) {\n      Collapse._jQueryInterface.call($(actives).not(this._selector), 'hide')\n      if (!activesData) {\n        $(actives).data(DATA_KEY, null)\n      }\n    }\n\n    const dimension = this._getDimension()\n\n    $(this._element)\n      .removeClass(CLASS_NAME_COLLAPSE)\n      .addClass(CLASS_NAME_COLLAPSING)\n\n    this._element.style[dimension] = 0\n\n    if (this._triggerArray.length) {\n      $(this._triggerArray)\n        .removeClass(CLASS_NAME_COLLAPSED)\n        .attr('aria-expanded', true)\n    }\n\n    this.setTransitioning(true)\n\n    const complete = () => {\n      $(this._element)\n        .removeClass(CLASS_NAME_COLLAPSING)\n        .addClass(`${CLASS_NAME_COLLAPSE} ${CLASS_NAME_SHOW}`)\n\n      this._element.style[dimension] = ''\n\n      this.setTransitioning(false)\n\n      $(this._element).trigger(EVENT_SHOWN)\n    }\n\n    const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1)\n    const scrollSize = `scroll${capitalizedDimension}`\n    const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n    $(this._element)\n      .one(Util.TRANSITION_END, complete)\n      .emulateTransitionEnd(transitionDuration)\n\n    this._element.style[dimension] = `${this._element[scrollSize]}px`\n  }\n\n  hide() {\n    if (this._isTransitioning ||\n      !$(this._element).hasClass(CLASS_NAME_SHOW)) {\n      return\n    }\n\n    const startEvent = $.Event(EVENT_HIDE)\n    $(this._element).trigger(startEvent)\n    if (startEvent.isDefaultPrevented()) {\n      return\n    }\n\n    const dimension = this._getDimension()\n\n    this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`\n\n    Util.reflow(this._element)\n\n    $(this._element)\n      .addClass(CLASS_NAME_COLLAPSING)\n      .removeClass(`${CLASS_NAME_COLLAPSE} ${CLASS_NAME_SHOW}`)\n\n    const triggerArrayLength = this._triggerArray.length\n    if (triggerArrayLength > 0) {\n      for (let i = 0; i < triggerArrayLength; i++) {\n        const trigger = this._triggerArray[i]\n        const selector = Util.getSelectorFromElement(trigger)\n\n        if (selector !== null) {\n          const $elem = $([].slice.call(document.querySelectorAll(selector)))\n          if (!$elem.hasClass(CLASS_NAME_SHOW)) {\n            $(trigger).addClass(CLASS_NAME_COLLAPSED)\n              .attr('aria-expanded', false)\n          }\n        }\n      }\n    }\n\n    this.setTransitioning(true)\n\n    const complete = () => {\n      this.setTransitioning(false)\n      $(this._element)\n        .removeClass(CLASS_NAME_COLLAPSING)\n        .addClass(CLASS_NAME_COLLAPSE)\n        .trigger(EVENT_HIDDEN)\n    }\n\n    this._element.style[dimension] = ''\n    const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n    $(this._element)\n      .one(Util.TRANSITION_END, complete)\n      .emulateTransitionEnd(transitionDuration)\n  }\n\n  setTransitioning(isTransitioning) {\n    this._isTransitioning = isTransitioning\n  }\n\n  dispose() {\n    $.removeData(this._element, DATA_KEY)\n\n    this._config = null\n    this._parent = null\n    this._element = null\n    this._triggerArray = null\n    this._isTransitioning = null\n  }\n\n  // Private\n  _getConfig(config) {\n    config = {\n      ...Default,\n      ...config\n    }\n    config.toggle = Boolean(config.toggle) // Coerce string values\n    Util.typeCheckConfig(NAME, config, DefaultType)\n    return config\n  }\n\n  _getDimension() {\n    const hasWidth = $(this._element).hasClass(DIMENSION_WIDTH)\n    return hasWidth ? DIMENSION_WIDTH : DIMENSION_HEIGHT\n  }\n\n  _getParent() {\n    let parent\n\n    if (Util.isElement(this._config.parent)) {\n      parent = this._config.parent\n\n      // It's a jQuery object\n      if (typeof this._config.parent.jquery !== 'undefined') {\n        parent = this._config.parent[0]\n      }\n    } else {\n      parent = document.querySelector(this._config.parent)\n    }\n\n    const selector = `[data-toggle=\"collapse\"][data-parent=\"${this._config.parent}\"]`\n    const children = [].slice.call(parent.querySelectorAll(selector))\n\n    $(children).each((i, element) => {\n      this._addAriaAndCollapsedClass(\n        Collapse._getTargetFromElement(element),\n        [element]\n      )\n    })\n\n    return parent\n  }\n\n  _addAriaAndCollapsedClass(element, triggerArray) {\n    const isOpen = $(element).hasClass(CLASS_NAME_SHOW)\n\n    if (triggerArray.length) {\n      $(triggerArray)\n        .toggleClass(CLASS_NAME_COLLAPSED, !isOpen)\n        .attr('aria-expanded', isOpen)\n    }\n  }\n\n  // Static\n  static _getTargetFromElement(element) {\n    const selector = Util.getSelectorFromElement(element)\n    return selector ? document.querySelector(selector) : null\n  }\n\n  static _jQueryInterface(config) {\n    return this.each(function () {\n      const $element = $(this)\n      let data = $element.data(DATA_KEY)\n      const _config = {\n        ...Default,\n        ...$element.data(),\n        ...(typeof config === 'object' && config ? config : {})\n      }\n\n      if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {\n        _config.toggle = false\n      }\n\n      if (!data) {\n        data = new Collapse(this, _config)\n        $element.data(DATA_KEY, data)\n      }\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`)\n        }\n\n        data[config]()\n      }\n    })\n  }\n}\n\n/**\n * Data API implementation\n */\n\n$(document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n  // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n  if (event.currentTarget.tagName === 'A') {\n    event.preventDefault()\n  }\n\n  const $trigger = $(this)\n  const selector = Util.getSelectorFromElement(this)\n  const selectors = [].slice.call(document.querySelectorAll(selector))\n\n  $(selectors).each(function () {\n    const $target = $(this)\n    const data = $target.data(DATA_KEY)\n    const config = data ? 'toggle' : $trigger.data()\n    Collapse._jQueryInterface.call($target, config)\n  })\n})\n\n/**\n * jQuery\n */\n\n$.fn[NAME] = Collapse._jQueryInterface\n$.fn[NAME].Constructor = Collapse\n$.fn[NAME].noConflict = () => {\n  $.fn[NAME] = JQUERY_NO_CONFLICT\n  return Collapse._jQueryInterface\n}\n\nexport default Collapse\n","/**!\n * @fileOverview Kickass library to create and place poppers near their reference elements.\n * @version 1.16.1\n * @license\n * Copyright (c) 2016 Federico Zivolo and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nvar isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && typeof navigator !== 'undefined';\n\nvar timeoutDuration = function () {\n  var longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\n  for (var i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n    if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n      return 1;\n    }\n  }\n  return 0;\n}();\n\nfunction microtaskDebounce(fn) {\n  var called = false;\n  return function () {\n    if (called) {\n      return;\n    }\n    called = true;\n    window.Promise.resolve().then(function () {\n      called = false;\n      fn();\n    });\n  };\n}\n\nfunction taskDebounce(fn) {\n  var scheduled = false;\n  return function () {\n    if (!scheduled) {\n      scheduled = true;\n      setTimeout(function () {\n        scheduled = false;\n        fn();\n      }, timeoutDuration);\n    }\n  };\n}\n\nvar supportsMicroTasks = isBrowser && window.Promise;\n\n/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/\nvar debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce;\n\n/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\nfunction isFunction(functionToCheck) {\n  var getType = {};\n  return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';\n}\n\n/**\n * Get CSS computed property of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Eement} element\n * @argument {String} property\n */\nfunction getStyleComputedProperty(element, property) {\n  if (element.nodeType !== 1) {\n    return [];\n  }\n  // NOTE: 1 DOM access here\n  var window = element.ownerDocument.defaultView;\n  var css = window.getComputedStyle(element, null);\n  return property ? css[property] : css;\n}\n\n/**\n * Returns the parentNode or the host of the element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} parent\n */\nfunction getParentNode(element) {\n  if (element.nodeName === 'HTML') {\n    return element;\n  }\n  return element.parentNode || element.host;\n}\n\n/**\n * Returns the scrolling parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} scroll parent\n */\nfunction getScrollParent(element) {\n  // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n  if (!element) {\n    return document.body;\n  }\n\n  switch (element.nodeName) {\n    case 'HTML':\n    case 'BODY':\n      return element.ownerDocument.body;\n    case '#document':\n      return element.body;\n  }\n\n  // Firefox want us to check `-x` and `-y` variations as well\n\n  var _getStyleComputedProp = getStyleComputedProperty(element),\n      overflow = _getStyleComputedProp.overflow,\n      overflowX = _getStyleComputedProp.overflowX,\n      overflowY = _getStyleComputedProp.overflowY;\n\n  if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {\n    return element;\n  }\n\n  return getScrollParent(getParentNode(element));\n}\n\n/**\n * Returns the reference node of the reference object, or the reference object itself.\n * @method\n * @memberof Popper.Utils\n * @param {Element|Object} reference - the reference element (the popper will be relative to this)\n * @returns {Element} parent\n */\nfunction getReferenceNode(reference) {\n  return reference && reference.referenceNode ? reference.referenceNode : reference;\n}\n\nvar isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);\nvar isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);\n\n/**\n * Determines if the browser is Internet Explorer\n * @method\n * @memberof Popper.Utils\n * @param {Number} version to check\n * @returns {Boolean} isIE\n */\nfunction isIE(version) {\n  if (version === 11) {\n    return isIE11;\n  }\n  if (version === 10) {\n    return isIE10;\n  }\n  return isIE11 || isIE10;\n}\n\n/**\n * Returns the offset parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} offset parent\n */\nfunction getOffsetParent(element) {\n  if (!element) {\n    return document.documentElement;\n  }\n\n  var noOffsetParent = isIE(10) ? document.body : null;\n\n  // NOTE: 1 DOM access here\n  var offsetParent = element.offsetParent || null;\n  // Skip hidden elements which don't have an offsetParent\n  while (offsetParent === noOffsetParent && element.nextElementSibling) {\n    offsetParent = (element = element.nextElementSibling).offsetParent;\n  }\n\n  var nodeName = offsetParent && offsetParent.nodeName;\n\n  if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n    return element ? element.ownerDocument.documentElement : document.documentElement;\n  }\n\n  // .offsetParent will return the closest TH, TD or TABLE in case\n  // no offsetParent is present, I hate this job...\n  if (['TH', 'TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static') {\n    return getOffsetParent(offsetParent);\n  }\n\n  return offsetParent;\n}\n\nfunction isOffsetContainer(element) {\n  var nodeName = element.nodeName;\n\n  if (nodeName === 'BODY') {\n    return false;\n  }\n  return nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element;\n}\n\n/**\n * Finds the root node (document, shadowDOM root) of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} node\n * @returns {Element} root node\n */\nfunction getRoot(node) {\n  if (node.parentNode !== null) {\n    return getRoot(node.parentNode);\n  }\n\n  return node;\n}\n\n/**\n * Finds the offset parent common to the two provided nodes\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element1\n * @argument {Element} element2\n * @returns {Element} common offset parent\n */\nfunction findCommonOffsetParent(element1, element2) {\n  // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n  if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n    return document.documentElement;\n  }\n\n  // Here we make sure to give as \"start\" the element that comes first in the DOM\n  var order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING;\n  var start = order ? element1 : element2;\n  var end = order ? element2 : element1;\n\n  // Get common ancestor container\n  var range = document.createRange();\n  range.setStart(start, 0);\n  range.setEnd(end, 0);\n  var commonAncestorContainer = range.commonAncestorContainer;\n\n  // Both nodes are inside #document\n\n  if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) {\n    if (isOffsetContainer(commonAncestorContainer)) {\n      return commonAncestorContainer;\n    }\n\n    return getOffsetParent(commonAncestorContainer);\n  }\n\n  // one of the nodes is inside shadowDOM, find which one\n  var element1root = getRoot(element1);\n  if (element1root.host) {\n    return findCommonOffsetParent(element1root.host, element2);\n  } else {\n    return findCommonOffsetParent(element1, getRoot(element2).host);\n  }\n}\n\n/**\n * Gets the scroll value of the given element in the given side (top and left)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {String} side `top` or `left`\n * @returns {number} amount of scrolled pixels\n */\nfunction getScroll(element) {\n  var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top';\n\n  var upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n  var nodeName = element.nodeName;\n\n  if (nodeName === 'BODY' || nodeName === 'HTML') {\n    var html = element.ownerDocument.documentElement;\n    var scrollingElement = element.ownerDocument.scrollingElement || html;\n    return scrollingElement[upperSide];\n  }\n\n  return element[upperSide];\n}\n\n/*\n * Sum or subtract the element scroll values (left and top) from a given rect object\n * @method\n * @memberof Popper.Utils\n * @param {Object} rect - Rect object you want to change\n * @param {HTMLElement} element - The element from the function reads the scroll values\n * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n * @return {Object} rect - The modifier rect object\n */\nfunction includeScroll(rect, element) {\n  var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n  var scrollTop = getScroll(element, 'top');\n  var scrollLeft = getScroll(element, 'left');\n  var modifier = subtract ? -1 : 1;\n  rect.top += scrollTop * modifier;\n  rect.bottom += scrollTop * modifier;\n  rect.left += scrollLeft * modifier;\n  rect.right += scrollLeft * modifier;\n  return rect;\n}\n\n/*\n * Helper to detect borders of a given element\n * @method\n * @memberof Popper.Utils\n * @param {CSSStyleDeclaration} styles\n * Result of `getStyleComputedProperty` on the given element\n * @param {String} axis - `x` or `y`\n * @return {number} borders - The borders size of the given axis\n */\n\nfunction getBordersSize(styles, axis) {\n  var sideA = axis === 'x' ? 'Left' : 'Top';\n  var sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n  return parseFloat(styles['border' + sideA + 'Width']) + parseFloat(styles['border' + sideB + 'Width']);\n}\n\nfunction getSize(axis, body, html, computedStyle) {\n  return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE(10) ? parseInt(html['offset' + axis]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')]) : 0);\n}\n\nfunction getWindowSizes(document) {\n  var body = document.body;\n  var html = document.documentElement;\n  var computedStyle = isIE(10) && getComputedStyle(html);\n\n  return {\n    height: getSize('Height', body, html, computedStyle),\n    width: getSize('Width', body, html, computedStyle)\n  };\n}\n\nvar classCallCheck = function (instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n};\n\nvar createClass = function () {\n  function defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if (\"value\" in descriptor) descriptor.writable = true;\n      Object.defineProperty(target, descriptor.key, descriptor);\n    }\n  }\n\n  return function (Constructor, protoProps, staticProps) {\n    if (protoProps) defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) defineProperties(Constructor, staticProps);\n    return Constructor;\n  };\n}();\n\n\n\n\n\nvar defineProperty = function (obj, key, value) {\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n\n  return obj;\n};\n\nvar _extends = Object.assign || function (target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i];\n\n    for (var key in source) {\n      if (Object.prototype.hasOwnProperty.call(source, key)) {\n        target[key] = source[key];\n      }\n    }\n  }\n\n  return target;\n};\n\n/**\n * Given element offsets, generate an output similar to getBoundingClientRect\n * @method\n * @memberof Popper.Utils\n * @argument {Object} offsets\n * @returns {Object} ClientRect like output\n */\nfunction getClientRect(offsets) {\n  return _extends({}, offsets, {\n    right: offsets.left + offsets.width,\n    bottom: offsets.top + offsets.height\n  });\n}\n\n/**\n * Get bounding client rect of given element\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\nfunction getBoundingClientRect(element) {\n  var rect = {};\n\n  // IE10 10 FIX: Please, don't ask, the element isn't\n  // considered in DOM in some circumstances...\n  // This isn't reproducible in IE10 compatibility mode of IE11\n  try {\n    if (isIE(10)) {\n      rect = element.getBoundingClientRect();\n      var scrollTop = getScroll(element, 'top');\n      var scrollLeft = getScroll(element, 'left');\n      rect.top += scrollTop;\n      rect.left += scrollLeft;\n      rect.bottom += scrollTop;\n      rect.right += scrollLeft;\n    } else {\n      rect = element.getBoundingClientRect();\n    }\n  } catch (e) {}\n\n  var result = {\n    left: rect.left,\n    top: rect.top,\n    width: rect.right - rect.left,\n    height: rect.bottom - rect.top\n  };\n\n  // subtract scrollbar size from sizes\n  var sizes = element.nodeName === 'HTML' ? getWindowSizes(element.ownerDocument) : {};\n  var width = sizes.width || element.clientWidth || result.width;\n  var height = sizes.height || element.clientHeight || result.height;\n\n  var horizScrollbar = element.offsetWidth - width;\n  var vertScrollbar = element.offsetHeight - height;\n\n  // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n  // we make this check conditional for performance reasons\n  if (horizScrollbar || vertScrollbar) {\n    var styles = getStyleComputedProperty(element);\n    horizScrollbar -= getBordersSize(styles, 'x');\n    vertScrollbar -= getBordersSize(styles, 'y');\n\n    result.width -= horizScrollbar;\n    result.height -= vertScrollbar;\n  }\n\n  return getClientRect(result);\n}\n\nfunction getOffsetRectRelativeToArbitraryNode(children, parent) {\n  var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n  var isIE10 = isIE(10);\n  var isHTML = parent.nodeName === 'HTML';\n  var childrenRect = getBoundingClientRect(children);\n  var parentRect = getBoundingClientRect(parent);\n  var scrollParent = getScrollParent(children);\n\n  var styles = getStyleComputedProperty(parent);\n  var borderTopWidth = parseFloat(styles.borderTopWidth);\n  var borderLeftWidth = parseFloat(styles.borderLeftWidth);\n\n  // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n  if (fixedPosition && isHTML) {\n    parentRect.top = Math.max(parentRect.top, 0);\n    parentRect.left = Math.max(parentRect.left, 0);\n  }\n  var offsets = getClientRect({\n    top: childrenRect.top - parentRect.top - borderTopWidth,\n    left: childrenRect.left - parentRect.left - borderLeftWidth,\n    width: childrenRect.width,\n    height: childrenRect.height\n  });\n  offsets.marginTop = 0;\n  offsets.marginLeft = 0;\n\n  // Subtract margins of documentElement in case it's being used as parent\n  // we do this only on HTML because it's the only element that behaves\n  // differently when margins are applied to it. The margins are included in\n  // the box of the documentElement, in the other cases not.\n  if (!isIE10 && isHTML) {\n    var marginTop = parseFloat(styles.marginTop);\n    var marginLeft = parseFloat(styles.marginLeft);\n\n    offsets.top -= borderTopWidth - marginTop;\n    offsets.bottom -= borderTopWidth - marginTop;\n    offsets.left -= borderLeftWidth - marginLeft;\n    offsets.right -= borderLeftWidth - marginLeft;\n\n    // Attach marginTop and marginLeft because in some circumstances we may need them\n    offsets.marginTop = marginTop;\n    offsets.marginLeft = marginLeft;\n  }\n\n  if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {\n    offsets = includeScroll(offsets, parent);\n  }\n\n  return offsets;\n}\n\nfunction getViewportOffsetRectRelativeToArtbitraryNode(element) {\n  var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n  var html = element.ownerDocument.documentElement;\n  var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n  var width = Math.max(html.clientWidth, window.innerWidth || 0);\n  var height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n  var scrollTop = !excludeScroll ? getScroll(html) : 0;\n  var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n\n  var offset = {\n    top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n    left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n    width: width,\n    height: height\n  };\n\n  return getClientRect(offset);\n}\n\n/**\n * Check if the given element is fixed or is inside a fixed parent\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\nfunction isFixed(element) {\n  var nodeName = element.nodeName;\n  if (nodeName === 'BODY' || nodeName === 'HTML') {\n    return false;\n  }\n  if (getStyleComputedProperty(element, 'position') === 'fixed') {\n    return true;\n  }\n  var parentNode = getParentNode(element);\n  if (!parentNode) {\n    return false;\n  }\n  return isFixed(parentNode);\n}\n\n/**\n * Finds the first parent of an element that has a transformed property defined\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} first transformed parent or documentElement\n */\n\nfunction getFixedPositionOffsetParent(element) {\n  // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n  if (!element || !element.parentElement || isIE()) {\n    return document.documentElement;\n  }\n  var el = element.parentElement;\n  while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n    el = el.parentElement;\n  }\n  return el || document.documentElement;\n}\n\n/**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} popper\n * @param {HTMLElement} reference\n * @param {number} padding\n * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n * @param {Boolean} fixedPosition - Is in fixed position mode\n * @returns {Object} Coordinates of the boundaries\n */\nfunction getBoundaries(popper, reference, padding, boundariesElement) {\n  var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n  // NOTE: 1 DOM access here\n\n  var boundaries = { top: 0, left: 0 };\n  var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n\n  // Handle viewport case\n  if (boundariesElement === 'viewport') {\n    boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n  } else {\n    // Handle other cases based on DOM element used as boundaries\n    var boundariesNode = void 0;\n    if (boundariesElement === 'scrollParent') {\n      boundariesNode = getScrollParent(getParentNode(reference));\n      if (boundariesNode.nodeName === 'BODY') {\n        boundariesNode = popper.ownerDocument.documentElement;\n      }\n    } else if (boundariesElement === 'window') {\n      boundariesNode = popper.ownerDocument.documentElement;\n    } else {\n      boundariesNode = boundariesElement;\n    }\n\n    var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition);\n\n    // In case of HTML, we need a different computation\n    if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n      var _getWindowSizes = getWindowSizes(popper.ownerDocument),\n          height = _getWindowSizes.height,\n          width = _getWindowSizes.width;\n\n      boundaries.top += offsets.top - offsets.marginTop;\n      boundaries.bottom = height + offsets.top;\n      boundaries.left += offsets.left - offsets.marginLeft;\n      boundaries.right = width + offsets.left;\n    } else {\n      // for all the other DOM elements, this one is good\n      boundaries = offsets;\n    }\n  }\n\n  // Add paddings\n  padding = padding || 0;\n  var isPaddingNumber = typeof padding === 'number';\n  boundaries.left += isPaddingNumber ? padding : padding.left || 0;\n  boundaries.top += isPaddingNumber ? padding : padding.top || 0;\n  boundaries.right -= isPaddingNumber ? padding : padding.right || 0;\n  boundaries.bottom -= isPaddingNumber ? padding : padding.bottom || 0;\n\n  return boundaries;\n}\n\nfunction getArea(_ref) {\n  var width = _ref.width,\n      height = _ref.height;\n\n  return width * height;\n}\n\n/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n * @method\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeAutoPlacement(placement, refRect, popper, reference, boundariesElement) {\n  var padding = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;\n\n  if (placement.indexOf('auto') === -1) {\n    return placement;\n  }\n\n  var boundaries = getBoundaries(popper, reference, padding, boundariesElement);\n\n  var rects = {\n    top: {\n      width: boundaries.width,\n      height: refRect.top - boundaries.top\n    },\n    right: {\n      width: boundaries.right - refRect.right,\n      height: boundaries.height\n    },\n    bottom: {\n      width: boundaries.width,\n      height: boundaries.bottom - refRect.bottom\n    },\n    left: {\n      width: refRect.left - boundaries.left,\n      height: boundaries.height\n    }\n  };\n\n  var sortedAreas = Object.keys(rects).map(function (key) {\n    return _extends({\n      key: key\n    }, rects[key], {\n      area: getArea(rects[key])\n    });\n  }).sort(function (a, b) {\n    return b.area - a.area;\n  });\n\n  var filteredAreas = sortedAreas.filter(function (_ref2) {\n    var width = _ref2.width,\n        height = _ref2.height;\n    return width >= popper.clientWidth && height >= popper.clientHeight;\n  });\n\n  var computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key;\n\n  var variation = placement.split('-')[1];\n\n  return computedPlacement + (variation ? '-' + variation : '');\n}\n\n/**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @param {Element} fixedPosition - is in fixed position mode\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\nfunction getReferenceOffsets(state, popper, reference) {\n  var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n\n  var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n  return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n}\n\n/**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\nfunction getOuterSizes(element) {\n  var window = element.ownerDocument.defaultView;\n  var styles = window.getComputedStyle(element);\n  var x = parseFloat(styles.marginTop || 0) + parseFloat(styles.marginBottom || 0);\n  var y = parseFloat(styles.marginLeft || 0) + parseFloat(styles.marginRight || 0);\n  var result = {\n    width: element.offsetWidth + y,\n    height: element.offsetHeight + x\n  };\n  return result;\n}\n\n/**\n * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */\nfunction getOppositePlacement(placement) {\n  var hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n  return placement.replace(/left|right|bottom|top/g, function (matched) {\n    return hash[matched];\n  });\n}\n\n/**\n * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */\nfunction getPopperOffsets(popper, referenceOffsets, placement) {\n  placement = placement.split('-')[0];\n\n  // Get popper node sizes\n  var popperRect = getOuterSizes(popper);\n\n  // Add position, width and height to our offsets object\n  var popperOffsets = {\n    width: popperRect.width,\n    height: popperRect.height\n  };\n\n  // depending by the popper placement we have to compute its offsets slightly differently\n  var isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n  var mainSide = isHoriz ? 'top' : 'left';\n  var secondarySide = isHoriz ? 'left' : 'top';\n  var measurement = isHoriz ? 'height' : 'width';\n  var secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n  popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2;\n  if (placement === secondarySide) {\n    popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n  } else {\n    popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)];\n  }\n\n  return popperOffsets;\n}\n\n/**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction find(arr, check) {\n  // use native find if supported\n  if (Array.prototype.find) {\n    return arr.find(check);\n  }\n\n  // use `filter` to obtain the same behavior of `find`\n  return arr.filter(check)[0];\n}\n\n/**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction findIndex(arr, prop, value) {\n  // use native findIndex if supported\n  if (Array.prototype.findIndex) {\n    return arr.findIndex(function (cur) {\n      return cur[prop] === value;\n    });\n  }\n\n  // use `find` + `indexOf` if `findIndex` isn't supported\n  var match = find(arr, function (obj) {\n    return obj[prop] === value;\n  });\n  return arr.indexOf(match);\n}\n\n/**\n * Loop trough the list of modifiers and run them in order,\n * each of them will then edit the data object.\n * @method\n * @memberof Popper.Utils\n * @param {dataObject} data\n * @param {Array} modifiers\n * @param {String} ends - Optional modifier name used as stopper\n * @returns {dataObject}\n */\nfunction runModifiers(modifiers, data, ends) {\n  var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n  modifiersToRun.forEach(function (modifier) {\n    if (modifier['function']) {\n      // eslint-disable-line dot-notation\n      console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n    }\n    var fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n    if (modifier.enabled && isFunction(fn)) {\n      // Add properties to offsets to make them a complete clientRect object\n      // we do this before each modifier to make sure the previous one doesn't\n      // mess with these values\n      data.offsets.popper = getClientRect(data.offsets.popper);\n      data.offsets.reference = getClientRect(data.offsets.reference);\n\n      data = fn(data, modifier);\n    }\n  });\n\n  return data;\n}\n\n/**\n * Updates the position of the popper, computing the new offsets and applying\n * the new style.<br />\n * Prefer `scheduleUpdate` over `update` because of performance reasons.\n * @method\n * @memberof Popper\n */\nfunction update() {\n  // if popper is destroyed, don't perform any further update\n  if (this.state.isDestroyed) {\n    return;\n  }\n\n  var data = {\n    instance: this,\n    styles: {},\n    arrowStyles: {},\n    attributes: {},\n    flipped: false,\n    offsets: {}\n  };\n\n  // compute reference element offsets\n  data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed);\n\n  // compute auto placement, store placement inside the data object,\n  // modifiers will be able to edit `placement` if needed\n  // and refer to originalPlacement to know the original value\n  data.placement = computeAutoPlacement(this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding);\n\n  // store the computed placement inside `originalPlacement`\n  data.originalPlacement = data.placement;\n\n  data.positionFixed = this.options.positionFixed;\n\n  // compute the popper offsets\n  data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement);\n\n  data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute';\n\n  // run the modifiers\n  data = runModifiers(this.modifiers, data);\n\n  // the first `update` will call `onCreate` callback\n  // the other ones will call `onUpdate` callback\n  if (!this.state.isCreated) {\n    this.state.isCreated = true;\n    this.options.onCreate(data);\n  } else {\n    this.options.onUpdate(data);\n  }\n}\n\n/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\nfunction isModifierEnabled(modifiers, modifierName) {\n  return modifiers.some(function (_ref) {\n    var name = _ref.name,\n        enabled = _ref.enabled;\n    return enabled && name === modifierName;\n  });\n}\n\n/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n */\nfunction getSupportedPropertyName(property) {\n  var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n  var upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n  for (var i = 0; i < prefixes.length; i++) {\n    var prefix = prefixes[i];\n    var toCheck = prefix ? '' + prefix + upperProp : property;\n    if (typeof document.body.style[toCheck] !== 'undefined') {\n      return toCheck;\n    }\n  }\n  return null;\n}\n\n/**\n * Destroys the popper.\n * @method\n * @memberof Popper\n */\nfunction destroy() {\n  this.state.isDestroyed = true;\n\n  // touch DOM only if `applyStyle` modifier is enabled\n  if (isModifierEnabled(this.modifiers, 'applyStyle')) {\n    this.popper.removeAttribute('x-placement');\n    this.popper.style.position = '';\n    this.popper.style.top = '';\n    this.popper.style.left = '';\n    this.popper.style.right = '';\n    this.popper.style.bottom = '';\n    this.popper.style.willChange = '';\n    this.popper.style[getSupportedPropertyName('transform')] = '';\n  }\n\n  this.disableEventListeners();\n\n  // remove the popper if user explicitly asked for the deletion on destroy\n  // do not use `remove` because IE11 doesn't support it\n  if (this.options.removeOnDestroy) {\n    this.popper.parentNode.removeChild(this.popper);\n  }\n  return this;\n}\n\n/**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\nfunction getWindow(element) {\n  var ownerDocument = element.ownerDocument;\n  return ownerDocument ? ownerDocument.defaultView : window;\n}\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n  var isBody = scrollParent.nodeName === 'BODY';\n  var target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n  target.addEventListener(event, callback, { passive: true });\n\n  if (!isBody) {\n    attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents);\n  }\n  scrollParents.push(target);\n}\n\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction setupEventListeners(reference, options, state, updateBound) {\n  // Resize event listener on window\n  state.updateBound = updateBound;\n  getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });\n\n  // Scroll event listener on scroll parents\n  var scrollElement = getScrollParent(reference);\n  attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents);\n  state.scrollElement = scrollElement;\n  state.eventsEnabled = true;\n\n  return state;\n}\n\n/**\n * It will add resize/scroll events and start recalculating\n * position of the popper element when they are triggered.\n * @method\n * @memberof Popper\n */\nfunction enableEventListeners() {\n  if (!this.state.eventsEnabled) {\n    this.state = setupEventListeners(this.reference, this.options, this.state, this.scheduleUpdate);\n  }\n}\n\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction removeEventListeners(reference, state) {\n  // Remove resize event listener on window\n  getWindow(reference).removeEventListener('resize', state.updateBound);\n\n  // Remove scroll event listener on scroll parents\n  state.scrollParents.forEach(function (target) {\n    target.removeEventListener('scroll', state.updateBound);\n  });\n\n  // Reset state\n  state.updateBound = null;\n  state.scrollParents = [];\n  state.scrollElement = null;\n  state.eventsEnabled = false;\n  return state;\n}\n\n/**\n * It will remove resize/scroll events and won't recalculate popper position\n * when they are triggered. It also won't trigger `onUpdate` callback anymore,\n * unless you call `update` method manually.\n * @method\n * @memberof Popper\n */\nfunction disableEventListeners() {\n  if (this.state.eventsEnabled) {\n    cancelAnimationFrame(this.scheduleUpdate);\n    this.state = removeEventListeners(this.reference, this.state);\n  }\n}\n\n/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\nfunction isNumeric(n) {\n  return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n\n/**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setStyles(element, styles) {\n  Object.keys(styles).forEach(function (prop) {\n    var unit = '';\n    // add unit if the value is numeric and is one of the following\n    if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) {\n      unit = 'px';\n    }\n    element.style[prop] = styles[prop] + unit;\n  });\n}\n\n/**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setAttributes(element, attributes) {\n  Object.keys(attributes).forEach(function (prop) {\n    var value = attributes[prop];\n    if (value !== false) {\n      element.setAttribute(prop, attributes[prop]);\n    } else {\n      element.removeAttribute(prop);\n    }\n  });\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} data.styles - List of style properties - values to apply to popper element\n * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The same data object\n */\nfunction applyStyle(data) {\n  // any property present in `data.styles` will be applied to the popper,\n  // in this way we can make the 3rd party modifiers add custom styles to it\n  // Be aware, modifiers could override the properties defined in the previous\n  // lines of this modifier!\n  setStyles(data.instance.popper, data.styles);\n\n  // any property present in `data.attributes` will be applied to the popper,\n  // they will be set as HTML attributes of the element\n  setAttributes(data.instance.popper, data.attributes);\n\n  // if arrowElement is defined and arrowStyles has some properties\n  if (data.arrowElement && Object.keys(data.arrowStyles).length) {\n    setStyles(data.arrowElement, data.arrowStyles);\n  }\n\n  return data;\n}\n\n/**\n * Set the x-placement attribute before everything else because it could be used\n * to add margins to the popper margins needs to be calculated to get the\n * correct popper offsets.\n * @method\n * @memberof Popper.modifiers\n * @param {HTMLElement} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper\n * @param {Object} options - Popper.js options\n */\nfunction applyStyleOnLoad(reference, popper, options, modifierOptions, state) {\n  // compute reference element offsets\n  var referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);\n\n  // compute auto placement, store placement inside the data object,\n  // modifiers will be able to edit `placement` if needed\n  // and refer to originalPlacement to know the original value\n  var placement = computeAutoPlacement(options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement, options.modifiers.flip.padding);\n\n  popper.setAttribute('x-placement', placement);\n\n  // Apply `position` to popper before anything else because\n  // without the position applied we can't guarantee correct computations\n  setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });\n\n  return options;\n}\n\n/**\n * @function\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Boolean} shouldRound - If the offsets should be rounded at all\n * @returns {Object} The popper's position offsets rounded\n *\n * The tale of pixel-perfect positioning. It's still not 100% perfect, but as\n * good as it can be within reason.\n * Discussion here: https://github.com/FezVrasta/popper.js/pull/715\n *\n * Low DPI screens cause a popper to be blurry if not using full pixels (Safari\n * as well on High DPI screens).\n *\n * Firefox prefers no rounding for positioning and does not have blurriness on\n * high DPI screens.\n *\n * Only horizontal placement and left/right values need to be considered.\n */\nfunction getRoundedOffsets(data, shouldRound) {\n  var _data$offsets = data.offsets,\n      popper = _data$offsets.popper,\n      reference = _data$offsets.reference;\n  var round = Math.round,\n      floor = Math.floor;\n\n  var noRound = function noRound(v) {\n    return v;\n  };\n\n  var referenceWidth = round(reference.width);\n  var popperWidth = round(popper.width);\n\n  var isVertical = ['left', 'right'].indexOf(data.placement) !== -1;\n  var isVariation = data.placement.indexOf('-') !== -1;\n  var sameWidthParity = referenceWidth % 2 === popperWidth % 2;\n  var bothOddWidth = referenceWidth % 2 === 1 && popperWidth % 2 === 1;\n\n  var horizontalToInteger = !shouldRound ? noRound : isVertical || isVariation || sameWidthParity ? round : floor;\n  var verticalToInteger = !shouldRound ? noRound : round;\n\n  return {\n    left: horizontalToInteger(bothOddWidth && !isVariation && shouldRound ? popper.left - 1 : popper.left),\n    top: verticalToInteger(popper.top),\n    bottom: verticalToInteger(popper.bottom),\n    right: horizontalToInteger(popper.right)\n  };\n}\n\nvar isFirefox = isBrowser && /Firefox/i.test(navigator.userAgent);\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeStyle(data, options) {\n  var x = options.x,\n      y = options.y;\n  var popper = data.offsets.popper;\n\n  // Remove this legacy support in Popper.js v2\n\n  var legacyGpuAccelerationOption = find(data.instance.modifiers, function (modifier) {\n    return modifier.name === 'applyStyle';\n  }).gpuAcceleration;\n  if (legacyGpuAccelerationOption !== undefined) {\n    console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!');\n  }\n  var gpuAcceleration = legacyGpuAccelerationOption !== undefined ? legacyGpuAccelerationOption : options.gpuAcceleration;\n\n  var offsetParent = getOffsetParent(data.instance.popper);\n  var offsetParentRect = getBoundingClientRect(offsetParent);\n\n  // Styles\n  var styles = {\n    position: popper.position\n  };\n\n  var offsets = getRoundedOffsets(data, window.devicePixelRatio < 2 || !isFirefox);\n\n  var sideA = x === 'bottom' ? 'top' : 'bottom';\n  var sideB = y === 'right' ? 'left' : 'right';\n\n  // if gpuAcceleration is set to `true` and transform is supported,\n  //  we use `translate3d` to apply the position to the popper we\n  // automatically use the supported prefixed version if needed\n  var prefixedProperty = getSupportedPropertyName('transform');\n\n  // now, let's make a step back and look at this code closely (wtf?)\n  // If the content of the popper grows once it's been positioned, it\n  // may happen that the popper gets misplaced because of the new content\n  // overflowing its reference element\n  // To avoid this problem, we provide two options (x and y), which allow\n  // the consumer to define the offset origin.\n  // If we position a popper on top of a reference element, we can set\n  // `x` to `top` to make the popper grow towards its top instead of\n  // its bottom.\n  var left = void 0,\n      top = void 0;\n  if (sideA === 'bottom') {\n    // when offsetParent is <html> the positioning is relative to the bottom of the screen (excluding the scrollbar)\n    // and not the bottom of the html element\n    if (offsetParent.nodeName === 'HTML') {\n      top = -offsetParent.clientHeight + offsets.bottom;\n    } else {\n      top = -offsetParentRect.height + offsets.bottom;\n    }\n  } else {\n    top = offsets.top;\n  }\n  if (sideB === 'right') {\n    if (offsetParent.nodeName === 'HTML') {\n      left = -offsetParent.clientWidth + offsets.right;\n    } else {\n      left = -offsetParentRect.width + offsets.right;\n    }\n  } else {\n    left = offsets.left;\n  }\n  if (gpuAcceleration && prefixedProperty) {\n    styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)';\n    styles[sideA] = 0;\n    styles[sideB] = 0;\n    styles.willChange = 'transform';\n  } else {\n    // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties\n    var invertTop = sideA === 'bottom' ? -1 : 1;\n    var invertLeft = sideB === 'right' ? -1 : 1;\n    styles[sideA] = top * invertTop;\n    styles[sideB] = left * invertLeft;\n    styles.willChange = sideA + ', ' + sideB;\n  }\n\n  // Attributes\n  var attributes = {\n    'x-placement': data.placement\n  };\n\n  // Update `data` attributes, styles and arrowStyles\n  data.attributes = _extends({}, attributes, data.attributes);\n  data.styles = _extends({}, styles, data.styles);\n  data.arrowStyles = _extends({}, data.offsets.arrow, data.arrowStyles);\n\n  return data;\n}\n\n/**\n * Helper used to know if the given modifier depends from another one.<br />\n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\nfunction isModifierRequired(modifiers, requestingName, requestedName) {\n  var requesting = find(modifiers, function (_ref) {\n    var name = _ref.name;\n    return name === requestingName;\n  });\n\n  var isRequired = !!requesting && modifiers.some(function (modifier) {\n    return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order;\n  });\n\n  if (!isRequired) {\n    var _requesting = '`' + requestingName + '`';\n    var requested = '`' + requestedName + '`';\n    console.warn(requested + ' modifier is required by ' + _requesting + ' modifier in order to work, be sure to include it before ' + _requesting + '!');\n  }\n  return isRequired;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction arrow(data, options) {\n  var _data$offsets$arrow;\n\n  // arrow depends on keepTogether in order to work\n  if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n    return data;\n  }\n\n  var arrowElement = options.element;\n\n  // if arrowElement is a string, suppose it's a CSS selector\n  if (typeof arrowElement === 'string') {\n    arrowElement = data.instance.popper.querySelector(arrowElement);\n\n    // if arrowElement is not found, don't run the modifier\n    if (!arrowElement) {\n      return data;\n    }\n  } else {\n    // if the arrowElement isn't a query selector we must check that the\n    // provided DOM node is child of its popper node\n    if (!data.instance.popper.contains(arrowElement)) {\n      console.warn('WARNING: `arrow.element` must be child of its popper element!');\n      return data;\n    }\n  }\n\n  var placement = data.placement.split('-')[0];\n  var _data$offsets = data.offsets,\n      popper = _data$offsets.popper,\n      reference = _data$offsets.reference;\n\n  var isVertical = ['left', 'right'].indexOf(placement) !== -1;\n\n  var len = isVertical ? 'height' : 'width';\n  var sideCapitalized = isVertical ? 'Top' : 'Left';\n  var side = sideCapitalized.toLowerCase();\n  var altSide = isVertical ? 'left' : 'top';\n  var opSide = isVertical ? 'bottom' : 'right';\n  var arrowElementSize = getOuterSizes(arrowElement)[len];\n\n  //\n  // extends keepTogether behavior making sure the popper and its\n  // reference have enough pixels in conjunction\n  //\n\n  // top/left side\n  if (reference[opSide] - arrowElementSize < popper[side]) {\n    data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize);\n  }\n  // bottom/right side\n  if (reference[side] + arrowElementSize > popper[opSide]) {\n    data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide];\n  }\n  data.offsets.popper = getClientRect(data.offsets.popper);\n\n  // compute center of the popper\n  var center = reference[side] + reference[len] / 2 - arrowElementSize / 2;\n\n  // Compute the sideValue using the updated popper offsets\n  // take popper margin in account because we don't have this info available\n  var css = getStyleComputedProperty(data.instance.popper);\n  var popperMarginSide = parseFloat(css['margin' + sideCapitalized]);\n  var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width']);\n  var sideValue = center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;\n\n  // prevent arrowElement from being placed not contiguously to its popper\n  sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\n\n  data.arrowElement = arrowElement;\n  data.offsets.arrow = (_data$offsets$arrow = {}, defineProperty(_data$offsets$arrow, side, Math.round(sideValue)), defineProperty(_data$offsets$arrow, altSide, ''), _data$offsets$arrow);\n\n  return data;\n}\n\n/**\n * Get the opposite placement variation of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement variation\n * @returns {String} flipped placement variation\n */\nfunction getOppositeVariation(variation) {\n  if (variation === 'end') {\n    return 'start';\n  } else if (variation === 'start') {\n    return 'end';\n  }\n  return variation;\n}\n\n/**\n * List of accepted placements to use as values of the `placement` option.<br />\n * Valid placements are:\n * - `auto`\n * - `top`\n * - `right`\n * - `bottom`\n * - `left`\n *\n * Each placement can have a variation from this list:\n * - `-start`\n * - `-end`\n *\n * Variations are interpreted easily if you think of them as the left to right\n * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`\n * is right.<br />\n * Vertically (`left` and `right`), `start` is top and `end` is bottom.\n *\n * Some valid examples are:\n * - `top-end` (on top of reference, right aligned)\n * - `right-start` (on right of reference, top aligned)\n * - `bottom` (on bottom, centered)\n * - `auto-end` (on the side with more space available, alignment depends by placement)\n *\n * @static\n * @type {Array}\n * @enum {String}\n * @readonly\n * @method placements\n * @memberof Popper\n */\nvar placements = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start'];\n\n// Get rid of `auto` `auto-start` and `auto-end`\nvar validPlacements = placements.slice(3);\n\n/**\n * Given an initial placement, returns all the subsequent placements\n * clockwise (or counter-clockwise).\n *\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement - A valid placement (it accepts variations)\n * @argument {Boolean} counter - Set to true to walk the placements counterclockwise\n * @returns {Array} placements including their variations\n */\nfunction clockwise(placement) {\n  var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n  var index = validPlacements.indexOf(placement);\n  var arr = validPlacements.slice(index + 1).concat(validPlacements.slice(0, index));\n  return counter ? arr.reverse() : arr;\n}\n\nvar BEHAVIORS = {\n  FLIP: 'flip',\n  CLOCKWISE: 'clockwise',\n  COUNTERCLOCKWISE: 'counterclockwise'\n};\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction flip(data, options) {\n  // if `inner` modifier is enabled, we can't use the `flip` modifier\n  if (isModifierEnabled(data.instance.modifiers, 'inner')) {\n    return data;\n  }\n\n  if (data.flipped && data.placement === data.originalPlacement) {\n    // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\n    return data;\n  }\n\n  var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed);\n\n  var placement = data.placement.split('-')[0];\n  var placementOpposite = getOppositePlacement(placement);\n  var variation = data.placement.split('-')[1] || '';\n\n  var flipOrder = [];\n\n  switch (options.behavior) {\n    case BEHAVIORS.FLIP:\n      flipOrder = [placement, placementOpposite];\n      break;\n    case BEHAVIORS.CLOCKWISE:\n      flipOrder = clockwise(placement);\n      break;\n    case BEHAVIORS.COUNTERCLOCKWISE:\n      flipOrder = clockwise(placement, true);\n      break;\n    default:\n      flipOrder = options.behavior;\n  }\n\n  flipOrder.forEach(function (step, index) {\n    if (placement !== step || flipOrder.length === index + 1) {\n      return data;\n    }\n\n    placement = data.placement.split('-')[0];\n    placementOpposite = getOppositePlacement(placement);\n\n    var popperOffsets = data.offsets.popper;\n    var refOffsets = data.offsets.reference;\n\n    // using floor because the reference offsets may contain decimals we are not going to consider here\n    var floor = Math.floor;\n    var overlapsRef = placement === 'left' && floor(popperOffsets.right) > floor(refOffsets.left) || placement === 'right' && floor(popperOffsets.left) < floor(refOffsets.right) || placement === 'top' && floor(popperOffsets.bottom) > floor(refOffsets.top) || placement === 'bottom' && floor(popperOffsets.top) < floor(refOffsets.bottom);\n\n    var overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);\n    var overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);\n    var overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);\n    var overflowsBottom = floor(popperOffsets.bottom) > floor(boundaries.bottom);\n\n    var overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom;\n\n    // flip the variation if required\n    var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n\n    // flips variation if reference element overflows boundaries\n    var flippedVariationByRef = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom);\n\n    // flips variation if popper content overflows boundaries\n    var flippedVariationByContent = !!options.flipVariationsByContent && (isVertical && variation === 'start' && overflowsRight || isVertical && variation === 'end' && overflowsLeft || !isVertical && variation === 'start' && overflowsBottom || !isVertical && variation === 'end' && overflowsTop);\n\n    var flippedVariation = flippedVariationByRef || flippedVariationByContent;\n\n    if (overlapsRef || overflowsBoundaries || flippedVariation) {\n      // this boolean to detect any flip loop\n      data.flipped = true;\n\n      if (overlapsRef || overflowsBoundaries) {\n        placement = flipOrder[index + 1];\n      }\n\n      if (flippedVariation) {\n        variation = getOppositeVariation(variation);\n      }\n\n      data.placement = placement + (variation ? '-' + variation : '');\n\n      // this object contains `position`, we want to preserve it along with\n      // any additional property we may add in the future\n      data.offsets.popper = _extends({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement));\n\n      data = runModifiers(data.instance.modifiers, data, 'flip');\n    }\n  });\n  return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction keepTogether(data) {\n  var _data$offsets = data.offsets,\n      popper = _data$offsets.popper,\n      reference = _data$offsets.reference;\n\n  var placement = data.placement.split('-')[0];\n  var floor = Math.floor;\n  var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n  var side = isVertical ? 'right' : 'bottom';\n  var opSide = isVertical ? 'left' : 'top';\n  var measurement = isVertical ? 'width' : 'height';\n\n  if (popper[side] < floor(reference[opSide])) {\n    data.offsets.popper[opSide] = floor(reference[opSide]) - popper[measurement];\n  }\n  if (popper[opSide] > floor(reference[side])) {\n    data.offsets.popper[opSide] = floor(reference[side]);\n  }\n\n  return data;\n}\n\n/**\n * Converts a string containing value + unit into a px value number\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} str - Value + unit string\n * @argument {String} measurement - `height` or `width`\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @returns {Number|String}\n * Value in pixels, or original string if no values were extracted\n */\nfunction toValue(str, measurement, popperOffsets, referenceOffsets) {\n  // separate value from unit\n  var split = str.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/);\n  var value = +split[1];\n  var unit = split[2];\n\n  // If it's not a number it's an operator, I guess\n  if (!value) {\n    return str;\n  }\n\n  if (unit.indexOf('%') === 0) {\n    var element = void 0;\n    switch (unit) {\n      case '%p':\n        element = popperOffsets;\n        break;\n      case '%':\n      case '%r':\n      default:\n        element = referenceOffsets;\n    }\n\n    var rect = getClientRect(element);\n    return rect[measurement] / 100 * value;\n  } else if (unit === 'vh' || unit === 'vw') {\n    // if is a vh or vw, we calculate the size based on the viewport\n    var size = void 0;\n    if (unit === 'vh') {\n      size = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);\n    } else {\n      size = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\n    }\n    return size / 100 * value;\n  } else {\n    // if is an explicit pixel unit, we get rid of the unit and keep the value\n    // if is an implicit unit, it's px, and we return just the value\n    return value;\n  }\n}\n\n/**\n * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} offset\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @argument {String} basePlacement\n * @returns {Array} a two cells array with x and y offsets in numbers\n */\nfunction parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) {\n  var offsets = [0, 0];\n\n  // Use height if placement is left or right and index is 0 otherwise use width\n  // in this way the first offset will use an axis and the second one\n  // will use the other one\n  var useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;\n\n  // Split the offset string to obtain a list of values and operands\n  // The regex addresses values with the plus or minus sign in front (+10, -20, etc)\n  var fragments = offset.split(/(\\+|\\-)/).map(function (frag) {\n    return frag.trim();\n  });\n\n  // Detect if the offset string contains a pair of values or a single one\n  // they could be separated by comma or space\n  var divider = fragments.indexOf(find(fragments, function (frag) {\n    return frag.search(/,|\\s/) !== -1;\n  }));\n\n  if (fragments[divider] && fragments[divider].indexOf(',') === -1) {\n    console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');\n  }\n\n  // If divider is found, we divide the list of values and operands to divide\n  // them by ofset X and Y.\n  var splitRegex = /\\s*,\\s*|\\s+/;\n  var ops = divider !== -1 ? [fragments.slice(0, divider).concat([fragments[divider].split(splitRegex)[0]]), [fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider + 1))] : [fragments];\n\n  // Convert the values with units to absolute pixels to allow our computations\n  ops = ops.map(function (op, index) {\n    // Most of the units rely on the orientation of the popper\n    var measurement = (index === 1 ? !useHeight : useHeight) ? 'height' : 'width';\n    var mergeWithPrevious = false;\n    return op\n    // This aggregates any `+` or `-` sign that aren't considered operators\n    // e.g.: 10 + +5 => [10, +, +5]\n    .reduce(function (a, b) {\n      if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {\n        a[a.length - 1] = b;\n        mergeWithPrevious = true;\n        return a;\n      } else if (mergeWithPrevious) {\n        a[a.length - 1] += b;\n        mergeWithPrevious = false;\n        return a;\n      } else {\n        return a.concat(b);\n      }\n    }, [])\n    // Here we convert the string values into number values (in px)\n    .map(function (str) {\n      return toValue(str, measurement, popperOffsets, referenceOffsets);\n    });\n  });\n\n  // Loop trough the offsets arrays and execute the operations\n  ops.forEach(function (op, index) {\n    op.forEach(function (frag, index2) {\n      if (isNumeric(frag)) {\n        offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);\n      }\n    });\n  });\n  return offsets;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @argument {Number|String} options.offset=0\n * The offset value as described in the modifier description\n * @returns {Object} The data object, properly modified\n */\nfunction offset(data, _ref) {\n  var offset = _ref.offset;\n  var placement = data.placement,\n      _data$offsets = data.offsets,\n      popper = _data$offsets.popper,\n      reference = _data$offsets.reference;\n\n  var basePlacement = placement.split('-')[0];\n\n  var offsets = void 0;\n  if (isNumeric(+offset)) {\n    offsets = [+offset, 0];\n  } else {\n    offsets = parseOffset(offset, popper, reference, basePlacement);\n  }\n\n  if (basePlacement === 'left') {\n    popper.top += offsets[0];\n    popper.left -= offsets[1];\n  } else if (basePlacement === 'right') {\n    popper.top += offsets[0];\n    popper.left += offsets[1];\n  } else if (basePlacement === 'top') {\n    popper.left += offsets[0];\n    popper.top -= offsets[1];\n  } else if (basePlacement === 'bottom') {\n    popper.left += offsets[0];\n    popper.top += offsets[1];\n  }\n\n  data.popper = popper;\n  return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction preventOverflow(data, options) {\n  var boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper);\n\n  // If offsetParent is the reference element, we really want to\n  // go one step up and use the next offsetParent as reference to\n  // avoid to make this modifier completely useless and look like broken\n  if (data.instance.reference === boundariesElement) {\n    boundariesElement = getOffsetParent(boundariesElement);\n  }\n\n  // NOTE: DOM access here\n  // resets the popper's position so that the document size can be calculated excluding\n  // the size of the popper element itself\n  var transformProp = getSupportedPropertyName('transform');\n  var popperStyles = data.instance.popper.style; // assignment to help minification\n  var top = popperStyles.top,\n      left = popperStyles.left,\n      transform = popperStyles[transformProp];\n\n  popperStyles.top = '';\n  popperStyles.left = '';\n  popperStyles[transformProp] = '';\n\n  var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed);\n\n  // NOTE: DOM access here\n  // restores the original style properties after the offsets have been computed\n  popperStyles.top = top;\n  popperStyles.left = left;\n  popperStyles[transformProp] = transform;\n\n  options.boundaries = boundaries;\n\n  var order = options.priority;\n  var popper = data.offsets.popper;\n\n  var check = {\n    primary: function primary(placement) {\n      var value = popper[placement];\n      if (popper[placement] < boundaries[placement] && !options.escapeWithReference) {\n        value = Math.max(popper[placement], boundaries[placement]);\n      }\n      return defineProperty({}, placement, value);\n    },\n    secondary: function secondary(placement) {\n      var mainSide = placement === 'right' ? 'left' : 'top';\n      var value = popper[mainSide];\n      if (popper[placement] > boundaries[placement] && !options.escapeWithReference) {\n        value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height));\n      }\n      return defineProperty({}, mainSide, value);\n    }\n  };\n\n  order.forEach(function (placement) {\n    var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';\n    popper = _extends({}, popper, check[side](placement));\n  });\n\n  data.offsets.popper = popper;\n\n  return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction shift(data) {\n  var placement = data.placement;\n  var basePlacement = placement.split('-')[0];\n  var shiftvariation = placement.split('-')[1];\n\n  // if shift shiftvariation is specified, run the modifier\n  if (shiftvariation) {\n    var _data$offsets = data.offsets,\n        reference = _data$offsets.reference,\n        popper = _data$offsets.popper;\n\n    var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n    var side = isVertical ? 'left' : 'top';\n    var measurement = isVertical ? 'width' : 'height';\n\n    var shiftOffsets = {\n      start: defineProperty({}, side, reference[side]),\n      end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement])\n    };\n\n    data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]);\n  }\n\n  return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction hide(data) {\n  if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {\n    return data;\n  }\n\n  var refRect = data.offsets.reference;\n  var bound = find(data.instance.modifiers, function (modifier) {\n    return modifier.name === 'preventOverflow';\n  }).boundaries;\n\n  if (refRect.bottom < bound.top || refRect.left > bound.right || refRect.top > bound.bottom || refRect.right < bound.left) {\n    // Avoid unnecessary DOM access if visibility hasn't changed\n    if (data.hide === true) {\n      return data;\n    }\n\n    data.hide = true;\n    data.attributes['x-out-of-boundaries'] = '';\n  } else {\n    // Avoid unnecessary DOM access if visibility hasn't changed\n    if (data.hide === false) {\n      return data;\n    }\n\n    data.hide = false;\n    data.attributes['x-out-of-boundaries'] = false;\n  }\n\n  return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction inner(data) {\n  var placement = data.placement;\n  var basePlacement = placement.split('-')[0];\n  var _data$offsets = data.offsets,\n      popper = _data$offsets.popper,\n      reference = _data$offsets.reference;\n\n  var isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n\n  var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n\n  popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n\n  data.placement = getOppositePlacement(placement);\n  data.offsets.popper = getClientRect(popper);\n\n  return data;\n}\n\n/**\n * Modifier function, each modifier can have a function of this type assigned\n * to its `fn` property.<br />\n * These functions will be called on each update, this means that you must\n * make sure they are performant enough to avoid performance bottlenecks.\n *\n * @function ModifierFn\n * @argument {dataObject} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {dataObject} The data object, properly modified\n */\n\n/**\n * Modifiers are plugins used to alter the behavior of your poppers.<br />\n * Popper.js uses a set of 9 modifiers to provide all the basic functionalities\n * needed by the library.\n *\n * Usually you don't want to override the `order`, `fn` and `onLoad` props.\n * All the other properties are configurations that could be tweaked.\n * @namespace modifiers\n */\nvar modifiers = {\n  /**\n   * Modifier used to shift the popper on the start or end of its reference\n   * element.<br />\n   * It will read the variation of the `placement` property.<br />\n   * It can be one either `-end` or `-start`.\n   * @memberof modifiers\n   * @inner\n   */\n  shift: {\n    /** @prop {number} order=100 - Index used to define the order of execution */\n    order: 100,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: shift\n  },\n\n  /**\n   * The `offset` modifier can shift your popper on both its axis.\n   *\n   * It accepts the following units:\n   * - `px` or unit-less, interpreted as pixels\n   * - `%` or `%r`, percentage relative to the length of the reference element\n   * - `%p`, percentage relative to the length of the popper element\n   * - `vw`, CSS viewport width unit\n   * - `vh`, CSS viewport height unit\n   *\n   * For length is intended the main axis relative to the placement of the popper.<br />\n   * This means that if the placement is `top` or `bottom`, the length will be the\n   * `width`. In case of `left` or `right`, it will be the `height`.\n   *\n   * You can provide a single value (as `Number` or `String`), or a pair of values\n   * as `String` divided by a comma or one (or more) white spaces.<br />\n   * The latter is a deprecated method because it leads to confusion and will be\n   * removed in v2.<br />\n   * Additionally, it accepts additions and subtractions between different units.\n   * Note that multiplications and divisions aren't supported.\n   *\n   * Valid examples are:\n   * ```\n   * 10\n   * '10%'\n   * '10, 10'\n   * '10%, 10'\n   * '10 + 10%'\n   * '10 - 5vh + 3%'\n   * '-10px + 5vh, 5px - 6%'\n   * ```\n   * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap\n   * > with their reference element, unfortunately, you will have to disable the `flip` modifier.\n   * > You can read more on this at this [issue](https://github.com/FezVrasta/popper.js/issues/373).\n   *\n   * @memberof modifiers\n   * @inner\n   */\n  offset: {\n    /** @prop {number} order=200 - Index used to define the order of execution */\n    order: 200,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: offset,\n    /** @prop {Number|String} offset=0\n     * The offset value as described in the modifier description\n     */\n    offset: 0\n  },\n\n  /**\n   * Modifier used to prevent the popper from being positioned outside the boundary.\n   *\n   * A scenario exists where the reference itself is not within the boundaries.<br />\n   * We can say it has \"escaped the boundaries\" — or just \"escaped\".<br />\n   * In this case we need to decide whether the popper should either:\n   *\n   * - detach from the reference and remain \"trapped\" in the boundaries, or\n   * - if it should ignore the boundary and \"escape with its reference\"\n   *\n   * When `escapeWithReference` is set to`true` and reference is completely\n   * outside its boundaries, the popper will overflow (or completely leave)\n   * the boundaries in order to remain attached to the edge of the reference.\n   *\n   * @memberof modifiers\n   * @inner\n   */\n  preventOverflow: {\n    /** @prop {number} order=300 - Index used to define the order of execution */\n    order: 300,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: preventOverflow,\n    /**\n     * @prop {Array} [priority=['left','right','top','bottom']]\n     * Popper will try to prevent overflow following these priorities by default,\n     * then, it could overflow on the left and on top of the `boundariesElement`\n     */\n    priority: ['left', 'right', 'top', 'bottom'],\n    /**\n     * @prop {number} padding=5\n     * Amount of pixel used to define a minimum distance between the boundaries\n     * and the popper. This makes sure the popper always has a little padding\n     * between the edges of its container\n     */\n    padding: 5,\n    /**\n     * @prop {String|HTMLElement} boundariesElement='scrollParent'\n     * Boundaries used by the modifier. Can be `scrollParent`, `window`,\n     * `viewport` or any DOM element.\n     */\n    boundariesElement: 'scrollParent'\n  },\n\n  /**\n   * Modifier used to make sure the reference and its popper stay near each other\n   * without leaving any gap between the two. Especially useful when the arrow is\n   * enabled and you want to ensure that it points to its reference element.\n   * It cares only about the first axis. You can still have poppers with margin\n   * between the popper and its reference element.\n   * @memberof modifiers\n   * @inner\n   */\n  keepTogether: {\n    /** @prop {number} order=400 - Index used to define the order of execution */\n    order: 400,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: keepTogether\n  },\n\n  /**\n   * This modifier is used to move the `arrowElement` of the popper to make\n   * sure it is positioned between the reference element and its popper element.\n   * It will read the outer size of the `arrowElement` node to detect how many\n   * pixels of conjunction are needed.\n   *\n   * It has no effect if no `arrowElement` is provided.\n   * @memberof modifiers\n   * @inner\n   */\n  arrow: {\n    /** @prop {number} order=500 - Index used to define the order of execution */\n    order: 500,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: arrow,\n    /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */\n    element: '[x-arrow]'\n  },\n\n  /**\n   * Modifier used to flip the popper's placement when it starts to overlap its\n   * reference element.\n   *\n   * Requires the `preventOverflow` modifier before it in order to work.\n   *\n   * **NOTE:** this modifier will interrupt the current update cycle and will\n   * restart it if it detects the need to flip the placement.\n   * @memberof modifiers\n   * @inner\n   */\n  flip: {\n    /** @prop {number} order=600 - Index used to define the order of execution */\n    order: 600,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: flip,\n    /**\n     * @prop {String|Array} behavior='flip'\n     * The behavior used to change the popper's placement. It can be one of\n     * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid\n     * placements (with optional variations)\n     */\n    behavior: 'flip',\n    /**\n     * @prop {number} padding=5\n     * The popper will flip if it hits the edges of the `boundariesElement`\n     */\n    padding: 5,\n    /**\n     * @prop {String|HTMLElement} boundariesElement='viewport'\n     * The element which will define the boundaries of the popper position.\n     * The popper will never be placed outside of the defined boundaries\n     * (except if `keepTogether` is enabled)\n     */\n    boundariesElement: 'viewport',\n    /**\n     * @prop {Boolean} flipVariations=false\n     * The popper will switch placement variation between `-start` and `-end` when\n     * the reference element overlaps its boundaries.\n     *\n     * The original placement should have a set variation.\n     */\n    flipVariations: false,\n    /**\n     * @prop {Boolean} flipVariationsByContent=false\n     * The popper will switch placement variation between `-start` and `-end` when\n     * the popper element overlaps its reference boundaries.\n     *\n     * The original placement should have a set variation.\n     */\n    flipVariationsByContent: false\n  },\n\n  /**\n   * Modifier used to make the popper flow toward the inner of the reference element.\n   * By default, when this modifier is disabled, the popper will be placed outside\n   * the reference element.\n   * @memberof modifiers\n   * @inner\n   */\n  inner: {\n    /** @prop {number} order=700 - Index used to define the order of execution */\n    order: 700,\n    /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */\n    enabled: false,\n    /** @prop {ModifierFn} */\n    fn: inner\n  },\n\n  /**\n   * Modifier used to hide the popper when its reference element is outside of the\n   * popper boundaries. It will set a `x-out-of-boundaries` attribute which can\n   * be used to hide with a CSS selector the popper when its reference is\n   * out of boundaries.\n   *\n   * Requires the `preventOverflow` modifier before it in order to work.\n   * @memberof modifiers\n   * @inner\n   */\n  hide: {\n    /** @prop {number} order=800 - Index used to define the order of execution */\n    order: 800,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: hide\n  },\n\n  /**\n   * Computes the style that will be applied to the popper element to gets\n   * properly positioned.\n   *\n   * Note that this modifier will not touch the DOM, it just prepares the styles\n   * so that `applyStyle` modifier can apply it. This separation is useful\n   * in case you need to replace `applyStyle` with a custom implementation.\n   *\n   * This modifier has `850` as `order` value to maintain backward compatibility\n   * with previous versions of Popper.js. Expect the modifiers ordering method\n   * to change in future major versions of the library.\n   *\n   * @memberof modifiers\n   * @inner\n   */\n  computeStyle: {\n    /** @prop {number} order=850 - Index used to define the order of execution */\n    order: 850,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: computeStyle,\n    /**\n     * @prop {Boolean} gpuAcceleration=true\n     * If true, it uses the CSS 3D transformation to position the popper.\n     * Otherwise, it will use the `top` and `left` properties\n     */\n    gpuAcceleration: true,\n    /**\n     * @prop {string} [x='bottom']\n     * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.\n     * Change this if your popper should grow in a direction different from `bottom`\n     */\n    x: 'bottom',\n    /**\n     * @prop {string} [x='left']\n     * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.\n     * Change this if your popper should grow in a direction different from `right`\n     */\n    y: 'right'\n  },\n\n  /**\n   * Applies the computed styles to the popper element.\n   *\n   * All the DOM manipulations are limited to this modifier. This is useful in case\n   * you want to integrate Popper.js inside a framework or view library and you\n   * want to delegate all the DOM manipulations to it.\n   *\n   * Note that if you disable this modifier, you must make sure the popper element\n   * has its position set to `absolute` before Popper.js can do its work!\n   *\n   * Just disable this modifier and define your own to achieve the desired effect.\n   *\n   * @memberof modifiers\n   * @inner\n   */\n  applyStyle: {\n    /** @prop {number} order=900 - Index used to define the order of execution */\n    order: 900,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: applyStyle,\n    /** @prop {Function} */\n    onLoad: applyStyleOnLoad,\n    /**\n     * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier\n     * @prop {Boolean} gpuAcceleration=true\n     * If true, it uses the CSS 3D transformation to position the popper.\n     * Otherwise, it will use the `top` and `left` properties\n     */\n    gpuAcceleration: undefined\n  }\n};\n\n/**\n * The `dataObject` is an object containing all the information used by Popper.js.\n * This object is passed to modifiers and to the `onCreate` and `onUpdate` callbacks.\n * @name dataObject\n * @property {Object} data.instance The Popper.js instance\n * @property {String} data.placement Placement applied to popper\n * @property {String} data.originalPlacement Placement originally defined on init\n * @property {Boolean} data.flipped True if popper has been flipped by flip modifier\n * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper\n * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier\n * @property {Object} data.styles Any CSS property defined here will be applied to the popper. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.boundaries Offsets of the popper boundaries\n * @property {Object} data.offsets The measurements of popper, reference and arrow elements\n * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0\n */\n\n/**\n * Default options provided to Popper.js constructor.<br />\n * These can be overridden using the `options` argument of Popper.js.<br />\n * To override an option, simply pass an object with the same\n * structure of the `options` object, as the 3rd argument. For example:\n * ```\n * new Popper(ref, pop, {\n *   modifiers: {\n *     preventOverflow: { enabled: false }\n *   }\n * })\n * ```\n * @type {Object}\n * @static\n * @memberof Popper\n */\nvar Defaults = {\n  /**\n   * Popper's placement.\n   * @prop {Popper.placements} placement='bottom'\n   */\n  placement: 'bottom',\n\n  /**\n   * Set this to true if you want popper to position it self in 'fixed' mode\n   * @prop {Boolean} positionFixed=false\n   */\n  positionFixed: false,\n\n  /**\n   * Whether events (resize, scroll) are initially enabled.\n   * @prop {Boolean} eventsEnabled=true\n   */\n  eventsEnabled: true,\n\n  /**\n   * Set to true if you want to automatically remove the popper when\n   * you call the `destroy` method.\n   * @prop {Boolean} removeOnDestroy=false\n   */\n  removeOnDestroy: false,\n\n  /**\n   * Callback called when the popper is created.<br />\n   * By default, it is set to no-op.<br />\n   * Access Popper.js instance with `data.instance`.\n   * @prop {onCreate}\n   */\n  onCreate: function onCreate() {},\n\n  /**\n   * Callback called when the popper is updated. This callback is not called\n   * on the initialization/creation of the popper, but only on subsequent\n   * updates.<br />\n   * By default, it is set to no-op.<br />\n   * Access Popper.js instance with `data.instance`.\n   * @prop {onUpdate}\n   */\n  onUpdate: function onUpdate() {},\n\n  /**\n   * List of modifiers used to modify the offsets before they are applied to the popper.\n   * They provide most of the functionalities of Popper.js.\n   * @prop {modifiers}\n   */\n  modifiers: modifiers\n};\n\n/**\n * @callback onCreate\n * @param {dataObject} data\n */\n\n/**\n * @callback onUpdate\n * @param {dataObject} data\n */\n\n// Utils\n// Methods\nvar Popper = function () {\n  /**\n   * Creates a new Popper.js instance.\n   * @class Popper\n   * @param {Element|referenceObject} reference - The reference element used to position the popper\n   * @param {Element} popper - The HTML / XML element used as the popper\n   * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)\n   * @return {Object} instance - The generated Popper.js instance\n   */\n  function Popper(reference, popper) {\n    var _this = this;\n\n    var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n    classCallCheck(this, Popper);\n\n    this.scheduleUpdate = function () {\n      return requestAnimationFrame(_this.update);\n    };\n\n    // make update() debounced, so that it only runs at most once-per-tick\n    this.update = debounce(this.update.bind(this));\n\n    // with {} we create a new object with the options inside it\n    this.options = _extends({}, Popper.Defaults, options);\n\n    // init state\n    this.state = {\n      isDestroyed: false,\n      isCreated: false,\n      scrollParents: []\n    };\n\n    // get reference and popper elements (allow jQuery wrappers)\n    this.reference = reference && reference.jquery ? reference[0] : reference;\n    this.popper = popper && popper.jquery ? popper[0] : popper;\n\n    // Deep merge modifiers options\n    this.options.modifiers = {};\n    Object.keys(_extends({}, Popper.Defaults.modifiers, options.modifiers)).forEach(function (name) {\n      _this.options.modifiers[name] = _extends({}, Popper.Defaults.modifiers[name] || {}, options.modifiers ? options.modifiers[name] : {});\n    });\n\n    // Refactoring modifiers' list (Object => Array)\n    this.modifiers = Object.keys(this.options.modifiers).map(function (name) {\n      return _extends({\n        name: name\n      }, _this.options.modifiers[name]);\n    })\n    // sort the modifiers by order\n    .sort(function (a, b) {\n      return a.order - b.order;\n    });\n\n    // modifiers have the ability to execute arbitrary code when Popper.js get inited\n    // such code is executed in the same order of its modifier\n    // they could add new properties to their options configuration\n    // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!\n    this.modifiers.forEach(function (modifierOptions) {\n      if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {\n        modifierOptions.onLoad(_this.reference, _this.popper, _this.options, modifierOptions, _this.state);\n      }\n    });\n\n    // fire the first update to position the popper in the right place\n    this.update();\n\n    var eventsEnabled = this.options.eventsEnabled;\n    if (eventsEnabled) {\n      // setup event listeners, they will take care of update the position in specific situations\n      this.enableEventListeners();\n    }\n\n    this.state.eventsEnabled = eventsEnabled;\n  }\n\n  // We can't use class properties because they don't get listed in the\n  // class prototype and break stuff like Sinon stubs\n\n\n  createClass(Popper, [{\n    key: 'update',\n    value: function update$$1() {\n      return update.call(this);\n    }\n  }, {\n    key: 'destroy',\n    value: function destroy$$1() {\n      return destroy.call(this);\n    }\n  }, {\n    key: 'enableEventListeners',\n    value: function enableEventListeners$$1() {\n      return enableEventListeners.call(this);\n    }\n  }, {\n    key: 'disableEventListeners',\n    value: function disableEventListeners$$1() {\n      return disableEventListeners.call(this);\n    }\n\n    /**\n     * Schedules an update. It will run on the next UI update available.\n     * @method scheduleUpdate\n     * @memberof Popper\n     */\n\n\n    /**\n     * Collection of utilities useful when writing custom modifiers.\n     * Starting from version 1.7, this method is available only if you\n     * include `popper-utils.js` before `popper.js`.\n     *\n     * **DEPRECATION**: This way to access PopperUtils is deprecated\n     * and will be removed in v2! Use the PopperUtils module directly instead.\n     * Due to the high instability of the methods contained in Utils, we can't\n     * guarantee them to follow semver. Use them at your own risk!\n     * @static\n     * @private\n     * @type {Object}\n     * @deprecated since version 1.8\n     * @member Utils\n     * @memberof Popper\n     */\n\n  }]);\n  return Popper;\n}();\n\n/**\n * The `referenceObject` is an object that provides an interface compatible with Popper.js\n * and lets you use it as replacement of a real DOM node.<br />\n * You can use this method to position a popper relatively to a set of coordinates\n * in case you don't have a DOM node to use as reference.\n *\n * ```\n * new Popper(referenceObject, popperNode);\n * ```\n *\n * NB: This feature isn't supported in Internet Explorer 10.\n * @name referenceObject\n * @property {Function} data.getBoundingClientRect\n * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.\n * @property {number} data.clientWidth\n * An ES6 getter that will return the width of the virtual reference element.\n * @property {number} data.clientHeight\n * An ES6 getter that will return the height of the virtual reference element.\n */\n\n\nPopper.Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;\nPopper.placements = placements;\nPopper.Defaults = Defaults;\n\nexport default Popper;\n//# sourceMappingURL=popper.js.map\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.2): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Popper from 'popper.js'\nimport Util from './util'\n\n/**\n * Constants\n */\n\nconst NAME = 'dropdown'\nconst VERSION = '4.6.2'\nconst DATA_KEY = 'bs.dropdown'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst ESCAPE_KEYCODE = 27 // KeyboardEvent.which value for Escape (Esc) key\nconst SPACE_KEYCODE = 32 // KeyboardEvent.which value for space key\nconst TAB_KEYCODE = 9 // KeyboardEvent.which value for tab key\nconst ARROW_UP_KEYCODE = 38 // KeyboardEvent.which value for up arrow key\nconst ARROW_DOWN_KEYCODE = 40 // KeyboardEvent.which value for down arrow key\nconst RIGHT_MOUSE_BUTTON_WHICH = 3 // MouseEvent.which value for the right button (assuming a right-handed mouse)\nconst REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEYCODE}|${ARROW_DOWN_KEYCODE}|${ESCAPE_KEYCODE}`)\n\nconst CLASS_NAME_DISABLED = 'disabled'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_DROPUP = 'dropup'\nconst CLASS_NAME_DROPRIGHT = 'dropright'\nconst CLASS_NAME_DROPLEFT = 'dropleft'\nconst CLASS_NAME_MENURIGHT = 'dropdown-menu-right'\nconst CLASS_NAME_POSITION_STATIC = 'position-static'\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK = `click${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY}${DATA_API_KEY}`\n\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"dropdown\"]'\nconst SELECTOR_FORM_CHILD = '.dropdown form'\nconst SELECTOR_MENU = '.dropdown-menu'\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav'\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'\n\nconst PLACEMENT_TOP = 'top-start'\nconst PLACEMENT_TOPEND = 'top-end'\nconst PLACEMENT_BOTTOM = 'bottom-start'\nconst PLACEMENT_BOTTOMEND = 'bottom-end'\nconst PLACEMENT_RIGHT = 'right-start'\nconst PLACEMENT_LEFT = 'left-start'\n\nconst Default = {\n  offset: 0,\n  flip: true,\n  boundary: 'scrollParent',\n  reference: 'toggle',\n  display: 'dynamic',\n  popperConfig: null\n}\n\nconst DefaultType = {\n  offset: '(number|string|function)',\n  flip: 'boolean',\n  boundary: '(string|element)',\n  reference: '(string|element)',\n  display: 'string',\n  popperConfig: '(null|object)'\n}\n\n/**\n * Class definition\n */\n\nclass Dropdown {\n  constructor(element, config) {\n    this._element = element\n    this._popper = null\n    this._config = this._getConfig(config)\n    this._menu = this._getMenuElement()\n    this._inNavbar = this._detectNavbar()\n\n    this._addEventListeners()\n  }\n\n  // Getters\n  static get VERSION() {\n    return VERSION\n  }\n\n  static get Default() {\n    return Default\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  // Public\n  toggle() {\n    if (this._element.disabled || $(this._element).hasClass(CLASS_NAME_DISABLED)) {\n      return\n    }\n\n    const isActive = $(this._menu).hasClass(CLASS_NAME_SHOW)\n\n    Dropdown._clearMenus()\n\n    if (isActive) {\n      return\n    }\n\n    this.show(true)\n  }\n\n  show(usePopper = false) {\n    if (this._element.disabled || $(this._element).hasClass(CLASS_NAME_DISABLED) || $(this._menu).hasClass(CLASS_NAME_SHOW)) {\n      return\n    }\n\n    const relatedTarget = {\n      relatedTarget: this._element\n    }\n    const showEvent = $.Event(EVENT_SHOW, relatedTarget)\n    const parent = Dropdown._getParentFromElement(this._element)\n\n    $(parent).trigger(showEvent)\n\n    if (showEvent.isDefaultPrevented()) {\n      return\n    }\n\n    // Totally disable Popper for Dropdowns in Navbar\n    if (!this._inNavbar && usePopper) {\n      // Check for Popper dependency\n      if (typeof Popper === 'undefined') {\n        throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)')\n      }\n\n      let referenceElement = this._element\n\n      if (this._config.reference === 'parent') {\n        referenceElement = parent\n      } else if (Util.isElement(this._config.reference)) {\n        referenceElement = this._config.reference\n\n        // Check if it's jQuery element\n        if (typeof this._config.reference.jquery !== 'undefined') {\n          referenceElement = this._config.reference[0]\n        }\n      }\n\n      // If boundary is not `scrollParent`, then set position to `static`\n      // to allow the menu to \"escape\" the scroll parent's boundaries\n      // https://github.com/twbs/bootstrap/issues/24251\n      if (this._config.boundary !== 'scrollParent') {\n        $(parent).addClass(CLASS_NAME_POSITION_STATIC)\n      }\n\n      this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig())\n    }\n\n    // If this is a touch-enabled device we add extra\n    // empty mouseover listeners to the body's immediate children;\n    // only needed because of broken event delegation on iOS\n    // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n    if ('ontouchstart' in document.documentElement &&\n        $(parent).closest(SELECTOR_NAVBAR_NAV).length === 0) {\n      $(document.body).children().on('mouseover', null, $.noop)\n    }\n\n    this._element.focus()\n    this._element.setAttribute('aria-expanded', true)\n\n    $(this._menu).toggleClass(CLASS_NAME_SHOW)\n    $(parent)\n      .toggleClass(CLASS_NAME_SHOW)\n      .trigger($.Event(EVENT_SHOWN, relatedTarget))\n  }\n\n  hide() {\n    if (this._element.disabled || $(this._element).hasClass(CLASS_NAME_DISABLED) || !$(this._menu).hasClass(CLASS_NAME_SHOW)) {\n      return\n    }\n\n    const relatedTarget = {\n      relatedTarget: this._element\n    }\n    const hideEvent = $.Event(EVENT_HIDE, relatedTarget)\n    const parent = Dropdown._getParentFromElement(this._element)\n\n    $(parent).trigger(hideEvent)\n\n    if (hideEvent.isDefaultPrevented()) {\n      return\n    }\n\n    if (this._popper) {\n      this._popper.destroy()\n    }\n\n    $(this._menu).toggleClass(CLASS_NAME_SHOW)\n    $(parent)\n      .toggleClass(CLASS_NAME_SHOW)\n      .trigger($.Event(EVENT_HIDDEN, relatedTarget))\n  }\n\n  dispose() {\n    $.removeData(this._element, DATA_KEY)\n    $(this._element).off(EVENT_KEY)\n    this._element = null\n    this._menu = null\n    if (this._popper !== null) {\n      this._popper.destroy()\n      this._popper = null\n    }\n  }\n\n  update() {\n    this._inNavbar = this._detectNavbar()\n    if (this._popper !== null) {\n      this._popper.scheduleUpdate()\n    }\n  }\n\n  // Private\n  _addEventListeners() {\n    $(this._element).on(EVENT_CLICK, event => {\n      event.preventDefault()\n      event.stopPropagation()\n      this.toggle()\n    })\n  }\n\n  _getConfig(config) {\n    config = {\n      ...this.constructor.Default,\n      ...$(this._element).data(),\n      ...config\n    }\n\n    Util.typeCheckConfig(\n      NAME,\n      config,\n      this.constructor.DefaultType\n    )\n\n    return config\n  }\n\n  _getMenuElement() {\n    if (!this._menu) {\n      const parent = Dropdown._getParentFromElement(this._element)\n\n      if (parent) {\n        this._menu = parent.querySelector(SELECTOR_MENU)\n      }\n    }\n\n    return this._menu\n  }\n\n  _getPlacement() {\n    const $parentDropdown = $(this._element.parentNode)\n    let placement = PLACEMENT_BOTTOM\n\n    // Handle dropup\n    if ($parentDropdown.hasClass(CLASS_NAME_DROPUP)) {\n      placement = $(this._menu).hasClass(CLASS_NAME_MENURIGHT) ?\n        PLACEMENT_TOPEND :\n        PLACEMENT_TOP\n    } else if ($parentDropdown.hasClass(CLASS_NAME_DROPRIGHT)) {\n      placement = PLACEMENT_RIGHT\n    } else if ($parentDropdown.hasClass(CLASS_NAME_DROPLEFT)) {\n      placement = PLACEMENT_LEFT\n    } else if ($(this._menu).hasClass(CLASS_NAME_MENURIGHT)) {\n      placement = PLACEMENT_BOTTOMEND\n    }\n\n    return placement\n  }\n\n  _detectNavbar() {\n    return $(this._element).closest('.navbar').length > 0\n  }\n\n  _getOffset() {\n    const offset = {}\n\n    if (typeof this._config.offset === 'function') {\n      offset.fn = data => {\n        data.offsets = {\n          ...data.offsets,\n          ...this._config.offset(data.offsets, this._element)\n        }\n\n        return data\n      }\n    } else {\n      offset.offset = this._config.offset\n    }\n\n    return offset\n  }\n\n  _getPopperConfig() {\n    const popperConfig = {\n      placement: this._getPlacement(),\n      modifiers: {\n        offset: this._getOffset(),\n        flip: {\n          enabled: this._config.flip\n        },\n        preventOverflow: {\n          boundariesElement: this._config.boundary\n        }\n      }\n    }\n\n    // Disable Popper if we have a static display\n    if (this._config.display === 'static') {\n      popperConfig.modifiers.applyStyle = {\n        enabled: false\n      }\n    }\n\n    return {\n      ...popperConfig,\n      ...this._config.popperConfig\n    }\n  }\n\n  // Static\n  static _jQueryInterface(config) {\n    return this.each(function () {\n      let data = $(this).data(DATA_KEY)\n      const _config = typeof config === 'object' ? config : null\n\n      if (!data) {\n        data = new Dropdown(this, _config)\n        $(this).data(DATA_KEY, data)\n      }\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`)\n        }\n\n        data[config]()\n      }\n    })\n  }\n\n  static _clearMenus(event) {\n    if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH ||\n      event.type === 'keyup' && event.which !== TAB_KEYCODE)) {\n      return\n    }\n\n    const toggles = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE))\n\n    for (let i = 0, len = toggles.length; i < len; i++) {\n      const parent = Dropdown._getParentFromElement(toggles[i])\n      const context = $(toggles[i]).data(DATA_KEY)\n      const relatedTarget = {\n        relatedTarget: toggles[i]\n      }\n\n      if (event && event.type === 'click') {\n        relatedTarget.clickEvent = event\n      }\n\n      if (!context) {\n        continue\n      }\n\n      const dropdownMenu = context._menu\n      if (!$(parent).hasClass(CLASS_NAME_SHOW)) {\n        continue\n      }\n\n      if (event && (event.type === 'click' &&\n          /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) &&\n          $.contains(parent, event.target)) {\n        continue\n      }\n\n      const hideEvent = $.Event(EVENT_HIDE, relatedTarget)\n      $(parent).trigger(hideEvent)\n      if (hideEvent.isDefaultPrevented()) {\n        continue\n      }\n\n      // If this is a touch-enabled device we remove the extra\n      // empty mouseover listeners we added for iOS support\n      if ('ontouchstart' in document.documentElement) {\n        $(document.body).children().off('mouseover', null, $.noop)\n      }\n\n      toggles[i].setAttribute('aria-expanded', 'false')\n\n      if (context._popper) {\n        context._popper.destroy()\n      }\n\n      $(dropdownMenu).removeClass(CLASS_NAME_SHOW)\n      $(parent)\n        .removeClass(CLASS_NAME_SHOW)\n        .trigger($.Event(EVENT_HIDDEN, relatedTarget))\n    }\n  }\n\n  static _getParentFromElement(element) {\n    let parent\n    const selector = Util.getSelectorFromElement(element)\n\n    if (selector) {\n      parent = document.querySelector(selector)\n    }\n\n    return parent || element.parentNode\n  }\n\n  // eslint-disable-next-line complexity\n  static _dataApiKeydownHandler(event) {\n    // If not input/textarea:\n    //  - And not a key in REGEXP_KEYDOWN => not a dropdown command\n    // If input/textarea:\n    //  - If space key => not a dropdown command\n    //  - If key is other than escape\n    //    - If key is not up or down => not a dropdown command\n    //    - If trigger inside the menu => not a dropdown command\n    if (/input|textarea/i.test(event.target.tagName) ?\n      event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE &&\n      (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE ||\n        $(event.target).closest(SELECTOR_MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {\n      return\n    }\n\n    if (this.disabled || $(this).hasClass(CLASS_NAME_DISABLED)) {\n      return\n    }\n\n    const parent = Dropdown._getParentFromElement(this)\n    const isActive = $(parent).hasClass(CLASS_NAME_SHOW)\n\n    if (!isActive && event.which === ESCAPE_KEYCODE) {\n      return\n    }\n\n    event.preventDefault()\n    event.stopPropagation()\n\n    if (!isActive || (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) {\n      if (event.which === ESCAPE_KEYCODE) {\n        $(parent.querySelector(SELECTOR_DATA_TOGGLE)).trigger('focus')\n      }\n\n      $(this).trigger('click')\n      return\n    }\n\n    const items = [].slice.call(parent.querySelectorAll(SELECTOR_VISIBLE_ITEMS))\n      .filter(item => $(item).is(':visible'))\n\n    if (items.length === 0) {\n      return\n    }\n\n    let index = items.indexOf(event.target)\n\n    if (event.which === ARROW_UP_KEYCODE && index > 0) { // Up\n      index--\n    }\n\n    if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) { // Down\n      index++\n    }\n\n    if (index < 0) {\n      index = 0\n    }\n\n    items[index].focus()\n  }\n}\n\n/**\n * Data API implementation\n */\n\n$(document)\n  .on(EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE, Dropdown._dataApiKeydownHandler)\n  .on(EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown._dataApiKeydownHandler)\n  .on(`${EVENT_CLICK_DATA_API} ${EVENT_KEYUP_DATA_API}`, Dropdown._clearMenus)\n  .on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n    event.preventDefault()\n    event.stopPropagation()\n    Dropdown._jQueryInterface.call($(this), 'toggle')\n  })\n  .on(EVENT_CLICK_DATA_API, SELECTOR_FORM_CHILD, e => {\n    e.stopPropagation()\n  })\n\n/**\n * jQuery\n */\n\n$.fn[NAME] = Dropdown._jQueryInterface\n$.fn[NAME].Constructor = Dropdown\n$.fn[NAME].noConflict = () => {\n  $.fn[NAME] = JQUERY_NO_CONFLICT\n  return Dropdown._jQueryInterface\n}\n\nexport default Dropdown\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.2): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * Constants\n */\n\nconst NAME = 'modal'\nconst VERSION = '4.6.2'\nconst DATA_KEY = 'bs.modal'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst ESCAPE_KEYCODE = 27 // KeyboardEvent.which value for Escape (Esc) key\n\nconst CLASS_NAME_SCROLLABLE = 'modal-dialog-scrollable'\nconst CLASS_NAME_SCROLLBAR_MEASURER = 'modal-scrollbar-measure'\nconst CLASS_NAME_BACKDROP = 'modal-backdrop'\nconst CLASS_NAME_OPEN = 'modal-open'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_STATIC = 'modal-static'\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`\nconst EVENT_RESIZE = `resize${EVENT_KEY}`\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\nconst EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY}`\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst SELECTOR_DIALOG = '.modal-dialog'\nconst SELECTOR_MODAL_BODY = '.modal-body'\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"modal\"]'\nconst SELECTOR_DATA_DISMISS = '[data-dismiss=\"modal\"]'\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top'\nconst SELECTOR_STICKY_CONTENT = '.sticky-top'\n\nconst Default = {\n  backdrop: true,\n  keyboard: true,\n  focus: true,\n  show: true\n}\n\nconst DefaultType = {\n  backdrop: '(boolean|string)',\n  keyboard: 'boolean',\n  focus: 'boolean',\n  show: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Modal {\n  constructor(element, config) {\n    this._config = this._getConfig(config)\n    this._element = element\n    this._dialog = element.querySelector(SELECTOR_DIALOG)\n    this._backdrop = null\n    this._isShown = false\n    this._isBodyOverflowing = false\n    this._ignoreBackdropClick = false\n    this._isTransitioning = false\n    this._scrollbarWidth = 0\n  }\n\n  // Getters\n  static get VERSION() {\n    return VERSION\n  }\n\n  static get Default() {\n    return Default\n  }\n\n  // Public\n  toggle(relatedTarget) {\n    return this._isShown ? this.hide() : this.show(relatedTarget)\n  }\n\n  show(relatedTarget) {\n    if (this._isShown || this._isTransitioning) {\n      return\n    }\n\n    const showEvent = $.Event(EVENT_SHOW, {\n      relatedTarget\n    })\n\n    $(this._element).trigger(showEvent)\n\n    if (showEvent.isDefaultPrevented()) {\n      return\n    }\n\n    this._isShown = true\n\n    if ($(this._element).hasClass(CLASS_NAME_FADE)) {\n      this._isTransitioning = true\n    }\n\n    this._checkScrollbar()\n    this._setScrollbar()\n\n    this._adjustDialog()\n\n    this._setEscapeEvent()\n    this._setResizeEvent()\n\n    $(this._element).on(\n      EVENT_CLICK_DISMISS,\n      SELECTOR_DATA_DISMISS,\n      event => this.hide(event)\n    )\n\n    $(this._dialog).on(EVENT_MOUSEDOWN_DISMISS, () => {\n      $(this._element).one(EVENT_MOUSEUP_DISMISS, event => {\n        if ($(event.target).is(this._element)) {\n          this._ignoreBackdropClick = true\n        }\n      })\n    })\n\n    this._showBackdrop(() => this._showElement(relatedTarget))\n  }\n\n  hide(event) {\n    if (event) {\n      event.preventDefault()\n    }\n\n    if (!this._isShown || this._isTransitioning) {\n      return\n    }\n\n    const hideEvent = $.Event(EVENT_HIDE)\n\n    $(this._element).trigger(hideEvent)\n\n    if (!this._isShown || hideEvent.isDefaultPrevented()) {\n      return\n    }\n\n    this._isShown = false\n    const transition = $(this._element).hasClass(CLASS_NAME_FADE)\n\n    if (transition) {\n      this._isTransitioning = true\n    }\n\n    this._setEscapeEvent()\n    this._setResizeEvent()\n\n    $(document).off(EVENT_FOCUSIN)\n\n    $(this._element).removeClass(CLASS_NAME_SHOW)\n\n    $(this._element).off(EVENT_CLICK_DISMISS)\n    $(this._dialog).off(EVENT_MOUSEDOWN_DISMISS)\n\n    if (transition) {\n      const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n      $(this._element)\n        .one(Util.TRANSITION_END, event => this._hideModal(event))\n        .emulateTransitionEnd(transitionDuration)\n    } else {\n      this._hideModal()\n    }\n  }\n\n  dispose() {\n    [window, this._element, this._dialog]\n      .forEach(htmlElement => $(htmlElement).off(EVENT_KEY))\n\n    /**\n     * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`\n     * Do not move `document` in `htmlElements` array\n     * It will remove `EVENT_CLICK_DATA_API` event that should remain\n     */\n    $(document).off(EVENT_FOCUSIN)\n\n    $.removeData(this._element, DATA_KEY)\n\n    this._config = null\n    this._element = null\n    this._dialog = null\n    this._backdrop = null\n    this._isShown = null\n    this._isBodyOverflowing = null\n    this._ignoreBackdropClick = null\n    this._isTransitioning = null\n    this._scrollbarWidth = null\n  }\n\n  handleUpdate() {\n    this._adjustDialog()\n  }\n\n  // Private\n  _getConfig(config) {\n    config = {\n      ...Default,\n      ...config\n    }\n    Util.typeCheckConfig(NAME, config, DefaultType)\n    return config\n  }\n\n  _triggerBackdropTransition() {\n    const hideEventPrevented = $.Event(EVENT_HIDE_PREVENTED)\n\n    $(this._element).trigger(hideEventPrevented)\n    if (hideEventPrevented.isDefaultPrevented()) {\n      return\n    }\n\n    const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n\n    if (!isModalOverflowing) {\n      this._element.style.overflowY = 'hidden'\n    }\n\n    this._element.classList.add(CLASS_NAME_STATIC)\n\n    const modalTransitionDuration = Util.getTransitionDurationFromElement(this._dialog)\n    $(this._element).off(Util.TRANSITION_END)\n\n    $(this._element).one(Util.TRANSITION_END, () => {\n      this._element.classList.remove(CLASS_NAME_STATIC)\n      if (!isModalOverflowing) {\n        $(this._element).one(Util.TRANSITION_END, () => {\n          this._element.style.overflowY = ''\n        })\n          .emulateTransitionEnd(this._element, modalTransitionDuration)\n      }\n    })\n      .emulateTransitionEnd(modalTransitionDuration)\n    this._element.focus()\n  }\n\n  _showElement(relatedTarget) {\n    const transition = $(this._element).hasClass(CLASS_NAME_FADE)\n    const modalBody = this._dialog ? this._dialog.querySelector(SELECTOR_MODAL_BODY) : null\n\n    if (!this._element.parentNode ||\n        this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n      // Don't move modal's DOM position\n      document.body.appendChild(this._element)\n    }\n\n    this._element.style.display = 'block'\n    this._element.removeAttribute('aria-hidden')\n    this._element.setAttribute('aria-modal', true)\n    this._element.setAttribute('role', 'dialog')\n\n    if ($(this._dialog).hasClass(CLASS_NAME_SCROLLABLE) && modalBody) {\n      modalBody.scrollTop = 0\n    } else {\n      this._element.scrollTop = 0\n    }\n\n    if (transition) {\n      Util.reflow(this._element)\n    }\n\n    $(this._element).addClass(CLASS_NAME_SHOW)\n\n    if (this._config.focus) {\n      this._enforceFocus()\n    }\n\n    const shownEvent = $.Event(EVENT_SHOWN, {\n      relatedTarget\n    })\n\n    const transitionComplete = () => {\n      if (this._config.focus) {\n        this._element.focus()\n      }\n\n      this._isTransitioning = false\n      $(this._element).trigger(shownEvent)\n    }\n\n    if (transition) {\n      const transitionDuration = Util.getTransitionDurationFromElement(this._dialog)\n\n      $(this._dialog)\n        .one(Util.TRANSITION_END, transitionComplete)\n        .emulateTransitionEnd(transitionDuration)\n    } else {\n      transitionComplete()\n    }\n  }\n\n  _enforceFocus() {\n    $(document)\n      .off(EVENT_FOCUSIN) // Guard against infinite focus loop\n      .on(EVENT_FOCUSIN, event => {\n        if (document !== event.target &&\n            this._element !== event.target &&\n            $(this._element).has(event.target).length === 0) {\n          this._element.focus()\n        }\n      })\n  }\n\n  _setEscapeEvent() {\n    if (this._isShown) {\n      $(this._element).on(EVENT_KEYDOWN_DISMISS, event => {\n        if (this._config.keyboard && event.which === ESCAPE_KEYCODE) {\n          event.preventDefault()\n          this.hide()\n        } else if (!this._config.keyboard && event.which === ESCAPE_KEYCODE) {\n          this._triggerBackdropTransition()\n        }\n      })\n    } else if (!this._isShown) {\n      $(this._element).off(EVENT_KEYDOWN_DISMISS)\n    }\n  }\n\n  _setResizeEvent() {\n    if (this._isShown) {\n      $(window).on(EVENT_RESIZE, event => this.handleUpdate(event))\n    } else {\n      $(window).off(EVENT_RESIZE)\n    }\n  }\n\n  _hideModal() {\n    this._element.style.display = 'none'\n    this._element.setAttribute('aria-hidden', true)\n    this._element.removeAttribute('aria-modal')\n    this._element.removeAttribute('role')\n    this._isTransitioning = false\n    this._showBackdrop(() => {\n      $(document.body).removeClass(CLASS_NAME_OPEN)\n      this._resetAdjustments()\n      this._resetScrollbar()\n      $(this._element).trigger(EVENT_HIDDEN)\n    })\n  }\n\n  _removeBackdrop() {\n    if (this._backdrop) {\n      $(this._backdrop).remove()\n      this._backdrop = null\n    }\n  }\n\n  _showBackdrop(callback) {\n    const animate = $(this._element).hasClass(CLASS_NAME_FADE) ?\n      CLASS_NAME_FADE : ''\n\n    if (this._isShown && this._config.backdrop) {\n      this._backdrop = document.createElement('div')\n      this._backdrop.className = CLASS_NAME_BACKDROP\n\n      if (animate) {\n        this._backdrop.classList.add(animate)\n      }\n\n      $(this._backdrop).appendTo(document.body)\n\n      $(this._element).on(EVENT_CLICK_DISMISS, event => {\n        if (this._ignoreBackdropClick) {\n          this._ignoreBackdropClick = false\n          return\n        }\n\n        if (event.target !== event.currentTarget) {\n          return\n        }\n\n        if (this._config.backdrop === 'static') {\n          this._triggerBackdropTransition()\n        } else {\n          this.hide()\n        }\n      })\n\n      if (animate) {\n        Util.reflow(this._backdrop)\n      }\n\n      $(this._backdrop).addClass(CLASS_NAME_SHOW)\n\n      if (!callback) {\n        return\n      }\n\n      if (!animate) {\n        callback()\n        return\n      }\n\n      const backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop)\n\n      $(this._backdrop)\n        .one(Util.TRANSITION_END, callback)\n        .emulateTransitionEnd(backdropTransitionDuration)\n    } else if (!this._isShown && this._backdrop) {\n      $(this._backdrop).removeClass(CLASS_NAME_SHOW)\n\n      const callbackRemove = () => {\n        this._removeBackdrop()\n        if (callback) {\n          callback()\n        }\n      }\n\n      if ($(this._element).hasClass(CLASS_NAME_FADE)) {\n        const backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop)\n\n        $(this._backdrop)\n          .one(Util.TRANSITION_END, callbackRemove)\n          .emulateTransitionEnd(backdropTransitionDuration)\n      } else {\n        callbackRemove()\n      }\n    } else if (callback) {\n      callback()\n    }\n  }\n\n  // ----------------------------------------------------------------------\n  // the following methods are used to handle overflowing modals\n  // todo (fat): these should probably be refactored out of modal.js\n  // ----------------------------------------------------------------------\n\n  _adjustDialog() {\n    const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n\n    if (!this._isBodyOverflowing && isModalOverflowing) {\n      this._element.style.paddingLeft = `${this._scrollbarWidth}px`\n    }\n\n    if (this._isBodyOverflowing && !isModalOverflowing) {\n      this._element.style.paddingRight = `${this._scrollbarWidth}px`\n    }\n  }\n\n  _resetAdjustments() {\n    this._element.style.paddingLeft = ''\n    this._element.style.paddingRight = ''\n  }\n\n  _checkScrollbar() {\n    const rect = document.body.getBoundingClientRect()\n    this._isBodyOverflowing = Math.round(rect.left + rect.right) < window.innerWidth\n    this._scrollbarWidth = this._getScrollbarWidth()\n  }\n\n  _setScrollbar() {\n    if (this._isBodyOverflowing) {\n      // Note: DOMNode.style.paddingRight returns the actual value or '' if not set\n      //   while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set\n      const fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT))\n      const stickyContent = [].slice.call(document.querySelectorAll(SELECTOR_STICKY_CONTENT))\n\n      // Adjust fixed content padding\n      $(fixedContent).each((index, element) => {\n        const actualPadding = element.style.paddingRight\n        const calculatedPadding = $(element).css('padding-right')\n        $(element)\n          .data('padding-right', actualPadding)\n          .css('padding-right', `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`)\n      })\n\n      // Adjust sticky content margin\n      $(stickyContent).each((index, element) => {\n        const actualMargin = element.style.marginRight\n        const calculatedMargin = $(element).css('margin-right')\n        $(element)\n          .data('margin-right', actualMargin)\n          .css('margin-right', `${parseFloat(calculatedMargin) - this._scrollbarWidth}px`)\n      })\n\n      // Adjust body padding\n      const actualPadding = document.body.style.paddingRight\n      const calculatedPadding = $(document.body).css('padding-right')\n      $(document.body)\n        .data('padding-right', actualPadding)\n        .css('padding-right', `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`)\n    }\n\n    $(document.body).addClass(CLASS_NAME_OPEN)\n  }\n\n  _resetScrollbar() {\n    // Restore fixed content padding\n    const fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT))\n    $(fixedContent).each((index, element) => {\n      const padding = $(element).data('padding-right')\n      $(element).removeData('padding-right')\n      element.style.paddingRight = padding ? padding : ''\n    })\n\n    // Restore sticky content\n    const elements = [].slice.call(document.querySelectorAll(`${SELECTOR_STICKY_CONTENT}`))\n    $(elements).each((index, element) => {\n      const margin = $(element).data('margin-right')\n      if (typeof margin !== 'undefined') {\n        $(element).css('margin-right', margin).removeData('margin-right')\n      }\n    })\n\n    // Restore body padding\n    const padding = $(document.body).data('padding-right')\n    $(document.body).removeData('padding-right')\n    document.body.style.paddingRight = padding ? padding : ''\n  }\n\n  _getScrollbarWidth() { // thx d.walsh\n    const scrollDiv = document.createElement('div')\n    scrollDiv.className = CLASS_NAME_SCROLLBAR_MEASURER\n    document.body.appendChild(scrollDiv)\n    const scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth\n    document.body.removeChild(scrollDiv)\n    return scrollbarWidth\n  }\n\n  // Static\n  static _jQueryInterface(config, relatedTarget) {\n    return this.each(function () {\n      let data = $(this).data(DATA_KEY)\n      const _config = {\n        ...Default,\n        ...$(this).data(),\n        ...(typeof config === 'object' && config ? config : {})\n      }\n\n      if (!data) {\n        data = new Modal(this, _config)\n        $(this).data(DATA_KEY, data)\n      }\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`)\n        }\n\n        data[config](relatedTarget)\n      } else if (_config.show) {\n        data.show(relatedTarget)\n      }\n    })\n  }\n}\n\n/**\n * Data API implementation\n */\n\n$(document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n  let target\n  const selector = Util.getSelectorFromElement(this)\n\n  if (selector) {\n    target = document.querySelector(selector)\n  }\n\n  const config = $(target).data(DATA_KEY) ?\n    'toggle' : {\n      ...$(target).data(),\n      ...$(this).data()\n    }\n\n  if (this.tagName === 'A' || this.tagName === 'AREA') {\n    event.preventDefault()\n  }\n\n  const $target = $(target).one(EVENT_SHOW, showEvent => {\n    if (showEvent.isDefaultPrevented()) {\n      // Only register focus restorer if modal will actually get shown\n      return\n    }\n\n    $target.one(EVENT_HIDDEN, () => {\n      if ($(this).is(':visible')) {\n        this.focus()\n      }\n    })\n  })\n\n  Modal._jQueryInterface.call($(target), config, this)\n})\n\n/**\n * jQuery\n */\n\n$.fn[NAME] = Modal._jQueryInterface\n$.fn[NAME].Constructor = Modal\n$.fn[NAME].noConflict = () => {\n  $.fn[NAME] = JQUERY_NO_CONFLICT\n  return Modal._jQueryInterface\n}\n\nexport default Modal\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.2): tools/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst uriAttrs = [\n  'background',\n  'cite',\n  'href',\n  'itemtype',\n  'longdesc',\n  'poster',\n  'src',\n  'xlink:href'\n]\n\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i\n\nexport const DefaultWhitelist = {\n  // Global attributes allowed on any supplied element below.\n  '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n  a: ['target', 'href', 'title', 'rel'],\n  area: [],\n  b: [],\n  br: [],\n  col: [],\n  code: [],\n  div: [],\n  em: [],\n  hr: [],\n  h1: [],\n  h2: [],\n  h3: [],\n  h4: [],\n  h5: [],\n  h6: [],\n  i: [],\n  img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n  li: [],\n  ol: [],\n  p: [],\n  pre: [],\n  s: [],\n  small: [],\n  span: [],\n  sub: [],\n  sup: [],\n  strong: [],\n  u: [],\n  ul: []\n}\n\n/**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shoutout to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i\n\n/**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shoutout to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i\n\nfunction allowedAttribute(attr, allowedAttributeList) {\n  const attrName = attr.nodeName.toLowerCase()\n\n  if (allowedAttributeList.indexOf(attrName) !== -1) {\n    if (uriAttrs.indexOf(attrName) !== -1) {\n      return Boolean(SAFE_URL_PATTERN.test(attr.nodeValue) || DATA_URL_PATTERN.test(attr.nodeValue))\n    }\n\n    return true\n  }\n\n  const regExp = allowedAttributeList.filter(attrRegex => attrRegex instanceof RegExp)\n\n  // Check if a regular expression validates the attribute.\n  for (let i = 0, len = regExp.length; i < len; i++) {\n    if (regExp[i].test(attrName)) {\n      return true\n    }\n  }\n\n  return false\n}\n\nexport function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {\n  if (unsafeHtml.length === 0) {\n    return unsafeHtml\n  }\n\n  if (sanitizeFn && typeof sanitizeFn === 'function') {\n    return sanitizeFn(unsafeHtml)\n  }\n\n  const domParser = new window.DOMParser()\n  const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html')\n  const whitelistKeys = Object.keys(whiteList)\n  const elements = [].slice.call(createdDocument.body.querySelectorAll('*'))\n\n  for (let i = 0, len = elements.length; i < len; i++) {\n    const el = elements[i]\n    const elName = el.nodeName.toLowerCase()\n\n    if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) {\n      el.parentNode.removeChild(el)\n\n      continue\n    }\n\n    const attributeList = [].slice.call(el.attributes)\n    // eslint-disable-next-line unicorn/prefer-spread\n    const whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || [])\n\n    attributeList.forEach(attr => {\n      if (!allowedAttribute(attr, whitelistedAttributes)) {\n        el.removeAttribute(attr.nodeName)\n      }\n    })\n  }\n\n  return createdDocument.body.innerHTML\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.2): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { DefaultWhitelist, sanitizeHtml } from './tools/sanitizer'\nimport $ from 'jquery'\nimport Popper from 'popper.js'\nimport Util from './util'\n\n/**\n * Constants\n */\n\nconst NAME = 'tooltip'\nconst VERSION = '4.6.2'\nconst DATA_KEY = 'bs.tooltip'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst CLASS_PREFIX = 'bs-tooltip'\nconst BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g')\nconst DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn']\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\nconst HOVER_STATE_SHOW = 'show'\nconst HOVER_STATE_OUT = 'out'\n\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner'\nconst SELECTOR_ARROW = '.arrow'\n\nconst TRIGGER_HOVER = 'hover'\nconst TRIGGER_FOCUS = 'focus'\nconst TRIGGER_CLICK = 'click'\nconst TRIGGER_MANUAL = 'manual'\n\nconst AttachmentMap = {\n  AUTO: 'auto',\n  TOP: 'top',\n  RIGHT: 'right',\n  BOTTOM: 'bottom',\n  LEFT: 'left'\n}\n\nconst Default = {\n  animation: true,\n  template: '<div class=\"tooltip\" role=\"tooltip\">' +\n                    '<div class=\"arrow\"></div>' +\n                    '<div class=\"tooltip-inner\"></div></div>',\n  trigger: 'hover focus',\n  title: '',\n  delay: 0,\n  html: false,\n  selector: false,\n  placement: 'top',\n  offset: 0,\n  container: false,\n  fallbackPlacement: 'flip',\n  boundary: 'scrollParent',\n  customClass: '',\n  sanitize: true,\n  sanitizeFn: null,\n  whiteList: DefaultWhitelist,\n  popperConfig: null\n}\n\nconst DefaultType = {\n  animation: 'boolean',\n  template: 'string',\n  title: '(string|element|function)',\n  trigger: 'string',\n  delay: '(number|object)',\n  html: 'boolean',\n  selector: '(string|boolean)',\n  placement: '(string|function)',\n  offset: '(number|string|function)',\n  container: '(string|element|boolean)',\n  fallbackPlacement: '(string|array)',\n  boundary: '(string|element)',\n  customClass: '(string|function)',\n  sanitize: 'boolean',\n  sanitizeFn: '(null|function)',\n  whiteList: 'object',\n  popperConfig: '(null|object)'\n}\n\nconst Event = {\n  HIDE: `hide${EVENT_KEY}`,\n  HIDDEN: `hidden${EVENT_KEY}`,\n  SHOW: `show${EVENT_KEY}`,\n  SHOWN: `shown${EVENT_KEY}`,\n  INSERTED: `inserted${EVENT_KEY}`,\n  CLICK: `click${EVENT_KEY}`,\n  FOCUSIN: `focusin${EVENT_KEY}`,\n  FOCUSOUT: `focusout${EVENT_KEY}`,\n  MOUSEENTER: `mouseenter${EVENT_KEY}`,\n  MOUSELEAVE: `mouseleave${EVENT_KEY}`\n}\n\n/**\n * Class definition\n */\n\nclass Tooltip {\n  constructor(element, config) {\n    if (typeof Popper === 'undefined') {\n      throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)')\n    }\n\n    // Private\n    this._isEnabled = true\n    this._timeout = 0\n    this._hoverState = ''\n    this._activeTrigger = {}\n    this._popper = null\n\n    // Protected\n    this.element = element\n    this.config = this._getConfig(config)\n    this.tip = null\n\n    this._setListeners()\n  }\n\n  // Getters\n  static get VERSION() {\n    return VERSION\n  }\n\n  static get Default() {\n    return Default\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  static get DATA_KEY() {\n    return DATA_KEY\n  }\n\n  static get Event() {\n    return Event\n  }\n\n  static get EVENT_KEY() {\n    return EVENT_KEY\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  // Public\n  enable() {\n    this._isEnabled = true\n  }\n\n  disable() {\n    this._isEnabled = false\n  }\n\n  toggleEnabled() {\n    this._isEnabled = !this._isEnabled\n  }\n\n  toggle(event) {\n    if (!this._isEnabled) {\n      return\n    }\n\n    if (event) {\n      const dataKey = this.constructor.DATA_KEY\n      let context = $(event.currentTarget).data(dataKey)\n\n      if (!context) {\n        context = new this.constructor(\n          event.currentTarget,\n          this._getDelegateConfig()\n        )\n        $(event.currentTarget).data(dataKey, context)\n      }\n\n      context._activeTrigger.click = !context._activeTrigger.click\n\n      if (context._isWithActiveTrigger()) {\n        context._enter(null, context)\n      } else {\n        context._leave(null, context)\n      }\n    } else {\n      if ($(this.getTipElement()).hasClass(CLASS_NAME_SHOW)) {\n        this._leave(null, this)\n        return\n      }\n\n      this._enter(null, this)\n    }\n  }\n\n  dispose() {\n    clearTimeout(this._timeout)\n\n    $.removeData(this.element, this.constructor.DATA_KEY)\n\n    $(this.element).off(this.constructor.EVENT_KEY)\n    $(this.element).closest('.modal').off('hide.bs.modal', this._hideModalHandler)\n\n    if (this.tip) {\n      $(this.tip).remove()\n    }\n\n    this._isEnabled = null\n    this._timeout = null\n    this._hoverState = null\n    this._activeTrigger = null\n    if (this._popper) {\n      this._popper.destroy()\n    }\n\n    this._popper = null\n    this.element = null\n    this.config = null\n    this.tip = null\n  }\n\n  show() {\n    if ($(this.element).css('display') === 'none') {\n      throw new Error('Please use show on visible elements')\n    }\n\n    const showEvent = $.Event(this.constructor.Event.SHOW)\n    if (this.isWithContent() && this._isEnabled) {\n      $(this.element).trigger(showEvent)\n\n      const shadowRoot = Util.findShadowRoot(this.element)\n      const isInTheDom = $.contains(\n        shadowRoot !== null ? shadowRoot : this.element.ownerDocument.documentElement,\n        this.element\n      )\n\n      if (showEvent.isDefaultPrevented() || !isInTheDom) {\n        return\n      }\n\n      const tip = this.getTipElement()\n      const tipId = Util.getUID(this.constructor.NAME)\n\n      tip.setAttribute('id', tipId)\n      this.element.setAttribute('aria-describedby', tipId)\n\n      this.setContent()\n\n      if (this.config.animation) {\n        $(tip).addClass(CLASS_NAME_FADE)\n      }\n\n      const placement = typeof this.config.placement === 'function' ?\n        this.config.placement.call(this, tip, this.element) :\n        this.config.placement\n\n      const attachment = this._getAttachment(placement)\n      this.addAttachmentClass(attachment)\n\n      const container = this._getContainer()\n      $(tip).data(this.constructor.DATA_KEY, this)\n\n      if (!$.contains(this.element.ownerDocument.documentElement, this.tip)) {\n        $(tip).appendTo(container)\n      }\n\n      $(this.element).trigger(this.constructor.Event.INSERTED)\n\n      this._popper = new Popper(this.element, tip, this._getPopperConfig(attachment))\n\n      $(tip).addClass(CLASS_NAME_SHOW)\n      $(tip).addClass(this.config.customClass)\n\n      // If this is a touch-enabled device we add extra\n      // empty mouseover listeners to the body's immediate children;\n      // only needed because of broken event delegation on iOS\n      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n      if ('ontouchstart' in document.documentElement) {\n        $(document.body).children().on('mouseover', null, $.noop)\n      }\n\n      const complete = () => {\n        if (this.config.animation) {\n          this._fixTransition()\n        }\n\n        const prevHoverState = this._hoverState\n        this._hoverState = null\n\n        $(this.element).trigger(this.constructor.Event.SHOWN)\n\n        if (prevHoverState === HOVER_STATE_OUT) {\n          this._leave(null, this)\n        }\n      }\n\n      if ($(this.tip).hasClass(CLASS_NAME_FADE)) {\n        const transitionDuration = Util.getTransitionDurationFromElement(this.tip)\n\n        $(this.tip)\n          .one(Util.TRANSITION_END, complete)\n          .emulateTransitionEnd(transitionDuration)\n      } else {\n        complete()\n      }\n    }\n  }\n\n  hide(callback) {\n    const tip = this.getTipElement()\n    const hideEvent = $.Event(this.constructor.Event.HIDE)\n    const complete = () => {\n      if (this._hoverState !== HOVER_STATE_SHOW && tip.parentNode) {\n        tip.parentNode.removeChild(tip)\n      }\n\n      this._cleanTipClass()\n      this.element.removeAttribute('aria-describedby')\n      $(this.element).trigger(this.constructor.Event.HIDDEN)\n      if (this._popper !== null) {\n        this._popper.destroy()\n      }\n\n      if (callback) {\n        callback()\n      }\n    }\n\n    $(this.element).trigger(hideEvent)\n\n    if (hideEvent.isDefaultPrevented()) {\n      return\n    }\n\n    $(tip).removeClass(CLASS_NAME_SHOW)\n\n    // If this is a touch-enabled device we remove the extra\n    // empty mouseover listeners we added for iOS support\n    if ('ontouchstart' in document.documentElement) {\n      $(document.body).children().off('mouseover', null, $.noop)\n    }\n\n    this._activeTrigger[TRIGGER_CLICK] = false\n    this._activeTrigger[TRIGGER_FOCUS] = false\n    this._activeTrigger[TRIGGER_HOVER] = false\n\n    if ($(this.tip).hasClass(CLASS_NAME_FADE)) {\n      const transitionDuration = Util.getTransitionDurationFromElement(tip)\n\n      $(tip)\n        .one(Util.TRANSITION_END, complete)\n        .emulateTransitionEnd(transitionDuration)\n    } else {\n      complete()\n    }\n\n    this._hoverState = ''\n  }\n\n  update() {\n    if (this._popper !== null) {\n      this._popper.scheduleUpdate()\n    }\n  }\n\n  // Protected\n  isWithContent() {\n    return Boolean(this.getTitle())\n  }\n\n  addAttachmentClass(attachment) {\n    $(this.getTipElement()).addClass(`${CLASS_PREFIX}-${attachment}`)\n  }\n\n  getTipElement() {\n    this.tip = this.tip || $(this.config.template)[0]\n    return this.tip\n  }\n\n  setContent() {\n    const tip = this.getTipElement()\n    this.setElementContent($(tip.querySelectorAll(SELECTOR_TOOLTIP_INNER)), this.getTitle())\n    $(tip).removeClass(`${CLASS_NAME_FADE} ${CLASS_NAME_SHOW}`)\n  }\n\n  setElementContent($element, content) {\n    if (typeof content === 'object' && (content.nodeType || content.jquery)) {\n      // Content is a DOM node or a jQuery\n      if (this.config.html) {\n        if (!$(content).parent().is($element)) {\n          $element.empty().append(content)\n        }\n      } else {\n        $element.text($(content).text())\n      }\n\n      return\n    }\n\n    if (this.config.html) {\n      if (this.config.sanitize) {\n        content = sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn)\n      }\n\n      $element.html(content)\n    } else {\n      $element.text(content)\n    }\n  }\n\n  getTitle() {\n    let title = this.element.getAttribute('data-original-title')\n\n    if (!title) {\n      title = typeof this.config.title === 'function' ?\n        this.config.title.call(this.element) :\n        this.config.title\n    }\n\n    return title\n  }\n\n  // Private\n  _getPopperConfig(attachment) {\n    const defaultBsConfig = {\n      placement: attachment,\n      modifiers: {\n        offset: this._getOffset(),\n        flip: {\n          behavior: this.config.fallbackPlacement\n        },\n        arrow: {\n          element: SELECTOR_ARROW\n        },\n        preventOverflow: {\n          boundariesElement: this.config.boundary\n        }\n      },\n      onCreate: data => {\n        if (data.originalPlacement !== data.placement) {\n          this._handlePopperPlacementChange(data)\n        }\n      },\n      onUpdate: data => this._handlePopperPlacementChange(data)\n    }\n\n    return {\n      ...defaultBsConfig,\n      ...this.config.popperConfig\n    }\n  }\n\n  _getOffset() {\n    const offset = {}\n\n    if (typeof this.config.offset === 'function') {\n      offset.fn = data => {\n        data.offsets = {\n          ...data.offsets,\n          ...this.config.offset(data.offsets, this.element)\n        }\n\n        return data\n      }\n    } else {\n      offset.offset = this.config.offset\n    }\n\n    return offset\n  }\n\n  _getContainer() {\n    if (this.config.container === false) {\n      return document.body\n    }\n\n    if (Util.isElement(this.config.container)) {\n      return $(this.config.container)\n    }\n\n    return $(document).find(this.config.container)\n  }\n\n  _getAttachment(placement) {\n    return AttachmentMap[placement.toUpperCase()]\n  }\n\n  _setListeners() {\n    const triggers = this.config.trigger.split(' ')\n\n    triggers.forEach(trigger => {\n      if (trigger === 'click') {\n        $(this.element).on(\n          this.constructor.Event.CLICK,\n          this.config.selector,\n          event => this.toggle(event)\n        )\n      } else if (trigger !== TRIGGER_MANUAL) {\n        const eventIn = trigger === TRIGGER_HOVER ?\n          this.constructor.Event.MOUSEENTER :\n          this.constructor.Event.FOCUSIN\n        const eventOut = trigger === TRIGGER_HOVER ?\n          this.constructor.Event.MOUSELEAVE :\n          this.constructor.Event.FOCUSOUT\n\n        $(this.element)\n          .on(eventIn, this.config.selector, event => this._enter(event))\n          .on(eventOut, this.config.selector, event => this._leave(event))\n      }\n    })\n\n    this._hideModalHandler = () => {\n      if (this.element) {\n        this.hide()\n      }\n    }\n\n    $(this.element).closest('.modal').on('hide.bs.modal', this._hideModalHandler)\n\n    if (this.config.selector) {\n      this.config = {\n        ...this.config,\n        trigger: 'manual',\n        selector: ''\n      }\n    } else {\n      this._fixTitle()\n    }\n  }\n\n  _fixTitle() {\n    const titleType = typeof this.element.getAttribute('data-original-title')\n\n    if (this.element.getAttribute('title') || titleType !== 'string') {\n      this.element.setAttribute(\n        'data-original-title',\n        this.element.getAttribute('title') || ''\n      )\n\n      this.element.setAttribute('title', '')\n    }\n  }\n\n  _enter(event, context) {\n    const dataKey = this.constructor.DATA_KEY\n    context = context || $(event.currentTarget).data(dataKey)\n\n    if (!context) {\n      context = new this.constructor(\n        event.currentTarget,\n        this._getDelegateConfig()\n      )\n      $(event.currentTarget).data(dataKey, context)\n    }\n\n    if (event) {\n      context._activeTrigger[\n        event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER\n      ] = true\n    }\n\n    if ($(context.getTipElement()).hasClass(CLASS_NAME_SHOW) || context._hoverState === HOVER_STATE_SHOW) {\n      context._hoverState = HOVER_STATE_SHOW\n      return\n    }\n\n    clearTimeout(context._timeout)\n\n    context._hoverState = HOVER_STATE_SHOW\n\n    if (!context.config.delay || !context.config.delay.show) {\n      context.show()\n      return\n    }\n\n    context._timeout = setTimeout(() => {\n      if (context._hoverState === HOVER_STATE_SHOW) {\n        context.show()\n      }\n    }, context.config.delay.show)\n  }\n\n  _leave(event, context) {\n    const dataKey = this.constructor.DATA_KEY\n    context = context || $(event.currentTarget).data(dataKey)\n\n    if (!context) {\n      context = new this.constructor(\n        event.currentTarget,\n        this._getDelegateConfig()\n      )\n      $(event.currentTarget).data(dataKey, context)\n    }\n\n    if (event) {\n      context._activeTrigger[\n        event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER\n      ] = false\n    }\n\n    if (context._isWithActiveTrigger()) {\n      return\n    }\n\n    clearTimeout(context._timeout)\n\n    context._hoverState = HOVER_STATE_OUT\n\n    if (!context.config.delay || !context.config.delay.hide) {\n      context.hide()\n      return\n    }\n\n    context._timeout = setTimeout(() => {\n      if (context._hoverState === HOVER_STATE_OUT) {\n        context.hide()\n      }\n    }, context.config.delay.hide)\n  }\n\n  _isWithActiveTrigger() {\n    for (const trigger in this._activeTrigger) {\n      if (this._activeTrigger[trigger]) {\n        return true\n      }\n    }\n\n    return false\n  }\n\n  _getConfig(config) {\n    const dataAttributes = $(this.element).data()\n\n    Object.keys(dataAttributes)\n      .forEach(dataAttr => {\n        if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) {\n          delete dataAttributes[dataAttr]\n        }\n      })\n\n    config = {\n      ...this.constructor.Default,\n      ...dataAttributes,\n      ...(typeof config === 'object' && config ? config : {})\n    }\n\n    if (typeof config.delay === 'number') {\n      config.delay = {\n        show: config.delay,\n        hide: config.delay\n      }\n    }\n\n    if (typeof config.title === 'number') {\n      config.title = config.title.toString()\n    }\n\n    if (typeof config.content === 'number') {\n      config.content = config.content.toString()\n    }\n\n    Util.typeCheckConfig(\n      NAME,\n      config,\n      this.constructor.DefaultType\n    )\n\n    if (config.sanitize) {\n      config.template = sanitizeHtml(config.template, config.whiteList, config.sanitizeFn)\n    }\n\n    return config\n  }\n\n  _getDelegateConfig() {\n    const config = {}\n\n    if (this.config) {\n      for (const key in this.config) {\n        if (this.constructor.Default[key] !== this.config[key]) {\n          config[key] = this.config[key]\n        }\n      }\n    }\n\n    return config\n  }\n\n  _cleanTipClass() {\n    const $tip = $(this.getTipElement())\n    const tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX)\n    if (tabClass !== null && tabClass.length) {\n      $tip.removeClass(tabClass.join(''))\n    }\n  }\n\n  _handlePopperPlacementChange(popperData) {\n    this.tip = popperData.instance.popper\n    this._cleanTipClass()\n    this.addAttachmentClass(this._getAttachment(popperData.placement))\n  }\n\n  _fixTransition() {\n    const tip = this.getTipElement()\n    const initConfigAnimation = this.config.animation\n\n    if (tip.getAttribute('x-placement') !== null) {\n      return\n    }\n\n    $(tip).removeClass(CLASS_NAME_FADE)\n    this.config.animation = false\n    this.hide()\n    this.show()\n    this.config.animation = initConfigAnimation\n  }\n\n  // Static\n  static _jQueryInterface(config) {\n    return this.each(function () {\n      const $element = $(this)\n      let data = $element.data(DATA_KEY)\n      const _config = typeof config === 'object' && config\n\n      if (!data && /dispose|hide/.test(config)) {\n        return\n      }\n\n      if (!data) {\n        data = new Tooltip(this, _config)\n        $element.data(DATA_KEY, data)\n      }\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`)\n        }\n\n        data[config]()\n      }\n    })\n  }\n}\n\n/**\n * jQuery\n */\n\n$.fn[NAME] = Tooltip._jQueryInterface\n$.fn[NAME].Constructor = Tooltip\n$.fn[NAME].noConflict = () => {\n  $.fn[NAME] = JQUERY_NO_CONFLICT\n  return Tooltip._jQueryInterface\n}\n\nexport default Tooltip\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.2): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Tooltip from './tooltip'\n\n/**\n * Constants\n */\n\nconst NAME = 'popover'\nconst VERSION = '4.6.2'\nconst DATA_KEY = 'bs.popover'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst CLASS_PREFIX = 'bs-popover'\nconst BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g')\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\nconst SELECTOR_TITLE = '.popover-header'\nconst SELECTOR_CONTENT = '.popover-body'\n\nconst Default = {\n  ...Tooltip.Default,\n  placement: 'right',\n  trigger: 'click',\n  content: '',\n  template: '<div class=\"popover\" role=\"tooltip\">' +\n              '<div class=\"arrow\"></div>' +\n              '<h3 class=\"popover-header\"></h3>' +\n              '<div class=\"popover-body\"></div></div>'\n}\n\nconst DefaultType = {\n  ...Tooltip.DefaultType,\n  content: '(string|element|function)'\n}\n\nconst Event = {\n  HIDE: `hide${EVENT_KEY}`,\n  HIDDEN: `hidden${EVENT_KEY}`,\n  SHOW: `show${EVENT_KEY}`,\n  SHOWN: `shown${EVENT_KEY}`,\n  INSERTED: `inserted${EVENT_KEY}`,\n  CLICK: `click${EVENT_KEY}`,\n  FOCUSIN: `focusin${EVENT_KEY}`,\n  FOCUSOUT: `focusout${EVENT_KEY}`,\n  MOUSEENTER: `mouseenter${EVENT_KEY}`,\n  MOUSELEAVE: `mouseleave${EVENT_KEY}`\n}\n\n/**\n * Class definition\n */\n\nclass Popover extends Tooltip {\n  // Getters\n  static get VERSION() {\n    return VERSION\n  }\n\n  static get Default() {\n    return Default\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  static get DATA_KEY() {\n    return DATA_KEY\n  }\n\n  static get Event() {\n    return Event\n  }\n\n  static get EVENT_KEY() {\n    return EVENT_KEY\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  // Overrides\n  isWithContent() {\n    return this.getTitle() || this._getContent()\n  }\n\n  addAttachmentClass(attachment) {\n    $(this.getTipElement()).addClass(`${CLASS_PREFIX}-${attachment}`)\n  }\n\n  getTipElement() {\n    this.tip = this.tip || $(this.config.template)[0]\n    return this.tip\n  }\n\n  setContent() {\n    const $tip = $(this.getTipElement())\n\n    // We use append for html objects to maintain js events\n    this.setElementContent($tip.find(SELECTOR_TITLE), this.getTitle())\n    let content = this._getContent()\n    if (typeof content === 'function') {\n      content = content.call(this.element)\n    }\n\n    this.setElementContent($tip.find(SELECTOR_CONTENT), content)\n\n    $tip.removeClass(`${CLASS_NAME_FADE} ${CLASS_NAME_SHOW}`)\n  }\n\n  // Private\n  _getContent() {\n    return this.element.getAttribute('data-content') ||\n      this.config.content\n  }\n\n  _cleanTipClass() {\n    const $tip = $(this.getTipElement())\n    const tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX)\n    if (tabClass !== null && tabClass.length > 0) {\n      $tip.removeClass(tabClass.join(''))\n    }\n  }\n\n  // Static\n  static _jQueryInterface(config) {\n    return this.each(function () {\n      let data = $(this).data(DATA_KEY)\n      const _config = typeof config === 'object' ? config : null\n\n      if (!data && /dispose|hide/.test(config)) {\n        return\n      }\n\n      if (!data) {\n        data = new Popover(this, _config)\n        $(this).data(DATA_KEY, data)\n      }\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`)\n        }\n\n        data[config]()\n      }\n    })\n  }\n}\n\n/**\n * jQuery\n */\n\n$.fn[NAME] = Popover._jQueryInterface\n$.fn[NAME].Constructor = Popover\n$.fn[NAME].noConflict = () => {\n  $.fn[NAME] = JQUERY_NO_CONFLICT\n  return Popover._jQueryInterface\n}\n\nexport default Popover\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.2): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * Constants\n */\n\nconst NAME = 'scrollspy'\nconst VERSION = '4.6.2'\nconst DATA_KEY = 'bs.scrollspy'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item'\nconst CLASS_NAME_ACTIVE = 'active'\n\nconst EVENT_ACTIVATE = `activate${EVENT_KEY}`\nconst EVENT_SCROLL = `scroll${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\n\nconst METHOD_OFFSET = 'offset'\nconst METHOD_POSITION = 'position'\n\nconst SELECTOR_DATA_SPY = '[data-spy=\"scroll\"]'\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'\nconst SELECTOR_NAV_LINKS = '.nav-link'\nconst SELECTOR_NAV_ITEMS = '.nav-item'\nconst SELECTOR_LIST_ITEMS = '.list-group-item'\nconst SELECTOR_DROPDOWN = '.dropdown'\nconst SELECTOR_DROPDOWN_ITEMS = '.dropdown-item'\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\n\nconst Default = {\n  offset: 10,\n  method: 'auto',\n  target: ''\n}\n\nconst DefaultType = {\n  offset: 'number',\n  method: 'string',\n  target: '(string|element)'\n}\n\n/**\n * Class definition\n */\n\nclass ScrollSpy {\n  constructor(element, config) {\n    this._element = element\n    this._scrollElement = element.tagName === 'BODY' ? window : element\n    this._config = this._getConfig(config)\n    this._selector = `${this._config.target} ${SELECTOR_NAV_LINKS},` +\n                          `${this._config.target} ${SELECTOR_LIST_ITEMS},` +\n                          `${this._config.target} ${SELECTOR_DROPDOWN_ITEMS}`\n    this._offsets = []\n    this._targets = []\n    this._activeTarget = null\n    this._scrollHeight = 0\n\n    $(this._scrollElement).on(EVENT_SCROLL, event => this._process(event))\n\n    this.refresh()\n    this._process()\n  }\n\n  // Getters\n  static get VERSION() {\n    return VERSION\n  }\n\n  static get Default() {\n    return Default\n  }\n\n  // Public\n  refresh() {\n    const autoMethod = this._scrollElement === this._scrollElement.window ?\n      METHOD_OFFSET : METHOD_POSITION\n\n    const offsetMethod = this._config.method === 'auto' ?\n      autoMethod : this._config.method\n\n    const offsetBase = offsetMethod === METHOD_POSITION ?\n      this._getScrollTop() : 0\n\n    this._offsets = []\n    this._targets = []\n\n    this._scrollHeight = this._getScrollHeight()\n\n    const targets = [].slice.call(document.querySelectorAll(this._selector))\n\n    targets\n      .map(element => {\n        let target\n        const targetSelector = Util.getSelectorFromElement(element)\n\n        if (targetSelector) {\n          target = document.querySelector(targetSelector)\n        }\n\n        if (target) {\n          const targetBCR = target.getBoundingClientRect()\n          if (targetBCR.width || targetBCR.height) {\n            // TODO (fat): remove sketch reliance on jQuery position/offset\n            return [\n              $(target)[offsetMethod]().top + offsetBase,\n              targetSelector\n            ]\n          }\n        }\n\n        return null\n      })\n      .filter(Boolean)\n      .sort((a, b) => a[0] - b[0])\n      .forEach(item => {\n        this._offsets.push(item[0])\n        this._targets.push(item[1])\n      })\n  }\n\n  dispose() {\n    $.removeData(this._element, DATA_KEY)\n    $(this._scrollElement).off(EVENT_KEY)\n\n    this._element = null\n    this._scrollElement = null\n    this._config = null\n    this._selector = null\n    this._offsets = null\n    this._targets = null\n    this._activeTarget = null\n    this._scrollHeight = null\n  }\n\n  // Private\n  _getConfig(config) {\n    config = {\n      ...Default,\n      ...(typeof config === 'object' && config ? config : {})\n    }\n\n    if (typeof config.target !== 'string' && Util.isElement(config.target)) {\n      let id = $(config.target).attr('id')\n      if (!id) {\n        id = Util.getUID(NAME)\n        $(config.target).attr('id', id)\n      }\n\n      config.target = `#${id}`\n    }\n\n    Util.typeCheckConfig(NAME, config, DefaultType)\n\n    return config\n  }\n\n  _getScrollTop() {\n    return this._scrollElement === window ?\n      this._scrollElement.pageYOffset : this._scrollElement.scrollTop\n  }\n\n  _getScrollHeight() {\n    return this._scrollElement.scrollHeight || Math.max(\n      document.body.scrollHeight,\n      document.documentElement.scrollHeight\n    )\n  }\n\n  _getOffsetHeight() {\n    return this._scrollElement === window ?\n      window.innerHeight : this._scrollElement.getBoundingClientRect().height\n  }\n\n  _process() {\n    const scrollTop = this._getScrollTop() + this._config.offset\n    const scrollHeight = this._getScrollHeight()\n    const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight()\n\n    if (this._scrollHeight !== scrollHeight) {\n      this.refresh()\n    }\n\n    if (scrollTop >= maxScroll) {\n      const target = this._targets[this._targets.length - 1]\n\n      if (this._activeTarget !== target) {\n        this._activate(target)\n      }\n\n      return\n    }\n\n    if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n      this._activeTarget = null\n      this._clear()\n      return\n    }\n\n    for (let i = this._offsets.length; i--;) {\n      const isActiveTarget = this._activeTarget !== this._targets[i] &&\n          scrollTop >= this._offsets[i] &&\n          (typeof this._offsets[i + 1] === 'undefined' ||\n              scrollTop < this._offsets[i + 1])\n\n      if (isActiveTarget) {\n        this._activate(this._targets[i])\n      }\n    }\n  }\n\n  _activate(target) {\n    this._activeTarget = target\n\n    this._clear()\n\n    const queries = this._selector\n      .split(',')\n      .map(selector => `${selector}[data-target=\"${target}\"],${selector}[href=\"${target}\"]`)\n\n    const $link = $([].slice.call(document.querySelectorAll(queries.join(','))))\n\n    if ($link.hasClass(CLASS_NAME_DROPDOWN_ITEM)) {\n      $link.closest(SELECTOR_DROPDOWN)\n        .find(SELECTOR_DROPDOWN_TOGGLE)\n        .addClass(CLASS_NAME_ACTIVE)\n      $link.addClass(CLASS_NAME_ACTIVE)\n    } else {\n      // Set triggered link as active\n      $link.addClass(CLASS_NAME_ACTIVE)\n      // Set triggered links parents as active\n      // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n      $link.parents(SELECTOR_NAV_LIST_GROUP)\n        .prev(`${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`)\n        .addClass(CLASS_NAME_ACTIVE)\n      // Handle special case when .nav-link is inside .nav-item\n      $link.parents(SELECTOR_NAV_LIST_GROUP)\n        .prev(SELECTOR_NAV_ITEMS)\n        .children(SELECTOR_NAV_LINKS)\n        .addClass(CLASS_NAME_ACTIVE)\n    }\n\n    $(this._scrollElement).trigger(EVENT_ACTIVATE, {\n      relatedTarget: target\n    })\n  }\n\n  _clear() {\n    [].slice.call(document.querySelectorAll(this._selector))\n      .filter(node => node.classList.contains(CLASS_NAME_ACTIVE))\n      .forEach(node => node.classList.remove(CLASS_NAME_ACTIVE))\n  }\n\n  // Static\n  static _jQueryInterface(config) {\n    return this.each(function () {\n      let data = $(this).data(DATA_KEY)\n      const _config = typeof config === 'object' && config\n\n      if (!data) {\n        data = new ScrollSpy(this, _config)\n        $(this).data(DATA_KEY, data)\n      }\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`)\n        }\n\n        data[config]()\n      }\n    })\n  }\n}\n\n/**\n * Data API implementation\n */\n\n$(window).on(EVENT_LOAD_DATA_API, () => {\n  const scrollSpys = [].slice.call(document.querySelectorAll(SELECTOR_DATA_SPY))\n  const scrollSpysLength = scrollSpys.length\n\n  for (let i = scrollSpysLength; i--;) {\n    const $spy = $(scrollSpys[i])\n    ScrollSpy._jQueryInterface.call($spy, $spy.data())\n  }\n})\n\n/**\n * jQuery\n */\n\n$.fn[NAME] = ScrollSpy._jQueryInterface\n$.fn[NAME].Constructor = ScrollSpy\n$.fn[NAME].noConflict = () => {\n  $.fn[NAME] = JQUERY_NO_CONFLICT\n  return ScrollSpy._jQueryInterface\n}\n\nexport default ScrollSpy\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.2): tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * Constants\n */\n\nconst NAME = 'tab'\nconst VERSION = '4.6.2'\nconst DATA_KEY = 'bs.tab'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu'\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_DISABLED = 'disabled'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst SELECTOR_DROPDOWN = '.dropdown'\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_ACTIVE_UL = '> li > .active'\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"tab\"], [data-toggle=\"pill\"], [data-toggle=\"list\"]'\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\nconst SELECTOR_DROPDOWN_ACTIVE_CHILD = '> .dropdown-menu .active'\n\n/**\n * Class definition\n */\n\nclass Tab {\n  constructor(element) {\n    this._element = element\n  }\n\n  // Getters\n  static get VERSION() {\n    return VERSION\n  }\n\n  // Public\n  show() {\n    if (this._element.parentNode &&\n        this._element.parentNode.nodeType === Node.ELEMENT_NODE &&\n        $(this._element).hasClass(CLASS_NAME_ACTIVE) ||\n        $(this._element).hasClass(CLASS_NAME_DISABLED) ||\n        this._element.hasAttribute('disabled')) {\n      return\n    }\n\n    let target\n    let previous\n    const listElement = $(this._element).closest(SELECTOR_NAV_LIST_GROUP)[0]\n    const selector = Util.getSelectorFromElement(this._element)\n\n    if (listElement) {\n      const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE\n      previous = $.makeArray($(listElement).find(itemSelector))\n      previous = previous[previous.length - 1]\n    }\n\n    const hideEvent = $.Event(EVENT_HIDE, {\n      relatedTarget: this._element\n    })\n\n    const showEvent = $.Event(EVENT_SHOW, {\n      relatedTarget: previous\n    })\n\n    if (previous) {\n      $(previous).trigger(hideEvent)\n    }\n\n    $(this._element).trigger(showEvent)\n\n    if (showEvent.isDefaultPrevented() ||\n        hideEvent.isDefaultPrevented()) {\n      return\n    }\n\n    if (selector) {\n      target = document.querySelector(selector)\n    }\n\n    this._activate(\n      this._element,\n      listElement\n    )\n\n    const complete = () => {\n      const hiddenEvent = $.Event(EVENT_HIDDEN, {\n        relatedTarget: this._element\n      })\n\n      const shownEvent = $.Event(EVENT_SHOWN, {\n        relatedTarget: previous\n      })\n\n      $(previous).trigger(hiddenEvent)\n      $(this._element).trigger(shownEvent)\n    }\n\n    if (target) {\n      this._activate(target, target.parentNode, complete)\n    } else {\n      complete()\n    }\n  }\n\n  dispose() {\n    $.removeData(this._element, DATA_KEY)\n    this._element = null\n  }\n\n  // Private\n  _activate(element, container, callback) {\n    const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ?\n      $(container).find(SELECTOR_ACTIVE_UL) :\n      $(container).children(SELECTOR_ACTIVE)\n\n    const active = activeElements[0]\n    const isTransitioning = callback && (active && $(active).hasClass(CLASS_NAME_FADE))\n    const complete = () => this._transitionComplete(\n      element,\n      active,\n      callback\n    )\n\n    if (active && isTransitioning) {\n      const transitionDuration = Util.getTransitionDurationFromElement(active)\n\n      $(active)\n        .removeClass(CLASS_NAME_SHOW)\n        .one(Util.TRANSITION_END, complete)\n        .emulateTransitionEnd(transitionDuration)\n    } else {\n      complete()\n    }\n  }\n\n  _transitionComplete(element, active, callback) {\n    if (active) {\n      $(active).removeClass(CLASS_NAME_ACTIVE)\n\n      const dropdownChild = $(active.parentNode).find(\n        SELECTOR_DROPDOWN_ACTIVE_CHILD\n      )[0]\n\n      if (dropdownChild) {\n        $(dropdownChild).removeClass(CLASS_NAME_ACTIVE)\n      }\n\n      if (active.getAttribute('role') === 'tab') {\n        active.setAttribute('aria-selected', false)\n      }\n    }\n\n    $(element).addClass(CLASS_NAME_ACTIVE)\n    if (element.getAttribute('role') === 'tab') {\n      element.setAttribute('aria-selected', true)\n    }\n\n    Util.reflow(element)\n\n    if (element.classList.contains(CLASS_NAME_FADE)) {\n      element.classList.add(CLASS_NAME_SHOW)\n    }\n\n    let parent = element.parentNode\n    if (parent && parent.nodeName === 'LI') {\n      parent = parent.parentNode\n    }\n\n    if (parent && $(parent).hasClass(CLASS_NAME_DROPDOWN_MENU)) {\n      const dropdownElement = $(element).closest(SELECTOR_DROPDOWN)[0]\n\n      if (dropdownElement) {\n        const dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(SELECTOR_DROPDOWN_TOGGLE))\n\n        $(dropdownToggleList).addClass(CLASS_NAME_ACTIVE)\n      }\n\n      element.setAttribute('aria-expanded', true)\n    }\n\n    if (callback) {\n      callback()\n    }\n  }\n\n  // Static\n  static _jQueryInterface(config) {\n    return this.each(function () {\n      const $this = $(this)\n      let data = $this.data(DATA_KEY)\n\n      if (!data) {\n        data = new Tab(this)\n        $this.data(DATA_KEY, data)\n      }\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`)\n        }\n\n        data[config]()\n      }\n    })\n  }\n}\n\n/**\n * Data API implementation\n */\n\n$(document)\n  .on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n    event.preventDefault()\n    Tab._jQueryInterface.call($(this), 'show')\n  })\n\n/**\n * jQuery\n */\n\n$.fn[NAME] = Tab._jQueryInterface\n$.fn[NAME].Constructor = Tab\n$.fn[NAME].noConflict = () => {\n  $.fn[NAME] = JQUERY_NO_CONFLICT\n  return Tab._jQueryInterface\n}\n\nexport default Tab\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.2): toast.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * Constants\n */\n\nconst NAME = 'toast'\nconst VERSION = '4.6.2'\nconst DATA_KEY = 'bs.toast'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_HIDE = 'hide'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_SHOWING = 'showing'\n\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\n\nconst SELECTOR_DATA_DISMISS = '[data-dismiss=\"toast\"]'\n\nconst Default = {\n  animation: true,\n  autohide: true,\n  delay: 500\n}\n\nconst DefaultType = {\n  animation: 'boolean',\n  autohide: 'boolean',\n  delay: 'number'\n}\n\n/**\n * Class definition\n */\n\nclass Toast {\n  constructor(element, config) {\n    this._element = element\n    this._config = this._getConfig(config)\n    this._timeout = null\n    this._setListeners()\n  }\n\n  // Getters\n  static get VERSION() {\n    return VERSION\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get Default() {\n    return Default\n  }\n\n  // Public\n  show() {\n    const showEvent = $.Event(EVENT_SHOW)\n\n    $(this._element).trigger(showEvent)\n    if (showEvent.isDefaultPrevented()) {\n      return\n    }\n\n    this._clearTimeout()\n\n    if (this._config.animation) {\n      this._element.classList.add(CLASS_NAME_FADE)\n    }\n\n    const complete = () => {\n      this._element.classList.remove(CLASS_NAME_SHOWING)\n      this._element.classList.add(CLASS_NAME_SHOW)\n\n      $(this._element).trigger(EVENT_SHOWN)\n\n      if (this._config.autohide) {\n        this._timeout = setTimeout(() => {\n          this.hide()\n        }, this._config.delay)\n      }\n    }\n\n    this._element.classList.remove(CLASS_NAME_HIDE)\n    Util.reflow(this._element)\n    this._element.classList.add(CLASS_NAME_SHOWING)\n    if (this._config.animation) {\n      const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n      $(this._element)\n        .one(Util.TRANSITION_END, complete)\n        .emulateTransitionEnd(transitionDuration)\n    } else {\n      complete()\n    }\n  }\n\n  hide() {\n    if (!this._element.classList.contains(CLASS_NAME_SHOW)) {\n      return\n    }\n\n    const hideEvent = $.Event(EVENT_HIDE)\n\n    $(this._element).trigger(hideEvent)\n    if (hideEvent.isDefaultPrevented()) {\n      return\n    }\n\n    this._close()\n  }\n\n  dispose() {\n    this._clearTimeout()\n\n    if (this._element.classList.contains(CLASS_NAME_SHOW)) {\n      this._element.classList.remove(CLASS_NAME_SHOW)\n    }\n\n    $(this._element).off(EVENT_CLICK_DISMISS)\n\n    $.removeData(this._element, DATA_KEY)\n    this._element = null\n    this._config = null\n  }\n\n  // Private\n  _getConfig(config) {\n    config = {\n      ...Default,\n      ...$(this._element).data(),\n      ...(typeof config === 'object' && config ? config : {})\n    }\n\n    Util.typeCheckConfig(\n      NAME,\n      config,\n      this.constructor.DefaultType\n    )\n\n    return config\n  }\n\n  _setListeners() {\n    $(this._element).on(EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, () => this.hide())\n  }\n\n  _close() {\n    const complete = () => {\n      this._element.classList.add(CLASS_NAME_HIDE)\n      $(this._element).trigger(EVENT_HIDDEN)\n    }\n\n    this._element.classList.remove(CLASS_NAME_SHOW)\n    if (this._config.animation) {\n      const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n      $(this._element)\n        .one(Util.TRANSITION_END, complete)\n        .emulateTransitionEnd(transitionDuration)\n    } else {\n      complete()\n    }\n  }\n\n  _clearTimeout() {\n    clearTimeout(this._timeout)\n    this._timeout = null\n  }\n\n  // Static\n  static _jQueryInterface(config) {\n    return this.each(function () {\n      const $element = $(this)\n      let data = $element.data(DATA_KEY)\n      const _config = typeof config === 'object' && config\n\n      if (!data) {\n        data = new Toast(this, _config)\n        $element.data(DATA_KEY, data)\n      }\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`)\n        }\n\n        data[config](this)\n      }\n    })\n  }\n}\n\n/**\n * jQuery\n */\n\n$.fn[NAME] = Toast._jQueryInterface\n$.fn[NAME].Constructor = Toast\n$.fn[NAME].noConflict = () => {\n  $.fn[NAME] = JQUERY_NO_CONFLICT\n  return Toast._jQueryInterface\n}\n\nexport default Toast\n"],"names":["$parcel$interopDefault","a","__esModule","default","$parcel$global","globalThis","$parcel$modules","$parcel$inits","parcelRequire","id","exports","init","module","call","err","Error","code","register","parcelRegister","global","factory","window","window1","noGlobal","body","arr","getProto","Object","getPrototypeOf","slice","flat","array","concat","apply","push","indexOf","class2type","toString","hasOwn","hasOwnProperty","fnToString","ObjectFunctionString","support","isFunction","obj","nodeType","item","isWindow","document","preservedScriptAttributes","type","src","nonce","noModule","DOMEval","node","doc","i","val","script","createElement","text","getAttribute","setAttribute","head","appendChild","parentNode","removeChild","toType","version","rhtmlSuffix","jQuery","selector","context","fn","isArrayLike","length","nodeName","elem","name","toLowerCase","prototype","jquery","constructor","toArray","get","num","pushStack","elems","ret","merge","prevObject","each","callback","map","arguments","first","eq","last","even","grep","_elem","odd","len","j","end","sort","splice","extend","options","copy","copyIsArray","clone","target","deep","isPlainObject","Array","isArray","undefined","expando","Math","random","replace","isReady","error","msg","noop","proto","Ctor","isEmptyObject","globalEval","textContent","documentElement","nodeValue","makeArray","results","inArray","isXMLDoc","namespace","namespaceURI","docElem","ownerDocument","test","second","invert","matches","callbackExpect","arg","value","guid","Symbol","iterator","split","_i","pop","whitespace","rtrimCSS","RegExp","contains","b","bup","compareDocumentPosition","rcssescape","fcssescape","ch","asCodePoint","charCodeAt","escapeSelector","sel","Expr","outermostContext","sortInput","hasDuplicate","documentIsHTML","rbuggyQSA","dirruns","done","classCache","createCache","tokenCache","compilerCache","nonnativeSelectorCache","sortOrder","booleans","identifier","attributes","pseudos","rwhitespace","rcomma","rleadingCombinator","rdescend","rpseudo","ridentifier","matchExpr","ID","CLASS","TAG","ATTR","PSEUDO","CHILD","bool","needsContext","rinputs","rheader","rquickExpr","rsibling","runescape","funescape","escape","nonHex","high","String","fromCharCode","unloadHandler","setDocument","inDisabledFieldset","addCombinator","disabled","dir","next","preferredDoc","childNodes","e","els","pushNative","find","seed","m","nid","match","groups","newSelector","newContext","exec","getElementById","getElementsByTagName","getElementsByClassName","testContext","scope","tokenize","toSelector","join","querySelectorAll","qsaError","removeAttribute","select","keys","cache","key","cacheLength","shift","markFunction","assert","el","createDisabledPseudo","isDisabled","createPositionalPseudo","argument","matchIndexes","subWindow","webkitMatchesSelector","msMatchesSelector","defaultView","top","addEventListener","getById","getElementsByName","disconnectedMatch","cssHas","querySelector","filter","attrId","getAttributeNode","tag","className","input","innerHTML","compare","sortDetached","expr","elements","matchesSelector","attr","attrHandle","uniqueSort","duplicates","sortStable","createPseudo","relative","preFilter","excess","unquoted","nodeNameSelector","expectedNodeName","pattern","operator","check","result","what","_argument","simple","forward","ofType","_context","xml","outerCache","nodeIndex","start","parent","useCache","diff","firstChild","lastChild","pseudo","args","setFilters","idx","matched","not","matcher","compile","unmatched","has","lang","elemLang","hash","location","root","focus","safeActiveElement","activeElement","hasFocus","href","tabIndex","enabled","checked","selected","selectedIndex","empty","nextSibling","header","button","_matchIndexes","lt","gt","nth","radio","checkbox","file","password","image","createInputPseudo","submit","reset","createButtonPseudo","parseOnly","tokens","soFar","preFilters","cached","combinator","base","skip","checkNonElements","doneName","oldCache","newCache","elementMatcher","matchers","condense","newUnmatched","mapped","bySet","byElement","superMatcher","setMatchers","elementMatchers","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","setMatcher","postFilter","postFinder","postSelector","temp","matcherOut","preMap","postMap","preexisting","multipleContexts","contexts","matcherIn","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","token","compiled","filters","unique","getText","isXML","selectors","until","truncate","is","siblings","n","rneedsContext","rsingleTag","winnow","qualifier","self","rootjQuery","parseHTML","ready","rparentsprev","guaranteedUnique","children","contents","prev","sibling","cur","targets","l","closest","index","prevAll","add","addBack","parents","parentsUntil","nextAll","nextUntil","prevUntil","contentDocument","content","reverse","rnothtmlwhite","Identity","v","Thrower","ex","adoptValue","resolve","reject","noValue","method","promise","fail","then","Callbacks","object","_","flag","firing","memory","fired","locked","list","queue","firingIndex","fire","once","stopOnFalse","remove","disable","lock","fireWith","Deferred","func","tuples","state","always","deferred","pipe","fns","newDefer","tuple","returned","progress","notify","onFulfilled","onRejected","onProgress","maxDepth","depth","handler","special","that","mightThrow","TypeError","notifyWith","resolveWith","process","exceptionHook","rejectWith","getErrorHook","getStackHook","setTimeout","stateString","when","singleValue","remaining","resolveContexts","resolveValues","primary","updateFunc","rerrorNames","asyncError","console","warn","message","stack","readyException","readyList","completed","removeEventListener","catch","readyWait","wait","readyState","doScroll","access","chainable","emptyGet","raw","bulk","_key","rmsPrefix","rdashAlpha","fcamelCase","_all","letter","toUpperCase","camelCase","string","acceptData","owner","Data","uid","defineProperty","configurable","set","data","prop","hasData","dataPriv","dataUser","rbrace","rmultiDash","dataAttr","JSON","parse","removeData","_data","_removeData","attrs","dequeue","startLength","hooks","_queueHooks","unshift","stop","setter","clearQueue","tmp","count","defer","pnum","source","rcssNum","cssExpand","isAttached","composed","getRootNode","isHiddenWithinTree","style","display","css","adjustCSS","valueParts","tween","adjusted","scale","maxIterations","currentValue","initial","unit","cssNumber","initialInUnit","defaultDisplayMap","showHide","show","values","getDefaultDisplay","hide","toggle","rcheckableType","rtagName","rscriptType","div","fragment","createDocumentFragment","checkClone","cloneNode","noCloneChecked","defaultValue","option","wrapMap","thead","col","tr","td","_default","getAll","setGlobalEval","refElements","tbody","tfoot","colgroup","caption","th","optgroup","rhtml","buildFragment","scripts","selection","ignored","wrap","attached","nodes","htmlPrefilter","createTextNode","rtypenamespace","returnTrue","returnFalse","on","types","one","origFn","event","off","leverageNative","isSetup","saved","isTrigger","delegateType","stopPropagation","stopImmediatePropagation","preventDefault","trigger","isImmediatePropagationStopped","handleObjIn","eventHandle","events","t","handleObj","handlers","namespaces","origType","elemData","create","handle","triggered","dispatch","bindType","delegateCount","setup","mappedTypes","origCount","teardown","removeEvent","nativeEvent","handlerQueue","fix","delegateTarget","preDispatch","isPropagationStopped","currentTarget","rnamespace","postDispatch","matchedHandlers","matchedSelectors","addProp","hook","Event","enumerable","originalEvent","writable","load","noBubble","click","beforeunload","returnValue","props","isDefaultPrevented","defaultPrevented","relatedTarget","timeStamp","Date","now","isSimulated","altKey","bubbles","cancelable","changedTouches","ctrlKey","detail","eventPhase","metaKey","pageX","pageY","shiftKey","view","charCode","keyCode","buttons","clientX","clientY","offsetX","offsetY","pointerId","pointerType","screenX","screenY","targetTouches","toElement","touches","which","blur","focusMappedHandler","documentMode","simulate","attaches","dataHolder","mouseenter","mouseleave","pointerenter","pointerleave","orig","related","rnoInnerhtml","rchecked","rcleanScript","manipulationTarget","disableScript","restoreScript","cloneCopyEvent","dest","udataOld","udataCur","pdataOld","domManip","collection","hasScripts","iNoClone","valueIsFunction","html","_evalUrl","keepData","cleanData","dataAndEvents","deepDataAndEvents","srcElements","destElements","inPage","fixInput","detach","append","prepend","insertBefore","before","after","replaceWith","replaceChild","appendTo","prependTo","insertAfter","replaceAll","original","insert","rnumnonpx","rcustomProp","getStyles","opener","getComputedStyle","swap","old","rboxStyle","curCSS","computed","width","minWidth","maxWidth","isCustomProp","getPropertyValue","pixelBoxStyles","addGetHookIf","conditionFn","hookFn","computeStyleTests","container","cssText","divStyle","pixelPositionVal","reliableMarginLeftVal","roundPixelMeasures","marginLeft","right","pixelBoxStylesVal","boxSizingReliableVal","position","scrollboxSizeVal","offsetWidth","measure","round","parseFloat","reliableTrDimensionsVal","backgroundClip","clearCloneStyle","boxSizingReliable","pixelPosition","reliableMarginLeft","scrollboxSize","reliableTrDimensions","table","trChild","trStyle","height","parseInt","borderTopWidth","borderBottomWidth","offsetHeight","cssPrefixes","emptyStyle","vendorProps","finalPropName","cssProps","vendorPropName","capName","rdisplayswap","cssShow","visibility","cssNormalTransform","letterSpacing","fontWeight","setPositiveNumber","subtract","max","boxModelAdjustment","dimension","box","isBorderBox","styles","computedVal","extra","delta","marginDelta","ceil","getWidthOrHeight","boxSizingNeeded","valueIsBorderBox","offsetProp","getClientRects","Tween","easing","cssHooks","opacity","animationIterationCount","aspectRatio","borderImageSlice","columnCount","flexGrow","flexShrink","gridArea","gridColumn","gridColumnEnd","gridColumnStart","gridRow","gridRowEnd","gridRowStart","lineHeight","order","orphans","widows","zIndex","zoom","fillOpacity","floodOpacity","stopOpacity","strokeMiterlimit","strokeOpacity","origName","setProperty","isFinite","getBoundingClientRect","scrollboxSizeBuggy","left","margin","padding","border","prefix","suffix","expand","expanded","parts","propHooks","run","percent","eased","duration","pos","step","fx","scrollTop","scrollLeft","linear","p","swing","cos","PI","fxNow","inProgress","rfxtypes","rrun","createFxNow","genFx","includeWidth","createTween","animation","Animation","tweeners","properties","stopped","prefilters","tick","currentTime","startTime","tweens","opts","specialEasing","originalProperties","originalOptions","gotoEnd","propFilter","bind","complete","timer","anim","tweener","oldfire","propTween","restoreDisplay","isBox","hidden","dataShow","unqueued","overflow","overflowX","overflowY","prefilter","speed","opt","speeds","fadeTo","to","animate","optall","doAnimation","finish","stopQueue","timers","cssFn","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","interval","schedule","requestAnimationFrame","slow","fast","delay","time","timeout","clearTimeout","checkOn","optSelected","radioValue","boolHook","removeAttr","nType","attrHooks","attrNames","getter","lowercaseName","rfocusable","rclickable","stripAndCollapse","getClass","classesToArray","removeProp","propFix","tabindex","addClass","classNames","curValue","finalValue","removeClass","toggleClass","stateVal","isValidValue","hasClass","rreturn","valHooks","optionSet","rquery","parseXML","parserErrorElem","DOMParser","parseFromString","rfocusMorph","stopPropagationCallback","onlyHandlers","bubbleType","ontype","lastElement","eventPath","parentWindow","triggerHandler","rbracket","rCRLF","rsubmitterTypes","rsubmittable","param","traditional","s","valueOrFunction","encodeURIComponent","buildParams","serialize","serializeArray","r20","rhash","rantiCache","rheaders","rnoContent","rprotocol","transports","allTypes","originAnchor","addToPrefiltersOrTransports","structure","dataTypeExpression","dataType","dataTypes","inspectPrefiltersOrTransports","jqXHR","inspected","seekingTransport","inspect","prefilterOrFactory","dataTypeOrTransport","ajaxExtend","flatOptions","ajaxSettings","active","lastModified","etag","url","isLocal","rlocalProtocol","protocol","processData","async","contentType","accepts","json","responseFields","converters","ajaxSetup","settings","ajaxPrefilter","ajaxTransport","ajax","transport","cacheURL","responseHeadersString","responseHeaders","timeoutTimer","urlAnchor","fireGlobals","uncached","callbackContext","globalEventContext","completeDeferred","statusCode","requestHeaders","requestHeadersNames","strAbort","getResponseHeader","getAllResponseHeaders","setRequestHeader","overrideMimeType","mimeType","status","abort","statusText","finalText","crossDomain","host","hasContent","ifModified","headers","beforeSend","success","send","nativeStatusText","responses","isSuccess","response","modified","ajaxHandleResponses","ct","finalDataType","firstDataType","ajaxConvert","conv2","current","conv","dataFilter","throws","getJSON","getScript","wrapAll","firstElementChild","wrapInner","htmlIsFunction","unwrap","visible","xhr","XMLHttpRequest","xhrSuccessStatus","xhrSupported","cors","errorCallback","open","username","xhrFields","onload","onerror","onabort","ontimeout","onreadystatechange","responseType","responseText","binary","scriptAttrs","charset","scriptCharset","evt","oldCallbacks","rjsonp","jsonp","jsonpCallback","originalSettings","callbackName","overwritten","responseContainer","jsonProp","createHTMLDocument","implementation","keepScripts","parsed","params","animated","offset","setOffset","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","curElem","using","rect","win","pageYOffset","pageXOffset","offsetParent","parentOffset","scrollTo","Height","Width","defaultExtra","funcName","unbind","delegate","undelegate","hover","fnOver","fnOut","rtrim","proxy","holdReady","hold","parseJSON","isNumeric","isNaN","trim","define","amd","_jQuery","_$","$","noConflict","w","$iUSsr","exports1","$__default","_defineProperties","descriptor","_createClass","Constructor","protoProps","staticProps","_extends$1","assign","_setPrototypeOf","o","setPrototypeOf","__proto__","TRANSITION_END","Util","getUID","getSelectorFromElement","element","hrefAttr","getTransitionDurationFromElement","transitionDuration","transitionDelay","floatTransitionDuration","floatTransitionDelay","reflow","triggerTransitionEnd","supportsTransitionEnd","Boolean","isElement","typeCheckConfig","componentName","config","configTypes","property","expectedTypes","valueType","findShadowRoot","attachShadow","ShadowRoot","jQueryDetection","emulateTransitionEnd","_this","called","NAME$a","DATA_KEY$a","EVENT_KEY$a","JQUERY_NO_CONFLICT$a","EVENT_CLOSE","EVENT_CLOSED","Alert","_element","_proto","close","rootElement","_getRootElement","customEvent","_triggerCloseEvent","_removeElement","dispose","closeEvent","_destroyElement","_jQueryInterface","$element","_handleDismiss","alertInstance","NAME$9","DATA_KEY$9","EVENT_KEY$9","DATA_API_KEY$6","JQUERY_NO_CONFLICT$9","CLASS_NAME_ACTIVE$3","SELECTOR_DATA_TOGGLE_CARROT","SELECTOR_INPUT","SELECTOR_BUTTON","Button","shouldAvoidTriggerChange","triggerChangeEvent","addAriaPressed","classList","hasAttribute","avoidTriggerChange","initialButton","inputBtn","tagName","_len","_button","NAME$8","DATA_KEY$8","EVENT_KEY$8","DATA_API_KEY$5","JQUERY_NO_CONFLICT$8","CLASS_NAME_ACTIVE$2","DIRECTION_NEXT","DIRECTION_PREV","EVENT_SLIDE","EVENT_SLID","EVENT_KEYDOWN","EVENT_MOUSEENTER","EVENT_MOUSELEAVE","EVENT_TOUCHSTART","EVENT_TOUCHMOVE","EVENT_TOUCHEND","EVENT_POINTERDOWN","EVENT_POINTERUP","EVENT_DRAG_START","EVENT_LOAD_DATA_API$1","EVENT_CLICK_DATA_API$4","SELECTOR_ACTIVE_ITEM","Default$7","keyboard","slide","pause","touch","DefaultType$7","PointerType","TOUCH","PEN","Carousel","_items","_interval","_activeElement","_isPaused","_isSliding","touchTimeout","touchStartX","touchDeltaX","_config","_getConfig","_indicatorsElement","_touchSupported","navigator","maxTouchPoints","_pointerEvent","PointerEvent","MSPointerEvent","_addEventListeners","_slide","nextWhenVisible","cycle","clearInterval","_updateInterval","setInterval","visibilityState","activeIndex","_getItemIndex","direction","_handleSwipe","absDeltax","abs","_this2","_keydown","_addTouchEventListeners","_this3","move","TOUCHEVENT_COMPAT_WAIT","_getItemByDirection","isNextDirection","isPrevDirection","lastItemIndex","isGoingToWrap","itemIndex","_triggerSlideEvent","eventDirectionName","targetIndex","fromIndex","slideEvent","from","_setActiveIndicatorElement","indicators","nextIndicator","elementInterval","defaultInterval","directionalClassName","orderClassName","_this4","activeElementIndex","nextElement","nextElementIndex","isCycling","slidEvent","action","ride","_dataApiClickHandler","slideIndex","carousels","$carousel","NAME$7","DATA_KEY$7","EVENT_KEY$7","JQUERY_NO_CONFLICT$7","CLASS_NAME_SHOW$6","CLASS_NAME_COLLAPSE","CLASS_NAME_COLLAPSING","CLASS_NAME_COLLAPSED","DIMENSION_WIDTH","EVENT_SHOW$4","EVENT_SHOWN$4","EVENT_HIDE$4","EVENT_HIDDEN$4","SELECTOR_DATA_TOGGLE$3","Default$6","DefaultType$6","Collapse","_isTransitioning","_triggerArray","toggleList","filterElement","foundElem","_selector","_parent","_getParent","_addAriaAndCollapsedClass","actives","activesData","startEvent","_getDimension","setTransitioning","capitalizedDimension","triggerArrayLength","$elem","isTransitioning","hasWidth","_getTargetFromElement","triggerArray","isOpen","$trigger","$target","isBrowser","timeoutDuration","longerTimeoutBrowsers","userAgent","debounce","supportsMicroTasks","Promise","scheduled","functionToCheck","getType","getStyleComputedProperty","getParentNode","getScrollParent","_getStyleComputedProp","getReferenceNode","reference","referenceNode","isIE11","MSInputMethodContext","isIE10","isIE","getOffsetParent","noOffsetParent","nextElementSibling","getRoot","findCommonOffsetParent","element1","element2","Node","DOCUMENT_POSITION_FOLLOWING","range","createRange","setStart","setEnd","commonAncestorContainer","element1root","getScroll","side","upperSide","scrollingElement","getBordersSize","axis","sideA","getSize","computedStyle","getWindowSizes","document1","classCallCheck","instance","createClass","defineProperties","_extends","getClientRect","offsets","bottom","sizes","clientWidth","clientHeight","horizScrollbar","vertScrollbar","getOffsetRectRelativeToArbitraryNode","fixedPosition","isHTML","childrenRect","parentRect","scrollParent","borderLeftWidth","marginTop","includeScroll","modifier","getFixedPositionOffsetParent","parentElement","getBoundaries","popper","boundariesElement","boundaries","getViewportOffsetRectRelativeToArtbitraryNode","excludeScroll","relativeOffset","innerWidth","innerHeight","boundariesNode","isFixed","_getWindowSizes","isPaddingNumber","computeAutoPlacement","placement","refRect","rects","sortedAreas","_ref","area","filteredAreas","_ref2","computedPlacement","variation","getReferenceOffsets","commonOffsetParent","getOuterSizes","x","marginBottom","y","marginRight","getOppositePlacement","getPopperOffsets","referenceOffsets","popperRect","popperOffsets","isHoriz","mainSide","secondarySide","measurement","runModifiers","modifiers","ends","modifiersToRun","findIndex","forEach","update","isDestroyed","arrowStyles","flipped","positionFixed","flip","originalPlacement","isCreated","onUpdate","onCreate","isModifierEnabled","modifierName","some","getSupportedPropertyName","prefixes","upperProp","charAt","toCheck","destroy","willChange","disableEventListeners","removeOnDestroy","getWindow","enableEventListeners","eventsEnabled","updateBound","scrollElement","scheduleUpdate","passive","attachToScrollParents","scrollParents","isBody","cancelAnimationFrame","setStyles","isFirefox","isModifierRequired","requestingName","requestedName","requesting","isRequired","_requesting","requested","placements","validPlacements","clockwise","counter","BEHAVIORS","FLIP","CLOCKWISE","COUNTERCLOCKWISE","Popper","Defaults","modifierOptions","onLoad","Utils","PopperUtils","basePlacement","shiftvariation","_data$offsets","isVertical","shiftOffsets","useHeight","fragments","divider","splitRegex","frag","search","ops","op","mergeWithPrevious","reduce","str","toValue","size","index2","preventOverflow","transformProp","popperStyles","transform","priority","escapeWithReference","secondary","min","keepTogether","floor","opSide","arrow","_data$offsets$arrow","arrowElement","sideCapitalized","arrowElementSize","center","popperMarginSide","popperBorderSide","sideValue","placementOpposite","flipOrder","behavior","refOffsets","overlapsRef","overflowsLeft","overflowsRight","overflowsTop","overflowsBottom","overflowsBoundaries","flippedVariationByRef","flipVariations","flippedVariationByContent","flipVariationsByContent","flippedVariation","inner","subtractLength","bound","computeStyle","shouldRound","noRound","referenceWidth","popperWidth","isVariation","horizontalToInteger","verticalToInteger","legacyGpuAccelerationOption","gpuAcceleration","offsetParentRect","devicePixelRatio","bothOddWidth","sideB","prefixedProperty","applyStyle","setAttributes","NAME$6","DATA_KEY$6","EVENT_KEY$6","DATA_API_KEY$3","JQUERY_NO_CONFLICT$6","REGEXP_KEYDOWN","ARROW_UP_KEYCODE","CLASS_NAME_DISABLED$1","CLASS_NAME_SHOW$5","CLASS_NAME_MENURIGHT","EVENT_HIDE$3","EVENT_HIDDEN$3","EVENT_SHOW$3","EVENT_SHOWN$3","EVENT_CLICK","EVENT_CLICK_DATA_API$2","EVENT_KEYDOWN_DATA_API","EVENT_KEYUP_DATA_API","SELECTOR_DATA_TOGGLE$2","SELECTOR_MENU","Default$5","boundary","popperConfig","DefaultType$5","Dropdown","_popper","_menu","_getMenuElement","_inNavbar","_detectNavbar","isActive","_clearMenus","usePopper","showEvent","_getParentFromElement","referenceElement","_getPopperConfig","hideEvent","Default","DefaultType","_getPlacement","$parentDropdown","_getOffset","toggles","clickEvent","dropdownMenu","_dataApiKeydownHandler","items","NAME$5","DATA_KEY$5","EVENT_KEY$5","JQUERY_NO_CONFLICT$5","CLASS_NAME_OPEN","CLASS_NAME_FADE$4","CLASS_NAME_SHOW$4","CLASS_NAME_STATIC","EVENT_HIDE$2","EVENT_HIDE_PREVENTED","EVENT_HIDDEN$2","EVENT_SHOW$2","EVENT_SHOWN$2","EVENT_FOCUSIN","EVENT_RESIZE","EVENT_CLICK_DISMISS$1","EVENT_KEYDOWN_DISMISS","EVENT_MOUSEUP_DISMISS","EVENT_MOUSEDOWN_DISMISS","EVENT_CLICK_DATA_API$1","SELECTOR_FIXED_CONTENT","SELECTOR_STICKY_CONTENT","Default$4","backdrop","DefaultType$4","Modal","_dialog","_backdrop","_isShown","_isBodyOverflowing","_ignoreBackdropClick","_scrollbarWidth","_checkScrollbar","_setScrollbar","_adjustDialog","_setEscapeEvent","_setResizeEvent","_showBackdrop","_showElement","transition","_hideModal","htmlElement","handleUpdate","_triggerBackdropTransition","hideEventPrevented","isModalOverflowing","scrollHeight","modalTransitionDuration","modalBody","ELEMENT_NODE","_enforceFocus","shownEvent","transitionComplete","_this5","_this6","_this7","_this8","_resetAdjustments","_resetScrollbar","_removeBackdrop","_this9","backdropTransitionDuration","callbackRemove","_backdropTransitionDuration","paddingLeft","paddingRight","_getScrollbarWidth","_this10","fixedContent","stickyContent","actualPadding","calculatedPadding","actualMargin","calculatedMargin","scrollDiv","scrollbarWidth","_this11","uriAttrs","SAFE_URL_PATTERN","DATA_URL_PATTERN","sanitizeHtml","unsafeHtml","whiteList","sanitizeFn","createdDocument","domParser","whitelistKeys","_ret","_loop","elName","attributeList","whitelistedAttributes","allowedAttribute","allowedAttributeList","attrName","regExp","attrRegex","NAME$4","DATA_KEY$4","EVENT_KEY$4","JQUERY_NO_CONFLICT$4","CLASS_PREFIX$1","BSCLS_PREFIX_REGEX$1","DISALLOWED_ATTRIBUTES","CLASS_NAME_FADE$3","CLASS_NAME_SHOW$3","HOVER_STATE_SHOW","TRIGGER_HOVER","TRIGGER_FOCUS","AttachmentMap","AUTO","TOP","RIGHT","BOTTOM","LEFT","Default$3","template","title","fallbackPlacement","customClass","sanitize","br","em","hr","h1","h2","h3","h4","h5","h6","img","li","ol","pre","small","span","sub","sup","strong","u","ul","DefaultType$3","Event$1","HIDE","HIDDEN","SHOW","SHOWN","INSERTED","CLICK","FOCUSIN","FOCUSOUT","MOUSEENTER","MOUSELEAVE","Tooltip","_isEnabled","_timeout","_hoverState","_activeTrigger","tip","_setListeners","enable","toggleEnabled","dataKey","DATA_KEY","_getDelegateConfig","_isWithActiveTrigger","_enter","_leave","getTipElement","EVENT_KEY","_hideModalHandler","isWithContent","shadowRoot","isInTheDom","tipId","NAME","setContent","attachment","_getAttachment","addAttachmentClass","_getContainer","_fixTransition","prevHoverState","_cleanTipClass","getTitle","setElementContent","defaultBsConfig","_handlePopperPlacementChange","triggers","eventIn","eventOut","_fixTitle","titleType","dataAttributes","$tip","tabClass","popperData","initConfigAnimation","NAME$3","DATA_KEY$3","EVENT_KEY$3","JQUERY_NO_CONFLICT$3","CLASS_PREFIX","BSCLS_PREFIX_REGEX","Default$2","DefaultType$2","Popover","_Tooltip","subClass","superClass","_getContent","CLASS_NAME_FADE$2","NAME$2","DATA_KEY$2","EVENT_KEY$2","JQUERY_NO_CONFLICT$2","CLASS_NAME_ACTIVE$1","EVENT_ACTIVATE","EVENT_SCROLL","EVENT_LOAD_DATA_API","METHOD_POSITION","SELECTOR_NAV_LIST_GROUP$1","SELECTOR_NAV_LINKS","SELECTOR_LIST_ITEMS","Default$1","DefaultType$1","ScrollSpy","_scrollElement","_offsets","_targets","_activeTarget","_scrollHeight","_process","refresh","autoMethod","offsetMethod","offsetBase","_getScrollTop","_getScrollHeight","targetSelector","targetBCR","_getOffsetHeight","maxScroll","_activate","_clear","queries","$link","scrollSpys","scrollSpysLength","$spy","DATA_KEY$1","EVENT_KEY$1","JQUERY_NO_CONFLICT$1","CLASS_NAME_ACTIVE","CLASS_NAME_FADE$1","CLASS_NAME_SHOW$1","EVENT_HIDE$1","EVENT_HIDDEN$1","EVENT_SHOW$1","EVENT_SHOWN$1","SELECTOR_ACTIVE","SELECTOR_ACTIVE_UL","Tab","previous","listElement","itemSelector","hiddenEvent","activeElements","_transitionComplete","dropdownChild","dropdownElement","dropdownToggleList","$this","JQUERY_NO_CONFLICT","CLASS_NAME_HIDE","CLASS_NAME_SHOW","CLASS_NAME_SHOWING","EVENT_CLICK_DISMISS","EVENT_HIDE","EVENT_HIDDEN","EVENT_SHOW","EVENT_SHOWN","autohide","Toast","_clearTimeout","_close","Scrollspy","anchorLink","targetOffset","log","outerHeight","$274e4c5b117f7c23$var$getOffsetTop","offsetTop","$themeResources","$toggleResources","$primaryNav","$ecuSkipLinks","focusable","headerHeight","getOffsetTop","menu","MAX_UID","MILLISECONDS_MULTIPLIER","getSpecialTransitionEndEvent","transitionEndEmulator","setTransitionEndSupport","minMajor","ltMajor","minMinor","minPatch","maxMajor","VERSION","DATA_API_KEY","CLASS_NAME_ALERT","CLASS_NAME_FADE","EVENT_CLICK_DATA_API","SELECTOR_DISMISS","CLASS_NAME_BUTTON","CLASS_NAME_FOCUS","EVENT_FOCUS_BLUR_DATA_API","SELECTOR_DATA_TOGGLES","SELECTOR_DATA_TOGGLE","SELECTOR_DATA_TOGGLES_BUTTONS","ARROW_LEFT_KEYCODE","ARROW_RIGHT_KEYCODE","SWIPE_THRESHOLD","CLASS_NAME_CAROUSEL","CLASS_NAME_SLIDE","CLASS_NAME_RIGHT","CLASS_NAME_LEFT","CLASS_NAME_NEXT","CLASS_NAME_PREV","CLASS_NAME_POINTER_EVENT","DIRECTION_LEFT","DIRECTION_RIGHT","SELECTOR_ITEM","SELECTOR_ITEM_IMG","SELECTOR_NEXT_PREV","SELECTOR_INDICATORS","SELECTOR_DATA_SLIDE","SELECTOR_DATA_RIDE","DIMENSION_HEIGHT","SELECTOR_ACTIVES","scrollSize","ESCAPE_KEYCODE","SPACE_KEYCODE","TAB_KEYCODE","ARROW_DOWN_KEYCODE","RIGHT_MOUSE_BUTTON_WHICH","CLASS_NAME_DISABLED","CLASS_NAME_DROPUP","CLASS_NAME_DROPRIGHT","CLASS_NAME_DROPLEFT","CLASS_NAME_POSITION_STATIC","SELECTOR_FORM_CHILD","SELECTOR_NAVBAR_NAV","SELECTOR_VISIBLE_ITEMS","PLACEMENT_TOP","PLACEMENT_TOPEND","PLACEMENT_BOTTOM","PLACEMENT_BOTTOMEND","PLACEMENT_RIGHT","PLACEMENT_LEFT","CLASS_NAME_SCROLLABLE","CLASS_NAME_SCROLLBAR_MEASURER","CLASS_NAME_BACKDROP","SELECTOR_DIALOG","SELECTOR_MODAL_BODY","SELECTOR_DATA_DISMISS","ARIA_ATTRIBUTE_PATTERN","DefaultWhitelist","HOVER_STATE_OUT","SELECTOR_TOOLTIP_INNER","SELECTOR_ARROW","TRIGGER_CLICK","TRIGGER_MANUAL","SELECTOR_TITLE","SELECTOR_CONTENT","CLASS_NAME_DROPDOWN_ITEM","METHOD_OFFSET","SELECTOR_DATA_SPY","SELECTOR_NAV_LIST_GROUP","SELECTOR_NAV_ITEMS","SELECTOR_DROPDOWN","SELECTOR_DROPDOWN_ITEMS","SELECTOR_DROPDOWN_TOGGLE","isActiveTarget","CLASS_NAME_DROPDOWN_MENU","SELECTOR_DROPDOWN_ACTIVE_CHILD"],"version":3,"file":"public.js.map"}