{
  "version": 3,
  "sources": ["../../../../ui/node_modules/jquery/dist/jquery.js", "../../../../ui/node_modules/bootstrap/js/transition.js", "../../../../ui/node_modules/bootstrap/js/alert.js", "../../../../ui/node_modules/bootstrap/js/button.js", "../../../../ui/node_modules/bootstrap/js/carousel.js", "../../../../ui/node_modules/bootstrap/js/collapse.js", "../../../../ui/node_modules/bootstrap/js/dropdown.js", "../../../../ui/node_modules/bootstrap/js/modal.js", "../../../../ui/node_modules/bootstrap/js/tooltip.js", "../../../../ui/node_modules/bootstrap/js/popover.js", "../../../../ui/node_modules/bootstrap/js/scrollspy.js", "../../../../ui/node_modules/bootstrap/js/tab.js", "../../../../ui/node_modules/bootstrap/js/affix.js", "../../../../ui/src/events.ts", "../../../../ui/src/utils.ts", "../../../../ui/src/django.ts", "../../../../ui/src/navigation.ts", "../../../../ui/node_modules/itertools/src/utils.ts", "../../../../ui/node_modules/itertools/src/more-itertools.ts", "../../../../ui/node_modules/itertools/src/itertools.ts", "../../../../ui/node_modules/itertools/src/builtins.ts", "../../../../ui/node_modules/itertools/src/custom.ts", "../../../../ui/src/components/SubscribeButton.ts", "../../../../ui/node_modules/axios/lib/helpers/bind.js", "../../../../ui/node_modules/axios/lib/utils.js", "../../../../ui/node_modules/axios/lib/helpers/parseHeaders.js", "../../../../ui/node_modules/axios/lib/helpers/sanitizeHeaderValue.js", "../../../../ui/node_modules/axios/lib/core/AxiosHeaders.js", "../../../../ui/node_modules/axios/lib/core/AxiosError.js", "../../../../ui/node_modules/axios/lib/helpers/null.js", "../../../../ui/node_modules/axios/lib/helpers/toFormData.js", "../../../../ui/node_modules/axios/lib/helpers/AxiosURLSearchParams.js", "../../../../ui/node_modules/axios/lib/helpers/buildURL.js", "../../../../ui/node_modules/axios/lib/core/InterceptorManager.js", "../../../../ui/node_modules/axios/lib/defaults/transitional.js", "../../../../ui/node_modules/axios/lib/platform/browser/classes/URLSearchParams.js", "../../../../ui/node_modules/axios/lib/platform/browser/classes/FormData.js", "../../../../ui/node_modules/axios/lib/platform/browser/classes/Blob.js", "../../../../ui/node_modules/axios/lib/platform/browser/index.js", "../../../../ui/node_modules/axios/lib/platform/common/utils.js", "../../../../ui/node_modules/axios/lib/platform/index.js", "../../../../ui/node_modules/axios/lib/helpers/toURLEncodedForm.js", "../../../../ui/node_modules/axios/lib/helpers/formDataToJSON.js", "../../../../ui/node_modules/axios/lib/core/methodList.js", "../../../../ui/node_modules/axios/lib/defaults/index.js", "../../../../ui/node_modules/axios/lib/core/transformData.js", "../../../../ui/node_modules/axios/lib/cancel/isCancel.js", "../../../../ui/node_modules/axios/lib/cancel/CanceledError.js", "../../../../ui/node_modules/axios/lib/core/settle.js", "../../../../ui/node_modules/axios/lib/helpers/normalizeURLForProtocolCheck.js", "../../../../ui/node_modules/axios/lib/helpers/parseProtocol.js", "../../../../ui/node_modules/axios/lib/helpers/speedometer.js", "../../../../ui/node_modules/axios/lib/helpers/throttle.js", "../../../../ui/node_modules/axios/lib/helpers/progressEventReducer.js", "../../../../ui/node_modules/axios/lib/helpers/isURLSameOrigin.js", "../../../../ui/node_modules/axios/lib/helpers/cookies.js", "../../../../ui/node_modules/axios/lib/helpers/isAbsoluteURL.js", "../../../../ui/node_modules/axios/lib/helpers/combineURLs.js", "../../../../ui/node_modules/axios/lib/core/buildFullPath.js", "../../../../ui/node_modules/axios/lib/core/mergeConfig.js", "../../../../ui/node_modules/axios/lib/core/setFormDataHeaders.js", "../../../../ui/node_modules/axios/lib/helpers/resolveConfig.js", "../../../../ui/node_modules/axios/lib/adapters/xhr.js", "../../../../ui/node_modules/axios/lib/helpers/composeSignals.js", "../../../../ui/node_modules/axios/lib/helpers/trackStream.js", "../../../../ui/node_modules/axios/lib/helpers/estimateDataURLDecodedBytes.js", "../../../../ui/node_modules/axios/lib/env/data.js", "../../../../ui/node_modules/axios/lib/adapters/fetch.js", "../../../../ui/node_modules/axios/lib/adapters/adapters.js", "../../../../ui/node_modules/axios/lib/core/dispatchRequest.js", "../../../../ui/node_modules/axios/lib/helpers/validator.js", "../../../../ui/node_modules/axios/lib/core/Axios.js", "../../../../ui/node_modules/axios/lib/cancel/CancelToken.js", "../../../../ui/node_modules/axios/lib/helpers/spread.js", "../../../../ui/node_modules/axios/lib/helpers/isAxiosError.js", "../../../../ui/node_modules/axios/lib/helpers/HttpStatusCode.js", "../../../../ui/node_modules/axios/lib/axios.js", "../../../../ui/node_modules/axios/index.js", "../../../../ui/src/api.ts", "../../../../ui/src/environment.ts", "../../../../ui/src/socket/Socket.ts", "../../../../ui/src/socket/types.ts", "../../../../ui/src/socket/index.ts", "../../../../ui/src/notifications.ts", "../../../../ui/src/Popup.ts", "../../../../ui/src/ServiceWorker.ts", "../../../../ui/src/User.ts", "../../../../ui/src/components/ApiDelete.ts", "../../../../ui/src/formErrors.ts", "../../../../ui/src/components/utils.ts", "../../../../ui/src/components/ApiPost.ts", "../../../../ui/src/components/ContentFilterButton.ts", "../../../../ui/src/components/ContextMenu.ts", "../../../../ui/src/imageCrop.ts", "../../../../ui/src/components/CropImage.ts", "../../../../ui/src/components/DiscussPostAs.ts", "../../../../ui/src/components/FormSubmitOnce.ts", "../../../../ui/src/components/DynamicChoices.ts", "../../../../ui/src/components/DynamicForm.ts", "../../../../ui/src/components/JsonForm.ts", "../../../../ui/src/components/Menu.ts", "../../../../ui/src/components/Pagination.ts", "../../../../ui/src/components/PopupLink.ts", "../../../../ui/src/components/RadioButtons.ts", "../../../../ui/src/components/ReadMarker.ts", "../../../../ui/src/components/ResponsiveEmbed.ts", "../../../../ui/src/components/SiteSearch.ts", "../../../../ui/src/components/Tabs.ts", "../../../../ui/src/components/ToggleButton.ts", "../../../../ui/src/components/Toggler.ts", "../../../../ui/src/components/index.ts", "../../../../ui/src/globals.ts", "../../../../ui/src/socket/defineChannel.ts", "../../../../ui/node_modules/bootstrap/dist/js/npm.js", "../../../../ui/src/index.ts"],
  "sourcesContent": ["/*!\n * jQuery JavaScript Library v3.5.1\n * https://jquery.com/\n *\n * Includes Sizzle.js\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2020-05-04T22:49Z\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 #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      // 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      return typeof obj === \"function\" && typeof obj.nodeType !== \"number\";\n  };\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\n\tversion = \"3.5.1\",\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\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[ 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\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( \" \" ),\nfunction( _i, name ) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n} );\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}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v2.3.5\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://js.foundation/\n *\n * Date: 2020-03-14\n */\n( function( window ) {\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + 1 * new Date(),\n\tpreferredDoc = window.document,\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\t// Instance methods\n\thasOwn = ( {} ).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpushNative = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\n\t// Use a stripped-down indexOf as it's faster than native\n\t// https://jsperf.com/thor-indexof-vs-for/5\n\tindexOf = function( list, elem ) {\n\t\tvar i = 0,\n\t\t\tlen = list.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( list[ i ] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|\" +\n\t\t\"ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\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: http://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]\n\t\t// 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\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" +\n\t\twhitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace +\n\t\t\"*\" ),\n\trdescend = new RegExp( whitespace + \"|>\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": 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\t\"needsContext\": 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\trhtml = /HTML$/i,\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\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// http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace + \"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\" ),\n\tfunescape = function( escape, nonHex ) {\n\t\tvar high = \"0x\" + escape.slice( 1 ) - 0x10000;\n\n\t\treturn nonHex ?\n\n\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\tnonHex :\n\n\t\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t\t// Support: IE <=11+\n\t\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t\t// surrogate pair\n\t\t\thigh < 0 ?\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\trcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,\n\tfcssescape = function( ch, asCodePoint ) {\n\t\tif ( asCodePoint ) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif ( ch === \"\\0\" ) {\n\t\t\t\treturn \"\\uFFFD\";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice( 0, -1 ) + \"\\\\\" +\n\t\t\t\tch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn \"\\\\\" + ch;\n\t},\n\n\t// Used for iframes\n\t// See setDocument()\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tinDisabledFieldset = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && elem.nodeName.toLowerCase() === \"fieldset\";\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\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 = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpushNative.apply( target, slice.call( els ) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( ( target[ j++ ] = els[ i++ ] ) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( 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, Opera, Webkit\n\t\t\t\t\t\t\t// TODO: identify versions\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\tresults.push( 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, Opera, Webkit\n\t\t\t\t\t\t// TODO: identify versions\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\tcontains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tresults.push( 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 ] ) && support.getElementsByClassName &&\n\t\t\t\t\tcontext.getElementsByClassName ) {\n\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 ( support.qsa &&\n\t\t\t\t!nonnativeSelectorCache[ selector + \" \" ] &&\n\t\t\t\t( !rbuggyQSA || !rbuggyQSA.test( selector ) ) &&\n\n\t\t\t\t// Support: IE 8 only\n\t\t\t\t// Exclude object elements\n\t\t\t\t( nodeType !== 1 || context.nodeName.toLowerCase() !== \"object\" ) ) {\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 ) || rcombinators.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\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 = nid.replace( rcssescape, fcssescape );\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( rtrim, \"$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 (see Issue #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 Sizzle\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 * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split( \"|\" ),\n\t\ti = arr.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[ i ] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\ta.sourceIndex - b.sourceIndex;\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( ( cur = cur.nextSibling ) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\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\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"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\tvar name = elem.nodeName.toLowerCase();\n\t\treturn ( name === \"input\" || name === \"button\" ) && elem.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\t/* jshint -W018 */\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\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 Sizzle 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// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\tvar namespace = elem.namespaceURI,\n\t\tdocElem = ( elem.ownerDocument || elem ).documentElement;\n\n\t// Support: IE <=8\n\t// Assume HTML when documentElement doesn't yet exist, such as inside loading iframes\n\t// https://bugs.jquery.com/ticket/4833\n\treturn !rhtml.test( namespace || docElem && docElem.nodeName || \"HTML\" );\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, 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\tdocElem = document.documentElement;\n\tdocumentIsHTML = !isXML( document );\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\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 ( preferredDoc != document &&\n\t\t( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {\n\n\t\t// Support: IE 11, Edge\n\t\tif ( subWindow.addEventListener ) {\n\t\t\tsubWindow.addEventListener( \"unload\", unloadHandler, false );\n\n\t\t// Support: IE 9 - 10 only\n\t\t} else if ( subWindow.attachEvent ) {\n\t\t\tsubWindow.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t// Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only,\n\t// Safari 4 - 5 only, Opera <=11.6 - 12.x only\n\t// IE/Edge & older browsers don't support the :scope pseudo-class.\n\t// Support: Safari 6.0 only\n\t// Safari 6.0 supports :scope but it's an alias of :root there.\n\tsupport.scope = assert( function( el ) {\n\t\tdocElem.appendChild( el ).appendChild( document.createElement( \"div\" ) );\n\t\treturn typeof el.querySelectorAll !== \"undefined\" &&\n\t\t\t!el.querySelectorAll( \":scope fieldset div\" ).length;\n\t} );\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties\n\t// (excepting IE8 booleans)\n\tsupport.attributes = assert( function( el ) {\n\t\tel.className = \"i\";\n\t\treturn !el.getAttribute( \"className\" );\n\t} );\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert( function( el ) {\n\t\tel.appendChild( document.createComment( \"\" ) );\n\t\treturn !el.getElementsByTagName( \"*\" ).length;\n\t} );\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\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\tdocElem.appendChild( el ).id = expando;\n\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\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\" ] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else if ( support.qsa ) {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t} :\n\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[ \"CLASS\" ] = support.getElementsByClassName && 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\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See https://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) {\n\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert( function( el ) {\n\n\t\t\tvar input;\n\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// https://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( el ).innerHTML = \"<a id='\" + expando + \"'></a>\" +\n\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' msallowcapture=''>\" +\n\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( el.querySelectorAll( \"[msallowcapture^='']\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !el.querySelectorAll( \"[selected]\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\t\t\tif ( !el.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"~=\" );\n\t\t\t}\n\n\t\t\t// Support: IE 11+, Edge 15 - 18+\n\t\t\t// IE 11/Edge don't find elements on a `[name='']` query in some cases.\n\t\t\t// Adding a temporary attribute to the document before the selection works\n\t\t\t// around the issue.\n\t\t\t// Interestingly, IE 10 & older don't seem to have the issue.\n\t\t\tinput = document.createElement( \"input\" );\n\t\t\tinput.setAttribute( \"name\", \"\" );\n\t\t\tel.appendChild( input );\n\t\t\tif ( !el.querySelectorAll( \"[name='']\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\t\t\t\t\twhitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !el.querySelectorAll( \":checked\" ).length ) {\n\t\t\t\trbuggyQSA.push( \":checked\" );\n\t\t\t}\n\n\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\t\tif ( !el.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push( \".#.+[+~]\" );\n\t\t\t}\n\n\t\t\t// Support: Firefox <=3.6 - 5 only\n\t\t\t// Old Firefox doesn't throw on a badly-escaped identifier.\n\t\t\tel.querySelectorAll( \"\\\\\\f\" );\n\t\t\trbuggyQSA.push( \"[\\\\r\\\\n\\\\f]\" );\n\t\t} );\n\n\t\tassert( function( el ) {\n\t\t\tel.innerHTML = \"<a href='' disabled='disabled'></a>\" +\n\t\t\t\t\"<select disabled='disabled'><option/></select>\";\n\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = document.createElement( \"input\" );\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tel.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( el.querySelectorAll( \"[name=d]\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( el.querySelectorAll( \":enabled\" ).length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: IE9-11+\n\t\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t\tdocElem.appendChild( el ).disabled = true;\n\t\t\tif ( el.querySelectorAll( \":disabled\" ).length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: Opera 10 - 11 only\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tel.querySelectorAll( \"*,:x\" );\n\t\t\trbuggyQSA.push( \",.*:\" );\n\t\t} );\n\t}\n\n\tif ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector ) ) ) ) {\n\n\t\tassert( function( el ) {\n\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( el, \"*\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( el, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t} );\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( \"|\" ) );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( \"|\" ) );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully self-exclusive\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t) );\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( ( b = b.parentNode ) ) {\n\t\t\t\t\tif ( b === a ) {\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\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( 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\tcontains( 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\tcontains( 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( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\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 eqeqeq */\n\t\t\treturn a == document ? -1 :\n\t\t\t\tb == document ? 1 :\n\t\t\t\t/* eslint-enable eqeqeq */\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( ( cur = cur.parentNode ) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( ( cur = cur.parentNode ) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[ i ] === bp[ i ] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[ i ], bp[ i ] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\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 eqeqeq */\n\t\t\tap[ i ] == preferredDoc ? -1 :\n\t\t\tbp[ i ] == preferredDoc ? 1 :\n\t\t\t/* eslint-enable eqeqeq */\n\t\t\t0;\n\t};\n\n\treturn document;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\tsetDocument( elem );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t!nonnativeSelectorCache[ expr + \" \" ] &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( 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// As well, disconnected nodes are said to be in a document\n\t\t\t\t// fragment in IE 9\n\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 Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.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 contains( context, elem );\n};\n\nSizzle.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 (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t( val = elem.getAttributeNode( name ) ) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.escape = function( sel ) {\n\treturn ( sel + \"\" ).replace( rcssescape, fcssescape );\n};\n\nSizzle.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 */\nSizzle.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\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( 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\tresults.splice( 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\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( ( node = elem[ i++ ] ) ) {\n\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\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\t\"ATTR\": 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 ] ||\n\t\t\t\tmatch[ 5 ] || \"\" ).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\t\"CHILD\": 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\tSizzle.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\tmatch[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === \"odd\" );\n\n\t\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[ 3 ] ) {\n\t\t\t\tSizzle.error( match[ 0 ] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": 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\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = 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 elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t( pattern = new RegExp( \"(^|\" + whitespace +\n\t\t\t\t\t\")\" + className + \"(\" + whitespace + \"|$)\" ) ) && classCache(\n\t\t\t\t\t\tclassName, function( elem ) {\n\t\t\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\t\telem.getAttribute( \"class\" ) ||\n\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t);\n\t\t\t\t} );\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.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\t/* eslint-disable max-len */\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t\t/* eslint-enable max-len */\n\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": 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, uniqueCache, 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\tnode.nodeName.toLowerCase() === 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\n\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\tnode = parent;\n\t\t\t\t\t\t\touterCache = node[ expando ] || ( node[ expando ] = {} );\n\n\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t( outerCache[ node.uniqueID ] = {} );\n\n\t\t\t\t\t\t\tcache = uniqueCache[ 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\tuniqueCache[ 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\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || ( node[ expando ] = {} );\n\n\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t( outerCache[ node.uniqueID ] = {} );\n\n\t\t\t\t\t\t\t\tcache = uniqueCache[ 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\tnode.nodeName.toLowerCase() === 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\n\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( outerCache[ node.uniqueID ] = {} );\n\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ 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\t\"PSEUDO\": function( pseudo, argument ) {\n\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://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\tSizzle.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 Sizzle 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( 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\t\"not\": 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( rtrim, \"$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 (issue #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\t\"has\": markFunction( function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t} ),\n\n\t\t\"contains\": markFunction( function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || getText( 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// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": 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\tSizzle.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\t\"target\": 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\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement &&\n\t\t\t\t( !document.hasFocus || document.hasFocus() ) &&\n\t\t\t\t!!( elem.type || elem.href || ~elem.tabIndex );\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": createDisabledPseudo( false ),\n\t\t\"disabled\": createDisabledPseudo( true ),\n\n\t\t\"checked\": function( elem ) {\n\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn ( nodeName === \"input\" && !!elem.checked ) ||\n\t\t\t\t( nodeName === \"option\" && !!elem.selected );\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\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\t\"empty\": function( elem ) {\n\n\t\t\t// http://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\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[ \"empty\" ]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear 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\t\"first\": createPositionalPseudo( function() {\n\t\t\treturn [ 0 ];\n\t\t} ),\n\n\t\t\"last\": createPositionalPseudo( function( _matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t} ),\n\n\t\t\"eq\": createPositionalPseudo( function( _matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t} ),\n\n\t\t\"even\": 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\t\"odd\": 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\t\"lt\": createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ?\n\t\t\t\targument + length :\n\t\t\t\targument > length ?\n\t\t\t\t\tlength :\n\t\t\t\t\targument;\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\t\"gt\": 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\ntokenize = Sizzle.tokenize = function( 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 = rcombinators.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( rtrim, \" \" )\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\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\n\t\t\t// Cache the tokens\n\t\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, uniqueCache, 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\t// Support: IE <9 only\n\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] ||\n\t\t\t\t\t\t\t( outerCache[ elem.uniqueID ] = {} );\n\n\t\t\t\t\t\tif ( skip && skip === elem.nodeName.toLowerCase() ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( ( oldCache = uniqueCache[ 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\tuniqueCache[ 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\tSizzle( 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,\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 || multipleContexts(\n\t\t\t\tselector || \"*\",\n\t\t\t\tcontext.nodeType ? [ context ] : context,\n\t\t\t\t[]\n\t\t\t),\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\t\tmatcherOut = matcher ?\n\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\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( 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( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\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 (issue #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// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\ttokens\n\t\t\t\t\t\t.slice( 0, i - 1 )\n\t\t\t\t\t\t.concat( { value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" } )\n\t\t\t\t\t).replace( rtrim, \"$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: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching elements by id\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\tresults.push( 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\tSizzle.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\ncompile = Sizzle.compile = function( 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(\n\t\t\tselector,\n\t\t\tmatcherFromGroupMatchers( elementMatchers, setMatchers )\n\t\t);\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 Sizzle's compiled\n *  selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n *  selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( 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\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) {\n\n\t\t\tcontext = ( Expr.find[ \"ID\" ]( token.matches[ 0 ]\n\t\t\t\t.replace( runescape, funescape ), context ) || [] )[ 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 ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext\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// Sort stability\nsupport.sortStable = expando.split( \"\" ).sort( sortOrder ).join( \"\" ) === expando;\n\n// Support: Chrome 14-35+\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\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\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert( function( el ) {\n\tel.innerHTML = \"<a href='#'></a>\";\n\treturn el.firstChild.getAttribute( \"href\" ) === \"#\";\n} ) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t} );\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert( function( el ) {\n\tel.innerHTML = \"<input/>\";\n\tel.firstChild.setAttribute( \"value\", \"\" );\n\treturn el.firstChild.getAttribute( \"value\" ) === \"\";\n} ) ) {\n\taddHandle( \"value\", function( elem, _name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t} );\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert( function( el ) {\n\treturn el.getAttribute( \"disabled\" ) == null;\n} ) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t( val = elem.getAttributeNode( name ) ) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\t\tnull;\n\t\t}\n\t} );\n}\n\nreturn Sizzle;\n\n} )( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\n\n// Deprecated\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\njQuery.escapeSelector = Sizzle.escape;\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\n\n\nfunction nodeName( elem, name ) {\n\n  return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\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 (#9521)\n\t// Strict HTML recognition (#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 Sizzle\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.stackTrace );\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 stack, 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.getStackHook ) {\n\t\t\t\t\t\t\t\t\tprocess.stackTrace = 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 master Deferred\n\t\t\tmaster = 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\tmaster.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, master.done( updateFunc( i ) ).resolve, master.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 ( master.state() === \"pending\" ||\n\t\t\t\tisFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {\n\n\t\t\t\treturn master.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 ), master.reject );\n\t\t}\n\n\t\treturn master.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\njQuery.Deferred.exceptionHook = function( error, stack ) {\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, error.stack, stack );\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 #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\tvalue :\n\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 (#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 #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 (#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 (#11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (#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 (#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 (#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 (#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\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\n// Support: IE <=9 - 11+\n// focus() and blur() are asynchronous, except when they are no-op.\n// So expect focus to be synchronous when the element is already active,\n// and blur to be synchronous when the element is not already active.\n// (focus and blur are always synchronous in other supported browsers,\n// this just defines when we can count on it).\nfunction expectSync( elem, type ) {\n\treturn ( elem === safeActiveElement() ) === ( type === \"focus\" );\n}\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\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\t\tdataPriv.get( this, \"events\" ) || Object.create( null )\n\t\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 (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #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 (#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\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\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\", returnTrue );\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, expectSync ) {\n\n\t// Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add\n\tif ( !expectSync ) {\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 notAsync, 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\t// Saved data should be false in such cases, but might be a leftover capture object\n\t\t\t\t// from an async native handler (gh-4350)\n\t\t\t\tif ( !saved.length ) {\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\t// Support: IE <=9 - 11+\n\t\t\t\t\t// focus() and blur() are asynchronous\n\t\t\t\t\tnotAsync = expectSync( this, type );\n\t\t\t\t\tthis[ type ]();\n\t\t\t\t\tresult = dataPriv.get( this, type );\n\t\t\t\t\tif ( saved !== result || notAsync ) {\n\t\t\t\t\t\tdataPriv.set( this, type, false );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult = {};\n\t\t\t\t\t}\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\t\t\t\t\t\treturn result.value;\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 the\n\t\t\t\t// 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.length ) {\n\n\t\t\t\t// ...and capture the result\n\t\t\t\tdataPriv.set( this, type, {\n\t\t\t\t\tvalue: jQuery.event.trigger(\n\n\t\t\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t\t\t// Extend with the prototype to reset the above stopImmediatePropagation()\n\t\t\t\t\t\tjQuery.extend( saved[ 0 ], jQuery.Event.prototype ),\n\t\t\t\t\t\tsaved.slice( 1 ),\n\t\t\t\t\t\tthis\n\t\t\t\t\t)\n\t\t\t\t} );\n\n\t\t\t\t// Abort handling of the native event\n\t\t\t\tevent.stopImmediatePropagation();\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 (#504, #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\n\twhich: function( event ) {\n\t\tvar button = event.button;\n\n\t\t// Add which for key events\n\t\tif ( event.which == null && rkeyEvent.test( event.type ) ) {\n\t\t\treturn event.charCode != null ? event.charCode : event.keyCode;\n\t\t}\n\n\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\tif ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {\n\t\t\tif ( button & 1 ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\tif ( button & 2 ) {\n\t\t\t\treturn 3;\n\t\t\t}\n\n\t\t\tif ( button & 4 ) {\n\t\t\t\treturn 2;\n\t\t\t}\n\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn event.which;\n\t}\n}, jQuery.event.addProp );\n\njQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( type, delegateType ) {\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\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, expectSync );\n\n\t\t\t// Return false to allow normal processing in the caller\n\t\t\treturn false;\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\tdelegateType: delegateType\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\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 (#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// Reenable 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\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 Sizzle here for performance reasons: 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 getStyles = function( elem ) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (#15098, #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 (#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\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\";\n\t\t\t\ttr.style.height = \"1px\";\n\t\t\t\ttrChild.style.height = \"9px\";\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 ) > 3;\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\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, #12537)\n\t//   .css('--customProperty) (#3144)\n\tif ( computed ) {\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\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\trcustomProp = /^--/,\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\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\tif ( box === \"margin\" ) {\n\t\t\tdelta += 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;\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\t\"animationIterationCount\": true,\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"flexGrow\": true,\n\t\t\"flexShrink\": true,\n\t\t\"fontWeight\": true,\n\t\t\"gridArea\": true,\n\t\t\"gridColumn\": true,\n\t\t\"gridColumnEnd\": true,\n\t\t\"gridColumnStart\": true,\n\t\t\"gridRow\": true,\n\t\t\"gridRowEnd\": true,\n\t\t\"gridRowStart\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": 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 (#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 #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 (#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\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t\t} ) :\n\t\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\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\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/* 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 )` (#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\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\t\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.\n// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/\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// https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\t// Use proper attribute retrieval(#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 classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\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\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + \" \";\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\telem.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 classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\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\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\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\telem.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 type = typeof value,\n\t\t\tisValidValue = type === \"string\" || Array.isArray( value );\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\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\treturn this.each( function() {\n\t\t\tvar className, i, self, classNames;\n\n\t\t\tif ( isValidValue ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\ti = 0;\n\t\t\t\tself = jQuery( this );\n\t\t\t\tclassNames = classesToArray( value );\n\n\t\t\t\twhile ( ( className = 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\"\" :\n\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\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 (#14686, #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 (#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\n\n\nsupport.focusin = \"onfocusin\" in window;\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 (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#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 = (\n\t\t\t\t\tdataPriv.get( cur, \"events\" ) || Object.create( null )\n\t\t\t\t)[ 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 (#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\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\nif ( !support.focusin ) {\n\tjQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = function( event ) {\n\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );\n\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\n\t\t\t\t// Handle: regular nodes (via `this.ownerDocument`), window\n\t\t\t\t// (via `this.document`) & document (via `this`).\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.access( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tdataPriv.remove( doc, fix );\n\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.access( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t} );\n}\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;\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\t\txml = undefined;\n\t}\n\n\tif ( !xml || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\tjQuery.error( \"Invalid XML: \" + data );\n\t}\n\treturn xml;\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} )\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} )\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// #7653, #8125, #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 (#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\toriginAnchor.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 #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\t\tjQuery( callbackContext ) :\n\t\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 (#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 #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 (#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// #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\n\t\t\tif ( !isSuccess && jQuery.inArray( \"script\", s.dataTypes ) > -1 ) {\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 (#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// #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 #8605, #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// #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\tif ( typeof props.top === \"number\" ) {\n\t\t\t\tprops.top += \"px\";\n\t\t\t}\n\t\t\tif ( typeof props.left === \"number\" ) {\n\t\t\t\tprops.left += \"px\";\n\t\t\t}\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( { padding: \"inner\" + name, content: type, \"\": \"outer\" + name },\n\t\tfunction( 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.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t}\n} );\n\njQuery.each( ( \"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// Support: Android <=4.0 only\n// Make sure we trim BOM and NBSP\nvar rtrim = /^[\\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, \"\" );\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// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (#13566)\nif ( typeof noGlobal === \"undefined\" ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\n\n\n\nreturn jQuery;\n} );\n", "/* ========================================================================\n * Bootstrap: transition.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#transitions\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // CSS TRANSITION SUPPORT (Shoutout: https://modernizr.com/)\n  // ============================================================\n\n  function transitionEnd() {\n    var el = document.createElement('bootstrap')\n\n    var transEndEventNames = {\n      WebkitTransition : 'webkitTransitionEnd',\n      MozTransition    : 'transitionend',\n      OTransition      : 'oTransitionEnd otransitionend',\n      transition       : 'transitionend'\n    }\n\n    for (var name in transEndEventNames) {\n      if (el.style[name] !== undefined) {\n        return { end: transEndEventNames[name] }\n      }\n    }\n\n    return false // explicit for ie8 (  ._.)\n  }\n\n  // https://blog.alexmaccaw.com/css-transitions\n  $.fn.emulateTransitionEnd = function (duration) {\n    var called = false\n    var $el = this\n    $(this).one('bsTransitionEnd', function () { called = true })\n    var callback = function () { if (!called) $($el).trigger($.support.transition.end) }\n    setTimeout(callback, duration)\n    return this\n  }\n\n  $(function () {\n    $.support.transition = transitionEnd()\n\n    if (!$.support.transition) return\n\n    $.event.special.bsTransitionEnd = {\n      bindType: $.support.transition.end,\n      delegateType: $.support.transition.end,\n      handle: function (e) {\n        if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)\n      }\n    }\n  })\n\n}(jQuery);\n", "/* ========================================================================\n * Bootstrap: alert.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#alerts\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // ALERT CLASS DEFINITION\n  // ======================\n\n  var dismiss = '[data-dismiss=\"alert\"]'\n  var Alert   = function (el) {\n    $(el).on('click', dismiss, this.close)\n  }\n\n  Alert.VERSION = '3.4.1'\n\n  Alert.TRANSITION_DURATION = 150\n\n  Alert.prototype.close = function (e) {\n    var $this    = $(this)\n    var selector = $this.attr('data-target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n    }\n\n    selector    = selector === '#' ? [] : selector\n    var $parent = $(document).find(selector)\n\n    if (e) e.preventDefault()\n\n    if (!$parent.length) {\n      $parent = $this.closest('.alert')\n    }\n\n    $parent.trigger(e = $.Event('close.bs.alert'))\n\n    if (e.isDefaultPrevented()) return\n\n    $parent.removeClass('in')\n\n    function removeElement() {\n      // detach from parent, fire event then clean up data\n      $parent.detach().trigger('closed.bs.alert').remove()\n    }\n\n    $.support.transition && $parent.hasClass('fade') ?\n      $parent\n        .one('bsTransitionEnd', removeElement)\n        .emulateTransitionEnd(Alert.TRANSITION_DURATION) :\n      removeElement()\n  }\n\n\n  // ALERT PLUGIN DEFINITION\n  // =======================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('bs.alert')\n\n      if (!data) $this.data('bs.alert', (data = new Alert(this)))\n      if (typeof option == 'string') data[option].call($this)\n    })\n  }\n\n  var old = $.fn.alert\n\n  $.fn.alert             = Plugin\n  $.fn.alert.Constructor = Alert\n\n\n  // ALERT NO CONFLICT\n  // =================\n\n  $.fn.alert.noConflict = function () {\n    $.fn.alert = old\n    return this\n  }\n\n\n  // ALERT DATA-API\n  // ==============\n\n  $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)\n\n}(jQuery);\n", "/* ========================================================================\n * Bootstrap: button.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#buttons\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // BUTTON PUBLIC CLASS DEFINITION\n  // ==============================\n\n  var Button = function (element, options) {\n    this.$element  = $(element)\n    this.options   = $.extend({}, Button.DEFAULTS, options)\n    this.isLoading = false\n  }\n\n  Button.VERSION  = '3.4.1'\n\n  Button.DEFAULTS = {\n    loadingText: 'loading...'\n  }\n\n  Button.prototype.setState = function (state) {\n    var d    = 'disabled'\n    var $el  = this.$element\n    var val  = $el.is('input') ? 'val' : 'html'\n    var data = $el.data()\n\n    state += 'Text'\n\n    if (data.resetText == null) $el.data('resetText', $el[val]())\n\n    // push to event loop to allow forms to submit\n    setTimeout($.proxy(function () {\n      $el[val](data[state] == null ? this.options[state] : data[state])\n\n      if (state == 'loadingText') {\n        this.isLoading = true\n        $el.addClass(d).attr(d, d).prop(d, true)\n      } else if (this.isLoading) {\n        this.isLoading = false\n        $el.removeClass(d).removeAttr(d).prop(d, false)\n      }\n    }, this), 0)\n  }\n\n  Button.prototype.toggle = function () {\n    var changed = true\n    var $parent = this.$element.closest('[data-toggle=\"buttons\"]')\n\n    if ($parent.length) {\n      var $input = this.$element.find('input')\n      if ($input.prop('type') == 'radio') {\n        if ($input.prop('checked')) changed = false\n        $parent.find('.active').removeClass('active')\n        this.$element.addClass('active')\n      } else if ($input.prop('type') == 'checkbox') {\n        if (($input.prop('checked')) !== this.$element.hasClass('active')) changed = false\n        this.$element.toggleClass('active')\n      }\n      $input.prop('checked', this.$element.hasClass('active'))\n      if (changed) $input.trigger('change')\n    } else {\n      this.$element.attr('aria-pressed', !this.$element.hasClass('active'))\n      this.$element.toggleClass('active')\n    }\n  }\n\n\n  // BUTTON PLUGIN DEFINITION\n  // ========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.button')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.button', (data = new Button(this, options)))\n\n      if (option == 'toggle') data.toggle()\n      else if (option) data.setState(option)\n    })\n  }\n\n  var old = $.fn.button\n\n  $.fn.button             = Plugin\n  $.fn.button.Constructor = Button\n\n\n  // BUTTON NO CONFLICT\n  // ==================\n\n  $.fn.button.noConflict = function () {\n    $.fn.button = old\n    return this\n  }\n\n\n  // BUTTON DATA-API\n  // ===============\n\n  $(document)\n    .on('click.bs.button.data-api', '[data-toggle^=\"button\"]', function (e) {\n      var $btn = $(e.target).closest('.btn')\n      Plugin.call($btn, 'toggle')\n      if (!($(e.target).is('input[type=\"radio\"], input[type=\"checkbox\"]'))) {\n        // Prevent double click on radios, and the double selections (so cancellation) on checkboxes\n        e.preventDefault()\n        // The target component still receive the focus\n        if ($btn.is('input,button')) $btn.trigger('focus')\n        else $btn.find('input:visible,button:visible').first().trigger('focus')\n      }\n    })\n    .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^=\"button\"]', function (e) {\n      $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type))\n    })\n\n}(jQuery);\n", "/* ========================================================================\n * Bootstrap: carousel.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#carousel\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // CAROUSEL CLASS DEFINITION\n  // =========================\n\n  var Carousel = function (element, options) {\n    this.$element    = $(element)\n    this.$indicators = this.$element.find('.carousel-indicators')\n    this.options     = options\n    this.paused      = null\n    this.sliding     = null\n    this.interval    = null\n    this.$active     = null\n    this.$items      = null\n\n    this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this))\n\n    this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element\n      .on('mouseenter.bs.carousel', $.proxy(this.pause, this))\n      .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))\n  }\n\n  Carousel.VERSION  = '3.4.1'\n\n  Carousel.TRANSITION_DURATION = 600\n\n  Carousel.DEFAULTS = {\n    interval: 5000,\n    pause: 'hover',\n    wrap: true,\n    keyboard: true\n  }\n\n  Carousel.prototype.keydown = function (e) {\n    if (/input|textarea/i.test(e.target.tagName)) return\n    switch (e.which) {\n      case 37: this.prev(); break\n      case 39: this.next(); break\n      default: return\n    }\n\n    e.preventDefault()\n  }\n\n  Carousel.prototype.cycle = function (e) {\n    e || (this.paused = false)\n\n    this.interval && clearInterval(this.interval)\n\n    this.options.interval\n      && !this.paused\n      && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))\n\n    return this\n  }\n\n  Carousel.prototype.getItemIndex = function (item) {\n    this.$items = item.parent().children('.item')\n    return this.$items.index(item || this.$active)\n  }\n\n  Carousel.prototype.getItemForDirection = function (direction, active) {\n    var activeIndex = this.getItemIndex(active)\n    var willWrap = (direction == 'prev' && activeIndex === 0)\n                || (direction == 'next' && activeIndex == (this.$items.length - 1))\n    if (willWrap && !this.options.wrap) return active\n    var delta = direction == 'prev' ? -1 : 1\n    var itemIndex = (activeIndex + delta) % this.$items.length\n    return this.$items.eq(itemIndex)\n  }\n\n  Carousel.prototype.to = function (pos) {\n    var that        = this\n    var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active'))\n\n    if (pos > (this.$items.length - 1) || pos < 0) return\n\n    if (this.sliding)       return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, \"slid\"\n    if (activeIndex == pos) return this.pause().cycle()\n\n    return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos))\n  }\n\n  Carousel.prototype.pause = function (e) {\n    e || (this.paused = true)\n\n    if (this.$element.find('.next, .prev').length && $.support.transition) {\n      this.$element.trigger($.support.transition.end)\n      this.cycle(true)\n    }\n\n    this.interval = clearInterval(this.interval)\n\n    return this\n  }\n\n  Carousel.prototype.next = function () {\n    if (this.sliding) return\n    return this.slide('next')\n  }\n\n  Carousel.prototype.prev = function () {\n    if (this.sliding) return\n    return this.slide('prev')\n  }\n\n  Carousel.prototype.slide = function (type, next) {\n    var $active   = this.$element.find('.item.active')\n    var $next     = next || this.getItemForDirection(type, $active)\n    var isCycling = this.interval\n    var direction = type == 'next' ? 'left' : 'right'\n    var that      = this\n\n    if ($next.hasClass('active')) return (this.sliding = false)\n\n    var relatedTarget = $next[0]\n    var slideEvent = $.Event('slide.bs.carousel', {\n      relatedTarget: relatedTarget,\n      direction: direction\n    })\n    this.$element.trigger(slideEvent)\n    if (slideEvent.isDefaultPrevented()) return\n\n    this.sliding = true\n\n    isCycling && this.pause()\n\n    if (this.$indicators.length) {\n      this.$indicators.find('.active').removeClass('active')\n      var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)])\n      $nextIndicator && $nextIndicator.addClass('active')\n    }\n\n    var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, \"slid\"\n    if ($.support.transition && this.$element.hasClass('slide')) {\n      $next.addClass(type)\n      if (typeof $next === 'object' && $next.length) {\n        $next[0].offsetWidth // force reflow\n      }\n      $active.addClass(direction)\n      $next.addClass(direction)\n      $active\n        .one('bsTransitionEnd', function () {\n          $next.removeClass([type, direction].join(' ')).addClass('active')\n          $active.removeClass(['active', direction].join(' '))\n          that.sliding = false\n          setTimeout(function () {\n            that.$element.trigger(slidEvent)\n          }, 0)\n        })\n        .emulateTransitionEnd(Carousel.TRANSITION_DURATION)\n    } else {\n      $active.removeClass('active')\n      $next.addClass('active')\n      this.sliding = false\n      this.$element.trigger(slidEvent)\n    }\n\n    isCycling && this.cycle()\n\n    return this\n  }\n\n\n  // CAROUSEL PLUGIN DEFINITION\n  // ==========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.carousel')\n      var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)\n      var action  = typeof option == 'string' ? option : options.slide\n\n      if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))\n      if (typeof option == 'number') data.to(option)\n      else if (action) data[action]()\n      else if (options.interval) data.pause().cycle()\n    })\n  }\n\n  var old = $.fn.carousel\n\n  $.fn.carousel             = Plugin\n  $.fn.carousel.Constructor = Carousel\n\n\n  // CAROUSEL NO CONFLICT\n  // ====================\n\n  $.fn.carousel.noConflict = function () {\n    $.fn.carousel = old\n    return this\n  }\n\n\n  // CAROUSEL DATA-API\n  // =================\n\n  var clickHandler = function (e) {\n    var $this   = $(this)\n    var href    = $this.attr('href')\n    if (href) {\n      href = href.replace(/.*(?=#[^\\s]+$)/, '') // strip for ie7\n    }\n\n    var target  = $this.attr('data-target') || href\n    var $target = $(document).find(target)\n\n    if (!$target.hasClass('carousel')) return\n\n    var options = $.extend({}, $target.data(), $this.data())\n    var slideIndex = $this.attr('data-slide-to')\n    if (slideIndex) options.interval = false\n\n    Plugin.call($target, options)\n\n    if (slideIndex) {\n      $target.data('bs.carousel').to(slideIndex)\n    }\n\n    e.preventDefault()\n  }\n\n  $(document)\n    .on('click.bs.carousel.data-api', '[data-slide]', clickHandler)\n    .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler)\n\n  $(window).on('load', function () {\n    $('[data-ride=\"carousel\"]').each(function () {\n      var $carousel = $(this)\n      Plugin.call($carousel, $carousel.data())\n    })\n  })\n\n}(jQuery);\n", "/* ========================================================================\n * Bootstrap: collapse.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#collapse\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n/* jshint latedef: false */\n\n+function ($) {\n  'use strict';\n\n  // COLLAPSE PUBLIC CLASS DEFINITION\n  // ================================\n\n  var Collapse = function (element, options) {\n    this.$element      = $(element)\n    this.options       = $.extend({}, Collapse.DEFAULTS, options)\n    this.$trigger      = $('[data-toggle=\"collapse\"][href=\"#' + element.id + '\"],' +\n                           '[data-toggle=\"collapse\"][data-target=\"#' + element.id + '\"]')\n    this.transitioning = null\n\n    if (this.options.parent) {\n      this.$parent = this.getParent()\n    } else {\n      this.addAriaAndCollapsedClass(this.$element, this.$trigger)\n    }\n\n    if (this.options.toggle) this.toggle()\n  }\n\n  Collapse.VERSION  = '3.4.1'\n\n  Collapse.TRANSITION_DURATION = 350\n\n  Collapse.DEFAULTS = {\n    toggle: true\n  }\n\n  Collapse.prototype.dimension = function () {\n    var hasWidth = this.$element.hasClass('width')\n    return hasWidth ? 'width' : 'height'\n  }\n\n  Collapse.prototype.show = function () {\n    if (this.transitioning || this.$element.hasClass('in')) return\n\n    var activesData\n    var actives = this.$parent && this.$parent.children('.panel').children('.in, .collapsing')\n\n    if (actives && actives.length) {\n      activesData = actives.data('bs.collapse')\n      if (activesData && activesData.transitioning) return\n    }\n\n    var startEvent = $.Event('show.bs.collapse')\n    this.$element.trigger(startEvent)\n    if (startEvent.isDefaultPrevented()) return\n\n    if (actives && actives.length) {\n      Plugin.call(actives, 'hide')\n      activesData || actives.data('bs.collapse', null)\n    }\n\n    var dimension = this.dimension()\n\n    this.$element\n      .removeClass('collapse')\n      .addClass('collapsing')[dimension](0)\n      .attr('aria-expanded', true)\n\n    this.$trigger\n      .removeClass('collapsed')\n      .attr('aria-expanded', true)\n\n    this.transitioning = 1\n\n    var complete = function () {\n      this.$element\n        .removeClass('collapsing')\n        .addClass('collapse in')[dimension]('')\n      this.transitioning = 0\n      this.$element\n        .trigger('shown.bs.collapse')\n    }\n\n    if (!$.support.transition) return complete.call(this)\n\n    var scrollSize = $.camelCase(['scroll', dimension].join('-'))\n\n    this.$element\n      .one('bsTransitionEnd', $.proxy(complete, this))\n      .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize])\n  }\n\n  Collapse.prototype.hide = function () {\n    if (this.transitioning || !this.$element.hasClass('in')) return\n\n    var startEvent = $.Event('hide.bs.collapse')\n    this.$element.trigger(startEvent)\n    if (startEvent.isDefaultPrevented()) return\n\n    var dimension = this.dimension()\n\n    this.$element[dimension](this.$element[dimension]())[0].offsetHeight\n\n    this.$element\n      .addClass('collapsing')\n      .removeClass('collapse in')\n      .attr('aria-expanded', false)\n\n    this.$trigger\n      .addClass('collapsed')\n      .attr('aria-expanded', false)\n\n    this.transitioning = 1\n\n    var complete = function () {\n      this.transitioning = 0\n      this.$element\n        .removeClass('collapsing')\n        .addClass('collapse')\n        .trigger('hidden.bs.collapse')\n    }\n\n    if (!$.support.transition) return complete.call(this)\n\n    this.$element\n      [dimension](0)\n      .one('bsTransitionEnd', $.proxy(complete, this))\n      .emulateTransitionEnd(Collapse.TRANSITION_DURATION)\n  }\n\n  Collapse.prototype.toggle = function () {\n    this[this.$element.hasClass('in') ? 'hide' : 'show']()\n  }\n\n  Collapse.prototype.getParent = function () {\n    return $(document).find(this.options.parent)\n      .find('[data-toggle=\"collapse\"][data-parent=\"' + this.options.parent + '\"]')\n      .each($.proxy(function (i, element) {\n        var $element = $(element)\n        this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element)\n      }, this))\n      .end()\n  }\n\n  Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) {\n    var isOpen = $element.hasClass('in')\n\n    $element.attr('aria-expanded', isOpen)\n    $trigger\n      .toggleClass('collapsed', !isOpen)\n      .attr('aria-expanded', isOpen)\n  }\n\n  function getTargetFromTrigger($trigger) {\n    var href\n    var target = $trigger.attr('data-target')\n      || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\\s]+$)/, '') // strip for ie7\n\n    return $(document).find(target)\n  }\n\n\n  // COLLAPSE PLUGIN DEFINITION\n  // ==========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.collapse')\n      var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)\n\n      if (!data && options.toggle && /show|hide/.test(option)) options.toggle = false\n      if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.collapse\n\n  $.fn.collapse             = Plugin\n  $.fn.collapse.Constructor = Collapse\n\n\n  // COLLAPSE NO CONFLICT\n  // ====================\n\n  $.fn.collapse.noConflict = function () {\n    $.fn.collapse = old\n    return this\n  }\n\n\n  // COLLAPSE DATA-API\n  // =================\n\n  $(document).on('click.bs.collapse.data-api', '[data-toggle=\"collapse\"]', function (e) {\n    var $this   = $(this)\n\n    if (!$this.attr('data-target')) e.preventDefault()\n\n    var $target = getTargetFromTrigger($this)\n    var data    = $target.data('bs.collapse')\n    var option  = data ? 'toggle' : $this.data()\n\n    Plugin.call($target, option)\n  })\n\n}(jQuery);\n", "/* ========================================================================\n * Bootstrap: dropdown.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#dropdowns\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // DROPDOWN CLASS DEFINITION\n  // =========================\n\n  var backdrop = '.dropdown-backdrop'\n  var toggle   = '[data-toggle=\"dropdown\"]'\n  var Dropdown = function (element) {\n    $(element).on('click.bs.dropdown', this.toggle)\n  }\n\n  Dropdown.VERSION = '3.4.1'\n\n  function getParent($this) {\n    var selector = $this.attr('data-target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n    }\n\n    var $parent = selector !== '#' ? $(document).find(selector) : null\n\n    return $parent && $parent.length ? $parent : $this.parent()\n  }\n\n  function clearMenus(e) {\n    if (e && e.which === 3) return\n    $(backdrop).remove()\n    $(toggle).each(function () {\n      var $this         = $(this)\n      var $parent       = getParent($this)\n      var relatedTarget = { relatedTarget: this }\n\n      if (!$parent.hasClass('open')) return\n\n      if (e && e.type == 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) return\n\n      $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))\n\n      if (e.isDefaultPrevented()) return\n\n      $this.attr('aria-expanded', 'false')\n      $parent.removeClass('open').trigger($.Event('hidden.bs.dropdown', relatedTarget))\n    })\n  }\n\n  Dropdown.prototype.toggle = function (e) {\n    var $this = $(this)\n\n    if ($this.is('.disabled, :disabled')) return\n\n    var $parent  = getParent($this)\n    var isActive = $parent.hasClass('open')\n\n    clearMenus()\n\n    if (!isActive) {\n      if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {\n        // if mobile we use a backdrop because click events don't delegate\n        $(document.createElement('div'))\n          .addClass('dropdown-backdrop')\n          .insertAfter($(this))\n          .on('click', clearMenus)\n      }\n\n      var relatedTarget = { relatedTarget: this }\n      $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))\n\n      if (e.isDefaultPrevented()) return\n\n      $this\n        .trigger('focus')\n        .attr('aria-expanded', 'true')\n\n      $parent\n        .toggleClass('open')\n        .trigger($.Event('shown.bs.dropdown', relatedTarget))\n    }\n\n    return false\n  }\n\n  Dropdown.prototype.keydown = function (e) {\n    if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return\n\n    var $this = $(this)\n\n    e.preventDefault()\n    e.stopPropagation()\n\n    if ($this.is('.disabled, :disabled')) return\n\n    var $parent  = getParent($this)\n    var isActive = $parent.hasClass('open')\n\n    if (!isActive && e.which != 27 || isActive && e.which == 27) {\n      if (e.which == 27) $parent.find(toggle).trigger('focus')\n      return $this.trigger('click')\n    }\n\n    var desc = ' li:not(.disabled):visible a'\n    var $items = $parent.find('.dropdown-menu' + desc)\n\n    if (!$items.length) return\n\n    var index = $items.index(e.target)\n\n    if (e.which == 38 && index > 0)                 index--         // up\n    if (e.which == 40 && index < $items.length - 1) index++         // down\n    if (!~index)                                    index = 0\n\n    $items.eq(index).trigger('focus')\n  }\n\n\n  // DROPDOWN PLUGIN DEFINITION\n  // ==========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('bs.dropdown')\n\n      if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))\n      if (typeof option == 'string') data[option].call($this)\n    })\n  }\n\n  var old = $.fn.dropdown\n\n  $.fn.dropdown             = Plugin\n  $.fn.dropdown.Constructor = Dropdown\n\n\n  // DROPDOWN NO CONFLICT\n  // ====================\n\n  $.fn.dropdown.noConflict = function () {\n    $.fn.dropdown = old\n    return this\n  }\n\n\n  // APPLY TO STANDARD DROPDOWN ELEMENTS\n  // ===================================\n\n  $(document)\n    .on('click.bs.dropdown.data-api', clearMenus)\n    .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })\n    .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)\n    .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)\n    .on('keydown.bs.dropdown.data-api', '.dropdown-menu', Dropdown.prototype.keydown)\n\n}(jQuery);\n", "/* ========================================================================\n * Bootstrap: modal.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#modals\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // MODAL CLASS DEFINITION\n  // ======================\n\n  var Modal = function (element, options) {\n    this.options = options\n    this.$body = $(document.body)\n    this.$element = $(element)\n    this.$dialog = this.$element.find('.modal-dialog')\n    this.$backdrop = null\n    this.isShown = null\n    this.originalBodyPad = null\n    this.scrollbarWidth = 0\n    this.ignoreBackdropClick = false\n    this.fixedContent = '.navbar-fixed-top, .navbar-fixed-bottom'\n\n    if (this.options.remote) {\n      this.$element\n        .find('.modal-content')\n        .load(this.options.remote, $.proxy(function () {\n          this.$element.trigger('loaded.bs.modal')\n        }, this))\n    }\n  }\n\n  Modal.VERSION = '3.4.1'\n\n  Modal.TRANSITION_DURATION = 300\n  Modal.BACKDROP_TRANSITION_DURATION = 150\n\n  Modal.DEFAULTS = {\n    backdrop: true,\n    keyboard: true,\n    show: true\n  }\n\n  Modal.prototype.toggle = function (_relatedTarget) {\n    return this.isShown ? this.hide() : this.show(_relatedTarget)\n  }\n\n  Modal.prototype.show = function (_relatedTarget) {\n    var that = this\n    var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })\n\n    this.$element.trigger(e)\n\n    if (this.isShown || e.isDefaultPrevented()) return\n\n    this.isShown = true\n\n    this.checkScrollbar()\n    this.setScrollbar()\n    this.$body.addClass('modal-open')\n\n    this.escape()\n    this.resize()\n\n    this.$element.on('click.dismiss.bs.modal', '[data-dismiss=\"modal\"]', $.proxy(this.hide, this))\n\n    this.$dialog.on('mousedown.dismiss.bs.modal', function () {\n      that.$element.one('mouseup.dismiss.bs.modal', function (e) {\n        if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true\n      })\n    })\n\n    this.backdrop(function () {\n      var transition = $.support.transition && that.$element.hasClass('fade')\n\n      if (!that.$element.parent().length) {\n        that.$element.appendTo(that.$body) // don't move modals dom position\n      }\n\n      that.$element\n        .show()\n        .scrollTop(0)\n\n      that.adjustDialog()\n\n      if (transition) {\n        that.$element[0].offsetWidth // force reflow\n      }\n\n      that.$element.addClass('in')\n\n      that.enforceFocus()\n\n      var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })\n\n      transition ?\n        that.$dialog // wait for modal to slide in\n          .one('bsTransitionEnd', function () {\n            that.$element.trigger('focus').trigger(e)\n          })\n          .emulateTransitionEnd(Modal.TRANSITION_DURATION) :\n        that.$element.trigger('focus').trigger(e)\n    })\n  }\n\n  Modal.prototype.hide = function (e) {\n    if (e) e.preventDefault()\n\n    e = $.Event('hide.bs.modal')\n\n    this.$element.trigger(e)\n\n    if (!this.isShown || e.isDefaultPrevented()) return\n\n    this.isShown = false\n\n    this.escape()\n    this.resize()\n\n    $(document).off('focusin.bs.modal')\n\n    this.$element\n      .removeClass('in')\n      .off('click.dismiss.bs.modal')\n      .off('mouseup.dismiss.bs.modal')\n\n    this.$dialog.off('mousedown.dismiss.bs.modal')\n\n    $.support.transition && this.$element.hasClass('fade') ?\n      this.$element\n        .one('bsTransitionEnd', $.proxy(this.hideModal, this))\n        .emulateTransitionEnd(Modal.TRANSITION_DURATION) :\n      this.hideModal()\n  }\n\n  Modal.prototype.enforceFocus = function () {\n    $(document)\n      .off('focusin.bs.modal') // guard against infinite focus loop\n      .on('focusin.bs.modal', $.proxy(function (e) {\n        if (document !== e.target &&\n          this.$element[0] !== e.target &&\n          !this.$element.has(e.target).length) {\n          this.$element.trigger('focus')\n        }\n      }, this))\n  }\n\n  Modal.prototype.escape = function () {\n    if (this.isShown && this.options.keyboard) {\n      this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) {\n        e.which == 27 && this.hide()\n      }, this))\n    } else if (!this.isShown) {\n      this.$element.off('keydown.dismiss.bs.modal')\n    }\n  }\n\n  Modal.prototype.resize = function () {\n    if (this.isShown) {\n      $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this))\n    } else {\n      $(window).off('resize.bs.modal')\n    }\n  }\n\n  Modal.prototype.hideModal = function () {\n    var that = this\n    this.$element.hide()\n    this.backdrop(function () {\n      that.$body.removeClass('modal-open')\n      that.resetAdjustments()\n      that.resetScrollbar()\n      that.$element.trigger('hidden.bs.modal')\n    })\n  }\n\n  Modal.prototype.removeBackdrop = function () {\n    this.$backdrop && this.$backdrop.remove()\n    this.$backdrop = null\n  }\n\n  Modal.prototype.backdrop = function (callback) {\n    var that = this\n    var animate = this.$element.hasClass('fade') ? 'fade' : ''\n\n    if (this.isShown && this.options.backdrop) {\n      var doAnimate = $.support.transition && animate\n\n      this.$backdrop = $(document.createElement('div'))\n        .addClass('modal-backdrop ' + animate)\n        .appendTo(this.$body)\n\n      this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {\n        if (this.ignoreBackdropClick) {\n          this.ignoreBackdropClick = false\n          return\n        }\n        if (e.target !== e.currentTarget) return\n        this.options.backdrop == 'static'\n          ? this.$element[0].focus()\n          : this.hide()\n      }, this))\n\n      if (doAnimate) this.$backdrop[0].offsetWidth // force reflow\n\n      this.$backdrop.addClass('in')\n\n      if (!callback) return\n\n      doAnimate ?\n        this.$backdrop\n          .one('bsTransitionEnd', callback)\n          .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :\n        callback()\n\n    } else if (!this.isShown && this.$backdrop) {\n      this.$backdrop.removeClass('in')\n\n      var callbackRemove = function () {\n        that.removeBackdrop()\n        callback && callback()\n      }\n      $.support.transition && this.$element.hasClass('fade') ?\n        this.$backdrop\n          .one('bsTransitionEnd', callbackRemove)\n          .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :\n        callbackRemove()\n\n    } else if (callback) {\n      callback()\n    }\n  }\n\n  // these following methods are used to handle overflowing modals\n\n  Modal.prototype.handleUpdate = function () {\n    this.adjustDialog()\n  }\n\n  Modal.prototype.adjustDialog = function () {\n    var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight\n\n    this.$element.css({\n      paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',\n      paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''\n    })\n  }\n\n  Modal.prototype.resetAdjustments = function () {\n    this.$element.css({\n      paddingLeft: '',\n      paddingRight: ''\n    })\n  }\n\n  Modal.prototype.checkScrollbar = function () {\n    var fullWindowWidth = window.innerWidth\n    if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8\n      var documentElementRect = document.documentElement.getBoundingClientRect()\n      fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left)\n    }\n    this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth\n    this.scrollbarWidth = this.measureScrollbar()\n  }\n\n  Modal.prototype.setScrollbar = function () {\n    var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)\n    this.originalBodyPad = document.body.style.paddingRight || ''\n    var scrollbarWidth = this.scrollbarWidth\n    if (this.bodyIsOverflowing) {\n      this.$body.css('padding-right', bodyPad + scrollbarWidth)\n      $(this.fixedContent).each(function (index, element) {\n        var actualPadding = element.style.paddingRight\n        var calculatedPadding = $(element).css('padding-right')\n        $(element)\n          .data('padding-right', actualPadding)\n          .css('padding-right', parseFloat(calculatedPadding) + scrollbarWidth + 'px')\n      })\n    }\n  }\n\n  Modal.prototype.resetScrollbar = function () {\n    this.$body.css('padding-right', this.originalBodyPad)\n    $(this.fixedContent).each(function (index, element) {\n      var padding = $(element).data('padding-right')\n      $(element).removeData('padding-right')\n      element.style.paddingRight = padding ? padding : ''\n    })\n  }\n\n  Modal.prototype.measureScrollbar = function () { // thx walsh\n    var scrollDiv = document.createElement('div')\n    scrollDiv.className = 'modal-scrollbar-measure'\n    this.$body.append(scrollDiv)\n    var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth\n    this.$body[0].removeChild(scrollDiv)\n    return scrollbarWidth\n  }\n\n\n  // MODAL PLUGIN DEFINITION\n  // =======================\n\n  function Plugin(option, _relatedTarget) {\n    return this.each(function () {\n      var $this = $(this)\n      var data = $this.data('bs.modal')\n      var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)\n\n      if (!data) $this.data('bs.modal', (data = new Modal(this, options)))\n      if (typeof option == 'string') data[option](_relatedTarget)\n      else if (options.show) data.show(_relatedTarget)\n    })\n  }\n\n  var old = $.fn.modal\n\n  $.fn.modal = Plugin\n  $.fn.modal.Constructor = Modal\n\n\n  // MODAL NO CONFLICT\n  // =================\n\n  $.fn.modal.noConflict = function () {\n    $.fn.modal = old\n    return this\n  }\n\n\n  // MODAL DATA-API\n  // ==============\n\n  $(document).on('click.bs.modal.data-api', '[data-toggle=\"modal\"]', function (e) {\n    var $this = $(this)\n    var href = $this.attr('href')\n    var target = $this.attr('data-target') ||\n      (href && href.replace(/.*(?=#[^\\s]+$)/, '')) // strip for ie7\n\n    var $target = $(document).find(target)\n    var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())\n\n    if ($this.is('a')) e.preventDefault()\n\n    $target.one('show.bs.modal', function (showEvent) {\n      if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown\n      $target.one('hidden.bs.modal', function () {\n        $this.is(':visible') && $this.trigger('focus')\n      })\n    })\n    Plugin.call($target, option, this)\n  })\n\n}(jQuery);\n", "/* ========================================================================\n * Bootstrap: tooltip.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#tooltip\n * Inspired by the original jQuery.tipsy by Jason Frame\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n+function ($) {\n  'use strict';\n\n  var DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn']\n\n  var uriAttrs = [\n    'background',\n    'cite',\n    'href',\n    'itemtype',\n    'longdesc',\n    'poster',\n    'src',\n    'xlink:href'\n  ]\n\n  var ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i\n\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', '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 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n   */\n  var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi\n\n  /**\n   * A pattern that matches safe data URLs. Only matches image, video and audio types.\n   *\n   * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\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,[a-z0-9+/]+=*$/i\n\n  function allowedAttribute(attr, allowedAttributeList) {\n    var attrName = attr.nodeName.toLowerCase()\n\n    if ($.inArray(attrName, allowedAttributeList) !== -1) {\n      if ($.inArray(attrName, uriAttrs) !== -1) {\n        return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN))\n      }\n\n      return true\n    }\n\n    var regExp = $(allowedAttributeList).filter(function (index, value) {\n      return value instanceof RegExp\n    })\n\n    // Check if a regular expression validates the attribute.\n    for (var i = 0, l = regExp.length; i < l; i++) {\n      if (attrName.match(regExp[i])) {\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    // IE 8 and below don't support createHTMLDocument\n    if (!document.implementation || !document.implementation.createHTMLDocument) {\n      return unsafeHtml\n    }\n\n    var createdDocument = document.implementation.createHTMLDocument('sanitization')\n    createdDocument.body.innerHTML = unsafeHtml\n\n    var whitelistKeys = $.map(whiteList, function (el, i) { return i })\n    var elements = $(createdDocument.body).find('*')\n\n    for (var i = 0, len = elements.length; i < len; i++) {\n      var el = elements[i]\n      var elName = el.nodeName.toLowerCase()\n\n      if ($.inArray(elName, whitelistKeys) === -1) {\n        el.parentNode.removeChild(el)\n\n        continue\n      }\n\n      var attributeList = $.map(el.attributes, function (el) { return el })\n      var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || [])\n\n      for (var j = 0, len2 = attributeList.length; j < len2; j++) {\n        if (!allowedAttribute(attributeList[j], whitelistedAttributes)) {\n          el.removeAttribute(attributeList[j].nodeName)\n        }\n      }\n    }\n\n    return createdDocument.body.innerHTML\n  }\n\n  // TOOLTIP PUBLIC CLASS DEFINITION\n  // ===============================\n\n  var Tooltip = function (element, options) {\n    this.type       = null\n    this.options    = null\n    this.enabled    = null\n    this.timeout    = null\n    this.hoverState = null\n    this.$element   = null\n    this.inState    = null\n\n    this.init('tooltip', element, options)\n  }\n\n  Tooltip.VERSION  = '3.4.1'\n\n  Tooltip.TRANSITION_DURATION = 150\n\n  Tooltip.DEFAULTS = {\n    animation: true,\n    placement: 'top',\n    selector: false,\n    template: '<div class=\"tooltip\" role=\"tooltip\"><div class=\"tooltip-arrow\"></div><div class=\"tooltip-inner\"></div></div>',\n    trigger: 'hover focus',\n    title: '',\n    delay: 0,\n    html: false,\n    container: false,\n    viewport: {\n      selector: 'body',\n      padding: 0\n    },\n    sanitize : true,\n    sanitizeFn : null,\n    whiteList : DefaultWhitelist\n  }\n\n  Tooltip.prototype.init = function (type, element, options) {\n    this.enabled   = true\n    this.type      = type\n    this.$element  = $(element)\n    this.options   = this.getOptions(options)\n    this.$viewport = this.options.viewport && $(document).find($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport))\n    this.inState   = { click: false, hover: false, focus: false }\n\n    if (this.$element[0] instanceof document.constructor && !this.options.selector) {\n      throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!')\n    }\n\n    var triggers = this.options.trigger.split(' ')\n\n    for (var i = triggers.length; i--;) {\n      var trigger = triggers[i]\n\n      if (trigger == 'click') {\n        this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))\n      } else if (trigger != 'manual') {\n        var eventIn  = trigger == 'hover' ? 'mouseenter' : 'focusin'\n        var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'\n\n        this.$element.on(eventIn  + '.' + this.type, this.options.selector, $.proxy(this.enter, this))\n        this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))\n      }\n    }\n\n    this.options.selector ?\n      (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :\n      this.fixTitle()\n  }\n\n  Tooltip.prototype.getDefaults = function () {\n    return Tooltip.DEFAULTS\n  }\n\n  Tooltip.prototype.getOptions = function (options) {\n    var dataAttributes = this.$element.data()\n\n    for (var dataAttr in dataAttributes) {\n      if (dataAttributes.hasOwnProperty(dataAttr) && $.inArray(dataAttr, DISALLOWED_ATTRIBUTES) !== -1) {\n        delete dataAttributes[dataAttr]\n      }\n    }\n\n    options = $.extend({}, this.getDefaults(), dataAttributes, options)\n\n    if (options.delay && typeof options.delay == 'number') {\n      options.delay = {\n        show: options.delay,\n        hide: options.delay\n      }\n    }\n\n    if (options.sanitize) {\n      options.template = sanitizeHtml(options.template, options.whiteList, options.sanitizeFn)\n    }\n\n    return options\n  }\n\n  Tooltip.prototype.getDelegateOptions = function () {\n    var options  = {}\n    var defaults = this.getDefaults()\n\n    this._options && $.each(this._options, function (key, value) {\n      if (defaults[key] != value) options[key] = value\n    })\n\n    return options\n  }\n\n  Tooltip.prototype.enter = function (obj) {\n    var self = obj instanceof this.constructor ?\n      obj : $(obj.currentTarget).data('bs.' + this.type)\n\n    if (!self) {\n      self = new this.constructor(obj.currentTarget, this.getDelegateOptions())\n      $(obj.currentTarget).data('bs.' + this.type, self)\n    }\n\n    if (obj instanceof $.Event) {\n      self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true\n    }\n\n    if (self.tip().hasClass('in') || self.hoverState == 'in') {\n      self.hoverState = 'in'\n      return\n    }\n\n    clearTimeout(self.timeout)\n\n    self.hoverState = 'in'\n\n    if (!self.options.delay || !self.options.delay.show) return self.show()\n\n    self.timeout = setTimeout(function () {\n      if (self.hoverState == 'in') self.show()\n    }, self.options.delay.show)\n  }\n\n  Tooltip.prototype.isInStateTrue = function () {\n    for (var key in this.inState) {\n      if (this.inState[key]) return true\n    }\n\n    return false\n  }\n\n  Tooltip.prototype.leave = function (obj) {\n    var self = obj instanceof this.constructor ?\n      obj : $(obj.currentTarget).data('bs.' + this.type)\n\n    if (!self) {\n      self = new this.constructor(obj.currentTarget, this.getDelegateOptions())\n      $(obj.currentTarget).data('bs.' + this.type, self)\n    }\n\n    if (obj instanceof $.Event) {\n      self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false\n    }\n\n    if (self.isInStateTrue()) return\n\n    clearTimeout(self.timeout)\n\n    self.hoverState = 'out'\n\n    if (!self.options.delay || !self.options.delay.hide) return self.hide()\n\n    self.timeout = setTimeout(function () {\n      if (self.hoverState == 'out') self.hide()\n    }, self.options.delay.hide)\n  }\n\n  Tooltip.prototype.show = function () {\n    var e = $.Event('show.bs.' + this.type)\n\n    if (this.hasContent() && this.enabled) {\n      this.$element.trigger(e)\n\n      var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0])\n      if (e.isDefaultPrevented() || !inDom) return\n      var that = this\n\n      var $tip = this.tip()\n\n      var tipId = this.getUID(this.type)\n\n      this.setContent()\n      $tip.attr('id', tipId)\n      this.$element.attr('aria-describedby', tipId)\n\n      if (this.options.animation) $tip.addClass('fade')\n\n      var placement = typeof this.options.placement == 'function' ?\n        this.options.placement.call(this, $tip[0], this.$element[0]) :\n        this.options.placement\n\n      var autoToken = /\\s?auto?\\s?/i\n      var autoPlace = autoToken.test(placement)\n      if (autoPlace) placement = placement.replace(autoToken, '') || 'top'\n\n      $tip\n        .detach()\n        .css({ top: 0, left: 0, display: 'block' })\n        .addClass(placement)\n        .data('bs.' + this.type, this)\n\n      this.options.container ? $tip.appendTo($(document).find(this.options.container)) : $tip.insertAfter(this.$element)\n      this.$element.trigger('inserted.bs.' + this.type)\n\n      var pos          = this.getPosition()\n      var actualWidth  = $tip[0].offsetWidth\n      var actualHeight = $tip[0].offsetHeight\n\n      if (autoPlace) {\n        var orgPlacement = placement\n        var viewportDim = this.getPosition(this.$viewport)\n\n        placement = placement == 'bottom' && pos.bottom + actualHeight > viewportDim.bottom ? 'top'    :\n                    placement == 'top'    && pos.top    - actualHeight < viewportDim.top    ? 'bottom' :\n                    placement == 'right'  && pos.right  + actualWidth  > viewportDim.width  ? 'left'   :\n                    placement == 'left'   && pos.left   - actualWidth  < viewportDim.left   ? 'right'  :\n                    placement\n\n        $tip\n          .removeClass(orgPlacement)\n          .addClass(placement)\n      }\n\n      var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)\n\n      this.applyPlacement(calculatedOffset, placement)\n\n      var complete = function () {\n        var prevHoverState = that.hoverState\n        that.$element.trigger('shown.bs.' + that.type)\n        that.hoverState = null\n\n        if (prevHoverState == 'out') that.leave(that)\n      }\n\n      $.support.transition && this.$tip.hasClass('fade') ?\n        $tip\n          .one('bsTransitionEnd', complete)\n          .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :\n        complete()\n    }\n  }\n\n  Tooltip.prototype.applyPlacement = function (offset, placement) {\n    var $tip   = this.tip()\n    var width  = $tip[0].offsetWidth\n    var height = $tip[0].offsetHeight\n\n    // manually read margins because getBoundingClientRect includes difference\n    var marginTop = parseInt($tip.css('margin-top'), 10)\n    var marginLeft = parseInt($tip.css('margin-left'), 10)\n\n    // we must check for NaN for ie 8/9\n    if (isNaN(marginTop))  marginTop  = 0\n    if (isNaN(marginLeft)) marginLeft = 0\n\n    offset.top  += marginTop\n    offset.left += marginLeft\n\n    // $.fn.offset doesn't round pixel values\n    // so we use setOffset directly with our own function B-0\n    $.offset.setOffset($tip[0], $.extend({\n      using: function (props) {\n        $tip.css({\n          top: Math.round(props.top),\n          left: Math.round(props.left)\n        })\n      }\n    }, offset), 0)\n\n    $tip.addClass('in')\n\n    // check to see if placing tip in new offset caused the tip to resize itself\n    var actualWidth  = $tip[0].offsetWidth\n    var actualHeight = $tip[0].offsetHeight\n\n    if (placement == 'top' && actualHeight != height) {\n      offset.top = offset.top + height - actualHeight\n    }\n\n    var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)\n\n    if (delta.left) offset.left += delta.left\n    else offset.top += delta.top\n\n    var isVertical          = /top|bottom/.test(placement)\n    var arrowDelta          = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight\n    var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'\n\n    $tip.offset(offset)\n    this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)\n  }\n\n  Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) {\n    this.arrow()\n      .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')\n      .css(isVertical ? 'top' : 'left', '')\n  }\n\n  Tooltip.prototype.setContent = function () {\n    var $tip  = this.tip()\n    var title = this.getTitle()\n\n    if (this.options.html) {\n      if (this.options.sanitize) {\n        title = sanitizeHtml(title, this.options.whiteList, this.options.sanitizeFn)\n      }\n\n      $tip.find('.tooltip-inner').html(title)\n    } else {\n      $tip.find('.tooltip-inner').text(title)\n    }\n\n    $tip.removeClass('fade in top bottom left right')\n  }\n\n  Tooltip.prototype.hide = function (callback) {\n    var that = this\n    var $tip = $(this.$tip)\n    var e    = $.Event('hide.bs.' + this.type)\n\n    function complete() {\n      if (that.hoverState != 'in') $tip.detach()\n      if (that.$element) { // TODO: Check whether guarding this code with this `if` is really necessary.\n        that.$element\n          .removeAttr('aria-describedby')\n          .trigger('hidden.bs.' + that.type)\n      }\n      callback && callback()\n    }\n\n    this.$element.trigger(e)\n\n    if (e.isDefaultPrevented()) return\n\n    $tip.removeClass('in')\n\n    $.support.transition && $tip.hasClass('fade') ?\n      $tip\n        .one('bsTransitionEnd', complete)\n        .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :\n      complete()\n\n    this.hoverState = null\n\n    return this\n  }\n\n  Tooltip.prototype.fixTitle = function () {\n    var $e = this.$element\n    if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') {\n      $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')\n    }\n  }\n\n  Tooltip.prototype.hasContent = function () {\n    return this.getTitle()\n  }\n\n  Tooltip.prototype.getPosition = function ($element) {\n    $element   = $element || this.$element\n\n    var el     = $element[0]\n    var isBody = el.tagName == 'BODY'\n\n    var elRect    = el.getBoundingClientRect()\n    if (elRect.width == null) {\n      // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093\n      elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })\n    }\n    var isSvg = window.SVGElement && el instanceof window.SVGElement\n    // Avoid using $.offset() on SVGs since it gives incorrect results in jQuery 3.\n    // See https://github.com/twbs/bootstrap/issues/20280\n    var elOffset  = isBody ? { top: 0, left: 0 } : (isSvg ? null : $element.offset())\n    var scroll    = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }\n    var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null\n\n    return $.extend({}, elRect, scroll, outerDims, elOffset)\n  }\n\n  Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {\n    return placement == 'bottom' ? { top: pos.top + pos.height,   left: pos.left + pos.width / 2 - actualWidth / 2 } :\n           placement == 'top'    ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :\n           placement == 'left'   ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :\n        /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }\n\n  }\n\n  Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {\n    var delta = { top: 0, left: 0 }\n    if (!this.$viewport) return delta\n\n    var viewportPadding = this.options.viewport && this.options.viewport.padding || 0\n    var viewportDimensions = this.getPosition(this.$viewport)\n\n    if (/right|left/.test(placement)) {\n      var topEdgeOffset    = pos.top - viewportPadding - viewportDimensions.scroll\n      var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight\n      if (topEdgeOffset < viewportDimensions.top) { // top overflow\n        delta.top = viewportDimensions.top - topEdgeOffset\n      } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow\n        delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset\n      }\n    } else {\n      var leftEdgeOffset  = pos.left - viewportPadding\n      var rightEdgeOffset = pos.left + viewportPadding + actualWidth\n      if (leftEdgeOffset < viewportDimensions.left) { // left overflow\n        delta.left = viewportDimensions.left - leftEdgeOffset\n      } else if (rightEdgeOffset > viewportDimensions.right) { // right overflow\n        delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset\n      }\n    }\n\n    return delta\n  }\n\n  Tooltip.prototype.getTitle = function () {\n    var title\n    var $e = this.$element\n    var o  = this.options\n\n    title = $e.attr('data-original-title')\n      || (typeof o.title == 'function' ? o.title.call($e[0]) :  o.title)\n\n    return title\n  }\n\n  Tooltip.prototype.getUID = function (prefix) {\n    do prefix += ~~(Math.random() * 1000000)\n    while (document.getElementById(prefix))\n    return prefix\n  }\n\n  Tooltip.prototype.tip = function () {\n    if (!this.$tip) {\n      this.$tip = $(this.options.template)\n      if (this.$tip.length != 1) {\n        throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!')\n      }\n    }\n    return this.$tip\n  }\n\n  Tooltip.prototype.arrow = function () {\n    return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))\n  }\n\n  Tooltip.prototype.enable = function () {\n    this.enabled = true\n  }\n\n  Tooltip.prototype.disable = function () {\n    this.enabled = false\n  }\n\n  Tooltip.prototype.toggleEnabled = function () {\n    this.enabled = !this.enabled\n  }\n\n  Tooltip.prototype.toggle = function (e) {\n    var self = this\n    if (e) {\n      self = $(e.currentTarget).data('bs.' + this.type)\n      if (!self) {\n        self = new this.constructor(e.currentTarget, this.getDelegateOptions())\n        $(e.currentTarget).data('bs.' + this.type, self)\n      }\n    }\n\n    if (e) {\n      self.inState.click = !self.inState.click\n      if (self.isInStateTrue()) self.enter(self)\n      else self.leave(self)\n    } else {\n      self.tip().hasClass('in') ? self.leave(self) : self.enter(self)\n    }\n  }\n\n  Tooltip.prototype.destroy = function () {\n    var that = this\n    clearTimeout(this.timeout)\n    this.hide(function () {\n      that.$element.off('.' + that.type).removeData('bs.' + that.type)\n      if (that.$tip) {\n        that.$tip.detach()\n      }\n      that.$tip = null\n      that.$arrow = null\n      that.$viewport = null\n      that.$element = null\n    })\n  }\n\n  Tooltip.prototype.sanitizeHtml = function (unsafeHtml) {\n    return sanitizeHtml(unsafeHtml, this.options.whiteList, this.options.sanitizeFn)\n  }\n\n  // TOOLTIP PLUGIN DEFINITION\n  // =========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.tooltip')\n      var options = typeof option == 'object' && option\n\n      if (!data && /destroy|hide/.test(option)) return\n      if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.tooltip\n\n  $.fn.tooltip             = Plugin\n  $.fn.tooltip.Constructor = Tooltip\n\n\n  // TOOLTIP NO CONFLICT\n  // ===================\n\n  $.fn.tooltip.noConflict = function () {\n    $.fn.tooltip = old\n    return this\n  }\n\n}(jQuery);\n", "/* ========================================================================\n * Bootstrap: popover.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#popovers\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // POPOVER PUBLIC CLASS DEFINITION\n  // ===============================\n\n  var Popover = function (element, options) {\n    this.init('popover', element, options)\n  }\n\n  if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')\n\n  Popover.VERSION  = '3.4.1'\n\n  Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {\n    placement: 'right',\n    trigger: 'click',\n    content: '',\n    template: '<div class=\"popover\" role=\"tooltip\"><div class=\"arrow\"></div><h3 class=\"popover-title\"></h3><div class=\"popover-content\"></div></div>'\n  })\n\n\n  // NOTE: POPOVER EXTENDS tooltip.js\n  // ================================\n\n  Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)\n\n  Popover.prototype.constructor = Popover\n\n  Popover.prototype.getDefaults = function () {\n    return Popover.DEFAULTS\n  }\n\n  Popover.prototype.setContent = function () {\n    var $tip    = this.tip()\n    var title   = this.getTitle()\n    var content = this.getContent()\n\n    if (this.options.html) {\n      var typeContent = typeof content\n\n      if (this.options.sanitize) {\n        title = this.sanitizeHtml(title)\n\n        if (typeContent === 'string') {\n          content = this.sanitizeHtml(content)\n        }\n      }\n\n      $tip.find('.popover-title').html(title)\n      $tip.find('.popover-content').children().detach().end()[\n        typeContent === 'string' ? 'html' : 'append'\n      ](content)\n    } else {\n      $tip.find('.popover-title').text(title)\n      $tip.find('.popover-content').children().detach().end().text(content)\n    }\n\n    $tip.removeClass('fade top bottom left right in')\n\n    // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do\n    // this manually by checking the contents.\n    if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()\n  }\n\n  Popover.prototype.hasContent = function () {\n    return this.getTitle() || this.getContent()\n  }\n\n  Popover.prototype.getContent = function () {\n    var $e = this.$element\n    var o  = this.options\n\n    return $e.attr('data-content')\n      || (typeof o.content == 'function' ?\n        o.content.call($e[0]) :\n        o.content)\n  }\n\n  Popover.prototype.arrow = function () {\n    return (this.$arrow = this.$arrow || this.tip().find('.arrow'))\n  }\n\n\n  // POPOVER PLUGIN DEFINITION\n  // =========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.popover')\n      var options = typeof option == 'object' && option\n\n      if (!data && /destroy|hide/.test(option)) return\n      if (!data) $this.data('bs.popover', (data = new Popover(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.popover\n\n  $.fn.popover             = Plugin\n  $.fn.popover.Constructor = Popover\n\n\n  // POPOVER NO CONFLICT\n  // ===================\n\n  $.fn.popover.noConflict = function () {\n    $.fn.popover = old\n    return this\n  }\n\n}(jQuery);\n", "/* ========================================================================\n * Bootstrap: scrollspy.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#scrollspy\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // SCROLLSPY CLASS DEFINITION\n  // ==========================\n\n  function ScrollSpy(element, options) {\n    this.$body          = $(document.body)\n    this.$scrollElement = $(element).is(document.body) ? $(window) : $(element)\n    this.options        = $.extend({}, ScrollSpy.DEFAULTS, options)\n    this.selector       = (this.options.target || '') + ' .nav li > a'\n    this.offsets        = []\n    this.targets        = []\n    this.activeTarget   = null\n    this.scrollHeight   = 0\n\n    this.$scrollElement.on('scroll.bs.scrollspy', $.proxy(this.process, this))\n    this.refresh()\n    this.process()\n  }\n\n  ScrollSpy.VERSION  = '3.4.1'\n\n  ScrollSpy.DEFAULTS = {\n    offset: 10\n  }\n\n  ScrollSpy.prototype.getScrollHeight = function () {\n    return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)\n  }\n\n  ScrollSpy.prototype.refresh = function () {\n    var that          = this\n    var offsetMethod  = 'offset'\n    var offsetBase    = 0\n\n    this.offsets      = []\n    this.targets      = []\n    this.scrollHeight = this.getScrollHeight()\n\n    if (!$.isWindow(this.$scrollElement[0])) {\n      offsetMethod = 'position'\n      offsetBase   = this.$scrollElement.scrollTop()\n    }\n\n    this.$body\n      .find(this.selector)\n      .map(function () {\n        var $el   = $(this)\n        var href  = $el.data('target') || $el.attr('href')\n        var $href = /^#./.test(href) && $(href)\n\n        return ($href\n          && $href.length\n          && $href.is(':visible')\n          && [[$href[offsetMethod]().top + offsetBase, href]]) || null\n      })\n      .sort(function (a, b) { return a[0] - b[0] })\n      .each(function () {\n        that.offsets.push(this[0])\n        that.targets.push(this[1])\n      })\n  }\n\n  ScrollSpy.prototype.process = function () {\n    var scrollTop    = this.$scrollElement.scrollTop() + this.options.offset\n    var scrollHeight = this.getScrollHeight()\n    var maxScroll    = this.options.offset + scrollHeight - this.$scrollElement.height()\n    var offsets      = this.offsets\n    var targets      = this.targets\n    var activeTarget = this.activeTarget\n    var i\n\n    if (this.scrollHeight != scrollHeight) {\n      this.refresh()\n    }\n\n    if (scrollTop >= maxScroll) {\n      return activeTarget != (i = targets[targets.length - 1]) && this.activate(i)\n    }\n\n    if (activeTarget && scrollTop < offsets[0]) {\n      this.activeTarget = null\n      return this.clear()\n    }\n\n    for (i = offsets.length; i--;) {\n      activeTarget != targets[i]\n        && scrollTop >= offsets[i]\n        && (offsets[i + 1] === undefined || scrollTop < offsets[i + 1])\n        && this.activate(targets[i])\n    }\n  }\n\n  ScrollSpy.prototype.activate = function (target) {\n    this.activeTarget = target\n\n    this.clear()\n\n    var selector = this.selector +\n      '[data-target=\"' + target + '\"],' +\n      this.selector + '[href=\"' + target + '\"]'\n\n    var active = $(selector)\n      .parents('li')\n      .addClass('active')\n\n    if (active.parent('.dropdown-menu').length) {\n      active = active\n        .closest('li.dropdown')\n        .addClass('active')\n    }\n\n    active.trigger('activate.bs.scrollspy')\n  }\n\n  ScrollSpy.prototype.clear = function () {\n    $(this.selector)\n      .parentsUntil(this.options.target, '.active')\n      .removeClass('active')\n  }\n\n\n  // SCROLLSPY PLUGIN DEFINITION\n  // ===========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.scrollspy')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.scrollspy\n\n  $.fn.scrollspy             = Plugin\n  $.fn.scrollspy.Constructor = ScrollSpy\n\n\n  // SCROLLSPY NO CONFLICT\n  // =====================\n\n  $.fn.scrollspy.noConflict = function () {\n    $.fn.scrollspy = old\n    return this\n  }\n\n\n  // SCROLLSPY DATA-API\n  // ==================\n\n  $(window).on('load.bs.scrollspy.data-api', function () {\n    $('[data-spy=\"scroll\"]').each(function () {\n      var $spy = $(this)\n      Plugin.call($spy, $spy.data())\n    })\n  })\n\n}(jQuery);\n", "/* ========================================================================\n * Bootstrap: tab.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#tabs\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // TAB CLASS DEFINITION\n  // ====================\n\n  var Tab = function (element) {\n    // jscs:disable requireDollarBeforejQueryAssignment\n    this.element = $(element)\n    // jscs:enable requireDollarBeforejQueryAssignment\n  }\n\n  Tab.VERSION = '3.4.1'\n\n  Tab.TRANSITION_DURATION = 150\n\n  Tab.prototype.show = function () {\n    var $this    = this.element\n    var $ul      = $this.closest('ul:not(.dropdown-menu)')\n    var selector = $this.data('target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n    }\n\n    if ($this.parent('li').hasClass('active')) return\n\n    var $previous = $ul.find('.active:last a')\n    var hideEvent = $.Event('hide.bs.tab', {\n      relatedTarget: $this[0]\n    })\n    var showEvent = $.Event('show.bs.tab', {\n      relatedTarget: $previous[0]\n    })\n\n    $previous.trigger(hideEvent)\n    $this.trigger(showEvent)\n\n    if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return\n\n    var $target = $(document).find(selector)\n\n    this.activate($this.closest('li'), $ul)\n    this.activate($target, $target.parent(), function () {\n      $previous.trigger({\n        type: 'hidden.bs.tab',\n        relatedTarget: $this[0]\n      })\n      $this.trigger({\n        type: 'shown.bs.tab',\n        relatedTarget: $previous[0]\n      })\n    })\n  }\n\n  Tab.prototype.activate = function (element, container, callback) {\n    var $active    = container.find('> .active')\n    var transition = callback\n      && $.support.transition\n      && ($active.length && $active.hasClass('fade') || !!container.find('> .fade').length)\n\n    function next() {\n      $active\n        .removeClass('active')\n        .find('> .dropdown-menu > .active')\n        .removeClass('active')\n        .end()\n        .find('[data-toggle=\"tab\"]')\n        .attr('aria-expanded', false)\n\n      element\n        .addClass('active')\n        .find('[data-toggle=\"tab\"]')\n        .attr('aria-expanded', true)\n\n      if (transition) {\n        element[0].offsetWidth // reflow for transition\n        element.addClass('in')\n      } else {\n        element.removeClass('fade')\n      }\n\n      if (element.parent('.dropdown-menu').length) {\n        element\n          .closest('li.dropdown')\n          .addClass('active')\n          .end()\n          .find('[data-toggle=\"tab\"]')\n          .attr('aria-expanded', true)\n      }\n\n      callback && callback()\n    }\n\n    $active.length && transition ?\n      $active\n        .one('bsTransitionEnd', next)\n        .emulateTransitionEnd(Tab.TRANSITION_DURATION) :\n      next()\n\n    $active.removeClass('in')\n  }\n\n\n  // TAB PLUGIN DEFINITION\n  // =====================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('bs.tab')\n\n      if (!data) $this.data('bs.tab', (data = new Tab(this)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.tab\n\n  $.fn.tab             = Plugin\n  $.fn.tab.Constructor = Tab\n\n\n  // TAB NO CONFLICT\n  // ===============\n\n  $.fn.tab.noConflict = function () {\n    $.fn.tab = old\n    return this\n  }\n\n\n  // TAB DATA-API\n  // ============\n\n  var clickHandler = function (e) {\n    e.preventDefault()\n    Plugin.call($(this), 'show')\n  }\n\n  $(document)\n    .on('click.bs.tab.data-api', '[data-toggle=\"tab\"]', clickHandler)\n    .on('click.bs.tab.data-api', '[data-toggle=\"pill\"]', clickHandler)\n\n}(jQuery);\n", "/* ========================================================================\n * Bootstrap: affix.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#affix\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // AFFIX CLASS DEFINITION\n  // ======================\n\n  var Affix = function (element, options) {\n    this.options = $.extend({}, Affix.DEFAULTS, options)\n\n    var target = this.options.target === Affix.DEFAULTS.target ? $(this.options.target) : $(document).find(this.options.target)\n\n    this.$target = target\n      .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))\n      .on('click.bs.affix.data-api',  $.proxy(this.checkPositionWithEventLoop, this))\n\n    this.$element     = $(element)\n    this.affixed      = null\n    this.unpin        = null\n    this.pinnedOffset = null\n\n    this.checkPosition()\n  }\n\n  Affix.VERSION  = '3.4.1'\n\n  Affix.RESET    = 'affix affix-top affix-bottom'\n\n  Affix.DEFAULTS = {\n    offset: 0,\n    target: window\n  }\n\n  Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) {\n    var scrollTop    = this.$target.scrollTop()\n    var position     = this.$element.offset()\n    var targetHeight = this.$target.height()\n\n    if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false\n\n    if (this.affixed == 'bottom') {\n      if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom'\n      return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom'\n    }\n\n    var initializing   = this.affixed == null\n    var colliderTop    = initializing ? scrollTop : position.top\n    var colliderHeight = initializing ? targetHeight : height\n\n    if (offsetTop != null && scrollTop <= offsetTop) return 'top'\n    if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom'\n\n    return false\n  }\n\n  Affix.prototype.getPinnedOffset = function () {\n    if (this.pinnedOffset) return this.pinnedOffset\n    this.$element.removeClass(Affix.RESET).addClass('affix')\n    var scrollTop = this.$target.scrollTop()\n    var position  = this.$element.offset()\n    return (this.pinnedOffset = position.top - scrollTop)\n  }\n\n  Affix.prototype.checkPositionWithEventLoop = function () {\n    setTimeout($.proxy(this.checkPosition, this), 1)\n  }\n\n  Affix.prototype.checkPosition = function () {\n    if (!this.$element.is(':visible')) return\n\n    var height       = this.$element.height()\n    var offset       = this.options.offset\n    var offsetTop    = offset.top\n    var offsetBottom = offset.bottom\n    var scrollHeight = Math.max($(document).height(), $(document.body).height())\n\n    if (typeof offset != 'object')         offsetBottom = offsetTop = offset\n    if (typeof offsetTop == 'function')    offsetTop    = offset.top(this.$element)\n    if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)\n\n    var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom)\n\n    if (this.affixed != affix) {\n      if (this.unpin != null) this.$element.css('top', '')\n\n      var affixType = 'affix' + (affix ? '-' + affix : '')\n      var e         = $.Event(affixType + '.bs.affix')\n\n      this.$element.trigger(e)\n\n      if (e.isDefaultPrevented()) return\n\n      this.affixed = affix\n      this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null\n\n      this.$element\n        .removeClass(Affix.RESET)\n        .addClass(affixType)\n        .trigger(affixType.replace('affix', 'affixed') + '.bs.affix')\n    }\n\n    if (affix == 'bottom') {\n      this.$element.offset({\n        top: scrollHeight - height - offsetBottom\n      })\n    }\n  }\n\n\n  // AFFIX PLUGIN DEFINITION\n  // =======================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.affix')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.affix', (data = new Affix(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.affix\n\n  $.fn.affix             = Plugin\n  $.fn.affix.Constructor = Affix\n\n\n  // AFFIX NO CONFLICT\n  // =================\n\n  $.fn.affix.noConflict = function () {\n    $.fn.affix = old\n    return this\n  }\n\n\n  // AFFIX DATA-API\n  // ==============\n\n  $(window).on('load', function () {\n    $('[data-spy=\"affix\"]').each(function () {\n      var $spy = $(this)\n      var data = $spy.data()\n\n      data.offset = data.offset || {}\n\n      if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom\n      if (data.offsetTop    != null) data.offset.top    = data.offsetTop\n\n      Plugin.call($spy, data)\n    })\n  })\n\n}(jQuery);\n", "type EventListener<T> = (eventData: T) => void\n\nfunction EventBus<T = void>() {\n  const listeners = new Set<EventListener<T>>()\n\n  return {\n    on(listener: EventListener<T>) {\n      listeners.add(listener)\n      return {\n        unregister() {\n          listeners.delete(listener)\n        }\n      }\n    },\n    emit(value: T) {\n      for (const listener of listeners) listener(value)\n    }\n  }\n}\n\nexport type EventBus<T = void> = ReturnType<typeof EventBus<T>>\n\nexport const contentInsertedEvent = EventBus<HTMLElement>()\nexport const intervalUpdateEvent = EventBus()\nexport const namespaceEvent = EventBus<string>()\nexport const pageUpdateEvent = EventBus()\nexport const popupCloseEvent = EventBus()\nexport const goToPageEvent = EventBus<{\n  href: string\n  currentTarget: HTMLElement\n}>()\nexport const userLoadedEvent = EventBus()\n", "export function getCookie(name: string) {\n  let cookieValue = null\n  if (document.cookie && document.cookie !== '') {\n    const cookies = document.cookie.split(';')\n    for (let i = 0; i < cookies.length; i++) {\n      const cookie = cookies[i].trim()\n      // Does this cookie string begin with the name we want?\n      if (cookie.substring(0, name.length + 1) === name + '=') {\n        cookieValue = decodeURIComponent(cookie.substring(name.length + 1))\n        break\n      }\n    }\n  }\n  return cookieValue\n}\n\nexport const isMobile = {\n  Android() {\n    return navigator.userAgent.match(/Android/i)\n  },\n  BlackBerry() {\n    return navigator.userAgent.match(/BlackBerry/i)\n  },\n  iOS() {\n    return navigator.userAgent.match(/iPhone|iPad|iPod/i)\n  },\n  Opera() {\n    return navigator.userAgent.match(/Opera Mini/i)\n  },\n  Windows() {\n    return navigator.userAgent.match(/IEMobile/i)\n  },\n  any() {\n    return (\n      isMobile.Android() ||\n      isMobile.BlackBerry() ||\n      isMobile.iOS() ||\n      isMobile.Opera() ||\n      isMobile.Windows()\n    )\n  }\n}\n\nexport function getNamespace(source: HTMLHtmlElement | Document) {\n  const elem = source.querySelector('meta[name=\"namespace\"]')\n  return elem?.getAttribute('content') ?? ''\n}\n\n/**\n * Build the body for an API write from a server-rendered Django form.\n *\n * FormData rather than a plain object, because file inputs do not survive JSON,\n * duplicate keys - multi-selects, many-to-many - must not be flattened to the\n * last one, and DRF only applies its Django-like \"\" -> null and\n * missing-checkbox -> false coercion to bodies that came in as HTML form input.\n *\n * The CSRF token is dropped: axios sends it as the X-CSRFTOKEN header instead,\n * which is what SessionAuthentication checks.\n *\n * Everything else goes over untouched, ClearableFileInput's \"<field>-clear\"\n * checkbox included - engagera.mp.rest_api.fields.ClearableFileField reads it\n * server side, so the form and the API agree without a translation step here.\n */\nexport function getFormData(form: HTMLFormElement) {\n  const data = new FormData(form)\n  data.delete('csrfmiddlewaretoken')\n  for (const [key, value] of Array.from(data.entries())) {\n    // An untouched <input type=\"file\"> posts an empty File. Django drops it, so\n    // do the same rather than send a zero byte upload.\n    if (value instanceof File && !value.name) data.delete(key)\n  }\n  return data\n}\n\n/**\n * Get DOM tree from html snippet\n */\nexport function htmlStringToDom(html: string) {\n  const dom = document.createElement('html')\n  dom.innerHTML = html\n  return dom\n}\n\nexport function isInternalLink(href: string) {\n  return href[0] === '/' || href.startsWith(location.origin)\n}\n\nexport function getDocTitle(dom: HTMLHtmlElement | Document) {\n  return dom.querySelector('title')?.text ?? ''\n}\n\nexport function isHTMLElement(\n  elem: Element | EventTarget\n): elem is HTMLElement {\n  return 'dataset' in elem\n}\n", "import { contentInsertedEvent } from './events'\nimport { getCookie } from './utils'\nimport $ from 'jquery'\n\n// Django setup, needed to enable $.post() stuffz\nconst csrftoken = getCookie('csrftoken')\nfunction csrfSafeMethod(method: string) {\n  // these HTTP methods do not require CSRF protection\n  return /^(GET|HEAD|OPTIONS|TRACE)$/.test(method)\n}\n\nfunction sameOrigin(url: string) {\n  // test that a given url is a same-origin URL\n  // url could be relative or scheme relative or absolute\n  const host = location.host // host + port\n  const protocol = document.location.protocol\n  const srOrigin = '//' + host\n  const origin = protocol + srOrigin\n  // Allow absolute or scheme relative URLs to same origin\n  return (\n    url === origin ||\n    url.slice(0, origin.length + 1) === origin + '/' ||\n    url === srOrigin ||\n    url.slice(0, srOrigin.length + 1) === srOrigin + '/' ||\n    // or any other URL that isn't scheme relative or absolute i.e relative.\n    !/^(\\/\\/|http:|https:).*/.test(url)\n  )\n}\n\n$.ajaxSetup({\n  beforeSend(xhr, settings) {\n    if (!csrftoken || !settings.type || !settings.url) return\n    if (!csrfSafeMethod(settings.type) && sameOrigin(settings.url)) {\n      // Send the token to same-origin, relative URLs only.\n      // Send the token only if the method warrants CSRF protection\n      // Using the CSRFToken value acquired earlier\n      xhr.setRequestHeader('X-CSRFToken', csrftoken)\n    }\n  }\n})\n\n// CkEditor5 dynamic loading of content relies on this being here.\nwindow.django = { jQuery: $ }\ncontentInsertedEvent.on((elem) => {\n  if (!elem.querySelector('.django_ckeditor_5')) return\n  // Form added\n  document.dispatchEvent(new Event('formset:added'))\n})\n// End of Django setup\n\n// START ckeditor strip style attributes hack\nconst STRIP_EDITOR_IDS = ['id_full_text', 'id_text_body', 'id_presentation']\n\n// CKEditor stuff, excempt from type checking\nfunction stripStyle(element: any) {\n  if (typeof element._styles === 'object') {\n    element._styles._styles = {}\n  }\n  if ('_children' in element) {\n    element._children.map(stripStyle)\n  }\n}\n\n// CKEditor stuff, excempt from type checking\nfunction editorCallback(editor: any) {\n  editor.plugins\n    .get('ClipboardPipeline')\n    .on('inputTransformation', (e: any, data: any) => {\n      stripStyle(data.content)\n    })\n}\n\naddEventListener('load', () => {\n  for (const id of STRIP_EDITOR_IDS) {\n    if (id in window.editors) editorCallback(window.editors[id])\n    window.ckeditorRegisterCallback(id, editorCallback)\n  }\n})\n// END ckeditor strip style attributes hack\n", "import $ from 'jquery'\nimport notifications from './notifications'\nimport {\n  getDocTitle,\n  getNamespace,\n  htmlStringToDom,\n  isHTMLElement,\n  isInternalLink\n} from './utils'\nimport { api } from './api'\nimport {\n  contentInsertedEvent,\n  goToPageEvent,\n  namespaceEvent,\n  pageUpdateEvent\n} from './events'\n\nconst DEFAULT_TARGET = '#main-content'\nconst HASH_RE = /^#[-\\w_+!*()]+$/\nconst BEFORE_NAVIGATE_TIMEOUT = 2000\n\nconst beforeNavigateHooks = new Set<() => unknown>()\n\n/**\n * Run hook once, before the next ajax navigation fetches its page. Returned\n * promises are awaited (up to a timeout), so requests that affect the next\n * page can finish first. Registering the same function again is a no-op.\n */\nexport function beforeNextNavigate(hook: () => unknown) {\n  beforeNavigateHooks.add(hook)\n}\n\nasync function runBeforeNavigate() {\n  const hooks = [...beforeNavigateHooks]\n  beforeNavigateHooks.clear()\n  if (!hooks.length) return\n  // Navigation must always proceed, whether hooks fail or hang.\n  await Promise.race([\n    Promise.all(\n      hooks.map(async (hook) => {\n        try {\n          await hook()\n        } catch {\n          // Ignored\n        }\n      })\n    ),\n    new Promise((resolve) => setTimeout(resolve, BEFORE_NAVIGATE_TIMEOUT))\n  ])\n}\n\ncontentInsertedEvent.on((element) => {\n  const hash = window.location.hash\n  if (!hash || !HASH_RE.test(hash)) return\n  const el = (element || document).querySelector(hash)\n  el?.scrollIntoView()\n})\n\nfunction displayNamespace(source: HTMLHtmlElement | Document) {\n  const namespace = getNamespace(source)\n  document.querySelectorAll<HTMLElement>('[data-namespace]').forEach((elem) => {\n    if (elem.dataset.namespace === namespace) elem.classList.add('active')\n    else elem.classList.remove('active')\n  })\n  namespaceEvent.emit(namespace)\n}\n\nasync function handlePopState(event: PopStateEvent) {\n  if (!event.state) return\n  const partial = 'main-content'\n  await runBeforeNavigate()\n  try {\n    const { data } = await api.get(event.state.href, {\n      headers: { 'X-Partial': partial }\n    })\n    updateContentFromData(data, '#' + partial)\n    pageUpdateEvent.emit()\n    displayNamespace(htmlStringToDom(data))\n  } catch (e) {\n    location.assign(event.state.href)\n  }\n}\n\n/**\n * Copy inner HTML from source to target, and make sure any script tags are executed.\n */\nfunction insertWithScriptTags(source: HTMLElement, target: HTMLElement) {\n  target.innerHTML = source.innerHTML\n  contentInsertedEvent.emit(target)\n  for (const scriptEl of source.querySelectorAll('script')) {\n    const newScript = document.createElement('script')\n    newScript.type = scriptEl.type\n    if (scriptEl.src) newScript.src = scriptEl.src\n    else if (scriptEl.textContent) newScript.textContent = scriptEl.textContent\n    document.body.appendChild(newScript)\n  }\n}\n\nfunction updateFromResponse(targetId: string, html: string) {\n  const content = htmlStringToDom(html).querySelector<HTMLElement>(targetId)\n  if (!content) throw new Error(`${targetId} not found in html data`)\n  const target = document.querySelector<HTMLElement>(targetId)\n  if (!target) throw new Error(`${targetId} not found in document`)\n  insertWithScriptTags(content, target)\n  pageUpdateEvent.emit()\n}\n\nexport async function updateTarget(targetId: string) {\n  if (!targetId) return\n  const target = document.querySelector<HTMLElement>(targetId)\n  if (!target) return\n  const endpoint = target.dataset.updateApi\n  if (!endpoint) return\n  const { data } = await api.get(endpoint, {\n    headers: { 'X-Partial': 1 }\n  })\n  updateFromResponse(targetId, data)\n}\n\nfunction getContentBySelector(html: HTMLHtmlElement, ...selectors: string[]) {\n  for (const selector of selectors) {\n    // Depending on browser, use filter or find\n    const contentEl = html.querySelector<HTMLElement>(selector)\n    if (contentEl) return contentEl\n  }\n}\n\n/**\n * Update dom content from data\n */\nfunction updateContentFromData(\n  html: HTMLHtmlElement,\n  targetId = DEFAULT_TARGET,\n  setTitle = true\n) {\n  const targetEl = document.querySelector<HTMLElement>(targetId)\n  if (!targetEl) throw new Error(`${targetEl} not found in document`)\n  // get content from either targetId selector or default #content\n  const content = getContentBySelector(html, targetId, '#content')\n  if (content) {\n    insertWithScriptTags(content, targetEl)\n  } else if (setTitle && targetId !== DEFAULT_TARGET) {\n    // Fall back to default targetId\n    updateContentFromData(html)\n  }\n  if (!setTitle) return\n  notifications.setTitle(getDocTitle(html))\n  const bodyClasses = html\n    .querySelector('meta[name=\"body-classes\"]')\n    ?.getAttribute('content')\n  if (bodyClasses) document.body.classList.value = bodyClasses\n}\n\nfunction openInTab(href: string) {\n  window.open(href, '_blank')\n  window.focus()\n}\n\nfunction openInMenu(menu: HTMLUListElement, menuItem: HTMLLIElement) {\n  menu.querySelectorAll('li:has(ul)').forEach((subMenu) => {\n    if (subMenu.contains(menuItem)) {\n      subMenu.classList.add('open')\n    } else subMenu.classList.remove('open')\n  })\n}\n\n/**\n * Check if link should unfold a menu\n */\nfunction unfoldInMenu(targetId: string | undefined, href: string) {\n  if (!targetId) return\n  const menu = document.querySelector<HTMLUListElement>(targetId)\n  if (!menu) throw new Error(`${targetId} not found in document`)\n  openInMenu(menu, menu.querySelector(`li:has(a[href=\"${href}\"])`)!)\n}\n\nfunction knowledgeNavHandler(currentTarget: Element) {\n  openInMenu(\n    document.querySelector('#knowledge-navigation')!,\n    currentTarget.closest('li')!\n  )\n}\n\n/**\n * Do not handle links with these (parent) classes with ajax calls.\n */\nconst NON_AJAX = {\n  classes: ['load-full', 'popup-link', 'pagination'],\n  containerSelectors: ['.cke-reset', '.cke-reset-all']\n} as const\n\n/**\n * Handle and insert partial response into DOM\n */\nfunction insertContent(currentTarget: HTMLElement, html: string, href: string) {\n  const dom = htmlStringToDom(html)\n  const container = currentTarget.closest<HTMLElement>('[data-ajax-target]')\n  const { ajaxTarget, loadExtraTarget } = container?.dataset ?? {\n    ajaxTarget: DEFAULT_TARGET\n  }\n  window.scrollTo(0, 0) // Reset scroll\n  history.pushState(\n    {\n      target_id: ajaxTarget,\n      href\n    },\n    getDocTitle(dom),\n    href\n  )\n  updateContentFromData(dom, ajaxTarget)\n  if (loadExtraTarget) updateContentFromData(dom, loadExtraTarget, false)\n  container?.classList.add('open') // Mark menus, etc, as open\n  document\n    .querySelectorAll<HTMLElement>('.menu-toggler.active')\n    .forEach((menu) => menu.click())\n  pageUpdateEvent.emit()\n  displayNamespace(dom)\n}\n\n/**\n * Go to this URL, using ajax get\n */\nasync function goToPage(href: string, currentTarget: HTMLElement) {\n  const ajaxTarget =\n    currentTarget.closest<HTMLElement>('[data-ajax-target]')?.dataset\n      .ajaxTarget ?? DEFAULT_TARGET\n  const target = document.querySelector(ajaxTarget)\n  if (!target) throw new Error(`${ajaxTarget} not found in document`)\n  target.classList.add('ajax-loading')\n\n  const partial = ajaxTarget.slice(1)\n  await runBeforeNavigate()\n  try {\n    const { data } = await api.get(href, {\n      headers: { 'X-Partial': partial }\n    })\n    insertContent(currentTarget, data, href)\n  } catch (e) {\n    location.assign(href)\n  }\n\n  target.classList.remove('ajax-loading')\n}\ngoToPageEvent.on(({ href, currentTarget }) => {\n  goToPage(href, currentTarget)\n})\n\n/**\n * Handle internal links\n */\nasync function internalClickHandler(\n  currentTarget: Element,\n  event: PointerEvent\n) {\n  const href = currentTarget.getAttribute('href')\n  if (!isHTMLElement(currentTarget))\n    throw new Error('target is not an HTMLElement')\n  if (!href) throw new Error('No href found in target')\n  // Default browser link handling in these cases\n  if (\n    !window.history ||\n    href.startsWith('#') ||\n    NON_AJAX.classes.some((cls) => currentTarget.classList.contains(cls)) ||\n    !!currentTarget.dataset.apiToggle ||\n    NON_AJAX.containerSelectors.some(\n      (selector) => !!currentTarget.closest(selector)\n    )\n  )\n    return\n  // If we get here, link will be handled internally\n  event.preventDefault()\n  if (!isInternalLink(href)) return openInTab(href)\n  unfoldInMenu(currentTarget.dataset.unfoldInMenu, href)\n\n  goToPage(href, currentTarget)\n}\n\nfunction closeClickHandler(currentTarget: Element, event: PointerEvent) {\n  event.preventDefault()\n  if (!isHTMLElement(currentTarget))\n    throw new Error('target is not an HTMLElement')\n  const target = document.querySelector(currentTarget.dataset.closeElement!)\n  target?.classList.remove('open')\n}\n\nfunction addClickEvent(\n  selector: string,\n  callback: (target: Element, event: PointerEvent) => void\n) {\n  document.addEventListener('click', (event) => {\n    const currentTarget = (event.target as HTMLElement)?.closest(selector)\n    currentTarget && callback(currentTarget, event)\n  })\n}\n\ndocument.addEventListener('DOMContentLoaded', () => {\n  addClickEvent('a[href]', internalClickHandler)\n  addClickEvent('a[data-close-element]', closeClickHandler)\n  addClickEvent('#knowledge-nav a', knowledgeNavHandler)\n  displayNamespace(document)\n  if (window.history) {\n    window.onpopstate = handlePopState\n    history.replaceState(\n      {\n        target_id: 'main-content',\n        href: window.location.pathname\n      },\n      getDocTitle(document)\n    )\n  }\n  // Prevent dropdown from being closed on collapse click\n  // @ts-ignore\n  $('.dropdown').on('click', '[data-toggle=\"collapse\"]', (evt) => {\n    evt.preventDefault()\n    evt.stopPropagation()\n    // @ts-ignore\n    $(evt.currentTarget).trigger('blur')\n    // @ts-ignore\n    $($(evt.currentTarget).data('target')).collapse('toggle')\n  })\n})\n", "import type { Primitive } from \"./types\";\n\ntype CmpFn<T> = (a: T, b: T) => number;\n\nexport function keyToCmp<T>(keyFn: (item: T) => Primitive): CmpFn<T> {\n  return (a: T, b: T) => {\n    const ka = keyFn(a);\n    const kb = keyFn(b);\n    // istanbul ignore else -- @preserve\n    if (typeof ka === \"boolean\" && typeof kb === \"boolean\") {\n      return ka === kb ? 0 : !ka && kb ? -1 : 1;\n    } else if (typeof ka === \"number\" && typeof kb === \"number\") {\n      return ka - kb;\n    } else if (typeof ka === \"string\" && typeof kb === \"string\") {\n      return ka === kb ? 0 : ka < kb ? -1 : 1;\n    } else {\n      return -1;\n    }\n  };\n}\n\nexport function identityPredicate(x: unknown): boolean {\n  return !!x;\n}\n\nexport function numberIdentity(x: unknown): number {\n  // istanbul ignore if -- @preserve\n  if (typeof x !== \"number\") {\n    throw new Error(\"Inputs must be numbers\");\n  }\n  return x;\n}\n\nexport function primitiveIdentity<P extends Primitive>(x: P): P;\nexport function primitiveIdentity(x: unknown): Primitive;\nexport function primitiveIdentity(x: unknown): Primitive {\n  // istanbul ignore if -- @preserve\n  if (typeof x !== \"string\" && typeof x !== \"number\" && typeof x !== \"boolean\") {\n    throw new Error(\"Please provide a key function that can establish object identity\");\n  }\n  return x;\n}\n", "import { iter, map } from \"./builtins\";\nimport { izip, repeat } from \"./itertools\";\nimport type { Predicate, Primitive } from \"./types\";\nimport { primitiveIdentity } from \"./utils\";\n\n/**\n * Break iterable into lists of length `size`:\n *\n *     [...chunked([1, 2, 3, 4, 5, 6], 3)]\n *     // [[1, 2, 3], [4, 5, 6]]\n *\n * If the length of iterable is not evenly divisible by `size`, the last returned\n * list will be shorter:\n *\n *     [...chunked([1, 2, 3, 4, 5, 6, 7, 8], 3)]\n *     // [[1, 2, 3], [4, 5, 6], [7, 8]]\n */\nexport function* chunked<T>(iterable: Iterable<T>, size: number): IterableIterator<T[]> {\n  if (size < 1) {\n    throw new Error(`Invalid chunk size: ${size}`);\n  }\n\n  const it = iter(iterable);\n  for (;;) {\n    const chunk = take(size, it);\n    if (chunk.length > 0) {\n      yield chunk;\n    }\n    if (chunk.length < size) {\n      return;\n    }\n  }\n}\n\n/**\n * Return an iterator flattening one level of nesting in a list of lists:\n *\n *     [...flatten([[0, 1], [2, 3]])]\n *     // [0, 1, 2, 3]\n *\n */\nexport function* flatten<T>(iterableOfIterables: Iterable<Iterable<T>>): IterableIterator<T> {\n  for (const iterable of iterableOfIterables) {\n    for (const item of iterable) {\n      yield item;\n    }\n  }\n}\n\n/**\n * Intersperse filler element `value` among the items in `iterable`.\n *\n *     >>> [...intersperse(-1, range(1, 5))]\n *     [1, -1, 2, -1, 3, -1, 4]\n *\n */\nexport function intersperse<T, V>(value: V, iterable: Iterable<T>): IterableIterator<T | V> {\n  const stream = flatten<T | V>(izip(repeat(value), iterable));\n  stream.next(); // eat away and discard the first value from the output\n  return stream;\n}\n\n/**\n * Returns an iterable containing only the first `n` elements of the given\n * iterable.\n */\nexport function* itake<T>(n: number, iterable: Iterable<T>): IterableIterator<T> {\n  const it = iter(iterable);\n  let count = n;\n  while (count-- > 0) {\n    const s = it.next();\n    if (!s.done) {\n      yield s.value;\n    } else {\n      // Iterable exhausted, quit early\n      return;\n    }\n  }\n}\n\n/**\n * Returns an iterator of paired items, overlapping, from the original.  When\n * the input iterable has a finite number of items `n`, the outputted iterable\n * will have `n - 1` items.\n *\n *     >>> pairwise([8, 2, 0, 7])\n *     [(8, 2), (2, 0), (0, 7)]\n *\n */\nexport function* pairwise<T>(iterable: Iterable<T>): IterableIterator<[T, T]> {\n  const it = iter(iterable);\n  const first = it.next();\n  if (first.done) {\n    return;\n  }\n\n  let r1: T = first.value;\n  for (const r2 of it) {\n    yield [r1, r2];\n    r1 = r2;\n  }\n}\n\n/**\n * Returns a 2-tuple of arrays.  Splits the elements in the input iterable into\n * either of the two arrays.  Will fully exhaust the input iterable.  The first\n * array contains all items that match the predicate, the second the rest:\n *\n *     >>> const isOdd = x => x % 2 !== 0;\n *     >>> const iterable = range(10);\n *     >>> const [odds, evens] = partition(iterable, isOdd);\n *     >>> odds\n *     [1, 3, 5, 7, 9]\n *     >>> evens\n *     [0, 2, 4, 6, 8]\n *\n */\nexport function partition<T, N extends T>(\n  iterable: Iterable<T>,\n  predicate: (item: T, index: number) => item is N,\n): [N[], Exclude<T, N>[]];\nexport function partition<T>(iterable: Iterable<T>, predicate: Predicate<T>): [T[], T[]];\nexport function partition<T>(iterable: Iterable<T>, predicate: Predicate<T>): [T[], T[]] {\n  const good = [];\n  const bad = [];\n\n  let index = 0;\n  for (const item of iterable) {\n    if (predicate(item, index++)) {\n      good.push(item);\n    } else {\n      bad.push(item);\n    }\n  }\n\n  return [good, bad];\n}\n\n/**\n * Yields the next item from each iterable in turn, alternating between them.\n * Continues until all items are exhausted.\n *\n *     >>> [...roundrobin([1, 2, 3], [4], [5, 6, 7, 8])]\n *     [1, 4, 5, 2, 6, 3, 7, 8]\n */\nexport function* roundrobin<T>(...iters: Iterable<T>[]): IterableIterator<T> {\n  // We'll only keep lazy versions of the input iterables in here that we'll\n  // slowly going to exhaust.  Once an iterable is exhausted, it will be\n  // removed from this list.  Once the entire list is empty, this algorithm\n  // ends.\n  const iterables: Iterator<T>[] = map(iters, iter);\n\n  while (iterables.length > 0) {\n    let index = 0;\n    while (index < iterables.length) {\n      const it = iterables[index];\n      const result = it.next();\n\n      if (!result.done) {\n        yield result.value;\n        index++;\n      } else {\n        // This iterable is exhausted, make sure to remove it from the\n        // list of iterables.  We'll splice the array from under our\n        // feet, and NOT advancing the index counter.\n        iterables.splice(index, 1); // intentional side-effect!\n      }\n    }\n  }\n}\n\n/**\n * Yields the heads of all of the given iterables.  This is almost like\n * `roundrobin()`, except that the yielded outputs are grouped in to the\n * \"rounds\":\n *\n *     >>> [...heads([1, 2, 3], [4], [5, 6, 7, 8])]\n *     [[1, 4, 5], [2, 6], [3, 7], [8]]\n *\n * This is also different from `zipLongest()`, since the number of items in\n * each round can decrease over time, rather than being filled with a filler.\n */\nexport function* heads<T>(...iters: Iterable<T>[]): IterableIterator<T[]> {\n  // We'll only keep lazy versions of the input iterables in here that we'll\n  // slowly going to exhaust.  Once an iterable is exhausted, it will be\n  // removed from this list.  Once the entire list is empty, this algorithm\n  // ends.\n  const iterables: Iterator<T>[] = map(iters, iter);\n\n  while (iterables.length > 0) {\n    let index = 0;\n    const round = [];\n    while (index < iterables.length) {\n      const it = iterables[index];\n      const result = it.next();\n\n      if (!result.done) {\n        round.push(result.value);\n        index++;\n      } else {\n        // This iterable is exhausted, make sure to remove it from the\n        // list of iterables.  We'll splice the array from under our\n        // feet, and NOT advancing the index counter.\n        iterables.splice(index, 1); // intentional side-effect!\n      }\n    }\n    if (round.length > 0) {\n      yield round;\n    }\n  }\n}\n\n/**\n * Non-lazy version of itake().\n */\nexport function take<T>(n: number, iterable: Iterable<T>): T[] {\n  return Array.from(itake(n, iterable));\n}\n\n/**\n * Yield unique elements, preserving order.\n *\n *     >>> [...uniqueEverseen('AAAABBBCCDAABBB')]\n *     ['A', 'B', 'C', 'D']\n *     >>> [...uniqueEverseen('AbBCcAB', s => s.toLowerCase())]\n *     ['A', 'b', 'C']\n *\n */\nexport function* uniqueEverseen<T>(\n  iterable: Iterable<T>,\n  keyFn: (item: T) => Primitive = primitiveIdentity,\n): IterableIterator<T> {\n  const seen = new Set();\n  for (const item of iterable) {\n    const key = keyFn(item);\n    if (!seen.has(key)) {\n      seen.add(key);\n      yield item;\n    }\n  }\n}\n\n/**\n * Yield only elements from the input that occur more than once. Needs to\n * consume the entire input before being able to produce the first result.\n *\n *     >>> [...dupes('AAAABCDEEEFABG')]\n *     [['A', 'A', 'A', 'A', 'A'], ['E', 'E', 'E'], ['B', 'B']]\n *     >>> [...dupes('AbBCcAB', s => s.toLowerCase())]\n *     [['b', 'B', 'B'], ['C', 'c'], ['A', 'A']]\n *\n */\nexport function dupes<T>(\n  iterable: Iterable<T>,\n  keyFn: (item: T) => Primitive = primitiveIdentity,\n): IterableIterator<T[]> {\n  const multiples = new Map<Primitive, T[]>();\n\n  {\n    const singles = new Map<Primitive, T>();\n    for (const item of iterable) {\n      const key = keyFn(item);\n      if (multiples.has(key)) {\n        multiples.get(key)!.push(item);\n      } else if (singles.has(key)) {\n        multiples.set(key, [singles.get(key)!, item]);\n        singles.delete(key);\n      } else {\n        singles.set(key, item);\n      }\n    }\n  }\n\n  return multiples.values();\n}\n\n/**\n * Yields elements in order, ignoring serial duplicates.\n *\n *     >>> [...uniqueJustseen('AAAABBBCCDAABBB')]\n *     ['A', 'B', 'C', 'D', 'A', 'B']\n *     >>> [...uniqueJustseen('AbBCcAB', s => s.toLowerCase())]\n *     ['A', 'b', 'C', 'A', 'B']\n *\n */\nexport function* uniqueJustseen<T>(\n  iterable: Iterable<T>,\n  keyFn: (item: T) => Primitive = primitiveIdentity,\n): IterableIterator<T> {\n  let last = undefined;\n  for (const item of iterable) {\n    const key = keyFn(item);\n    if (key !== last) {\n      yield item;\n      last = key;\n    }\n  }\n}\n", "import { every, iter, range } from \"./builtins\";\nimport { flatten } from \"./more-itertools\";\nimport type { Predicate, Primitive } from \"./types\";\nimport { primitiveIdentity } from \"./utils\";\n\nconst SENTINEL = Symbol();\n\n/**\n * Returns an iterator that returns elements from the first iterable until it\n * is exhausted, then proceeds to the next iterable, until all of the iterables\n * are exhausted.  Used for treating consecutive sequences as a single\n * sequence.\n */\nexport function chain<T>(...iterables: Iterable<T>[]): IterableIterator<T> {\n  return flatten(iterables);\n}\n\n/**\n * Returns an iterator that counts up values starting with number `start`\n * (default 0), incrementing by `step`.  To decrement, use a negative step\n * number.\n */\nexport function* count(start = 0, step = 1): IterableIterator<number> {\n  let n = start;\n  for (;;) {\n    yield n;\n    n += step;\n  }\n}\n\n/**\n * Non-lazy version of icompress().\n */\nexport function compress<T>(data: Iterable<T>, selectors: Iterable<boolean>): T[] {\n  return Array.from(icompress(data, selectors));\n}\n\n/**\n * Returns an iterator producing elements from the iterable and saving a copy\n * of each.  When the iterable is exhausted, return elements from the saved\n * copy.  Repeats indefinitely.\n */\nexport function* cycle<T>(iterable: Iterable<T>): IterableIterator<T> {\n  const saved = [];\n  for (const element of iterable) {\n    yield element;\n    saved.push(element);\n  }\n\n  while (saved.length > 0) {\n    for (const element of saved) {\n      yield element;\n    }\n  }\n}\n\n/**\n * Returns an iterator that drops elements from the iterable as long as the\n * predicate is true; afterwards, returns every remaining element.  Note, the\n * iterator does not produce any output until the predicate first becomes\n * false.\n */\nexport function* dropwhile<T>(iterable: Iterable<T>, predicate: Predicate<T>): IterableIterator<T> {\n  let index = 0;\n  const it = iter(iterable);\n  let res: IteratorResult<T>;\n  while (!(res = it.next()).done) {\n    const value = res.value;\n    if (!predicate(value, index++)) {\n      yield value;\n      break; // we break, so we cannot use a for..of loop!\n    }\n  }\n\n  for (const value of it) {\n    yield value;\n  }\n}\n\n/** @deprecated Please rename to `igroupby`, or use the new eager version `groupBy`. */\nexport const groupby = igroupby;\n\nexport function* igroupby<T, K extends Primitive>(\n  iterable: Iterable<T>,\n  keyFn: (item: T) => K = primitiveIdentity,\n): Generator<[K, Generator<T, undefined>], undefined> {\n  const it = iter(iterable);\n\n  let currentValue: T;\n  let currentKey: K = SENTINEL as unknown as K;\n  //                           ^^^^^^^^^^^^^^^ Hack!\n  let targetKey: K = currentKey;\n\n  const grouper = function* grouper(tgtKey: K): Generator<T, undefined> {\n    while (currentKey === tgtKey) {\n      yield currentValue;\n\n      const nextVal = it.next();\n      if (nextVal.done) return;\n      currentValue = nextVal.value;\n      currentKey = keyFn(currentValue);\n    }\n  };\n\n  for (;;) {\n    while (currentKey === targetKey) {\n      const nextVal = it.next();\n      if (nextVal.done) {\n        currentKey = SENTINEL as unknown as K;\n        //                    ^^^^^^^^^^^^^^^ Hack!\n        return;\n      }\n      currentValue = nextVal.value;\n      currentKey = keyFn(currentValue);\n    }\n\n    targetKey = currentKey;\n    yield [currentKey, grouper(targetKey)];\n  }\n}\n\nexport function groupBy<T, K extends string | number>(iterable: Iterable<T>, keyFn: (item: T) => K): Record<K, T[]> {\n  const result = {} as Record<K, T[]>;\n  for (const item of iterable) {\n    const key = keyFn(item);\n    if (!Object.hasOwn(result, key)) {\n      result[key] = [];\n    }\n    result[key].push(item);\n  }\n  return result;\n}\n\nexport function indexBy<T, K extends string | number>(iterable: Iterable<T>, keyFn: (item: T) => K): Record<K, T> {\n  const result = {} as Record<K, T>;\n  for (const item of iterable) {\n    const key = keyFn(item);\n    result[key] = item;\n  }\n  return result;\n}\n\n/**\n * Returns an iterator that filters elements from data returning only those\n * that have a corresponding element in selectors that evaluates to `true`.\n * Stops when either the data or selectors iterables has been exhausted.\n */\nexport function* icompress<T>(data: Iterable<T>, selectors: Iterable<boolean>): IterableIterator<T> {\n  for (const [d, s] of izip(data, selectors)) {\n    if (s) {\n      yield d;\n    }\n  }\n}\n\n/**\n * Returns an iterator that filters elements from iterable returning only those\n * for which the predicate is true.\n */\nexport function ifilter<T, N extends T>(iterable: Iterable<T>, predicate: (item: T) => item is N): IterableIterator<N>;\nexport function ifilter<T>(iterable: Iterable<T>, predicate: Predicate<T>): IterableIterator<T>;\nexport function* ifilter<T>(iterable: Iterable<T>, predicate: Predicate<T>): IterableIterator<T> {\n  let index = 0;\n  for (const value of iterable) {\n    if (predicate(value, index++)) {\n      yield value;\n    }\n  }\n}\n\n/**\n * Returns an iterator that computes the given mapper function using arguments\n * from each of the iterables.\n */\nexport function* imap<T, V>(iterable: Iterable<T>, mapper: (item: T) => V): IterableIterator<V> {\n  for (const value of iterable) {\n    yield mapper(value);\n  }\n}\n\n/**\n * Returns an iterator that returns selected elements from the iterable.  If\n * `start` is non-zero, then elements from the iterable are skipped until start\n * is reached.  Then, elements are returned by making steps of `step` (defaults\n * to 1).  If set to higher than 1, items will be skipped.  If `stop` is\n * provided, then iteration continues until the iterator reached that index,\n * otherwise, the iterable will be fully exhausted.  `islice()` does not\n * support negative values for `start`, `stop`, or `step`.\n */\nexport function islice<T>(iterable: Iterable<T>, stop: number): IterableIterator<T>;\nexport function islice<T>(\n  iterable: Iterable<T>,\n  start: number,\n  stop?: number | null,\n  step?: number,\n): IterableIterator<T>;\nexport function* islice<T>(\n  iterable: Iterable<T>,\n  stopOrStart: number,\n  possiblyStop?: number | null,\n  step = 1,\n): IterableIterator<T> {\n  let start, stop;\n  if (possiblyStop !== undefined) {\n    // islice(iterable, start, stop[, step])\n    start = stopOrStart;\n    stop = possiblyStop;\n  } else {\n    // islice(iterable, stop)\n    start = 0;\n    stop = stopOrStart;\n  }\n\n  if (start < 0) throw new Error(\"start cannot be negative\");\n  if (stop !== null && stop < 0) throw new Error(\"stop cannot be negative\");\n  if (step <= 0) throw new Error(\"step cannot be negative\");\n\n  let i = -1;\n  const it = iter(iterable);\n  let res: IteratorResult<T>;\n  while (true) {\n    i++;\n    if (stop !== null && i >= stop) return; // early returns, so we cannot use a for..of loop!\n\n    res = it.next();\n    if (res.done) return;\n\n    if (i < start) continue;\n    if ((i - start) % step === 0) {\n      yield res.value;\n    }\n  }\n}\n\n/**\n * Returns an iterator that aggregates elements from each of the iterables.\n * Used for lock-step iteration over several iterables at a time.  When\n * iterating over two iterables, use `izip2`.  When iterating over three\n * iterables, use `izip3`, etc.  `izip` is an alias for `izip2`.\n */\nexport function* izip<T1, T2>(xs: Iterable<T1>, ys: Iterable<T2>): IterableIterator<[T1, T2]> {\n  const ixs = iter(xs);\n  const iys = iter(ys);\n  for (;;) {\n    const x = ixs.next();\n    const y = iys.next();\n    if (!x.done && !y.done) {\n      yield [x.value, y.value];\n    } else {\n      // One of the iterables exhausted\n      return;\n    }\n  }\n}\n\n/**\n * Like izip2, but for three input iterables.\n */\nexport function* izip3<T1, T2, T3>(\n  xs: Iterable<T1>,\n  ys: Iterable<T2>,\n  zs: Iterable<T3>,\n): IterableIterator<[T1, T2, T3]> {\n  const ixs = iter(xs);\n  const iys = iter(ys);\n  const izs = iter(zs);\n  for (;;) {\n    const x = ixs.next();\n    const y = iys.next();\n    const z = izs.next();\n    if (!x.done && !y.done && !z.done) {\n      yield [x.value, y.value, z.value];\n    } else {\n      // One of the iterables exhausted\n      return;\n    }\n  }\n}\n\nexport const izip2 = izip;\n\n/**\n * Returns an iterator that aggregates elements from each of the iterables.  If\n * the iterables are of uneven length, missing values are filled-in with\n * fillvalue.  Iteration continues until the longest iterable is exhausted.\n */\nexport function* izipLongest2<T1, T2, D>(\n  xs: Iterable<T1>,\n  ys: Iterable<T2>,\n  filler?: D,\n): IterableIterator<[T1 | D, T2 | D]> {\n  const filler_ = filler as D;\n  const ixs = iter(xs);\n  const iys = iter(ys);\n  for (;;) {\n    const x = ixs.next();\n    const y = iys.next();\n    if (x.done && y.done) {\n      // All iterables exhausted\n      return;\n    } else {\n      yield [!x.done ? x.value : filler_, !y.done ? y.value : filler_];\n    }\n  }\n}\n\n/**\n * See izipLongest2, but for three.\n */\nexport function* izipLongest3<T1, T2, T3, D = undefined>(\n  xs: Iterable<T1>,\n  ys: Iterable<T2>,\n  zs: Iterable<T3>,\n  filler?: D,\n): IterableIterator<[T1 | D, T2 | D, T3 | D]> {\n  const filler_ = filler as D;\n  const ixs = iter(xs);\n  const iys = iter(ys);\n  const izs = iter(zs);\n  for (;;) {\n    const x = ixs.next();\n    const y = iys.next();\n    const z = izs.next();\n    if (x.done && y.done && z.done) {\n      // All iterables exhausted\n      return;\n    } else {\n      yield [!x.done ? x.value : filler_, !y.done ? y.value : filler_, !z.done ? z.value : filler_];\n    }\n  }\n}\n\n/**\n * Like the other izips (`izip`, `izip3`, etc), but generalized to take an\n * unlimited amount of input iterables.  Think `izip(*iterables)` in Python.\n *\n * **Note:** Due to Flow type system limitations, you can only \"generially\" zip\n * iterables with homogeneous types, so you cannot mix types like <A, B> like\n * you can with izip2().\n */\nexport function* izipMany<T>(...iters: Iterable<T>[]): IterableIterator<T[]> {\n  // Make them all iterables\n  const iterables = iters.map(iter);\n\n  for (;;) {\n    const heads: IteratorResult<T, undefined>[] = iterables.map((xs) => xs.next());\n    if (every(heads, (h) => !h.done)) {\n      yield heads.map((h) => h.value as T);\n    } else {\n      // One of the iterables exhausted\n      return;\n    }\n  }\n}\n\n/**\n * Return successive `r`-length permutations of elements in the iterable.\n *\n * If `r` is not specified, then `r` defaults to the length of the iterable and\n * all possible full-length permutations are generated.\n *\n * Permutations are emitted in lexicographic sort order.  So, if the input\n * iterable is sorted, the permutation tuples will be produced in sorted order.\n *\n * Elements are treated as unique based on their position, not on their value.\n * So if the input elements are unique, there will be no repeat values in each\n * permutation.\n */\nexport function* permutations<T>(iterable: Iterable<T>, r?: number): IterableIterator<T[]> {\n  const pool = Array.from(iterable);\n  const n = pool.length;\n  const x = r ?? n;\n\n  if (x > n) {\n    return;\n  }\n\n  let indices: number[] = Array.from(range(n));\n  const cycles: number[] = Array.from(range(n, n - x, -1));\n  const poolgetter = (i: number) => pool[i];\n\n  yield indices.slice(0, x).map(poolgetter);\n\n  while (n > 0) {\n    let cleanExit = true;\n    for (const i of range(x - 1, -1, -1)) {\n      cycles[i] -= 1;\n      if (cycles[i] === 0) {\n        indices = indices\n          .slice(0, i)\n          .concat(indices.slice(i + 1))\n          .concat(indices.slice(i, i + 1));\n        cycles[i] = n - i;\n      } else {\n        const j: number = cycles[i];\n\n        const [p, q] = [indices[indices.length - j], indices[i]];\n        indices[i] = p;\n        indices[indices.length - j] = q;\n        yield indices.slice(0, x).map(poolgetter);\n        cleanExit = false;\n        break;\n      }\n    }\n\n    if (cleanExit) {\n      return;\n    }\n  }\n}\n\n/**\n * Returns an iterator that produces values over and over again.  Runs\n * indefinitely unless the times argument is specified.\n */\nexport function* repeat<T>(thing: T, times?: number): IterableIterator<T> {\n  if (times === undefined) {\n    for (;;) {\n      yield thing;\n    }\n  } else {\n    for (const _ of range(times)) {\n      yield thing;\n    }\n  }\n}\n\n/**\n * Returns an iterator that produces elements from the iterable as long as the\n * predicate is true.\n */\nexport function* takewhile<T>(iterable: Iterable<T>, predicate: Predicate<T>): IterableIterator<T> {\n  let index = 0;\n  const it = iter(iterable);\n  let res: IteratorResult<T>;\n  while (!(res = it.next()).done) {\n    const value = res.value;\n    if (!predicate(value, index++)) return; // early return, so we cannot use for..of loop!\n    yield value;\n  }\n}\n\nexport function zipLongest2<T1, T2, D>(xs: Iterable<T1>, ys: Iterable<T2>, filler?: D): [T1 | D, T2 | D][] {\n  return Array.from(izipLongest2(xs, ys, filler));\n}\n\nexport function zipLongest3<T1, T2, T3, D>(\n  xs: Iterable<T1>,\n  ys: Iterable<T2>,\n  zs: Iterable<T3>,\n  filler?: D,\n): [T1 | D, T2 | D, T3 | D][] {\n  return Array.from(izipLongest3(xs, ys, zs, filler));\n}\n\nexport const izipLongest = izipLongest2;\nexport const zipLongest = zipLongest2;\n\nexport function zipMany<T>(...iters: Iterable<T>[]): T[][] {\n  return Array.from(izipMany(...iters));\n}\n", "import { count, ifilter, imap, izip, izip3, takewhile } from \"./itertools\";\nimport type { Predicate, Primitive } from \"./types\";\nimport { identityPredicate, keyToCmp, numberIdentity, primitiveIdentity } from \"./utils\";\n\n/**\n * Returns the first item in the iterable for which the predicate holds, if\n * any. If no predicate is given, it will return the first value returned by\n * the iterable.\n */\nexport function find<T>(iterable: Iterable<T>, predicate?: Predicate<T>): T | undefined {\n  const it = iter(iterable);\n  if (predicate === undefined) {\n    const value = it.next();\n    return value.done ? undefined : value.value;\n  } else {\n    let res: IteratorResult<T>;\n    let i = 0;\n    while (!(res = it.next()).done) {\n      const value = res.value;\n      if (predicate(value, i++)) {\n        return value;\n      }\n    }\n    return undefined;\n  }\n}\n\n/**\n * Returns true when all of the items in iterable are truthy.  An optional key\n * function can be used to define what truthiness means for this specific\n * collection.\n *\n * Examples:\n *\n *     all([])                           // => true\n *     all([0])                          // => false\n *     all([0, 1, 2])                    // => false\n *     all([1, 2, 3])                    // => true\n *\n * Examples with using a key function:\n *\n *     all([2, 4, 6], n => n % 2 === 0)  // => true\n *     all([2, 4, 5], n => n % 2 === 0)  // => false\n *\n */\nexport function every<T>(iterable: Iterable<T>, predicate: Predicate<T> = identityPredicate): boolean {\n  let index = 0;\n  for (const item of iterable) {\n    if (!predicate(item, index++)) {\n      return false;\n    }\n  }\n  return true;\n}\n\n/**\n * Returns true when some of the items in iterable are truthy.  An optional key\n * function can be used to define what truthiness means for this specific\n * collection.\n *\n * Examples:\n *\n *     some([])                           // => false\n *     some([0])                          // => false\n *     some([0, 1, null, undefined])      // => true\n *\n * Examples with using a key function:\n *\n *     some([1, 4, 5], n => n % 2 === 0)  // => true\n *     some([{name: 'Bob'}, {name: 'Alice'}], person => person.name.startsWith('C'))  // => false\n *\n */\nexport function some<T>(iterable: Iterable<T>, predicate: Predicate<T> = identityPredicate): boolean {\n  let index = 0;\n  for (const item of iterable) {\n    if (predicate(item, index++)) {\n      return true;\n    }\n  }\n  return false;\n}\n\n/**\n * Alias of `every()`.\n */\nexport const all = every;\n\n/**\n * Alias of `some()`.\n */\nexport const any = some;\n\n/**\n * Returns true when any of the items in the iterable are equal to the target object.\n *\n * Examples:\n *\n *     contains([], 'whatever')         // => false\n *     contains([3], 42)                // => false\n *     contains([3], 3)                 // => true\n *     contains([0, 1, 2], 2)           // => true\n *\n */\nexport function contains<T>(haystack: Iterable<T>, needle: T): boolean {\n  return some(haystack, (x) => x === needle);\n}\n\n/**\n * Returns an iterable of enumeration pairs.  Iterable must be a sequence, an\n * iterator, or some other object which supports iteration.  The elements\n * produced by returns a tuple containing a counter value (starting from 0 by\n * default) and the values obtained from iterating over given iterable.\n *\n * Example:\n *\n *     import { enumerate } from 'itertools';\n *\n *     console.log([...enumerate(['hello', 'world'])]);\n *     // [0, 'hello'], [1, 'world']]\n */\nexport function* enumerate<T>(iterable: Iterable<T>, start = 0): IterableIterator<[number, T]> {\n  let index: number = start;\n  for (const value of iterable) {\n    yield [index++, value];\n  }\n}\n\n/**\n * Non-lazy version of ifilter().\n */\nexport function filter<T, N extends T>(iterable: Iterable<T>, predicate: (item: T, index: number) => item is N): N[];\nexport function filter<T>(iterable: Iterable<T>, predicate: Predicate<T>): T[];\nexport function filter<T>(iterable: Iterable<T>, predicate: Predicate<T>): T[] {\n  return Array.from(ifilter(iterable, predicate));\n}\n\n/**\n * Returns an iterator object for the given iterable.  This can be used to\n * manually get an iterator for any iterable datastructure.  The purpose and\n * main use case of this function is to get a single iterator (a thing with\n * state, think of it as a \"cursor\") which can only be consumed once.\n */\nexport function iter<T>(iterable: Iterable<T>): IterableIterator<T> {\n  return iterable[Symbol.iterator]() as IterableIterator<T>;\n  //                                 ^^^^^^^^^^^^^^^^^^^^^^ Not safe!\n}\n\n/**\n * Non-lazy version of imap().\n */\nexport function map<T, V>(iterable: Iterable<T>, mapper: (item: T) => V): V[] {\n  return Array.from(imap(iterable, mapper));\n}\n\n/**\n * Return the largest item in an iterable.  Only works for numbers, as ordering\n * is pretty poorly defined on any other data type in JS.  The optional `keyFn`\n * argument specifies a one-argument ordering function like that used for\n * sorted().\n *\n * If the iterable is empty, `undefined` is returned.\n *\n * If multiple items are maximal, the function returns either one of them, but\n * which one is not defined.\n */\nexport function max<T>(iterable: Iterable<T>, keyFn: (item: T) => number = numberIdentity): T | undefined {\n  return reduce2(iterable, (x, y) => (keyFn(x) > keyFn(y) ? x : y));\n}\n\n/**\n * Return the smallest item in an iterable.  Only works for numbers, as\n * ordering is pretty poorly defined on any other data type in JS.  The\n * optional `keyFn` argument specifies a one-argument ordering function like\n * that used for sorted().\n *\n * If the iterable is empty, `undefined` is returned.\n *\n * If multiple items are minimal, the function returns either one of them, but\n * which one is not defined.\n */\nexport function min<T>(iterable: Iterable<T>, keyFn: (item: T) => number = numberIdentity): T | undefined {\n  return reduce2(iterable, (x, y) => (keyFn(x) < keyFn(y) ? x : y));\n}\n\n/**\n * Internal helper for the range function\n */\nfunction range_(start: number, stop: number, step: number): IterableIterator<number> {\n  const counter = count(start, step);\n  const pred = step >= 0 ? (n: number) => n < stop : (n: number) => n > stop;\n  return takewhile(counter, pred);\n}\n\n/**\n * Returns an iterator producing all the numbers in the given range one by one,\n * starting from `start` (default 0), as long as `i < stop`, in increments of\n * `step` (default 1).\n *\n * `range(a)` is a convenient shorthand for `range(0, a)`.\n *\n * Various valid invocations:\n *\n *     range(5)           // [0, 1, 2, 3, 4]\n *     range(2, 5)        // [2, 3, 4]\n *     range(0, 5, 2)     // [0, 2, 4]\n *     range(5, 0, -1)    // [5, 4, 3, 2, 1]\n *     range(-3)          // []\n *\n * For a positive `step`, the iterator will keep producing values `n` as long\n * as the stop condition `n < stop` is satisfied.\n *\n * For a negative `step`, the iterator will keep producing values `n` as long\n * as the stop condition `n > stop` is satisfied.\n *\n * The produced range will be empty if the first value to produce already does\n * not meet the value constraint.\n */\nexport function range(stop: number): IterableIterator<number>;\nexport function range(start: number, stop: number, step?: number): IterableIterator<number>;\nexport function range(startOrStop: number, definitelyStop?: number, step = 1): IterableIterator<number> {\n  if (definitelyStop !== undefined) {\n    return range_(startOrStop /* as start */, definitelyStop, step);\n  } else {\n    return range_(0, startOrStop /* as stop */, step);\n  }\n}\n\nexport function xrange(stop: number): number[];\nexport function xrange(start: number, stop: number, step?: number): number[];\nexport function xrange(startOrStop: number, definitelyStop?: number, step = 1): number[] {\n  if (definitelyStop !== undefined) {\n    return Array.from(range_(startOrStop /* as start */, definitelyStop, step));\n  } else {\n    return Array.from(range_(0, startOrStop /* as stop */, step));\n  }\n}\n\n/**\n * Apply function of two arguments cumulatively to the items of sequence, from\n * left to right, so as to reduce the sequence to a single value.  For example:\n *\n *     reduce([1, 2, 3, 4, 5], (x, y) => x + y, 0)\n *\n * calculates\n *\n *     (((((0+1)+2)+3)+4)+5)\n *\n * The left argument, `x`, is the accumulated value and the right argument,\n * `y`, is the update value from the sequence.\n *\n * **Difference between `reduce()` and `reduce\\_()`**:  `reduce()` requires an\n * explicit initializer, whereas `reduce_()` will automatically use the first\n * item in the given iterable as the initializer.  When using `reduce()`, the\n * initializer value is placed before the items of the sequence in the\n * calculation, and serves as a default when the sequence is empty.  When using\n * `reduce_()`, and the given iterable is empty, then no default value can be\n * derived and `undefined` will be returned.\n */\nexport function reduce<T>(iterable: Iterable<T>, reducer: (agg: T, item: T, index: number) => T): T | undefined;\nexport function reduce<T, O>(iterable: Iterable<T>, reducer: (agg: O, item: T, index: number) => O, start: O): O;\nexport function reduce<T, O>(\n  iterable: Iterable<T>,\n  reducer: ((agg: T, item: T, index: number) => T) | ((agg: O, item: T, index: number) => O),\n  start?: O,\n): O | (T | undefined) {\n  if (start === undefined) {\n    return reduce2(iterable, reducer as (agg: T, item: T, index: number) => T);\n  } else {\n    return reduce3(iterable, reducer as (agg: O, item: T, index: number) => O, start);\n  }\n}\n\nfunction reduce3<T, O>(iterable: Iterable<T>, reducer: (agg: O, item: T, index: number) => O, start: O): O {\n  let output = start;\n  let index = 0;\n  for (const item of iterable) {\n    output = reducer(output, item, index++);\n  }\n  return output;\n}\n\nfunction reduce2<T>(iterable: Iterable<T>, reducer: (agg: T, item: T, index: number) => T): T | undefined {\n  const it = iter(iterable);\n  const start = find(it);\n  if (start === undefined) {\n    return undefined;\n  } else {\n    return reduce3(it, reducer, start);\n  }\n}\n\n/**\n * Return a new sorted list from the items in iterable.\n *\n * Has two optional arguments:\n *\n * * `keyFn` specifies a function of one argument providing a primitive\n *   identity for each element in the iterable.  that will be used to compare.\n *   The default value is to use a default identity function that is only\n *   defined for primitive types.\n *\n * * `reverse` is a boolean value.  If `true`, then the list elements are\n *   sorted as if each comparison were reversed.\n */\nexport function sorted<T>(\n  iterable: Iterable<T>,\n  keyFn: (item: T) => Primitive = primitiveIdentity,\n  reverse = false,\n): T[] {\n  const result = Array.from(iterable);\n  result.sort(keyToCmp(keyFn)); // sort in-place\n\n  if (reverse) {\n    result.reverse(); // reverse in-place\n  }\n\n  return result;\n}\n\n/**\n * Sums the items of an iterable from left to right and returns the total.  The\n * sum will defaults to 0 if the iterable is empty.\n */\nexport function sum(iterable: Iterable<number>): number {\n  return reduce(iterable, (x, y) => x + y, 0);\n}\n\n/**\n * See izip.\n */\nexport function zip<T1, T2>(xs: Iterable<T1>, ys: Iterable<T2>): [T1, T2][] {\n  return Array.from(izip(xs, ys));\n}\n\n/**\n * See izip3.\n */\nexport function zip3<T1, T2, T3>(xs: Iterable<T1>, ys: Iterable<T2>, zs: Iterable<T3>): [T1, T2, T3][] {\n  return Array.from(izip3(xs, ys, zs));\n}\n", "import { find } from \"./builtins\";\nimport { ifilter, imap } from \"./itertools\";\nimport { flatten } from \"./more-itertools\";\nimport type { Predicate } from \"./types\";\n\nfunction isNullish<T>(x: T): x is NonNullable<T> {\n  return x != null;\n}\n\nfunction isDefined(x: unknown): boolean {\n  return x !== undefined;\n}\n\n/**\n * Returns an iterable, filtering out any \"nullish\" values from the iterable.\n *\n *     >>> compact([1, 2, undefined, 3, null])\n *     [1, 2, 3]\n *\n * For an eager version, @see compact().\n */\nexport function icompact<T>(iterable: Iterable<T | null | undefined>): IterableIterator<T> {\n  return ifilter(iterable, isNullish);\n}\n\n/**\n * Returns an array, filtering out any \"nullish\" values from the iterable.\n *\n *     >>> compact([1, 2, undefined, 3, null])\n *     [1, 2, 3]\n *\n * For a lazy version, @see icompact().\n */\nexport function compact<T>(iterable: Iterable<T | null | undefined>): T[] {\n  return Array.from(icompact(iterable));\n}\n\n/**\n * Removes all \"nullish\" values from the given object. Returns a new object.\n *\n *     >>> compactObject({ a: 1, b: undefined, c: 0, d: null })\n *     { a: 1, c: 0 }\n *\n */\nexport function compactObject<K extends string, V>(obj: Record<K, V | null | undefined>): Record<K, V> {\n  const result = {} as Record<K, V>;\n  for (const [key, value_] of Object.entries(obj)) {\n    const value = value_ as V | null | undefined;\n    if (value != null) {\n      result[key as K] = value;\n    }\n  }\n  return result;\n}\n\n/**\n * Almost an alias of find(). There only is a difference if no key fn is\n * provided. In that case, `find()` will return the first item in the iterable,\n * whereas `first()` will return the first non-`undefined` value in the\n * iterable.\n */\nexport function first<T>(iterable: Iterable<T>, keyFn?: Predicate<T>): T | undefined {\n  return find(iterable, keyFn ?? isDefined);\n}\n\n/**\n * Returns 0 or more values for every value in the given iterable.\n * Technically, it's just calling map(), followed by flatten(), but it's a very\n * useful operation if you want to map over a structure, but not have a 1:1\n * input-output mapping.  Instead, if you want to potentially return 0 or more\n * values per input element, use flatmap():\n *\n * For example, to return all numbers `n` in the input iterable `n` times:\n *\n *     >>> const repeatN = n => repeat(n, n);\n *     >>> [...flatmap([0, 1, 2, 3, 4], repeatN)]\n *     [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]  // note: no 0\n *\n */\nexport function flatmap<T, S>(iterable: Iterable<T>, mapper: (item: T) => Iterable<S>): IterableIterator<S> {\n  return flatten(imap(iterable, mapper));\n}\n", "import notifications from '../notifications'\n\nexport default class SubscribeButton {\n  button: HTMLButtonElement\n  static selector = 'button.subscribe'\n\n  constructor(elem: HTMLButtonElement) {\n    this.button = elem\n    this.button.addEventListener('click', () => {\n      if (notifications.isSubscribed) notifications.unsubscribe()\n      else notifications.subscribe()\n    })\n    this.setSubscribeState(notifications.isSubscribed)\n  }\n\n  setSubscribeState(active: boolean) {\n    if (!notifications.canSubscribe) return\n    this.button.removeAttribute('disabled')\n    if (active) {\n      this.button.querySelector('i')!.innerText = 'notifications_on'\n      this.button.querySelector('span')!.innerText = 'St\u00E4ng av notifieringar'\n      this.button.classList.add('active')\n    } else {\n      this.button.querySelector('i')!.innerText = 'notifications_off'\n      this.button.querySelector('span')!.innerText = 'Aktivera notifieringar'\n      this.button.classList.remove('active')\n    }\n  }\n}\n", "'use strict';\n\n/**\n * Create a bound version of a function with a specified `this` context\n *\n * @param {Function} fn - The function to bind\n * @param {*} thisArg - The value to be passed as the `this` parameter\n * @returns {Function} A new function that will call the original function with the specified `this` context\n */\nexport default function bind(fn, thisArg) {\n  return function wrap() {\n    return fn.apply(thisArg, arguments);\n  };\n}\n", "'use strict';\n\nimport bind from './helpers/bind.js';\n\n// utils is a library of generic helper functions non-specific to axios\n\nconst { toString } = Object.prototype;\nconst { getPrototypeOf } = Object;\nconst { iterator, toStringTag } = Symbol;\n\n/* Creating a function that will check if an object has a property. */\nconst hasOwnProperty = (\n  ({ hasOwnProperty }) =>\n  (obj, prop) =>\n    hasOwnProperty.call(obj, prop)\n)(Object.prototype);\n\nconst isUnsafeObjectKey = (prop) =>\n  typeof prop === 'string' &&\n  (prop === '__proto__' || prop === 'constructor' || prop === 'prototype');\n\n/**\n * Determine whether an inherited object must be treated as a shared-prototype\n * boundary. Cross-realm Object.prototype objects cannot be distinguished\n * reliably from application-created null-prototype objects because their\n * properties are mutable, so all inherited terminal prototypes are excluded\n * as a fail-closed boundary. A null-prototype source still keeps its own\n * properties, as produced by mergeConfig and other safe materialization paths.\n *\n * @param {*} obj The object to inspect\n * @param {*} prototype The object's prototype\n * @param {boolean} source Whether obj is the original traversal source\n *\n * @returns {boolean} True when obj is a safe prototype traversal boundary\n */\nconst isPrototypeBoundary = (obj, prototype, source) =>\n  obj === Object.prototype || (!source && prototype === null);\n\n/**\n * Determine whether an object can retain its identity through code paths that\n * add, replace, and remove config properties without bypassing unsafe-key\n * filtering. Immutable objects, unsafe-key-bearing objects, and objects with\n * accessor or restricted data properties must be materialized instead.\n *\n * @param {*} obj The object to inspect\n *\n * @returns {boolean} True when every own property is safe and fully mutable\n */\nconst isSafeAndFullyMutable = (obj) => {\n  if (!Object.isExtensible(obj)) {\n    return false;\n  }\n\n  const props = Object.getOwnPropertyNames(obj);\n\n  if (Object.getOwnPropertySymbols) {\n    props.push(...Object.getOwnPropertySymbols(obj));\n  }\n\n  return props.every((prop) => {\n    if (isUnsafeObjectKey(prop)) {\n      return false;\n    }\n\n    const descriptor = Object.getOwnPropertyDescriptor(obj, prop);\n\n    return !!descriptor && descriptor.configurable && descriptor.writable === true;\n  });\n};\n\n/**\n * Walk the prototype chain (excluding the source realm's Object.prototype)\n * looking for an own `prop`. This distinguishes genuine own/inherited members\n * \u2014 including class accessors and template prototypes \u2014 from members injected\n * via Object.prototype pollution (e.g. `Object.prototype.username = '...'`),\n * which live on Object.prototype itself and are therefore never matched.\n *\n * @param {*} thing The value whose chain to inspect\n * @param {string|symbol} prop The property key to look for\n *\n * @returns {boolean} True when `prop` is owned below Object.prototype\n */\nconst hasOwnInPrototypeChain = (thing, prop) => {\n  let obj = thing;\n  const seen = [];\n\n  while (obj != null) {\n    if (seen.indexOf(obj) !== -1) {\n      return false;\n    }\n    seen.push(obj);\n\n    const prototype = getPrototypeOf(obj);\n\n    if (isPrototypeBoundary(obj, prototype, obj === thing)) {\n      return false;\n    }\n\n    if (hasOwnProperty(obj, prop)) {\n      return true;\n    }\n    obj = prototype;\n  }\n  return false;\n};\n\n/**\n * Read `obj[prop]` only when it is safe from Object.prototype pollution. Own\n * properties and members inherited from a non-Object.prototype source (a class\n * instance or template object) are honored; a value reachable only through a\n * polluted Object.prototype is ignored and `undefined` is returned.\n *\n * @param {*} obj The source object\n * @param {string|symbol} prop The property key to read\n *\n * @returns {*} The resolved value, or undefined when unsafe/absent\n */\nconst getSafeProp = (obj, prop) =>\n  obj != null && hasOwnInPrototypeChain(obj, prop) ? obj[prop] : undefined;\n\n/**\n * Flatten an object and its application-defined prototype chain into a\n * null-prototype object. Members inherited only from the source realm's\n * Object.prototype are deliberately excluded, while class/template members\n * below that boundary are preserved.\n *\n * @param {*} thing The value to flatten\n *\n * @returns {*} A null-prototype copy, or the original value when it is already\n * structurally safe or is not an object\n */\nconst toSafeFlatObject = (thing) => {\n  if (thing == null || (typeof thing !== 'object' && typeof thing !== 'function')) {\n    return thing;\n  }\n\n  const sourcePrototype = getPrototypeOf(thing);\n\n  if (sourcePrototype === null && isSafeAndFullyMutable(thing)) {\n    return thing;\n  }\n\n  const result = Object.create(null);\n  const merged = Object.create(null);\n  const seen = [];\n  let current = thing;\n\n  while (current != null) {\n    if (seen.indexOf(current) !== -1) {\n      break;\n    }\n\n    seen.push(current);\n\n    const prototype = current === thing ? sourcePrototype : getPrototypeOf(current);\n\n    if (isPrototypeBoundary(current, prototype, current === thing)) {\n      break;\n    }\n\n    const props = Object.getOwnPropertyNames(current);\n\n    if (Object.getOwnPropertySymbols) {\n      props.push(...Object.getOwnPropertySymbols(current));\n    }\n\n    for (const prop of props) {\n      if (isUnsafeObjectKey(prop)) {\n        continue;\n      }\n\n      if (!hasOwnProperty(merged, prop)) {\n        result[prop] = thing[prop];\n        merged[prop] = true;\n      }\n    }\n\n    current = prototype;\n  }\n\n  return result;\n};\n\nconst kindOf = ((cache) => (thing) => {\n  const str = toString.call(thing);\n  return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n})(Object.create(null));\n\nconst kindOfTest = (type) => {\n  type = type.toLowerCase();\n  return (thing) => kindOf(thing) === type;\n};\n\nconst typeOfTest = (type) => (thing) => typeof thing === type;\n\n/**\n * Determine if a value is a non-null object\n *\n * @param {Object} val The value to test\n *\n * @returns {boolean} True if value is an Array, otherwise false\n */\nconst { isArray } = Array;\n\n/**\n * Determine if a value is undefined\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nconst isUndefined = typeOfTest('undefined');\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n  return (\n    val !== null &&\n    !isUndefined(val) &&\n    val.constructor !== null &&\n    !isUndefined(val.constructor) &&\n    isFunction(val.constructor.isBuffer) &&\n    val.constructor.isBuffer(val)\n  );\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nconst isArrayBuffer = kindOfTest('ArrayBuffer');\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n  let result;\n  if (typeof ArrayBuffer !== 'undefined' && ArrayBuffer.isView) {\n    result = ArrayBuffer.isView(val);\n  } else {\n    result = val && val.buffer && isArrayBuffer(val.buffer);\n  }\n  return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a String, otherwise false\n */\nconst isString = typeOfTest('string');\n\n/**\n * Determine if a value is a Function\n *\n * @param {*} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nconst isFunction = typeOfTest('function');\n\n/**\n * Determine if a value is a Number\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Number, otherwise false\n */\nconst isNumber = typeOfTest('number');\n\n/**\n * Determine if a value is an Object\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an Object, otherwise false\n */\nconst isObject = (thing) => thing !== null && typeof thing === 'object';\n\n/**\n * Determine if a value is a Boolean\n *\n * @param {*} thing The value to test\n * @returns {boolean} True if value is a Boolean, otherwise false\n */\nconst isBoolean = (thing) => thing === true || thing === false;\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a plain Object, otherwise false\n */\nconst isPlainObject = (val) => {\n  if (!isObject(val)) {\n    return false;\n  }\n\n  const prototype = getPrototypeOf(val);\n  return (\n    (prototype === null || prototype === Object.prototype || getPrototypeOf(prototype) === null) &&\n    // Treat safe own/inherited Symbol.toStringTag or Symbol.iterator members as\n    // evidence the value is tagged/iterable, while ignoring members reachable\n    // only through shared or terminal prototype boundaries.\n    !hasOwnInPrototypeChain(val, toStringTag) &&\n    !hasOwnInPrototypeChain(val, iterator)\n  );\n};\n\n/**\n * Determine if a value is an empty object (safely handles Buffers)\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an empty object, otherwise false\n */\nconst isEmptyObject = (val) => {\n  // Early return for non-objects or Buffers to prevent RangeError\n  if (!isObject(val) || isBuffer(val)) {\n    return false;\n  }\n\n  try {\n    return Object.keys(val).length === 0 && Object.getPrototypeOf(val) === Object.prototype;\n  } catch (e) {\n    // Fallback for any other objects that might cause RangeError with Object.keys()\n    return false;\n  }\n};\n\n/**\n * Determine if a value is a Date\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Date, otherwise false\n */\nconst isDate = kindOfTest('Date');\n\n/**\n * Determine if a value is a File\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFile = kindOfTest('File');\n\n/**\n * Determine if a value is a React Native Blob\n * React Native \"blob\": an object with a `uri` attribute. Optionally, it can\n * also have a `name` and `type` attribute to specify filename and content type\n *\n * @see https://github.com/facebook/react-native/blob/26684cf3adf4094eb6c405d345a75bf8c7c0bf88/Libraries/Network/FormData.js#L68-L71\n *\n * @param {*} value The value to test\n *\n * @returns {boolean} True if value is a React Native Blob, otherwise false\n */\nconst isReactNativeBlob = (value) => {\n  return !!(value && typeof value.uri !== 'undefined');\n};\n\n/**\n * Determine if environment is React Native\n * ReactNative `FormData` has a non-standard `getParts()` method\n *\n * @param {*} formData The formData to test\n *\n * @returns {boolean} True if environment is React Native, otherwise false\n */\nconst isReactNative = (formData) => formData && typeof formData.getParts !== 'undefined';\n\n/**\n * Determine if a value is a Blob\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nconst isBlob = kindOfTest('Blob');\n\n/**\n * Determine if a value is a FileList\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a FileList, otherwise false\n */\nconst isFileList = kindOfTest('FileList');\nconst isSet = kindOfTest('Set');\n\n/**\n * Determine if a value is a Stream\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nconst isStream = (val) => isObject(val) && isFunction(val.pipe);\n\n/**\n * Determine if a value is a FormData\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction getGlobal() {\n  if (typeof globalThis !== 'undefined') return globalThis;\n  if (typeof self !== 'undefined') return self;\n  if (typeof window !== 'undefined') return window;\n  if (typeof global !== 'undefined') return global;\n  return {};\n}\n\nconst G = getGlobal();\nconst FormDataCtor = typeof G.FormData !== 'undefined' ? G.FormData : undefined;\n\nconst isFormData = (thing) => {\n  if (!thing) return false;\n  if (FormDataCtor && thing instanceof FormDataCtor) return true;\n  // Reject plain objects inheriting directly from Object.prototype so prototype-pollution gadgets can't spoof FormData.\n  const proto = getPrototypeOf(thing);\n  if (!proto || proto === Object.prototype) return false;\n  if (!isFunction(thing.append)) return false;\n  const kind = kindOf(thing);\n  return (\n    kind === 'formdata' ||\n    // detect form-data instance\n    (kind === 'object' && isFunction(thing.toString) && thing.toString() === '[object FormData]')\n  );\n};\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nconst isURLSearchParams = kindOfTest('URLSearchParams');\n\nconst [isReadableStream, isRequest, isResponse, isHeaders] = [\n  'ReadableStream',\n  'Request',\n  'Response',\n  'Headers',\n].map(kindOfTest);\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n *\n * @returns {String} The String freed of excess whitespace\n */\nconst trim = (str) => {\n  return str.trim ? str.trim() : str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n};\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array<unknown>} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n *\n * @param {Object} [options]\n * @param {Boolean} [options.allOwnKeys = false]\n * @returns {any}\n */\nfunction forEach(obj, fn, { allOwnKeys = false } = {}) {\n  // Don't bother if no value provided\n  if (obj === null || typeof obj === 'undefined') {\n    return;\n  }\n\n  let i;\n  let l;\n\n  // Force an array if not already something iterable\n  if (typeof obj !== 'object') {\n    /*eslint no-param-reassign:0*/\n    obj = [obj];\n  }\n\n  if (isArray(obj)) {\n    // Iterate over array values\n    for (i = 0, l = obj.length; i < l; i++) {\n      fn.call(null, obj[i], i, obj);\n    }\n  } else {\n    // Buffer check\n    if (isBuffer(obj)) {\n      return;\n    }\n\n    // Iterate over object keys\n    const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj);\n    const len = keys.length;\n    let key;\n\n    for (i = 0; i < len; i++) {\n      key = keys[i];\n      fn.call(null, obj[key], key, obj);\n    }\n  }\n}\n\n/**\n * Finds a key in an object, case-insensitive, returning the actual key name.\n * Returns null if the object is a Buffer or if no match is found.\n *\n * @param {Object} obj - The object to search.\n * @param {string} key - The key to find (case-insensitive).\n * @returns {?string} The actual key name if found, otherwise null.\n */\nfunction findKey(obj, key) {\n  if (isBuffer(obj)) {\n    return null;\n  }\n\n  key = key.toLowerCase();\n  const keys = Object.keys(obj);\n  let i = keys.length;\n  let _key;\n  while (i-- > 0) {\n    _key = keys[i];\n    if (key === _key.toLowerCase()) {\n      return _key;\n    }\n  }\n  return null;\n}\n\nconst _global = (() => {\n  /*eslint no-undef:0*/\n  if (typeof globalThis !== 'undefined') return globalThis;\n  return typeof self !== 'undefined' ? self : typeof window !== 'undefined' ? window : global;\n})();\n\nconst isContextDefined = (context) => !isUndefined(context) && context !== _global;\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * const result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n *\n * @returns {Object} Result of all merge properties\n */\nfunction merge(...objs) {\n  const { caseless, skipUndefined } = (isContextDefined(this) && this) || {};\n  const result = {};\n  const assignValue = (val, key) => {\n    // Skip dangerous property names to prevent prototype pollution\n    if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n      return;\n    }\n\n    // findKey lowercases the key, so caseless lookup only applies to strings \u2014\n    // symbol keys are identity-matched.\n    const targetKey = (caseless && typeof key === 'string' && findKey(result, key)) || key;\n    // Read via own-prop only \u2014 a bare `result[targetKey]` walks the prototype\n    // chain, so a polluted Object.prototype value could surface here and get\n    // copied into the merged result.\n    const existing = hasOwnProperty(result, targetKey) ? result[targetKey] : undefined;\n    if (isPlainObject(existing) && isPlainObject(val)) {\n      result[targetKey] = merge(existing, val);\n    } else if (isPlainObject(val)) {\n      result[targetKey] = merge({}, val);\n    } else if (isArray(val)) {\n      result[targetKey] = val.slice();\n    } else if (!skipUndefined || !isUndefined(val)) {\n      result[targetKey] = val;\n    }\n  };\n\n  for (let i = 0, l = objs.length; i < l; i++) {\n    const source = objs[i];\n    if (!source || isBuffer(source)) {\n      continue;\n    }\n\n    forEach(source, assignValue);\n\n    if (typeof source !== 'object' || isArray(source)) {\n      continue;\n    }\n\n    const symbols = Object.getOwnPropertySymbols(source);\n    for (let j = 0; j < symbols.length; j++) {\n      const symbol = symbols[j];\n      if (propertyIsEnumerable.call(source, symbol)) {\n        assignValue(source[symbol], symbol);\n      }\n    }\n  }\n  return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n *\n * @param {Object} [options]\n * @param {Boolean} [options.allOwnKeys]\n * @returns {Object} The resulting value of object a\n */\nconst extend = (a, b, thisArg, { allOwnKeys } = {}) => {\n  forEach(\n    b,\n    (val, key) => {\n      if (thisArg && isFunction(val)) {\n        Object.defineProperty(a, key, {\n          // Null-proto descriptor so a polluted Object.prototype.get cannot\n          // hijack defineProperty's accessor-vs-data resolution.\n          __proto__: null,\n          value: bind(val, thisArg),\n          writable: true,\n          enumerable: true,\n          configurable: true,\n        });\n      } else {\n        Object.defineProperty(a, key, {\n          __proto__: null,\n          value: val,\n          writable: true,\n          enumerable: true,\n          configurable: true,\n        });\n      }\n    },\n    { allOwnKeys }\n  );\n  return a;\n};\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n *\n * @returns {string} content value without BOM\n */\nconst stripBOM = (content) => {\n  if (content.charCodeAt(0) === 0xfeff) {\n    content = content.slice(1);\n  }\n  return content;\n};\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n *\n * @returns {void}\n */\nconst inherits = (constructor, superConstructor, props, descriptors) => {\n  constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n  Object.defineProperty(constructor.prototype, 'constructor', {\n    __proto__: null,\n    value: constructor,\n    writable: true,\n    enumerable: false,\n    configurable: true,\n  });\n  Object.defineProperty(constructor, 'super', {\n    __proto__: null,\n    value: superConstructor.prototype,\n  });\n  props && Object.assign(constructor.prototype, props);\n};\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function|Boolean} [filter]\n * @param {Function} [propFilter]\n *\n * @returns {Object}\n */\nconst toFlatObject = (sourceObj, destObj, filter, propFilter) => {\n  let props;\n  let i;\n  let prop;\n  const merged = {};\n\n  destObj = destObj || {};\n  // eslint-disable-next-line no-eq-null,eqeqeq\n  if (sourceObj == null) return destObj;\n\n  do {\n    props = Object.getOwnPropertyNames(sourceObj);\n    i = props.length;\n    while (i-- > 0) {\n      prop = props[i];\n      if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) {\n        destObj[prop] = sourceObj[prop];\n        merged[prop] = true;\n      }\n    }\n    sourceObj = filter !== false && getPrototypeOf(sourceObj);\n  } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\n\n  return destObj;\n};\n\n/**\n * Determines whether a string ends with the characters of a specified string\n *\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n *\n * @returns {boolean}\n */\nconst endsWith = (str, searchString, position) => {\n  str = String(str);\n  if (position === undefined || position > str.length) {\n    position = str.length;\n  }\n  position -= searchString.length;\n  const lastIndex = str.indexOf(searchString, position);\n  return lastIndex !== -1 && lastIndex === position;\n};\n\n/**\n * Returns new array from array like object or null if failed\n *\n * @param {*} [thing]\n *\n * @returns {?Array}\n */\nconst toArray = (thing) => {\n  if (!thing) return null;\n  if (isArray(thing)) return thing;\n  let i = thing.length;\n  if (!isNumber(i)) return null;\n  const arr = new Array(i);\n  while (i-- > 0) {\n    arr[i] = thing[i];\n  }\n  return arr;\n};\n\n/**\n * Checking if the Uint8Array exists and if it does, it returns a function that checks if the\n * thing passed in is an instance of Uint8Array\n *\n * @param {TypedArray}\n *\n * @returns {Array}\n */\n// eslint-disable-next-line func-names\nconst isTypedArray = ((TypedArray) => {\n  // eslint-disable-next-line func-names\n  return (thing) => {\n    return TypedArray && thing instanceof TypedArray;\n  };\n})(typeof Uint8Array !== 'undefined' && getPrototypeOf(Uint8Array));\n\n/**\n * For each entry in the object, call the function with the key and value.\n *\n * @param {Object<any, any>} obj - The object to iterate over.\n * @param {Function} fn - The function to call for each entry.\n *\n * @returns {void}\n */\nconst forEachEntry = (obj, fn) => {\n  const generator = obj && obj[iterator];\n\n  const _iterator = generator.call(obj);\n\n  let result;\n\n  while ((result = _iterator.next()) && !result.done) {\n    const pair = result.value;\n    fn.call(obj, pair[0], pair[1]);\n  }\n};\n\n/**\n * It takes a regular expression and a string, and returns an array of all the matches\n *\n * @param {string} regExp - The regular expression to match against.\n * @param {string} str - The string to search.\n *\n * @returns {Array<boolean>}\n */\nconst matchAll = (regExp, str) => {\n  let matches;\n  const arr = [];\n\n  while ((matches = regExp.exec(str)) !== null) {\n    arr.push(matches);\n  }\n\n  return arr;\n};\n\n/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */\nconst isHTMLForm = kindOfTest('HTMLFormElement');\n\nconst toCamelCase = (str) => {\n  return str.toLowerCase().replace(/[-_\\s]([a-z\\d])(\\w*)/g, function replacer(m, p1, p2) {\n    return p1.toUpperCase() + p2;\n  });\n};\n\nconst { propertyIsEnumerable } = Object.prototype;\n\n/**\n * Determine if a value is a RegExp object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a RegExp object, otherwise false\n */\nconst isRegExp = kindOfTest('RegExp');\n\nconst reduceDescriptors = (obj, reducer) => {\n  const descriptors = Object.getOwnPropertyDescriptors(obj);\n  const reducedDescriptors = {};\n\n  forEach(descriptors, (descriptor, name) => {\n    let ret;\n    if ((ret = reducer(descriptor, name, obj)) !== false) {\n      reducedDescriptors[name] = ret || descriptor;\n    }\n  });\n\n  Object.defineProperties(obj, reducedDescriptors);\n};\n\n/**\n * Makes all methods read-only\n * @param {Object} obj\n */\n\nconst freezeMethods = (obj) => {\n  reduceDescriptors(obj, (descriptor, name) => {\n    // skip restricted props in strict mode\n    if (isFunction(obj) && ['arguments', 'caller', 'callee'].includes(name)) {\n      return false;\n    }\n\n    const value = obj[name];\n\n    if (!isFunction(value)) return;\n\n    descriptor.enumerable = false;\n\n    if ('writable' in descriptor) {\n      descriptor.writable = false;\n      return;\n    }\n\n    if (!descriptor.set) {\n      descriptor.set = () => {\n        throw Error(\"Can not rewrite read-only method '\" + name + \"'\");\n      };\n    }\n  });\n};\n\n/**\n * Converts an array or a delimited string into an object set with values as keys and true as values.\n * Useful for fast membership checks.\n *\n * @param {Array|string} arrayOrString - The array or string to convert.\n * @param {string} delimiter - The delimiter to use if input is a string.\n * @returns {Object} An object with keys from the array or string, values set to true.\n */\nconst toObjectSet = (arrayOrString, delimiter) => {\n  const obj = {};\n\n  const define = (arr) => {\n    arr.forEach((value) => {\n      obj[value] = true;\n    });\n  };\n\n  isArray(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter));\n\n  return obj;\n};\n\nconst noop = () => {};\n\nconst toFiniteNumber = (value, defaultValue) => {\n  return value != null && Number.isFinite((value = +value)) ? value : defaultValue;\n};\n\n/**\n * If the thing is a FormData object, return true, otherwise return false.\n *\n * @param {unknown} thing - The thing to check.\n *\n * @returns {boolean}\n */\nfunction isSpecCompliantForm(thing) {\n  return !!(\n    thing &&\n    isFunction(thing.append) &&\n    thing[toStringTag] === 'FormData' &&\n    thing[iterator]\n  );\n}\n\n/**\n * Recursively converts an object to a JSON-compatible object, handling circular references and Buffers.\n *\n * @param {Object} obj - The object to convert.\n * @returns {Object} The JSON-compatible object.\n */\nconst toJSONObject = (obj) => {\n  const visited = new WeakSet();\n\n  const visit = (source) => {\n    if (isObject(source)) {\n      if (visited.has(source)) {\n        return;\n      }\n\n      //Buffer check\n      if (isBuffer(source)) {\n        return source;\n      }\n\n      if (!('toJSON' in source)) {\n        // add-on descent / delete-on-ascent: preserves path semantics, so DAG nodes serialise at every occurrence (see #7230).\n        visited.add(source);\n\n        let target;\n\n        if (isSet(source)) {\n          target = [];\n          for (const value of source) {\n            const reducedValue = visit(value);\n            !isUndefined(reducedValue) && target.push(reducedValue);\n          }\n        } else {\n          target = isArray(source) ? [] : {};\n\n          forEach(source, (value, key) => {\n            const reducedValue = visit(value);\n            !isUndefined(reducedValue) && (target[key] = reducedValue);\n          });\n        }\n\n        visited.delete(source);\n\n        return target;\n      }\n    }\n\n    return source;\n  };\n\n  return visit(obj);\n};\n\n/**\n * Determines if a value is an async function.\n *\n * @param {*} thing - The value to test.\n * @returns {boolean} True if value is an async function, otherwise false.\n */\nconst isAsyncFn = kindOfTest('AsyncFunction');\n\n/**\n * Determines if a value is thenable (has then and catch methods).\n *\n * @param {*} thing - The value to test.\n * @returns {boolean} True if value is thenable, otherwise false.\n */\nconst isThenable = (thing) =>\n  thing &&\n  (isObject(thing) || isFunction(thing)) &&\n  isFunction(thing.then) &&\n  isFunction(thing.catch);\n\n// original code\n// https://github.com/DigitalBrainJS/AxiosPromise/blob/16deab13710ec09779922131f3fa5954320f83ab/lib/utils.js#L11-L34\n\n/**\n * Provides a cross-platform setImmediate implementation.\n * Uses native setImmediate if available, otherwise falls back to postMessage or setTimeout.\n *\n * @param {boolean} setImmediateSupported - Whether setImmediate is supported.\n * @param {boolean} postMessageSupported - Whether postMessage is supported.\n * @returns {Function} A function to schedule a callback asynchronously.\n */\nconst _setImmediate = ((setImmediateSupported, postMessageSupported) => {\n  if (setImmediateSupported) {\n    return setImmediate;\n  }\n\n  return postMessageSupported\n    ? ((token, callbacks) => {\n        _global.addEventListener(\n          'message',\n          ({ source, data }) => {\n            if (source === _global && data === token) {\n              callbacks.length && callbacks.shift()();\n            }\n          },\n          false\n        );\n\n        return (cb) => {\n          callbacks.push(cb);\n          _global.postMessage(token, '*');\n        };\n      })(`axios@${Math.random()}`, [])\n    : (cb) => setTimeout(cb);\n})(typeof setImmediate === 'function', isFunction(_global.postMessage));\n\n/**\n * Schedules a microtask or asynchronous callback as soon as possible.\n * Uses queueMicrotask if available, otherwise falls back to process.nextTick or _setImmediate.\n *\n * @type {Function}\n */\nconst asap =\n  typeof queueMicrotask !== 'undefined'\n    ? queueMicrotask.bind(_global)\n    : (typeof process !== 'undefined' && process.nextTick) || _setImmediate;\n\n// *********************\n\nconst isIterable = (thing) => thing != null && isFunction(thing[iterator]);\n\n/**\n * Determine if a value is iterable via an iterator that is NOT sourced solely\n * from a polluted Object.prototype. Use this instead of `isIterable` whenever\n * the iterable comes from untrusted input (e.g. user-supplied header sources),\n * so `Object.prototype[Symbol.iterator] = ...` cannot turn an ordinary object\n * into an attacker-controlled entries iterator.\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value has a non-polluted iterator\n */\nconst isSafeIterable = (thing) =>\n  thing != null && hasOwnInPrototypeChain(thing, iterator) && isIterable(thing);\n\nexport default {\n  isArray,\n  isArrayBuffer,\n  isBuffer,\n  isFormData,\n  isArrayBufferView,\n  isString,\n  isNumber,\n  isBoolean,\n  isObject,\n  isPlainObject,\n  isEmptyObject,\n  isReadableStream,\n  isRequest,\n  isResponse,\n  isHeaders,\n  isUndefined,\n  isDate,\n  isFile,\n  isReactNativeBlob,\n  isReactNative,\n  isBlob,\n  isRegExp,\n  isFunction,\n  isStream,\n  isURLSearchParams,\n  isTypedArray,\n  isFileList,\n  forEach,\n  merge,\n  extend,\n  trim,\n  stripBOM,\n  inherits,\n  toFlatObject,\n  kindOf,\n  kindOfTest,\n  endsWith,\n  toArray,\n  forEachEntry,\n  matchAll,\n  isHTMLForm,\n  hasOwnProperty,\n  hasOwnProp: hasOwnProperty, // an alias to avoid ESLint no-prototype-builtins detection\n  hasOwnInPrototypeChain,\n  getSafeProp,\n  toSafeFlatObject,\n  reduceDescriptors,\n  freezeMethods,\n  toObjectSet,\n  toCamelCase,\n  noop,\n  toFiniteNumber,\n  findKey,\n  global: _global,\n  isContextDefined,\n  isSpecCompliantForm,\n  toJSONObject,\n  isAsyncFn,\n  isThenable,\n  setImmediate: _setImmediate,\n  asap,\n  isIterable,\n  isSafeIterable,\n};\n", "'use strict';\n\nimport utils from '../utils.js';\n\n// RawAxiosHeaders whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nconst ignoreDuplicateOf = utils.toObjectSet([\n  'age',\n  'authorization',\n  'content-length',\n  'content-type',\n  'etag',\n  'expires',\n  'from',\n  'host',\n  'if-modified-since',\n  'if-unmodified-since',\n  'last-modified',\n  'location',\n  'max-forwards',\n  'proxy-authorization',\n  'referer',\n  'retry-after',\n  'user-agent',\n]);\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} rawHeaders Headers needing to be parsed\n *\n * @returns {Object} Headers parsed into an object\n */\nexport default (rawHeaders) => {\n  const parsed = {};\n  let key;\n  let val;\n  let i;\n\n  rawHeaders &&\n    rawHeaders.split('\\n').forEach(function parser(line) {\n      i = line.indexOf(':');\n      key = line.substring(0, i).trim().toLowerCase();\n      val = line.substring(i + 1).trim();\n\n      const hasKey = utils.hasOwnProp(parsed, key);\n\n      if (!key || (hasKey && utils.hasOwnProp(ignoreDuplicateOf, key))) {\n        return;\n      }\n\n      if (key === 'set-cookie') {\n        if (hasKey) {\n          parsed[key].push(val);\n        } else {\n          parsed[key] = [val];\n        }\n      } else {\n        parsed[key] = hasKey ? parsed[key] + ', ' + val : val;\n      }\n    });\n\n  return parsed;\n};\n", "'use strict';\n\nimport utils from '../utils.js';\n\nfunction trimSPorHTAB(str) {\n  let start = 0;\n  let end = str.length;\n\n  while (start < end) {\n    const code = str.charCodeAt(start);\n\n    if (code !== 0x09 && code !== 0x20) {\n      break;\n    }\n\n    start += 1;\n  }\n\n  while (end > start) {\n    const code = str.charCodeAt(end - 1);\n\n    if (code !== 0x09 && code !== 0x20) {\n      break;\n    }\n\n    end -= 1;\n  }\n\n  return start === 0 && end === str.length ? str : str.slice(start, end);\n}\n\n// The control-code ranges are intentional: header sanitization strips C0/DEL bytes.\n// eslint-disable-next-line no-control-regex\nconst INVALID_UNICODE_HEADER_VALUE_CHARS = new RegExp('[\\\\u0000-\\\\u0008\\\\u000a-\\\\u001f\\\\u007f]+', 'g');\n// eslint-disable-next-line no-control-regex\nconst INVALID_BYTE_STRING_HEADER_VALUE_CHARS = new RegExp('[^\\\\u0009\\\\u0020-\\\\u007e\\\\u0080-\\\\u00ff]+', 'g');\n\nfunction sanitizeValue(value, invalidChars) {\n  if (utils.isArray(value)) {\n    return value.map((item) => sanitizeValue(item, invalidChars));\n  }\n\n  return trimSPorHTAB(String(value).replace(invalidChars, ''));\n}\n\nexport const sanitizeHeaderValue = (value) =>\n  sanitizeValue(value, INVALID_UNICODE_HEADER_VALUE_CHARS);\n\nexport const sanitizeByteStringHeaderValue = (value) =>\n  sanitizeValue(value, INVALID_BYTE_STRING_HEADER_VALUE_CHARS);\n\nexport function toByteStringHeaderObject(headers) {\n  const byteStringHeaders = Object.create(null);\n\n  utils.forEach(headers.toJSON(), (value, header) => {\n    byteStringHeaders[header] = sanitizeByteStringHeaderValue(value);\n  });\n\n  return byteStringHeaders;\n}\n", "'use strict';\n\nimport utils from '../utils.js';\nimport parseHeaders from '../helpers/parseHeaders.js';\nimport { sanitizeHeaderValue } from '../helpers/sanitizeHeaderValue.js';\n\nconst $internals = Symbol('internals');\n\nfunction normalizeHeader(header) {\n  return header && String(header).trim().toLowerCase();\n}\n\nfunction normalizeValue(value) {\n  if (value === false || value == null) {\n    return value;\n  }\n\n  return utils.isArray(value) ? value.map(normalizeValue) : sanitizeHeaderValue(String(value));\n}\n\nfunction parseTokens(str) {\n  const tokens = Object.create(null);\n  const tokensRE = /([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;\n  let match;\n\n  while ((match = tokensRE.exec(str))) {\n    tokens[match[1]] = match[2];\n  }\n\n  return tokens;\n}\n\nconst parameterNameRE = /^[!#$%&'*+\\-.^_`|~0-9A-Za-z]+$/;\n\nfunction trimOWS(value) {\n  let start = 0;\n  let end = value.length;\n\n  while (start < end) {\n    const code = value.charCodeAt(start);\n\n    if (code !== 0x09 && code !== 0x20) {\n      break;\n    }\n\n    start += 1;\n  }\n\n  while (end > start) {\n    const code = value.charCodeAt(end - 1);\n\n    if (code !== 0x09 && code !== 0x20) {\n      break;\n    }\n\n    end -= 1;\n  }\n\n  return start === 0 && end === value.length ? value : value.slice(start, end);\n}\n\nfunction decodeQuotedString(value) {\n  const last = value.length - 1;\n\n  if (last < 1 || value.charCodeAt(0) !== 0x22 || value.charCodeAt(last) !== 0x22) {\n    return value;\n  }\n\n  let decoded = '';\n\n  for (let i = 1; i < last; i++) {\n    const code = value.charCodeAt(i);\n\n    if (code === 0x22) {\n      return value;\n    }\n\n    if (code === 0x5c) {\n      i += 1;\n\n      if (i >= last) {\n        return value;\n      }\n    }\n\n    decoded += value[i];\n  }\n\n  return decoded;\n}\n\nfunction parseParameters(value) {\n  const parameters = Object.create(null);\n  const str = String(value);\n  let start = 0;\n  let quoted = false;\n  let escaped = false;\n\n  function parseParameter(end) {\n    const part = trimOWS(str.slice(start, end));\n    const equals = part.indexOf('=');\n\n    if (equals < 1) {\n      return;\n    }\n\n    const name = trimOWS(part.slice(0, equals));\n\n    if (!parameterNameRE.test(name)) {\n      return;\n    }\n\n    const normalizedName = name.toLowerCase();\n\n    if (\n      normalizedName === '__proto__' ||\n      normalizedName === 'constructor' ||\n      normalizedName === 'prototype'\n    ) {\n      return;\n    }\n\n    const parameterValue = trimOWS(part.slice(equals + 1));\n    parameters[normalizedName] = decodeQuotedString(parameterValue);\n  }\n\n  for (let i = 0; i < str.length; i++) {\n    const code = str.charCodeAt(i);\n\n    if (quoted) {\n      if (escaped) {\n        escaped = false;\n      } else if (code === 0x5c) {\n        escaped = true;\n      } else if (code === 0x22) {\n        quoted = false;\n      }\n    } else if (code === 0x22) {\n      quoted = true;\n    } else if (code === 0x2c || code === 0x3b) {\n      parseParameter(i);\n      start = i + 1;\n    }\n  }\n\n  parseParameter(str.length);\n\n  return parameters;\n}\n\nconst isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim());\n\nfunction matchHeaderValue(context, value, header, filter, isHeaderNameFilter) {\n  if (utils.isFunction(filter)) {\n    return filter.call(this, value, header);\n  }\n\n  if (isHeaderNameFilter) {\n    value = header;\n  }\n\n  if (!utils.isString(value)) return;\n\n  if (utils.isString(filter)) {\n    return value.indexOf(filter) !== -1;\n  }\n\n  if (utils.isRegExp(filter)) {\n    return filter.test(value);\n  }\n}\n\nfunction formatHeader(header) {\n  return header\n    .trim()\n    .toLowerCase()\n    .replace(/([a-z\\d])(\\w*)/g, (w, char, str) => {\n      return char.toUpperCase() + str;\n    });\n}\n\nfunction buildAccessors(obj, header) {\n  const accessorName = utils.toCamelCase(' ' + header);\n\n  ['get', 'set', 'has'].forEach((methodName) => {\n    Object.defineProperty(obj, methodName + accessorName, {\n      // Null-proto descriptor so a polluted Object.prototype.get cannot turn\n      // this data descriptor into an accessor descriptor on the way in.\n      __proto__: null,\n      value: function (arg1, arg2, arg3) {\n        return this[methodName].call(this, header, arg1, arg2, arg3);\n      },\n      configurable: true,\n    });\n  });\n}\n\nclass AxiosHeaders {\n  constructor(headers) {\n    headers && this.set(headers);\n  }\n\n  set(header, valueOrRewrite, rewrite) {\n    const self = this;\n\n    function setHeader(_value, _header, _rewrite) {\n      const lHeader = normalizeHeader(_header);\n\n      if (!lHeader) {\n        return;\n      }\n\n      const key = utils.findKey(self, lHeader);\n\n      if (\n        !key ||\n        self[key] === undefined ||\n        _rewrite === true ||\n        (_rewrite === undefined && self[key] !== false)\n      ) {\n        self[key || _header] = normalizeValue(_value);\n      }\n    }\n\n    const setHeaders = (headers, _rewrite) =>\n      utils.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));\n\n    if (utils.isPlainObject(header) || header instanceof this.constructor) {\n      setHeaders(header, valueOrRewrite);\n    } else if (utils.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {\n      setHeaders(parseHeaders(header), valueOrRewrite);\n    } else if (utils.isObject(header) && utils.isSafeIterable(header)) {\n      let obj = Object.create(null),\n        dest,\n        key;\n      for (const entry of header) {\n        if (!utils.isArray(entry)) {\n          throw new TypeError('Object iterator must return a key-value pair');\n        }\n\n        key = entry[0];\n\n        if (utils.hasOwnProp(obj, key)) {\n          dest = obj[key];\n          obj[key] = utils.isArray(dest) ? [...dest, entry[1]] : [dest, entry[1]];\n        } else {\n          obj[key] = entry[1];\n        }\n      }\n\n      setHeaders(obj, valueOrRewrite);\n    } else {\n      header != null && setHeader(valueOrRewrite, header, rewrite);\n    }\n\n    return this;\n  }\n\n  get(header, parser) {\n    header = normalizeHeader(header);\n\n    if (header) {\n      const key = utils.findKey(this, header);\n\n      if (key) {\n        const value = this[key];\n\n        if (!parser) {\n          return value;\n        }\n\n        if (parser === true) {\n          return parseTokens(value);\n        }\n\n        if (utils.isFunction(parser)) {\n          return parser.call(this, value, key);\n        }\n\n        if (utils.isRegExp(parser)) {\n          return parser.exec(value);\n        }\n\n        throw new TypeError('parser must be boolean|regexp|function');\n      }\n    }\n  }\n\n  has(header, matcher) {\n    header = normalizeHeader(header);\n\n    if (header) {\n      const key = utils.findKey(this, header);\n\n      return !!(\n        key &&\n        this[key] !== undefined &&\n        (!matcher || matchHeaderValue(this, this[key], key, matcher))\n      );\n    }\n\n    return false;\n  }\n\n  delete(header, matcher) {\n    const self = this;\n    let deleted = false;\n\n    function deleteHeader(_header) {\n      _header = normalizeHeader(_header);\n\n      if (_header) {\n        const key = utils.findKey(self, _header);\n\n        if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) {\n          delete self[key];\n\n          deleted = true;\n        }\n      }\n    }\n\n    if (utils.isArray(header)) {\n      header.forEach(deleteHeader);\n    } else {\n      deleteHeader(header);\n    }\n\n    return deleted;\n  }\n\n  clear(matcher) {\n    const keys = Object.keys(this);\n    let i = keys.length;\n    let deleted = false;\n\n    while (i--) {\n      const key = keys[i];\n      if (!matcher || matchHeaderValue(this, this[key], key, matcher, true)) {\n        delete this[key];\n        deleted = true;\n      }\n    }\n\n    return deleted;\n  }\n\n  normalize(format) {\n    const self = this;\n    const headers = {};\n\n    utils.forEach(this, (value, header) => {\n      const key = utils.findKey(headers, header);\n\n      if (key) {\n        self[key] = normalizeValue(value);\n        delete self[header];\n        return;\n      }\n\n      const normalized = format ? formatHeader(header) : String(header).trim();\n\n      if (normalized !== header) {\n        delete self[header];\n      }\n\n      self[normalized] = normalizeValue(value);\n\n      headers[normalized] = true;\n    });\n\n    return this;\n  }\n\n  concat(...targets) {\n    return this.constructor.concat(this, ...targets);\n  }\n\n  toJSON(asStrings) {\n    const obj = Object.create(null);\n\n    utils.forEach(this, (value, header) => {\n      value != null &&\n        value !== false &&\n        (obj[header] = asStrings && utils.isArray(value) ? value.join(', ') : value);\n    });\n\n    return obj;\n  }\n\n  [Symbol.iterator]() {\n    return Object.entries(this.toJSON())[Symbol.iterator]();\n  }\n\n  toString() {\n    return Object.entries(this.toJSON())\n      .map(([header, value]) => header + ': ' + value)\n      .join('\\n');\n  }\n\n  getSetCookie() {\n    const value = this.get('set-cookie');\n    return utils.isArray(value) ? value : value == null || value === false ? [] : [value];\n  }\n\n  get [Symbol.toStringTag]() {\n    return 'AxiosHeaders';\n  }\n\n  static from(thing) {\n    return thing instanceof this ? thing : new this(thing);\n  }\n\n  static parseParameters(value) {\n    return parseParameters(value);\n  }\n\n  static concat(first, ...targets) {\n    const computed = new this(first);\n\n    targets.forEach((target) => computed.set(target));\n\n    return computed;\n  }\n\n  static accessor(header) {\n    const internals =\n      (this[$internals] =\n      this[$internals] =\n        {\n          accessors: {},\n        });\n\n    const accessors = internals.accessors;\n    const prototype = this.prototype;\n\n    function defineAccessor(_header) {\n      const lHeader = normalizeHeader(_header);\n\n      if (!accessors[lHeader]) {\n        buildAccessors(prototype, _header);\n        accessors[lHeader] = true;\n      }\n    }\n\n    utils.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);\n\n    return this;\n  }\n}\n\nAxiosHeaders.accessor([\n  'Content-Type',\n  'Content-Length',\n  'Accept',\n  'Accept-Encoding',\n  'User-Agent',\n  'Authorization',\n]);\n\n// reserved names hotfix\nutils.reduceDescriptors(AxiosHeaders.prototype, ({ value }, key) => {\n  let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set`\n  return {\n    get: () => value,\n    set(headerValue) {\n      this[mapped] = headerValue;\n    },\n  };\n});\n\nutils.freezeMethods(AxiosHeaders);\n\nexport default AxiosHeaders;\n", "'use strict';\n\nimport utils from '../utils.js';\nimport AxiosHeaders from './AxiosHeaders.js';\n\nexport const REDACTED = '[REDACTED ****]';\n\nfunction hasOwnOrPrototypeToJSON(source) {\n  if (utils.hasOwnProp(source, 'toJSON')) {\n    return true;\n  }\n\n  let prototype = Object.getPrototypeOf(source);\n\n  while (prototype && prototype !== Object.prototype) {\n    if (utils.hasOwnProp(prototype, 'toJSON')) {\n      return true;\n    }\n\n    prototype = Object.getPrototypeOf(prototype);\n  }\n\n  return false;\n}\n\n// Build a plain-object snapshot of `config` and replace the value of any key\n// (case-insensitive) listed in `redactKeys` with REDACTED. Walks through arrays\n// and AxiosHeaders, and short-circuits on circular references.\nfunction redactConfig(config, redactKeys) {\n  const lowerKeys = new Set(redactKeys.map((k) => String(k).toLowerCase()));\n  const seen = [];\n\n  const visit = (source) => {\n    if (source === null || typeof source !== 'object') return source;\n    if (utils.isBuffer(source)) return source;\n    if (seen.indexOf(source) !== -1) return undefined;\n\n    if (source instanceof AxiosHeaders) {\n      source = source.toJSON();\n    }\n\n    seen.push(source);\n\n    let result;\n    if (utils.isArray(source)) {\n      result = [];\n      source.forEach((v, i) => {\n        const reducedValue = visit(v);\n        if (!utils.isUndefined(reducedValue)) {\n          result[i] = reducedValue;\n        }\n      });\n    } else {\n      if (!utils.isPlainObject(source) && hasOwnOrPrototypeToJSON(source)) {\n        seen.pop();\n        return source;\n      }\n\n      result = Object.create(null);\n      for (const [key, value] of Object.entries(source)) {\n        const reducedValue = lowerKeys.has(key.toLowerCase()) ? REDACTED : visit(value);\n        if (!utils.isUndefined(reducedValue)) {\n          result[key] = reducedValue;\n        }\n      }\n    }\n\n    seen.pop();\n    return result;\n  };\n\n  return visit(config);\n}\n\nfunction stringifySafely(value) {\n  try {\n    return String(value);\n  } catch (err) {\n    return '';\n  }\n}\n\nfunction aggregateErrorMessage(error) {\n  const message = error.errors\n    .map((entry) => {\n      try {\n        return entry && entry.message ? stringifySafely(entry.message) : stringifySafely(entry);\n      } catch (err) {\n        return '';\n      }\n    })\n    .filter(Boolean)\n    .join('; ');\n\n  return message || error.name || 'AggregateError';\n}\n\nclass AxiosError extends Error {\n  static from(error, code, config, request, response, customProps) {\n    // `AggregateError` (thrown by Node on dual-stack/Happy-Eyeballs connection\n    // failures) has an empty `message`; its detail lives in `errors[]`. Without\n    // this, the wrapped error surfaces with a blank message (see #6721).\n    let message = error.message;\n    if (!message && utils.isArray(error.errors) && error.errors.length) {\n      message = aggregateErrorMessage(error);\n    }\n\n    const axiosError = new AxiosError(message, code || error.code, config, request, response);\n    // Match native `Error` `cause` semantics: non-enumerable. The wrapped\n    // error often carries circular internals (sockets, requests, agents), so\n    // an enumerable `cause` makes structured loggers (pino/winston) and any\n    // own-property walk throw \"Converting circular structure to JSON\".\n    // Regression from #6982; see #7205. `__proto__: null` mirrors the\n    // `message` descriptor below (prototype-pollution-safe descriptor).\n    Object.defineProperty(axiosError, 'cause', {\n      __proto__: null,\n      value: error,\n      writable: true,\n      enumerable: false,\n      configurable: true,\n    });\n    axiosError.name = error.name;\n\n    // Preserve status from the original error if not already set from response\n    if (error.status != null && axiosError.status == null) {\n      axiosError.status = error.status;\n    }\n\n    customProps && Object.assign(axiosError, customProps);\n    return axiosError;\n  }\n\n  /**\n   * Create an Error with the specified message, config, error code, request and response.\n   *\n   * @param {string} message The error message.\n   * @param {string} [code] The error code (for example, 'ECONNABORTED').\n   * @param {Object} [config] The config.\n   * @param {Object} [request] The request.\n   * @param {Object} [response] The response.\n   *\n   * @returns {Error} The created error.\n   */\n  constructor(message, code, config, request, response) {\n    super(message);\n\n    // Make message enumerable to maintain backward compatibility\n    // The native Error constructor sets message as non-enumerable,\n    // but axios < v1.13.3 had it as enumerable\n    Object.defineProperty(this, 'message', {\n      // Null-proto descriptor so a polluted Object.prototype.get cannot turn\n      // this data descriptor into an accessor descriptor on the way in.\n      __proto__: null,\n      value: message,\n      enumerable: true,\n      writable: true,\n      configurable: true,\n    });\n\n    this.name = 'AxiosError';\n    this.isAxiosError = true;\n    code && (this.code = code);\n    config && (this.config = config);\n    request && (this.request = request);\n    if (response) {\n      this.response = response;\n      this.status = response.status;\n    }\n  }\n\n  toJSON() {\n    // Opt-in redaction: when the request config carries a `redact` array, the\n    // value of any matching key (case-insensitive, at any depth) is replaced\n    // with REDACTED in the serialized snapshot. Undefined or empty leaves the\n    // existing serialization behavior unchanged.\n    const config = this.config;\n    const redactKeys = config && utils.hasOwnProp(config, 'redact') ? config.redact : undefined;\n    const serializedConfig =\n      utils.isArray(redactKeys) && redactKeys.length > 0\n        ? redactConfig(config, redactKeys)\n        : utils.toJSONObject(config);\n\n    return {\n      // Standard\n      message: this.message,\n      name: this.name,\n      // Microsoft\n      description: this.description,\n      number: this.number,\n      // Mozilla\n      fileName: this.fileName,\n      lineNumber: this.lineNumber,\n      columnNumber: this.columnNumber,\n      stack: this.stack,\n      // Axios\n      config: serializedConfig,\n      code: this.code,\n      status: this.status,\n    };\n  }\n}\n\n// This can be changed to static properties as soon as the parser options in .eslint.cjs are updated.\nAxiosError.ERR_BAD_OPTION_VALUE = 'ERR_BAD_OPTION_VALUE';\nAxiosError.ERR_BAD_OPTION = 'ERR_BAD_OPTION';\nAxiosError.ECONNABORTED = 'ECONNABORTED';\nAxiosError.ETIMEDOUT = 'ETIMEDOUT';\nAxiosError.ECONNREFUSED = 'ECONNREFUSED';\nAxiosError.ERR_NETWORK = 'ERR_NETWORK';\nAxiosError.ERR_FR_TOO_MANY_REDIRECTS = 'ERR_FR_TOO_MANY_REDIRECTS';\nAxiosError.ERR_DEPRECATED = 'ERR_DEPRECATED';\nAxiosError.ERR_BAD_RESPONSE = 'ERR_BAD_RESPONSE';\nAxiosError.ERR_BAD_REQUEST = 'ERR_BAD_REQUEST';\nAxiosError.ERR_CANCELED = 'ERR_CANCELED';\nAxiosError.ERR_NOT_SUPPORT = 'ERR_NOT_SUPPORT';\nAxiosError.ERR_INVALID_URL = 'ERR_INVALID_URL';\nAxiosError.ERR_FORM_DATA_DEPTH_EXCEEDED = 'ERR_FORM_DATA_DEPTH_EXCEEDED';\n\nexport default AxiosError;\n", "// eslint-disable-next-line strict\nexport default null;\n", "'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\n// temporary hotfix to avoid circular references until AxiosURLSearchParams is refactored\nimport PlatformFormData from '../platform/node/classes/FormData.js';\nimport PlatformBuffer from '../platform/node/classes/Buffer.js';\n\n// Default nesting limit shared with the inverse transform (formDataToJSON) so\n// the FormData <-> JSON round-trip stays symmetric.\nexport const DEFAULT_FORM_DATA_MAX_DEPTH = 100;\n\n/**\n * Determines if the given thing is a array or js object.\n *\n * @param {string} thing - The object or array to be visited.\n *\n * @returns {boolean}\n */\nfunction isVisitable(thing) {\n  return utils.isPlainObject(thing) || utils.isArray(thing);\n}\n\n/**\n * It removes the brackets from the end of a string\n *\n * @param {string} key - The key of the parameter.\n *\n * @returns {string} the key without the brackets.\n */\nfunction removeBrackets(key) {\n  return utils.endsWith(key, '[]') ? key.slice(0, -2) : key;\n}\n\n/**\n * It takes a path, a key, and a boolean, and returns a string\n *\n * @param {string} path - The path to the current key.\n * @param {string} key - The key of the current object being iterated over.\n * @param {string} dots - If true, the key will be rendered with dots instead of brackets.\n *\n * @returns {string} The path to the current key.\n */\nfunction renderKey(path, key, dots) {\n  if (!path) return key;\n  return path\n    .concat(key)\n    .map(function each(token, i) {\n      // eslint-disable-next-line no-param-reassign\n      token = removeBrackets(token);\n      return !dots && i ? '[' + token + ']' : token;\n    })\n    .join(dots ? '.' : '');\n}\n\n/**\n * If the array is an array and none of its elements are visitable, then it's a flat array.\n *\n * @param {Array<any>} arr - The array to check\n *\n * @returns {boolean}\n */\nfunction isFlatArray(arr) {\n  return utils.isArray(arr) && !arr.some(isVisitable);\n}\n\nconst predicates = utils.toFlatObject(utils, {}, null, function filter(prop) {\n  return /^is[A-Z]/.test(prop);\n});\n\n/**\n * Convert a data object to FormData\n *\n * @param {Object} obj\n * @param {?Object} [formData]\n * @param {?Object} [options]\n * @param {Function} [options.visitor]\n * @param {Boolean} [options.metaTokens = true]\n * @param {Boolean} [options.dots = false]\n * @param {?Boolean} [options.indexes = false]\n *\n * @returns {Object}\n **/\n\n/**\n * It converts an object into a FormData object\n *\n * @param {Object<any, any>} obj - The object to convert to form data.\n * @param {string} formData - The FormData object to append to.\n * @param {Object<string, any>} options\n *\n * @returns\n */\nfunction toFormData(obj, formData, options) {\n  if (!utils.isObject(obj)) {\n    throw new TypeError('target must be an object');\n  }\n\n  // eslint-disable-next-line no-param-reassign\n  formData = formData || new (PlatformFormData || FormData)();\n\n  const option = (name, fallback) => {\n    const value = utils.getSafeProp(options, name);\n    return utils.isUndefined(value) ? fallback : value;\n  };\n\n  const metaTokens = option('metaTokens', true);\n  // eslint-disable-next-line no-use-before-define\n  const visitor = option('visitor') || defaultVisitor;\n  const dots = option('dots', false);\n  const indexes = option('indexes', false);\n  const _Blob = option('Blob') || (typeof Blob !== 'undefined' && Blob);\n  const maxDepth = option('maxDepth', DEFAULT_FORM_DATA_MAX_DEPTH);\n  const useBlob = _Blob && utils.isSpecCompliantForm(formData);\n  const stack = [];\n\n  if (!utils.isFunction(visitor)) {\n    throw new TypeError('visitor must be a function');\n  }\n\n  function convertValue(value) {\n    if (value === null) return '';\n\n    if (utils.isDate(value)) {\n      return value.toISOString();\n    }\n\n    if (utils.isBoolean(value)) {\n      return value.toString();\n    }\n\n    if (!useBlob && utils.isBlob(value)) {\n      throw new AxiosError('Blob is not supported. Use a Buffer instead.');\n    }\n\n    if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n      if (useBlob && typeof _Blob === 'function') {\n        return new _Blob([value]);\n      }\n      if (PlatformBuffer && PlatformBuffer.isBufferAvailable()) {\n        return PlatformBuffer.from(value);\n      }\n      throw new AxiosError(\n        'Blob is not supported. Use a Buffer instead.',\n        AxiosError.ERR_NOT_SUPPORT\n      );\n    }\n\n    return value;\n  }\n\n  function throwIfMaxDepthExceeded(depth) {\n    if (depth > maxDepth) {\n      throw new AxiosError(\n        'Object is too deeply nested (' + depth + ' levels). Max depth: ' + maxDepth,\n        AxiosError.ERR_FORM_DATA_DEPTH_EXCEEDED\n      );\n    }\n  }\n\n  function stringifyWithDepthLimit(value, depth) {\n    if (maxDepth === Infinity) {\n      return JSON.stringify(value);\n    }\n\n    const ancestors = [];\n\n    return JSON.stringify(value, function limitDepth(_key, currentValue) {\n      if (!utils.isObject(currentValue)) {\n        return currentValue;\n      }\n\n      while (ancestors.length && ancestors[ancestors.length - 1] !== this) {\n        ancestors.pop();\n      }\n\n      ancestors.push(currentValue);\n      throwIfMaxDepthExceeded(depth + ancestors.length - 1);\n\n      return currentValue;\n    });\n  }\n\n  /**\n   * Default visitor.\n   *\n   * @param {*} value\n   * @param {String|Number} key\n   * @param {Array<String|Number>} path\n   * @this {FormData}\n   *\n   * @returns {boolean} return true to visit the each prop of the value recursively\n   */\n  function defaultVisitor(value, key, path) {\n    let arr = value;\n\n    if (utils.isReactNative(formData) && utils.isReactNativeBlob(value)) {\n      formData.append(renderKey(path, key, dots), convertValue(value));\n      return false;\n    }\n\n    if (value && !path && typeof value === 'object') {\n      if (utils.endsWith(key, '{}')) {\n        // eslint-disable-next-line no-param-reassign\n        key = metaTokens ? key : key.slice(0, -2);\n        // eslint-disable-next-line no-param-reassign\n        value = stringifyWithDepthLimit(value, 1);\n      } else if (\n        (utils.isArray(value) && isFlatArray(value)) ||\n        ((utils.isFileList(value) || utils.endsWith(key, '[]')) && (arr = utils.toArray(value)))\n      ) {\n        // eslint-disable-next-line no-param-reassign\n        key = removeBrackets(key);\n\n        arr.forEach(function each(el, index) {\n          !(utils.isUndefined(el) || el === null) &&\n            formData.append(\n              // eslint-disable-next-line no-nested-ternary\n              indexes === true\n                ? renderKey([key], index, dots)\n                : indexes === null\n                  ? key\n                  : key + '[]',\n              convertValue(el)\n            );\n        });\n        return false;\n      }\n    }\n\n    if (isVisitable(value)) {\n      return true;\n    }\n\n    formData.append(renderKey(path, key, dots), convertValue(value));\n\n    return false;\n  }\n\n  const exposedHelpers = Object.assign(predicates, {\n    defaultVisitor,\n    convertValue,\n    isVisitable,\n  });\n\n  function build(value, path, depth = 0) {\n    if (utils.isUndefined(value)) return;\n\n    throwIfMaxDepthExceeded(depth);\n\n    if (stack.indexOf(value) !== -1) {\n      throw new Error('Circular reference detected in ' + path.join('.'));\n    }\n\n    stack.push(value);\n\n    utils.forEach(value, function each(el, key) {\n      const result =\n        !(utils.isUndefined(el) || el === null) &&\n        visitor.call(formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers);\n\n      if (result === true) {\n        build(el, path ? path.concat(key) : [key], depth + 1);\n      }\n    });\n\n    stack.pop();\n  }\n\n  if (!utils.isObject(obj)) {\n    throw new TypeError('data must be an object');\n  }\n\n  build(obj);\n\n  return formData;\n}\n\nexport default toFormData;\n", "'use strict';\n\nimport toFormData from './toFormData.js';\n\n/**\n * It encodes a string by replacing all characters that are not in the unreserved set with\n * their percent-encoded equivalents\n *\n * @param {string} str - The string to encode.\n *\n * @returns {string} The encoded string.\n */\nfunction encode(str) {\n  const charMap = {\n    '!': '%21',\n    \"'\": '%27',\n    '(': '%28',\n    ')': '%29',\n    '~': '%7E',\n    '%20': '+',\n  };\n  return encodeURIComponent(str).replace(/[!'()~]|%20/g, function replacer(match) {\n    return charMap[match];\n  });\n}\n\n/**\n * It takes a params object and converts it to a FormData object\n *\n * @param {Object<string, any>} params - The parameters to be converted to a FormData object.\n * @param {Object<string, any>} options - The options object passed to the Axios constructor.\n *\n * @returns {void}\n */\nfunction AxiosURLSearchParams(params, options) {\n  this._pairs = [];\n\n  params && toFormData(params, this, options);\n}\n\nconst prototype = AxiosURLSearchParams.prototype;\n\nprototype.append = function append(name, value) {\n  this._pairs.push([name, value]);\n};\n\nprototype.toString = function toString(encoder) {\n  const _encode = encoder\n    ? (value) => encoder.call(this, value, encode)\n    : encode;\n\n  return this._pairs\n    .map(function each(pair) {\n      return _encode(pair[0]) + '=' + _encode(pair[1]);\n    }, '')\n    .join('&');\n};\n\nexport default AxiosURLSearchParams;\n", "'use strict';\n\nimport utils from '../utils.js';\nimport AxiosURLSearchParams from './AxiosURLSearchParams.js';\n\n/**\n * It replaces URL-encoded forms of `:`, `$`, `,`, and spaces with\n * their plain counterparts (`:`, `$`, `,`, `+`).\n *\n * @param {string} val The value to be encoded.\n *\n * @returns {string} The encoded value.\n */\nexport function encode(val) {\n  return encodeURIComponent(val)\n    .replace(/%3A/gi, ':')\n    .replace(/%24/g, '$')\n    .replace(/%2C/gi, ',')\n    .replace(/%20/g, '+');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @param {?(object|Function)} options\n *\n * @returns {string} The formatted url\n */\nexport default function buildURL(url, params, options) {\n  if (!params) {\n    return url;\n  }\n  url = url || '';\n\n  const _options = utils.isFunction(options)\n    ? {\n        serialize: options,\n      }\n    : options;\n\n  // Read serializer options pollution-safely: own properties and methods on a\n  // class/template prototype are honored, but values injected onto a polluted\n  // Object.prototype are ignored.\n  const _encode = utils.getSafeProp(_options, 'encode') || encode;\n  const serializeFn = utils.getSafeProp(_options, 'serialize');\n\n  let serializedParams;\n\n  if (serializeFn) {\n    serializedParams = serializeFn(params, _options);\n  } else {\n    serializedParams = utils.isURLSearchParams(params)\n      ? params.toString()\n      : new AxiosURLSearchParams(params, _options).toString(_encode);\n  }\n\n  if (serializedParams) {\n    const hashmarkIndex = url.indexOf('#');\n\n    if (hashmarkIndex !== -1) {\n      url = url.slice(0, hashmarkIndex);\n    }\n    url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n  }\n\n  return url;\n}\n", "'use strict';\n\nimport utils from '../utils.js';\n\nconst $internals = Symbol('internals');\n\n// `handlers` is public and may be replaced with a nullish value by user code;\n// `clear()` has always tolerated that. Treat it as an empty stack rather than\n// dereferencing it.\nfunction countHandlers(handlers) {\n  return handlers ? handlers.length : 0;\n}\n\nfunction trimHandlers(handlers) {\n  if (!handlers) {\n    return;\n  }\n\n  while (handlers.length && handlers[handlers.length - 1] === null) {\n    handlers.pop();\n  }\n}\n\nfunction syncHandlerEntries(manager, internals) {\n  const handlers = manager.handlers;\n  const length = countHandlers(handlers);\n\n  if (handlers !== internals.handlersRef) {\n    internals.handlersRef = handlers;\n    internals.handlerEntries.clear();\n  } else if (length !== internals.handlersLength) {\n    if (!length) {\n      internals.handlerEntries.clear();\n    } else {\n      internals.handlerEntries.forEach(function removeStaleEntry(entry, id) {\n        if (handlers[entry.index] !== entry.handler) {\n          internals.handlerEntries.delete(id);\n        }\n      });\n    }\n  }\n\n  internals.handlersLength = length;\n}\n\nclass InterceptorManager {\n  constructor() {\n    this.handlers = [];\n    this[$internals] = {\n      handlersRef: this.handlers,\n      handlersLength: this.handlers.length,\n      handlerEntries: new Map(),\n      iterationDepth: 0,\n      nextId: 0,\n    };\n  }\n\n  /**\n   * Add a new interceptor to the stack\n   *\n   * @param {Function} fulfilled The function to handle `then` for a `Promise`\n   * @param {Function} rejected The function to handle `reject` for a `Promise`\n   * @param {Object} options The options for the interceptor, synchronous and runWhen\n   *\n   * @return {Number} An ID used to remove interceptor later\n   */\n  use(fulfilled, rejected, options) {\n    const handler = {\n      fulfilled,\n      rejected,\n      synchronous: options ? options.synchronous : false,\n      runWhen: options ? options.runWhen : null,\n    };\n    const internals = this[$internals];\n\n    if (this.handlers == null) {\n      this.handlers = [];\n    }\n\n    syncHandlerEntries(this, internals);\n\n    const id = internals.nextId++;\n\n    this.handlers.push(handler);\n    internals.handlerEntries.set(id, {\n      handler,\n      index: this.handlers.length - 1,\n    });\n    internals.handlersLength = this.handlers.length;\n\n    return id;\n  }\n\n  /**\n   * Remove an interceptor from the stack\n   *\n   * @param {Number} id The ID that was returned by `use`\n   *\n   * @returns {void}\n   */\n  eject(id) {\n    const internals = this[$internals];\n\n    syncHandlerEntries(this, internals);\n\n    const entry = internals.handlerEntries.get(id);\n\n    if (entry) {\n      internals.handlerEntries.delete(id);\n\n      // Ignore IDs invalidated by clear or direct replacement of handlers.\n      if (this.handlers[entry.index] !== entry.handler) {\n        return;\n      }\n\n      this.handlers[entry.index] = null;\n\n      // Do not reuse an index while forEach is walking its length snapshot.\n      if (!internals.iterationDepth) {\n        trimHandlers(this.handlers);\n        internals.handlersLength = this.handlers.length;\n      }\n    }\n  }\n\n  /**\n   * Clear all interceptors from the stack\n   *\n   * @returns {void}\n   */\n  clear() {\n    if (this.handlers) {\n      this.handlers = [];\n      syncHandlerEntries(this, this[$internals]);\n    }\n  }\n\n  /**\n   * Iterate over all the registered interceptors\n   *\n   * This method is particularly useful for skipping over any\n   * interceptors that may have become `null` calling `eject`.\n   *\n   * @param {Function} fn The function to call for each interceptor\n   *\n   * @returns {void}\n   */\n  forEach(fn) {\n    const internals = this[$internals];\n\n    syncHandlerEntries(this, internals);\n\n    internals.iterationDepth++;\n\n    try {\n      utils.forEach(this.handlers, function forEachHandler(h) {\n        if (h !== null) {\n          fn(h);\n        }\n      });\n    } finally {\n      if (!--internals.iterationDepth) {\n        syncHandlerEntries(this, internals);\n        trimHandlers(this.handlers);\n        internals.handlersLength = countHandlers(this.handlers);\n      }\n    }\n  }\n}\n\nexport default InterceptorManager;\n", "'use strict';\n\nexport default {\n  silentJSONParsing: true,\n  forcedJSONParsing: true,\n  clarifyTimeoutError: false,\n  legacyInterceptorReqResOrdering: true,\n  advertiseZstdAcceptEncoding: false,\n  validateStatusUndefinedResolves: true,\n};\n", "'use strict';\n\nimport AxiosURLSearchParams from '../../../helpers/AxiosURLSearchParams.js';\nexport default typeof URLSearchParams !== 'undefined' ? URLSearchParams : AxiosURLSearchParams;\n", "'use strict';\n\nexport default typeof FormData !== 'undefined' ? FormData : null;\n", "'use strict';\n\nexport default typeof Blob !== 'undefined' ? Blob : null;\n", "import URLSearchParams from './classes/URLSearchParams.js';\nimport FormData from './classes/FormData.js';\nimport Blob from './classes/Blob.js';\n\nexport default {\n  isBrowser: true,\n  classes: {\n    URLSearchParams,\n    FormData,\n    Blob,\n  },\n  protocols: ['http', 'https', 'file', 'blob', 'url', 'data'],\n};\n", "const hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined';\n\nconst _navigator = (typeof navigator === 'object' && navigator) || undefined;\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n *  typeof window -> undefined\n *  typeof document -> undefined\n *\n * react-native:\n *  navigator.product -> 'ReactNative'\n * nativescript\n *  navigator.product -> 'NativeScript' or 'NS'\n *\n * @returns {boolean}\n */\nconst hasStandardBrowserEnv =\n  hasBrowserEnv &&\n  (!_navigator || ['ReactNative', 'NativeScript', 'NS'].indexOf(_navigator.product) < 0);\n\n/**\n * Determine if we're running in a standard browser webWorker environment\n *\n * Although the `isStandardBrowserEnv` method indicates that\n * `allows axios to run in a web worker`, the WebWorker will still be\n * filtered out due to its judgment standard\n * `typeof window !== 'undefined' && typeof document !== 'undefined'`.\n * This leads to a problem when axios post `FormData` in webWorker\n */\nconst hasStandardBrowserWebWorkerEnv = (() => {\n  return (\n    typeof WorkerGlobalScope !== 'undefined' &&\n    // eslint-disable-next-line no-undef\n    self instanceof WorkerGlobalScope &&\n    typeof self.importScripts === 'function'\n  );\n})();\n\nconst origin = (hasBrowserEnv && window.location.href) || 'http://localhost';\n\nexport {\n  hasBrowserEnv,\n  hasStandardBrowserWebWorkerEnv,\n  hasStandardBrowserEnv,\n  _navigator as navigator,\n  origin,\n};\n", "import platform from './node/index.js';\nimport * as utils from './common/utils.js';\n\nexport default {\n  ...utils,\n  ...platform,\n};\n", "'use strict';\n\nimport utils from '../utils.js';\nimport toFormData from './toFormData.js';\nimport platform from '../platform/index.js';\n\nexport default function toURLEncodedForm(data, options) {\n  return toFormData(data, new platform.classes.URLSearchParams(), {\n    visitor: function (value, key, path, helpers) {\n      if (platform.isNode && utils.isBuffer(value)) {\n        this.append(key, value.toString('base64'));\n        return false;\n      }\n\n      return helpers.defaultVisitor.apply(this, arguments);\n    },\n    ...options,\n  });\n}\n", "'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\nimport { DEFAULT_FORM_DATA_MAX_DEPTH } from './toFormData.js';\n\nconst MAX_DEPTH = DEFAULT_FORM_DATA_MAX_DEPTH;\n\nfunction throwIfDepthExceeded(index) {\n  if (index > MAX_DEPTH) {\n    throw new AxiosError(\n      'FormData field is too deeply nested (' + index + ' levels). Max depth: ' + MAX_DEPTH,\n      AxiosError.ERR_FORM_DATA_DEPTH_EXCEEDED\n    );\n  }\n}\n\n/**\n * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']\n *\n * @param {string} name - The name of the property to get.\n *\n * @returns An array of strings.\n */\nfunction parsePropPath(name) {\n  // foo[x][y][z] -> ['foo', 'x', 'y', 'z']\n  // foo.x.y.z    -> ['foo', 'x', 'y', 'z']\n  // A path is split on `.` and on `[...]` groups. A segment \u2014 whether written\n  // in dot notation or captured inside brackets \u2014 may contain any character\n  // except `.`, `[` and `]`, so a key like `user-name` or `user name` is kept\n  // literal instead of being split (#5402). `.`, `[` and `]` keep their existing\n  // meaning, e.g. `foo[bar.baz]` -> ['foo', 'bar', 'baz'] and `[]` is an array push.\n  // Excluding `[` from the bracket group also makes the match fail fast at the\n  // next `[`, so a malformed name cannot rescan to the end of the string from\n  // every unmatched `[` \u2014 parsing stays linear in the length of the name.\n  const path = [];\n  const pattern = /[^.[\\]]+|\\[([^.[\\]]*)]/g;\n  let match;\n\n  while ((match = pattern.exec(name)) !== null) {\n    throwIfDepthExceeded(path.length);\n    path.push(match[0] === '[]' ? '' : match[1] || match[0]);\n  }\n\n  return path;\n}\n\n/**\n * Convert an array to an object.\n *\n * @param {Array<any>} arr - The array to convert to an object.\n *\n * @returns An object with the same keys and values as the array.\n */\nfunction arrayToObject(arr) {\n  const obj = {};\n  const keys = Object.keys(arr);\n  let i;\n  const len = keys.length;\n  let key;\n  for (i = 0; i < len; i++) {\n    key = keys[i];\n    obj[key] = arr[key];\n  }\n  return obj;\n}\n\n/**\n * It takes a FormData object and returns a JavaScript object\n *\n * @param {string} formData The FormData object to convert to JSON.\n *\n * @returns {Object<string, any> | null} The converted object.\n */\nfunction formDataToJSON(formData) {\n  function buildPath(path, value, target, index) {\n    throwIfDepthExceeded(index);\n\n    let name = path[index++];\n\n    if (name === '__proto__') return true;\n\n    const isNumericKey = Number.isFinite(+name);\n    const isLast = index >= path.length;\n    name = !name && utils.isArray(target) ? target.length : name;\n\n    if (isLast) {\n      if (utils.hasOwnProp(target, name)) {\n        target[name] = utils.isArray(target[name])\n          ? target[name].concat(value)\n          : [target[name], value];\n      } else {\n        target[name] = value;\n      }\n\n      return !isNumericKey;\n    }\n\n    if (!utils.hasOwnProp(target, name) || !utils.isObject(target[name])) {\n      target[name] = [];\n    }\n\n    const result = buildPath(path, value, target[name], index);\n\n    if (result && utils.isArray(target[name])) {\n      target[name] = arrayToObject(target[name]);\n    }\n\n    return !isNumericKey;\n  }\n\n  if (utils.isFormData(formData) && utils.isFunction(formData.entries)) {\n    const obj = {};\n\n    utils.forEachEntry(formData, (name, value) => {\n      buildPath(parsePropPath(name), value, obj, 0);\n    });\n\n    return obj;\n  }\n\n  return null;\n}\n\nexport default formDataToJSON;\n", "'use strict';\n\nconst methodList = Object.freeze([\n  'get',\n  'delete',\n  'head',\n  'options',\n  'post',\n  'put',\n  'patch',\n  'purge',\n  'link',\n  'unlink',\n  'query',\n]);\n\nexport default methodList;\n", "'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\nimport transitionalDefaults from './transitional.js';\nimport toFormData from '../helpers/toFormData.js';\nimport toURLEncodedForm from '../helpers/toURLEncodedForm.js';\nimport platform from '../platform/index.js';\nimport formDataToJSON from '../helpers/formDataToJSON.js';\nimport methodList from '../core/methodList.js';\n\nconst own = (obj, key) => (obj != null && utils.hasOwnProp(obj, key) ? obj[key] : undefined);\n\n/**\n * It takes a string, tries to parse it, and if it fails, it returns the stringified version\n * of the input\n *\n * @param {any} rawValue - The value to be stringified.\n * @param {Function} parser - A function that parses a string into a JavaScript object.\n * @param {Function} encoder - A function that takes a value and returns a string.\n *\n * @returns {string} A stringified version of the rawValue.\n */\nfunction stringifySafely(rawValue, parser, encoder) {\n  if (utils.isString(rawValue)) {\n    try {\n      (parser || JSON.parse)(rawValue);\n      return utils.trim(rawValue);\n    } catch (e) {\n      if (e.name !== 'SyntaxError') {\n        throw e;\n      }\n    }\n  }\n\n  return (encoder || JSON.stringify)(rawValue);\n}\n\nconst defaults = {\n  transitional: transitionalDefaults,\n\n  adapter: ['xhr', 'http', 'fetch'],\n\n  transformRequest: [\n    function transformRequest(data, headers) {\n      const contentType = headers.getContentType() || '';\n      const hasJSONContentType = contentType.indexOf('application/json') > -1;\n      const isObjectPayload = utils.isObject(data);\n\n      if (isObjectPayload && utils.isHTMLForm(data)) {\n        data = new FormData(data);\n      }\n\n      const isFormData = utils.isFormData(data);\n\n      if (isFormData) {\n        return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data;\n      }\n\n      if (\n        utils.isArrayBuffer(data) ||\n        utils.isBuffer(data) ||\n        utils.isStream(data) ||\n        utils.isFile(data) ||\n        utils.isBlob(data) ||\n        utils.isReadableStream(data)\n      ) {\n        return data;\n      }\n      if (utils.isArrayBufferView(data)) {\n        return data.buffer;\n      }\n      if (utils.isURLSearchParams(data)) {\n        headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false);\n        return data.toString();\n      }\n\n      let isFileList;\n\n      if (isObjectPayload) {\n        const formSerializer = own(this, 'formSerializer');\n        if (contentType.indexOf('application/x-www-form-urlencoded') > -1) {\n          return toURLEncodedForm(data, formSerializer).toString();\n        }\n\n        if (\n          (isFileList = utils.isFileList(data)) ||\n          contentType.indexOf('multipart/form-data') > -1\n        ) {\n          const env = own(this, 'env');\n          const _FormData = env && env.FormData;\n\n          return toFormData(\n            isFileList ? { 'files[]': data } : data,\n            _FormData && new _FormData(),\n            formSerializer\n          );\n        }\n      }\n\n      if (isObjectPayload || hasJSONContentType) {\n        headers.setContentType('application/json', false);\n        return stringifySafely(data);\n      }\n\n      return data;\n    },\n  ],\n\n  transformResponse: [\n    function transformResponse(data) {\n      const transitional = own(this, 'transitional') || defaults.transitional;\n      const forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n      const responseType = own(this, 'responseType');\n      const JSONRequested = responseType === 'json';\n\n      if (utils.isResponse(data) || utils.isReadableStream(data)) {\n        return data;\n      }\n\n      if (\n        data &&\n        utils.isString(data) &&\n        ((forcedJSONParsing && !responseType) || JSONRequested)\n      ) {\n        const silentJSONParsing = transitional && transitional.silentJSONParsing;\n        const strictJSONParsing = !silentJSONParsing && JSONRequested;\n\n        try {\n          return JSON.parse(data, own(this, 'parseReviver'));\n        } catch (e) {\n          if (strictJSONParsing) {\n            if (e.name === 'SyntaxError') {\n              throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, own(this, 'response'));\n            }\n            throw e;\n          }\n        }\n      }\n\n      return data;\n    },\n  ],\n\n  /**\n   * A timeout in milliseconds to abort a request. If set to 0 (default) a\n   * timeout is not created.\n   */\n  timeout: 0,\n\n  xsrfCookieName: 'XSRF-TOKEN',\n  xsrfHeaderName: 'X-XSRF-TOKEN',\n\n  maxContentLength: -1,\n  maxBodyLength: -1,\n\n  env: {\n    FormData: platform.classes.FormData,\n    Blob: platform.classes.Blob,\n  },\n\n  validateStatus: function validateStatus(status) {\n    return status >= 200 && status < 300;\n  },\n\n  headers: {\n    common: {\n      Accept: 'application/json, text/plain, */*',\n      'Content-Type': undefined,\n    },\n  },\n};\n\nutils.forEach(methodList, (method) => {\n  defaults.headers[method] = {};\n});\n\nexport default defaults;\n", "'use strict';\n\nimport utils from '../utils.js';\nimport defaults from '../defaults/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Array|Function} fns A single function or Array of functions\n * @param {?Object} response The response object\n *\n * @returns {*} The resulting transformed data\n */\nexport default function transformData(fns, response) {\n  const config = this || defaults;\n  const context = response || config;\n  const headers = AxiosHeaders.from(context.headers);\n  let data = context.data;\n\n  utils.forEach(fns, function transform(fn) {\n    data = fn.call(config, data, headers.normalize(), response ? response.status : undefined);\n  });\n\n  headers.normalize();\n\n  return data;\n}\n", "'use strict';\n\nexport default function isCancel(value) {\n  return !!(value && value.__CANCEL__);\n}\n", "'use strict';\n\nimport AxiosError from '../core/AxiosError.js';\n\nclass CanceledError extends AxiosError {\n  /**\n   * A `CanceledError` is an object that is thrown when an operation is canceled.\n   *\n   * @param {string=} message The message.\n   * @param {Object=} config The config.\n   * @param {Object=} request The request.\n   *\n   * @returns {CanceledError} The created error.\n   */\n  constructor(message, config, request) {\n    super(message == null ? 'canceled' : message, AxiosError.ERR_CANCELED, config, request);\n    this.name = 'CanceledError';\n    this.__CANCEL__ = true;\n  }\n}\n\nexport default CanceledError;\n", "'use strict';\n\nimport AxiosError from './AxiosError.js';\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n *\n * @returns {object} The response.\n */\nexport default function settle(resolve, reject, response) {\n  const validateStatus = response.config.validateStatus;\n  if (!response.status || !validateStatus || validateStatus(response.status)) {\n    resolve(response);\n  } else {\n    reject(new AxiosError(\n      'Request failed with status code ' + response.status,\n      response.status >= 400 && response.status < 500 ? AxiosError.ERR_BAD_REQUEST : AxiosError.ERR_BAD_RESPONSE,\n      response.config,\n      response.request,\n      response\n    ));\n  }\n}\n", "'use strict';\n\nconst urlParserControlCharacters = /[\\t\\n\\r]/g;\n\n/**\n * Match WHATWG URL preprocessing before checking a URL's protocol.\n *\n * @param {string} url\n *\n * @returns {string}\n */\nexport default function normalizeURLForProtocolCheck(url) {\n  if (typeof url !== 'string') {\n    return url;\n  }\n\n  let start = 0;\n\n  while (start < url.length && url.charCodeAt(start) <= 0x20) {\n    start++;\n  }\n\n  return url.slice(start).replace(urlParserControlCharacters, '');\n}\n", "'use strict';\n\nexport default function parseProtocol(url) {\n  const match = /^([-+\\w]{1,25}):(?:\\/\\/)?/.exec(url);\n  return (match && match[1]) || '';\n}\n", "'use strict';\n\n/**\n * Calculate data maxRate\n * @param {Number} [samplesCount= 10]\n * @param {Number} [min= 1000]\n * @returns {Function}\n */\nfunction speedometer(samplesCount, min) {\n  samplesCount = samplesCount || 10;\n  const bytes = new Array(samplesCount);\n  const timestamps = new Array(samplesCount);\n  let head = 0;\n  let tail = 0;\n  let firstSampleTS;\n\n  min = min !== undefined ? min : 1000;\n\n  return function push(chunkLength) {\n    const now = Date.now();\n\n    const startedAt = timestamps[tail];\n\n    if (!firstSampleTS) {\n      firstSampleTS = now;\n    }\n\n    bytes[head] = chunkLength;\n    timestamps[head] = now;\n\n    let i = tail;\n    let bytesCount = 0;\n\n    while (i !== head) {\n      bytesCount += bytes[i++];\n      i = i % samplesCount;\n    }\n\n    head = (head + 1) % samplesCount;\n\n    if (head === tail) {\n      tail = (tail + 1) % samplesCount;\n    }\n\n    if (now - firstSampleTS < min) {\n      return;\n    }\n\n    const passed = startedAt && now - startedAt;\n\n    return passed ? Math.round((bytesCount * 1000) / passed) : undefined;\n  };\n}\n\nexport default speedometer;\n", "/**\n * Throttle decorator\n * @param {Function} fn\n * @param {Number} freq\n * @return {Array<Function>}\n */\nfunction throttle(fn, freq) {\n  let timestamp = 0;\n  let threshold = 1000 / freq;\n  let lastArgs;\n  let timer;\n\n  const invoke = (args, now = Date.now()) => {\n    timestamp = now;\n    lastArgs = null;\n    if (timer) {\n      clearTimeout(timer);\n      timer = null;\n    }\n    fn(...args);\n  };\n\n  const throttled = (...args) => {\n    const now = Date.now();\n    const passed = now - timestamp;\n    if (passed >= threshold) {\n      invoke(args, now);\n    } else {\n      lastArgs = args;\n      if (!timer) {\n        timer = setTimeout(() => {\n          timer = null;\n          invoke(lastArgs);\n        }, threshold - passed);\n      }\n    }\n  };\n\n  const flush = () => lastArgs && invoke(lastArgs);\n  const flushWith = (...args) => invoke(args);\n\n  return [throttled, flush, flushWith];\n}\n\nexport default throttle;\n", "import speedometer from './speedometer.js';\nimport throttle from './throttle.js';\nimport utils from '../utils.js';\n\nexport const progressEventReducer = (listener, isDownloadStream, freq = 3) => {\n  let bytesNotified = 0;\n  const _speedometer = speedometer(50, 250);\n\n  return throttle((e) => {\n    if (!e || !utils.isNumber(e.loaded)) {\n      return;\n    }\n    const rawLoaded = e.loaded;\n    const total = e.lengthComputable ? e.total : undefined;\n    const loaded = Math.max(0, total != null ? Math.min(rawLoaded, total) : rawLoaded);\n    const progressBytes = Math.max(0, loaded - bytesNotified);\n    const rate = _speedometer(progressBytes);\n\n    bytesNotified = Math.max(bytesNotified, loaded);\n\n    const data = {\n      loaded,\n      total,\n      progress: total ? loaded / total : undefined,\n      bytes: progressBytes,\n      rate: rate ? rate : undefined,\n      estimated: rate && total ? (total - loaded) / rate : undefined,\n      event: e,\n      lengthComputable: total != null,\n      [isDownloadStream ? 'download' : 'upload']: true,\n    };\n\n    listener(data);\n  }, freq);\n};\n\nexport const progressEventDecorator = (total, throttled) => {\n  const lengthComputable = total != null;\n\n  return [\n    (loaded) =>\n      throttled[0]({\n        lengthComputable,\n        total,\n        loaded,\n      }),\n    throttled[1],\n  ];\n};\n\nexport const asyncDecorator =\n  (fn, scheduler = utils.asap) =>\n  (...args) =>\n    scheduler(() => fn(...args));\n", "import platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv\n  ? ((origin, isMSIE) => (url) => {\n      url = new URL(url, platform.origin);\n\n      return (\n        origin.protocol === url.protocol &&\n        origin.host === url.host &&\n        (isMSIE || origin.port === url.port)\n      );\n    })(\n      new URL(platform.origin),\n      platform.navigator && /(msie|trident)/i.test(platform.navigator.userAgent)\n    )\n  : () => true;\n", "import utils from '../utils.js';\nimport platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv\n  ? // Standard browser envs support document.cookie\n    {\n      write(name, value, expires, path, domain, secure, sameSite) {\n        if (typeof document === 'undefined') return;\n\n        const cookie = [`${name}=${encodeURIComponent(value)}`];\n\n        if (utils.isNumber(expires)) {\n          cookie.push(`expires=${new Date(expires).toUTCString()}`);\n        }\n        if (utils.isString(path)) {\n          cookie.push(`path=${path}`);\n        }\n        if (utils.isString(domain)) {\n          cookie.push(`domain=${domain}`);\n        }\n        if (secure === true) {\n          cookie.push('secure');\n        }\n        if (utils.isString(sameSite)) {\n          cookie.push(`SameSite=${sameSite}`);\n        }\n\n        document.cookie = cookie.join('; ');\n      },\n\n      read(name) {\n        if (typeof document === 'undefined') return null;\n        // Match name=value by splitting on the semicolon separator instead of building a\n        // RegExp from `name` \u2014 interpolating an unescaped string into a RegExp would let\n        // metacharacters (e.g. `.+?` in an attacker-influenced cookie name) cause ReDoS or\n        // match the wrong cookie. Browsers may serialize cookie pairs as either \";\" or\n        // \"; \", so ignore optional whitespace before each cookie name.\n        const cookies = document.cookie.split(';');\n        for (let i = 0; i < cookies.length; i++) {\n          const cookie = cookies[i].replace(/^\\s+/, '');\n          const eq = cookie.indexOf('=');\n          if (eq !== -1 && cookie.slice(0, eq) === name) {\n            try {\n              return decodeURIComponent(cookie.slice(eq + 1));\n            } catch (e) {\n              return cookie.slice(eq + 1);\n            }\n          }\n        }\n        return null;\n      },\n\n      remove(name) {\n        this.write(name, '', Date.now() - 86400000, '/');\n      },\n    }\n  : // Non-standard browser env (web workers, react-native) lack needed support.\n    {\n      write() {},\n      read() {\n        return null;\n      },\n      remove() {},\n    };\n", "'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n *\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nexport default function isAbsoluteURL(url) {\n  // A URL is considered absolute if it begins with \"<scheme>://\" or \"//\" (protocol-relative URL).\n  // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n  // by any combination of letters, digits, plus, period, or hyphen.\n  if (typeof url !== 'string') {\n    return false;\n  }\n\n  return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n}\n", "'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n *\n * @returns {string} The combined URL\n */\nexport default function combineURLs(baseURL, relativeURL) {\n  if (!relativeURL) {\n    return baseURL;\n  }\n\n  let end = baseURL.length;\n\n  while (end > 0 && baseURL.charCodeAt(end - 1) === 47) {\n    end--;\n  }\n\n  return baseURL.slice(0, end) + '/' + relativeURL.replace(/^\\/+/, '');\n}\n", "'use strict';\n\nimport AxiosError, { REDACTED } from './AxiosError.js';\nimport isAbsoluteURL from '../helpers/isAbsoluteURL.js';\nimport combineURLs from '../helpers/combineURLs.js';\nimport normalizeURLForProtocolCheck from '../helpers/normalizeURLForProtocolCheck.js';\n\nconst malformedHttpProtocol = /^https?:(?!\\/\\/)/i;\n\n// Redact the parts of a URL that can carry secrets before it is embedded in an\n// error message. AxiosError.toJSON() serializes `message` verbatim and errors\n// are commonly logged, while the opt-in `config.redact` model only cleans\n// config keys \u2014 it cannot reach the message. Redact only the genuinely\n// sensitive substrings \u2014 userinfo (credentials), query parameter values and\n// fragment contents \u2014 with the same REDACTED marker the config redaction uses,\n// while keeping the scheme, host, path and parameter names so the offending\n// request stays accurately identifiable.\nfunction redactFragment(fragment) {\n  if (!fragment) {\n    return fragment;\n  }\n\n  return fragment.replace(/(^|&)([^=&]*=)?[^&]+/g, (match, separator, parameterName = '') => {\n    return `${separator}${parameterName}${REDACTED}`;\n  });\n}\n\nfunction redactSensitiveURLParts(url) {\n  const redactedURL = url.replace(/^(https?:\\/{0,2})[^/?#]*@/i, `$1${REDACTED}@`);\n  const fragmentIndex = redactedURL.indexOf('#');\n  const urlWithoutFragment =\n    fragmentIndex === -1 ? redactedURL : redactedURL.slice(0, fragmentIndex);\n  const redactedURLWithoutFragment = urlWithoutFragment.replace(\n    /([?&][^=&#]*=)[^&#]*/g,\n    `$1${REDACTED}`\n  );\n\n  if (fragmentIndex === -1) {\n    return redactedURLWithoutFragment;\n  }\n\n  return `${redactedURLWithoutFragment}#${redactFragment(redactedURL.slice(fragmentIndex + 1))}`;\n}\n\nfunction assertValidHttpProtocolURL(url, config) {\n  if (typeof url === 'string') {\n    const normalizedURL = normalizeURLForProtocolCheck(url);\n    if (malformedHttpProtocol.test(normalizedURL)) {\n      throw new AxiosError(\n        `Invalid URL ${JSON.stringify(redactSensitiveURLParts(normalizedURL))}: missing \"//\" after protocol`,\n        AxiosError.ERR_INVALID_URL,\n        config\n      );\n    }\n  }\n}\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n *\n * @returns {string} The combined full path\n */\nexport default function buildFullPath(baseURL, requestedURL, allowAbsoluteUrls, config) {\n  assertValidHttpProtocolURL(requestedURL, config);\n  let isRelativeUrl = !isAbsoluteURL(requestedURL);\n  if (baseURL && (isRelativeUrl || allowAbsoluteUrls === false)) {\n    assertValidHttpProtocolURL(baseURL, config);\n    return combineURLs(baseURL, requestedURL);\n  }\n  return requestedURL;\n}\n", "'use strict';\n\nimport utils from '../utils.js';\nimport AxiosHeaders from './AxiosHeaders.js';\n\nconst headersToObject = (thing) => (thing instanceof AxiosHeaders ? { ...thing } : thing);\n\nconst ownEnumerableKeys = (thing) => {\n  if (Object.getOwnPropertySymbols && Object.getOwnPropertyDescriptor) {\n    return Object.keys(thing).concat(\n      Object.getOwnPropertySymbols(thing).filter(\n        (symbol) => Object.getOwnPropertyDescriptor(thing, symbol).enumerable\n      )\n    );\n  }\n  return Object.keys(thing);\n};\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n *\n * @returns {Object} New object resulting from merging config2 to config1\n */\nexport default function mergeConfig(config1, config2) {\n  // eslint-disable-next-line no-param-reassign\n  config1 = config1 || {};\n  config2 = config2 || {};\n\n  // Use a null-prototype object so that downstream reads such as `config.auth`\n  // or `config.baseURL` cannot inherit polluted values from Object.prototype.\n  // `hasOwnProperty` is restored as a non-enumerable own slot to preserve\n  // ergonomics for user code that relies on it.\n  const config = Object.create(null);\n  Object.defineProperty(config, 'hasOwnProperty', {\n    // Null-proto descriptor so a polluted Object.prototype.get cannot turn\n    // this data descriptor into an accessor descriptor on the way in.\n    __proto__: null,\n    value: Object.prototype.hasOwnProperty,\n    enumerable: false,\n    writable: true,\n    configurable: true,\n  });\n\n  function getMergedValue(target, source, prop, caseless) {\n    if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n      return utils.merge.call({ caseless }, target, source);\n    } else if (utils.isPlainObject(source)) {\n      return utils.merge({}, source);\n    } else if (utils.isArray(source)) {\n      return source.slice();\n    }\n    return source;\n  }\n\n  function mergeDeepProperties(a, b, prop, caseless) {\n    if (!utils.isUndefined(b)) {\n      return getMergedValue(a, b, prop, caseless);\n    } else if (!utils.isUndefined(a)) {\n      return getMergedValue(undefined, a, prop, caseless);\n    }\n  }\n\n  // eslint-disable-next-line consistent-return\n  function valueFromConfig2(a, b) {\n    if (!utils.isUndefined(b)) {\n      return getMergedValue(undefined, b);\n    }\n  }\n\n  // eslint-disable-next-line consistent-return\n  function defaultToConfig2(a, b) {\n    if (!utils.isUndefined(b)) {\n      return getMergedValue(undefined, b);\n    } else if (!utils.isUndefined(a)) {\n      return getMergedValue(undefined, a);\n    }\n  }\n\n  function getMergedTransitionalOption(prop) {\n    const transitional2 = utils.hasOwnProp(config2, 'transitional')\n      ? config2.transitional\n      : undefined;\n\n    if (!utils.isUndefined(transitional2)) {\n      if (utils.isPlainObject(transitional2)) {\n        if (utils.hasOwnProp(transitional2, prop)) {\n          return transitional2[prop];\n        }\n      } else {\n        return undefined;\n      }\n    }\n\n    const transitional1 = utils.hasOwnProp(config1, 'transitional')\n      ? config1.transitional\n      : undefined;\n\n    if (utils.isPlainObject(transitional1) && utils.hasOwnProp(transitional1, prop)) {\n      return transitional1[prop];\n    }\n\n    return undefined;\n  }\n\n  // eslint-disable-next-line consistent-return\n  function mergeDirectKeys(a, b, prop) {\n    if (utils.hasOwnProp(config2, prop)) {\n      return getMergedValue(a, b);\n    } else if (utils.hasOwnProp(config1, prop)) {\n      return getMergedValue(undefined, a);\n    }\n  }\n\n  const mergeMap = {\n    url: valueFromConfig2,\n    method: valueFromConfig2,\n    data: valueFromConfig2,\n    baseURL: defaultToConfig2,\n    transformRequest: defaultToConfig2,\n    transformResponse: defaultToConfig2,\n    paramsSerializer: defaultToConfig2,\n    timeout: defaultToConfig2,\n    timeoutErrorMessage: defaultToConfig2,\n    withCredentials: defaultToConfig2,\n    withXSRFToken: defaultToConfig2,\n    adapter: defaultToConfig2,\n    responseType: defaultToConfig2,\n    xsrfCookieName: defaultToConfig2,\n    xsrfHeaderName: defaultToConfig2,\n    onUploadProgress: defaultToConfig2,\n    onDownloadProgress: defaultToConfig2,\n    decompress: defaultToConfig2,\n    maxContentLength: defaultToConfig2,\n    maxBodyLength: defaultToConfig2,\n    beforeRedirect: defaultToConfig2,\n    transport: defaultToConfig2,\n    httpAgent: defaultToConfig2,\n    httpsAgent: defaultToConfig2,\n    cancelToken: defaultToConfig2,\n    socketPath: defaultToConfig2,\n    allowedSocketPaths: defaultToConfig2,\n    responseEncoding: defaultToConfig2,\n    validateStatus: mergeDirectKeys,\n    headers: (a, b, prop) =>\n      mergeDeepProperties(headersToObject(a), headersToObject(b), prop, true),\n  };\n\n  utils.forEach(ownEnumerableKeys({ ...config1, ...config2 }), function computeConfigValue(prop) {\n    if (prop === '__proto__' || prop === 'constructor' || prop === 'prototype') return;\n    const merge = utils.hasOwnProp(mergeMap, prop) ? mergeMap[prop] : mergeDeepProperties;\n    const a = utils.hasOwnProp(config1, prop) ? config1[prop] : undefined;\n    const b = utils.hasOwnProp(config2, prop) ? config2[prop] : undefined;\n    const configValue = merge(a, b, prop);\n    (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n  });\n\n  if (\n    utils.hasOwnProp(config2, 'validateStatus') &&\n    utils.isUndefined(config2.validateStatus) &&\n    getMergedTransitionalOption('validateStatusUndefinedResolves') === false\n  ) {\n    if (utils.hasOwnProp(config1, 'validateStatus')) {\n      config.validateStatus = getMergedValue(undefined, config1.validateStatus);\n    } else {\n      delete config.validateStatus;\n    }\n  }\n\n  return config;\n}\n", "'use strict';\n\nconst FORM_DATA_CONTENT_HEADERS = ['content-type', 'content-length'];\n\n/**\n * Apply the headers generated by a FormData implementation to the request headers,\n * honoring the `formDataHeaderPolicy` option: with 'content-only', copy only the\n * content-* headers; otherwise merge all of them.\n *\n * @param {AxiosHeaders} headers - the request headers to mutate\n * @param {Object | null | undefined} formHeaders - headers produced by the FormData implementation\n * @param {String} [policy] - the resolved `formDataHeaderPolicy` config value\n *\n * @returns {void}\n */\nexport default function setFormDataHeaders(headers, formHeaders, policy) {\n  if (policy !== 'content-only') {\n    headers.set(formHeaders);\n    return;\n  }\n\n  Object.entries(formHeaders || {}).forEach(([key, val]) => {\n    if (FORM_DATA_CONTENT_HEADERS.includes(key.toLowerCase())) {\n      headers.set(key, val);\n    }\n  });\n}\n", "import platform from '../platform/index.js';\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\nimport isURLSameOrigin from './isURLSameOrigin.js';\nimport cookies from './cookies.js';\nimport buildFullPath from '../core/buildFullPath.js';\nimport mergeConfig from '../core/mergeConfig.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport setFormDataHeaders from '../core/setFormDataHeaders.js';\nimport buildURL from './buildURL.js';\n\n/**\n * Encode a UTF-8 string to a Latin-1 byte string for use with btoa().\n * This is a modern replacement for the deprecated unescape(encodeURIComponent(str)) pattern.\n *\n * @param {string} str The string to encode\n *\n * @returns {string} UTF-8 bytes as a Latin-1 string\n */\nconst encodeUTF8 = (str) =>\n  encodeURIComponent(str).replace(/%([0-9A-F]{2})/gi, (_, hex) =>\n    String.fromCharCode(parseInt(hex, 16))\n  );\n\nfunction resolveConfig(config) {\n  const newConfig = mergeConfig({}, config);\n\n  // Read only own properties to prevent prototype pollution gadgets\n  // (e.g. Object.prototype.baseURL = 'https://evil.com').\n  const own = (key) => (utils.hasOwnProp(newConfig, key) ? newConfig[key] : undefined);\n\n  const data = own('data');\n  let withXSRFToken = own('withXSRFToken');\n  const xsrfHeaderName = own('xsrfHeaderName');\n  const xsrfCookieName = own('xsrfCookieName');\n  let headers = own('headers');\n  const auth = own('auth');\n  const baseURL = own('baseURL');\n  const allowAbsoluteUrls = own('allowAbsoluteUrls');\n  const url = own('url');\n\n  newConfig.headers = headers = AxiosHeaders.from(headers);\n\n  newConfig.url = buildURL(\n    buildFullPath(baseURL, url, allowAbsoluteUrls, newConfig),\n    own('params'),\n    own('paramsSerializer')\n  );\n\n  // HTTP basic authentication\n  if (auth) {\n    const username = utils.getSafeProp(auth, 'username') || '';\n    const password = utils.getSafeProp(auth, 'password') || '';\n\n    try {\n      headers.set(\n        'Authorization',\n        'Basic ' + btoa(username + ':' + (password ? encodeUTF8(password) : ''))\n      );\n    } catch (e) {\n      throw AxiosError.from(e, AxiosError.ERR_BAD_OPTION_VALUE, config);\n    }\n  }\n\n  if (utils.isFormData(data)) {\n    const getHeaders = utils.getSafeProp(data, 'getHeaders');\n\n    if (\n      platform.hasStandardBrowserEnv ||\n      platform.hasStandardBrowserWebWorkerEnv ||\n      utils.isReactNative(data)\n    ) {\n      headers.setContentType(undefined); // browser/web worker/RN handles it\n    } else if (utils.isFunction(getHeaders)) {\n      // Node.js FormData (like form-data package)\n      setFormDataHeaders(headers, getHeaders.call(data), own('formDataHeaderPolicy'));\n    }\n  }\n\n  // Add xsrf header\n  // This is only done if running in a standard browser environment.\n  // Specifically not if we're in a web worker, or react-native.\n\n  if (platform.hasStandardBrowserEnv) {\n    if (utils.isFunction(withXSRFToken)) {\n      withXSRFToken = withXSRFToken(newConfig);\n    }\n\n    // Strict boolean check \u2014 prevents proto-pollution gadgets (e.g. Object.prototype.withXSRFToken = 1)\n    // and misconfigurations (e.g. \"false\") from short-circuiting the same-origin check and leaking\n    // the XSRF token cross-origin.\n    const shouldSendXSRF =\n      withXSRFToken === true || (withXSRFToken == null && isURLSameOrigin(newConfig.url));\n\n    if (shouldSendXSRF) {\n      const xsrfValue = xsrfHeaderName && xsrfCookieName && cookies.read(xsrfCookieName);\n\n      if (xsrfValue) {\n        headers.set(xsrfHeaderName, xsrfValue);\n      }\n    }\n  }\n\n  return newConfig;\n}\n\nexport default resolveConfig;\n", "import utils from '../utils.js';\nimport settle from '../core/settle.js';\nimport transitionalDefaults from '../defaults/transitional.js';\nimport AxiosError from '../core/AxiosError.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport normalizeURLForProtocolCheck from '../helpers/normalizeURLForProtocolCheck.js';\nimport parseProtocol from '../helpers/parseProtocol.js';\nimport platform from '../platform/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport { progressEventReducer } from '../helpers/progressEventReducer.js';\nimport resolveConfig from '../helpers/resolveConfig.js';\nimport { toByteStringHeaderObject } from '../helpers/sanitizeHeaderValue.js';\n\nconst isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';\n\nexport default isXHRAdapterSupported &&\n  function (config) {\n    return new Promise(function dispatchXhrRequest(resolve, reject) {\n      const _config = resolveConfig(config);\n      let requestData = _config.data;\n      const requestHeaders = AxiosHeaders.from(_config.headers).normalize();\n      let { responseType, onUploadProgress, onDownloadProgress } = _config;\n      let onCanceled;\n      let uploadThrottled, downloadThrottled;\n      let flushUpload, flushDownload, flushDownloadWithEvent;\n\n      function done() {\n        flushUpload && flushUpload(); // flush events\n        flushDownload && flushDownload(); // flush events\n\n        _config.cancelToken && _config.cancelToken.unsubscribe(onCanceled);\n\n        _config.signal && _config.signal.removeEventListener('abort', onCanceled);\n      }\n\n      let request = new XMLHttpRequest();\n\n      request.open(_config.method.toUpperCase(), _config.url, true);\n\n      // Set the request timeout in MS\n      request.timeout = _config.timeout;\n\n      function onloadend(event) {\n        if (!request) {\n          return;\n        }\n\n        // Status 0 means no response was received, which onerror and onabort normally\n        // reject before this runs. Firefox 152 fires only readystatechange and loadend for\n        // navigation-canceled requests (https://bugzilla.mozilla.org/show_bug.cgi?id=1505389),\n        // leaving settle() to resolve them as an empty success. ECONNABORTED is the error\n        // onabort raised on Firefox 151. Reads over file:, which some environments report as\n        // status 0 on success, are excluded by the request URL's scheme after browser-style\n        // preprocessing, by the page origin's scheme for relative URLs (which inherit it), or\n        // by responseURL where implemented.\n        if (\n          request.status === 0 &&\n          (parseProtocol(normalizeURLForProtocolCheck(_config.url)) ||\n            parseProtocol(platform.origin)) !== 'file' &&\n          !(request.responseURL && request.responseURL.startsWith('file:'))\n        ) {\n          reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));\n          done();\n\n          // Clean up request\n          request = null;\n          return;\n        }\n\n        // When loadend is still dispatching, flushing with it gives progress\n        // listeners a final delivery whose event has a live target. The legacy\n        // ready-state fallback has no event, so replay its pending progress.\n        // A throwing listener must not block settlement; rethrow asynchronously,\n        // matching how listener errors surface on the throttle timer path.\n        try {\n          if (event) {\n            flushDownloadWithEvent && flushDownloadWithEvent(event);\n          } else {\n            flushDownload && flushDownload();\n          }\n        } catch (err) {\n          setTimeout(() => {\n            throw err;\n          });\n        }\n\n        // A final progress callback can cancel the request synchronously.\n        if (!request) {\n          return;\n        }\n\n        // Prepare the response\n        const responseHeaders = AxiosHeaders.from(\n          'getAllResponseHeaders' in request && request.getAllResponseHeaders()\n        );\n        const responseData =\n          !responseType || responseType === 'text' || responseType === 'json'\n            ? request.responseText\n            : request.response;\n        const response = {\n          data: responseData,\n          status: request.status,\n          statusText: request.statusText,\n          headers: responseHeaders,\n          config,\n          request,\n        };\n\n        settle(\n          function _resolve(value) {\n            resolve(value);\n            done();\n          },\n          function _reject(err) {\n            reject(err);\n            done();\n          },\n          response\n        );\n\n        // Clean up request\n        request = null;\n      }\n\n      if ('onloadend' in request) {\n        // Use onloadend if available\n        request.onloadend = onloadend;\n      } else {\n        // Listen for ready state to emulate onloadend\n        request.onreadystatechange = function handleLoad() {\n          if (!request || request.readyState !== 4) {\n            return;\n          }\n\n          // The request errored out and we didn't get a response, this will be\n          // handled by onerror instead\n          // With one exception: request that using file: protocol, most browsers\n          // will return status as 0 even though it's a successful request\n          if (\n            request.status === 0 &&\n            !(request.responseURL && request.responseURL.startsWith('file:'))\n          ) {\n            return;\n          }\n          // readystate handler is calling before onerror or ontimeout handlers,\n          // so we should call onloadend on the next 'tick'\n          setTimeout(onloadend);\n        };\n      }\n\n      // Handle browser request cancellation (as opposed to a manual cancellation)\n      request.onabort = function handleAbort() {\n        if (!request) {\n          return;\n        }\n\n        reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));\n        done();\n\n        // Clean up request\n        request = null;\n      };\n\n      // Handle low level network errors\n      request.onerror = function handleError(event) {\n        // Browsers deliver a ProgressEvent in XHR onerror\n        // (message may be empty; when present, surface it)\n        // See https://developer.mozilla.org/docs/Web/API/XMLHttpRequest/error_event\n        const msg = event && event.message ? event.message : 'Network Error';\n        const err = new AxiosError(msg, AxiosError.ERR_NETWORK, config, request);\n        // attach the underlying event for consumers who want details\n        err.event = event || null;\n        reject(err);\n        done();\n        request = null;\n      };\n\n      // Handle timeout\n      request.ontimeout = function handleTimeout() {\n        let timeoutErrorMessage = _config.timeout\n          ? 'timeout of ' + _config.timeout + 'ms exceeded'\n          : 'timeout exceeded';\n        const transitional = _config.transitional || transitionalDefaults;\n        if (_config.timeoutErrorMessage) {\n          timeoutErrorMessage = _config.timeoutErrorMessage;\n        }\n        reject(\n          new AxiosError(\n            timeoutErrorMessage,\n            transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n            config,\n            request\n          )\n        );\n        done();\n\n        // Clean up request\n        request = null;\n      };\n\n      // Remove Content-Type if data is undefined\n      requestData === undefined && requestHeaders.setContentType(null);\n\n      // Add headers to the request\n      if ('setRequestHeader' in request) {\n        utils.forEach(toByteStringHeaderObject(requestHeaders), function setRequestHeader(val, key) {\n          request.setRequestHeader(key, val);\n        });\n      }\n\n      // Add withCredentials to request if needed\n      if (!utils.isUndefined(_config.withCredentials)) {\n        request.withCredentials = !!_config.withCredentials;\n      }\n\n      // Add responseType to request if needed\n      if (responseType && responseType !== 'json') {\n        request.responseType = _config.responseType;\n      }\n\n      // Handle progress if needed\n      if (onDownloadProgress) {\n        [downloadThrottled, flushDownload, flushDownloadWithEvent] = progressEventReducer(\n          onDownloadProgress,\n          true\n        );\n        request.addEventListener('progress', downloadThrottled);\n      }\n\n      // Not all browsers support upload events\n      if (onUploadProgress && request.upload) {\n        [uploadThrottled, flushUpload] = progressEventReducer(onUploadProgress);\n\n        request.upload.addEventListener('progress', uploadThrottled);\n\n        request.upload.addEventListener('loadend', flushUpload);\n      }\n\n      if (_config.cancelToken || _config.signal) {\n        // Handle cancellation\n        // eslint-disable-next-line func-names\n        onCanceled = (cancel) => {\n          if (!request) {\n            return;\n          }\n          reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel);\n          request.abort();\n          done();\n          request = null;\n        };\n\n        _config.cancelToken && _config.cancelToken.subscribe(onCanceled);\n        if (_config.signal) {\n          _config.signal.aborted\n            ? onCanceled()\n            : _config.signal.addEventListener('abort', onCanceled);\n        }\n      }\n\n      const protocol = parseProtocol(_config.url);\n\n      if (protocol && !platform.protocols.includes(protocol)) {\n        reject(\n          new AxiosError(\n            'Unsupported protocol ' + protocol + ':',\n            AxiosError.ERR_BAD_REQUEST,\n            config\n          )\n        );\n        done();\n        return;\n      }\n\n      // Send the request\n      request.send(requestData || null);\n    });\n  };\n", "import CanceledError from '../cancel/CanceledError.js';\nimport AxiosError from '../core/AxiosError.js';\nimport utils from '../utils.js';\n\nconst composeSignals = (signals, timeout) => {\n  signals = signals ? signals.filter(Boolean) : [];\n\n  if (!timeout && !signals.length) {\n    return;\n  }\n\n  const controller = new AbortController();\n\n  let aborted = false;\n\n  const onabort = function (reason) {\n    if (!aborted) {\n      aborted = true;\n      unsubscribe();\n      const err = reason instanceof Error ? reason : this.reason;\n      controller.abort(\n        err instanceof AxiosError\n          ? err\n          : new CanceledError(err instanceof Error ? err.message : err)\n      );\n    }\n  };\n\n  let timer =\n    timeout &&\n    setTimeout(() => {\n      timer = null;\n      onabort(new AxiosError(`timeout of ${timeout}ms exceeded`, AxiosError.ETIMEDOUT));\n    }, timeout);\n\n  const unsubscribe = () => {\n    if (!signals) { return; }\n    timer && clearTimeout(timer);\n    timer = null;\n    signals.forEach((signal) => {\n      signal.unsubscribe\n        ? signal.unsubscribe(onabort)\n        : signal.removeEventListener('abort', onabort);\n    });\n    signals = null;\n  };\n\n  signals.forEach((signal) => {\n    if (aborted) {\n      return;\n    }\n\n    if (signal.aborted) {\n      onabort.call(signal);\n      return;\n    }\n\n    signal.addEventListener('abort', onabort, { once: true });\n  });\n\n  const { signal } = controller;\n\n  signal.unsubscribe = () => utils.asap(unsubscribe);\n\n  return signal;\n};\n\nexport default composeSignals;\n", "export const streamChunk = function* (chunk, chunkSize) {\n  let len = chunk.byteLength;\n\n  if (!chunkSize || len < chunkSize) {\n    yield chunk;\n    return;\n  }\n\n  let pos = 0;\n  let end;\n\n  while (pos < len) {\n    end = pos + chunkSize;\n    yield chunk.slice(pos, end);\n    pos = end;\n  }\n};\n\nexport const readBytes = async function* (iterable, chunkSize) {\n  for await (const chunk of readStream(iterable)) {\n    yield* streamChunk(chunk, chunkSize);\n  }\n};\n\nconst readStream = async function* (stream) {\n  if (stream[Symbol.asyncIterator]) {\n    yield* stream;\n    return;\n  }\n\n  const reader = stream.getReader();\n  try {\n    for (;;) {\n      const { done, value } = await reader.read();\n      if (done) {\n        break;\n      }\n      yield value;\n    }\n  } finally {\n    await reader.cancel();\n  }\n};\n\nexport const trackStream = (stream, chunkSize, onProgress, onFinish) => {\n  const iterator = readBytes(stream, chunkSize);\n\n  let bytes = 0;\n  let done;\n  let _onFinish = (e) => {\n    if (!done) {\n      done = true;\n      onFinish && onFinish(e);\n    }\n  };\n\n  return new ReadableStream(\n    {\n      async pull(controller) {\n        try {\n          const { done, value } = await iterator.next();\n\n          if (done) {\n            _onFinish();\n            controller.close();\n            return;\n          }\n\n          let len = value.byteLength;\n          if (onProgress) {\n            let loadedBytes = (bytes += len);\n            onProgress(loadedBytes);\n          }\n          controller.enqueue(new Uint8Array(value));\n        } catch (err) {\n          _onFinish(err);\n          throw err;\n        }\n      },\n      cancel(reason) {\n        _onFinish(reason);\n        return iterator.return();\n      },\n    },\n    {\n      highWaterMark: 2,\n    }\n  );\n};\n", "/**\n * Estimate data: URL byte lengths *without* allocating large buffers.\n * - Fetch percent-decodes a base64 body before decoding it.\n * - Node's Buffer.from(body, 'base64') sizes its backing allocation from the\n *   raw body, including ignored characters and content after padding.\n * - Non-base64 data is percent-decoded and then encoded as UTF-8.\n */\nconst isHexDigit = (charCode) =>\n  (charCode >= 48 && charCode <= 57) ||\n  (charCode >= 65 && charCode <= 70) ||\n  (charCode >= 97 && charCode <= 102);\n\nconst isPercentEncodedByte = (str, i, len) =>\n  i + 2 < len && isHexDigit(str.charCodeAt(i + 1)) && isHexDigit(str.charCodeAt(i + 2));\n\nconst hexValue = (charCode) => (charCode <= 57 ? charCode - 48 : (charCode & 0xdf) - 55);\n\nconst isBase64Char = (charCode) =>\n  (charCode >= 65 && charCode <= 90) || // A-Z\n  (charCode >= 97 && charCode <= 122) || // a-z\n  (charCode >= 48 && charCode <= 57) || // 0-9\n  charCode === 43 || // +\n  charCode === 47 || // /\n  charCode === 45 || // - (base64url)\n  charCode === 95; // _ (base64url)\n\nconst isBase64Whitespace = (charCode) =>\n  charCode === 9 || charCode === 10 || charCode === 12 || charCode === 13 || charCode === 32;\n\nconst base64Bytes = (significant) => {\n  const groups = Math.floor(significant / 4);\n  const remainder = significant % 4;\n  return groups * 3 + (remainder === 2 ? 1 : remainder === 3 ? 2 : 0);\n};\n\n// Buffer.byteLength(body, 'base64') uses the raw string length as an allocation\n// upper bound even when Buffer.from later ignores characters or stops at '='.\nconst estimateBase64BufferAllocation = (body) => {\n  const len = body.length;\n  let padding = 0;\n\n  if (len > 0 && body.charCodeAt(len - 1) === 61 /* '=' */) {\n    padding++;\n\n    if (len > 1 && body.charCodeAt(len - 2) === 61 /* '=' */) {\n      padding++;\n    }\n  }\n\n  return Math.floor(((len - padding) * 3) / 4);\n};\n\nconst estimatePercentDecodedBase64Bytes = (body) => {\n  const len = body.length;\n  let significant = 0;\n  let padding = 0;\n  let invalid = false;\n\n  for (let i = 0; i < len; i++) {\n    let code = body.charCodeAt(i);\n\n    if (code === 37 /* '%' */ && isPercentEncodedByte(body, i, len)) {\n      code = hexValue(body.charCodeAt(i + 1)) * 16 + hexValue(body.charCodeAt(i + 2));\n      i += 2;\n    }\n\n    if (isBase64Whitespace(code)) {\n      continue;\n    }\n\n    if (code === 61 /* '=' */) {\n      padding++;\n      continue;\n    }\n\n    if (!isBase64Char(code) || padding > 0) {\n      invalid = true;\n      continue;\n    }\n\n    significant++;\n  }\n\n  // Fetch rejects malformed forgiving-base64 input. Returning the raw-size\n  // allocation bound keeps that invalid input from becoming a pre-check bypass.\n  if (\n    invalid ||\n    padding > 2 ||\n    (padding > 0 && (significant + padding) % 4 !== 0) ||\n    significant % 4 === 1\n  ) {\n    return estimateBase64BufferAllocation(body);\n  }\n\n  return base64Bytes(significant);\n};\n\nconst estimateDataURLBytes = (url, estimateBase64) => {\n  if (!url || typeof url !== 'string') return 0;\n  if (!url.startsWith('data:')) return 0;\n\n  const comma = url.indexOf(',');\n  if (comma < 0) return 0;\n\n  const meta = url.slice(5, comma);\n  const body = url.slice(comma + 1);\n  const isBase64 = /;base64/i.test(meta);\n\n  if (isBase64) {\n    return estimateBase64(body);\n  }\n\n  // Compute UTF-8 byte length directly from UTF-16 code units without allocating\n  // a byte buffer (TextEncoder.encode would defeat the DoS guard on large bodies).\n  // Valid %XX triplets count as one decoded byte; this matches the bytes that\n  // decodeURIComponent(body) would produce before Buffer re-encodes the string.\n  let bytes = 0;\n  for (let i = 0, len = body.length; i < len; i++) {\n    const c = body.charCodeAt(i);\n    if (c === 37 /* '%' */ && isPercentEncodedByte(body, i, len)) {\n      bytes += 1;\n      i += 2;\n    } else if (c < 0x80) {\n      bytes += 1;\n    } else if (c < 0x800) {\n      bytes += 2;\n    } else if (c >= 0xd800 && c <= 0xdbff && i + 1 < len) {\n      const next = body.charCodeAt(i + 1);\n      if (next >= 0xdc00 && next <= 0xdfff) {\n        bytes += 4;\n        i++;\n      } else {\n        bytes += 3;\n      }\n    } else {\n      bytes += 3;\n    }\n  }\n  return bytes;\n};\n\n/**\n * Estimate the percent-decoded payload size used by Fetch data: URLs.\n *\n * @param {string} url\n * @returns {number}\n */\nexport default function estimateDataURLDecodedBytes(url) {\n  // Fetch removes URL fragments before processing a data: URL.\n  const fragmentIndex = typeof url === 'string' ? url.indexOf('#') : -1;\n\n  return estimateDataURLBytes(\n    fragmentIndex === -1 ? url : url.slice(0, fragmentIndex),\n    estimatePercentDecodedBase64Bytes\n  );\n}\n\n/**\n * Estimate the Buffer backing allocation used by Node's raw base64 decoder.\n *\n * @param {string} url\n * @returns {number}\n */\nexport function estimateDataURLBufferAllocation(url) {\n  return estimateDataURLBytes(url, estimateBase64BufferAllocation);\n}\n", "export const VERSION = \"1.20.0\";", "import platform from '../platform/index.js';\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\nimport composeSignals from '../helpers/composeSignals.js';\nimport { trackStream } from '../helpers/trackStream.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport {\n  progressEventReducer,\n  progressEventDecorator,\n  asyncDecorator,\n} from '../helpers/progressEventReducer.js';\nimport resolveConfig from '../helpers/resolveConfig.js';\nimport settle from '../core/settle.js';\nimport estimateDataURLDecodedBytes from '../helpers/estimateDataURLDecodedBytes.js';\nimport { VERSION } from '../env/data.js';\nimport { toByteStringHeaderObject } from '../helpers/sanitizeHeaderValue.js';\n\nconst DEFAULT_CHUNK_SIZE = 64 * 1024;\n\nconst DEFAULT_REQUEST_OPTIONS = {\n  cache: 'default',\n  redirect: 'follow',\n  referrer: 'about:client',\n  referrerPolicy: '',\n  mode: 'cors',\n  integrity: '',\n  keepalive: false,\n  priority: 'auto',\n  window: null,\n};\n\nconst { isFunction } = utils;\n\n/**\n * Encode a UTF-8 string to a Latin-1 byte string for use with btoa().\n * This is a modern replacement for the deprecated unescape(encodeURIComponent(str)) pattern.\n *\n * @param {string} str The string to encode\n *\n * @returns {string} UTF-8 bytes as a Latin-1 string\n */\nconst encodeUTF8 = (str) =>\n  encodeURIComponent(str).replace(/%([0-9A-F]{2})/gi, (_, hex) =>\n    String.fromCharCode(parseInt(hex, 16))\n  );\n\n// Node's WHATWG URL parser returns `username` and `password` percent-encoded.\n// Decode before composing the `auth` option so credentials such as\n// `my%40email.com:pass` are sent as `my@email.com:pass`. Falls back to the\n// original value for malformed input so a bad encoding never throws.\nconst decodeURIComponentSafe = (value) => {\n  if (!utils.isString(value)) {\n    return value;\n  }\n\n  try {\n    return decodeURIComponent(value);\n  } catch (error) {\n    return value;\n  }\n};\n\nconst test = (fn, ...args) => {\n  try {\n    return !!fn(...args);\n  } catch (e) {\n    return false;\n  }\n};\n\nconst maybeWithAuthCredentials = (url) => {\n  const protocolIndex = url.indexOf('://');\n  let urlToCheck = url;\n  if (protocolIndex !== -1) {\n    urlToCheck = urlToCheck.slice(protocolIndex + 3);\n  }\n  return urlToCheck.includes('@') || urlToCheck.includes(':');\n};\n\nconst factory = (env) => {\n  const globalObject =\n    utils.global !== undefined && utils.global !== null ? utils.global : globalThis;\n  const { ReadableStream, TextEncoder } = globalObject;\n\n  env = utils.merge.call(\n    {\n      skipUndefined: true,\n    },\n    {\n      Request: globalObject.Request,\n      Response: globalObject.Response,\n    },\n    env\n  );\n\n  const { fetch: envFetch, Request, Response } = env;\n  const isFetchSupported = envFetch ? isFunction(envFetch) : typeof fetch === 'function';\n  const isRequestSupported = isFunction(Request);\n  const isResponseSupported = isFunction(Response);\n\n  if (!isFetchSupported) {\n    return false;\n  }\n\n  const isReadableStreamSupported = isFetchSupported && isFunction(ReadableStream);\n\n  const encodeText =\n    isFetchSupported &&\n    (typeof TextEncoder === 'function'\n      ? (\n          (encoder) => (str) =>\n            encoder.encode(str)\n        )(new TextEncoder())\n      : async (str) => new Uint8Array(await new Request(str).arrayBuffer()));\n\n  const supportsRequestStream =\n    isRequestSupported &&\n    isReadableStreamSupported &&\n    test(() => {\n      let duplexAccessed = false;\n\n      const request = new Request(platform.origin, {\n        body: new ReadableStream(),\n        method: 'POST',\n        get duplex() {\n          duplexAccessed = true;\n          return 'half';\n        },\n      });\n\n      const hasContentType = request.headers.has('Content-Type');\n\n      if (request.body != null) {\n        request.body.cancel();\n      }\n\n      return duplexAccessed && !hasContentType;\n    });\n\n  const supportsResponseStream =\n    isResponseSupported &&\n    isReadableStreamSupported &&\n    test(() => utils.isReadableStream(new Response('').body));\n\n  const resolvers = {\n    stream: supportsResponseStream && ((res) => res.body),\n  };\n\n  isFetchSupported &&\n    (() => {\n      ['text', 'arrayBuffer', 'blob', 'formData', 'stream'].forEach((type) => {\n        !resolvers[type] &&\n          (resolvers[type] = (res, config) => {\n            let method = res && res[type];\n\n            if (method) {\n              return method.call(res);\n            }\n\n            throw new AxiosError(\n              `Response type '${type}' is not supported`,\n              AxiosError.ERR_NOT_SUPPORT,\n              config\n            );\n          });\n      });\n    })();\n\n  const getBodyLength = async (body) => {\n    if (body == null) {\n      return 0;\n    }\n\n    if (utils.isBlob(body)) {\n      return body.size;\n    }\n\n    if (utils.isSpecCompliantForm(body)) {\n      const _request = new Request(platform.origin, {\n        method: 'POST',\n        body,\n      });\n      return (await _request.arrayBuffer()).byteLength;\n    }\n\n    if (utils.isArrayBufferView(body) || utils.isArrayBuffer(body)) {\n      return body.byteLength;\n    }\n\n    if (utils.isURLSearchParams(body)) {\n      body = body + '';\n    }\n\n    if (utils.isString(body)) {\n      return (await encodeText(body)).byteLength;\n    }\n  };\n\n  const resolveBodyLength = async (headers, body) => {\n    const length = utils.toFiniteNumber(headers.getContentLength());\n\n    return length == null ? getBodyLength(body) : length;\n  };\n\n  return async (config) => {\n    let {\n      url,\n      method,\n      data,\n      signal,\n      cancelToken,\n      timeout,\n      onDownloadProgress,\n      onUploadProgress,\n      responseType,\n      headers,\n      withCredentials = 'same-origin',\n      fetchOptions,\n      maxContentLength,\n      maxBodyLength,\n      maxRedirects,\n    } = resolveConfig(config);\n\n    const hasMaxContentLength = utils.isNumber(maxContentLength) && maxContentLength > -1;\n    const hasMaxBodyLength = utils.isNumber(maxBodyLength) && maxBodyLength > -1;\n    const own = (key) => (utils.hasOwnProp(config, key) ? config[key] : undefined);\n\n    let _fetch = envFetch || fetch;\n\n    responseType = responseType ? (responseType + '').toLowerCase() : 'text';\n\n    let composedSignal = composeSignals(\n      [signal, cancelToken && cancelToken.toAbortSignal()],\n      timeout\n    );\n\n    let request = null;\n\n    const unsubscribe =\n      composedSignal &&\n      composedSignal.unsubscribe &&\n      (() => {\n        composedSignal.unsubscribe();\n      });\n\n    let requestContentLength;\n\n    // AxiosError we raise while the request body is being streamed. Captured\n    // by identity so the catch block can surface it directly, regardless of\n    // how the runtime wraps the resulting fetch rejection (undici exposes it\n    // as `err.cause`; some browsers drop the original error entirely).\n    let pendingBodyError = null;\n\n    const maxBodyLengthError = () =>\n      new AxiosError(\n        'Request body larger than maxBodyLength limit',\n        AxiosError.ERR_BAD_REQUEST,\n        config,\n        request\n      );\n\n    try {\n      // HTTP basic authentication\n      let auth = undefined;\n      const configAuth = own('auth');\n\n      if (configAuth) {\n        const username = utils.getSafeProp(configAuth, 'username') || '';\n        const password = utils.getSafeProp(configAuth, 'password') || '';\n        auth = {\n          username,\n          password,\n        };\n      }\n\n      if (maybeWithAuthCredentials(url)) {\n        const parsedURL = new URL(url, platform.origin);\n\n        if (!auth && (parsedURL.username || parsedURL.password)) {\n          const urlUsername = decodeURIComponentSafe(parsedURL.username);\n          const urlPassword = decodeURIComponentSafe(parsedURL.password);\n          auth = {\n            username: urlUsername,\n            password: urlPassword,\n          };\n        }\n\n        if (parsedURL.username || parsedURL.password) {\n          parsedURL.username = '';\n          parsedURL.password = '';\n          url = parsedURL.href;\n        }\n      }\n\n      if (auth) {\n        headers.delete('authorization');\n        headers.set(\n          'Authorization',\n          'Basic ' + btoa(encodeUTF8((auth.username || '') + ':' + (auth.password || '')))\n        );\n      }\n\n      // Enforce maxContentLength for data: URLs up-front so we never materialize\n      // an oversized payload. The HTTP adapter applies the same check (see http.js\n      // \"if (protocol === 'data:')\" branch).\n      if (hasMaxContentLength && typeof url === 'string' && url.startsWith('data:')) {\n        const estimated = estimateDataURLDecodedBytes(url);\n        if (estimated > maxContentLength) {\n          throw new AxiosError(\n            'maxContentLength size of ' + maxContentLength + ' exceeded',\n            AxiosError.ERR_BAD_RESPONSE,\n            config,\n            request\n          );\n        }\n      }\n\n      // Enforce maxBodyLength against known-size bodies before dispatch using\n      // the body's *actual* size \u2014 never a caller-declared Content-Length,\n      // which could under-report to slip an oversized body past the check.\n      // Unknown-size streams return undefined here and are counted per-chunk\n      // below as fetch consumes them.\n      if (hasMaxBodyLength && method !== 'get' && method !== 'head') {\n        const outboundLength = await getBodyLength(data);\n        if (typeof outboundLength === 'number' && isFinite(outboundLength)) {\n          requestContentLength = outboundLength;\n          if (outboundLength > maxBodyLength) {\n            throw maxBodyLengthError();\n          }\n        }\n      }\n\n      // A streamed body under maxBodyLength must be counted as fetch consumes\n      // it; its size is never trusted from a caller-declared Content-Length.\n      const mustEnforceStreamBody =\n        hasMaxBodyLength && (utils.isReadableStream(data) || utils.isStream(data));\n\n      const trackRequestStream = (stream, onProgress, flush) =>\n        trackStream(\n          stream,\n          DEFAULT_CHUNK_SIZE,\n          (loadedBytes) => {\n            if (hasMaxBodyLength && loadedBytes > maxBodyLength) {\n              throw (pendingBodyError = maxBodyLengthError());\n            }\n            onProgress && onProgress(loadedBytes);\n          },\n          flush\n        );\n\n      if (\n        supportsRequestStream &&\n        method !== 'get' &&\n        method !== 'head' &&\n        (onUploadProgress || mustEnforceStreamBody)\n      ) {\n        requestContentLength =\n          requestContentLength == null\n            ? await resolveBodyLength(headers, data)\n            : requestContentLength;\n\n        // A declared length of 0 is only trusted to skip the wrap when we are\n        // not enforcing a stream limit (which must not rely on that header).\n        if (requestContentLength !== 0 || mustEnforceStreamBody) {\n          let _request = new Request(url, {\n            method: 'POST',\n            body: data,\n            duplex: 'half',\n          });\n\n          let contentTypeHeader;\n\n          if (\n            utils.isFormData(data) &&\n            (contentTypeHeader = _request.headers.get('content-type'))\n          ) {\n            headers.setContentType(contentTypeHeader);\n          }\n\n          if (_request.body) {\n            const [onProgress, flush] =\n              (onUploadProgress &&\n                progressEventDecorator(\n                  requestContentLength,\n                  progressEventReducer(asyncDecorator(onUploadProgress))\n                )) ||\n              [];\n\n            data = trackRequestStream(_request.body, onProgress, flush);\n          }\n        }\n      } else if (\n        mustEnforceStreamBody &&\n        !isRequestSupported &&\n        isReadableStreamSupported &&\n        method !== 'get' &&\n        method !== 'head'\n      ) {\n        data = trackRequestStream(data);\n      } else if (\n        mustEnforceStreamBody &&\n        isRequestSupported &&\n        !supportsRequestStream &&\n        method !== 'get' &&\n        method !== 'head'\n      ) {\n        throw new AxiosError(\n          'Stream request bodies are not supported by the current fetch implementation',\n          AxiosError.ERR_NOT_SUPPORT,\n          config,\n          request\n        );\n      }\n\n      if (!utils.isString(withCredentials)) {\n        withCredentials = withCredentials ? 'include' : 'omit';\n      }\n\n      // Cloudflare Workers throws when credentials are defined\n      // see https://github.com/cloudflare/workerd/issues/902\n      const isCredentialsSupported = isRequestSupported && 'credentials' in Request.prototype;\n\n      // If data is FormData and Content-Type is multipart/form-data without boundary,\n      // delete it so fetch can set it correctly with the boundary\n      if (utils.isFormData(data)) {\n        const contentType = headers.getContentType();\n        if (\n          contentType &&\n          /^multipart\\/form-data/i.test(contentType) &&\n          !/boundary=/i.test(contentType)\n        ) {\n          headers.delete('content-type');\n        }\n      }\n\n      // Set User-Agent header if not already set (fetch defaults to 'node' in Node.js)\n      headers.set('User-Agent', 'axios/' + VERSION, false);\n\n      const safeFetchOptions =\n        fetchOptions == null ? fetchOptions : Object.assign(Object.create(null), fetchOptions);\n\n      if (safeFetchOptions) {\n        // These options are owned by Axios and are already reflected in the\n        // resolved Request passed to fetch.\n        delete safeFetchOptions.body;\n        delete safeFetchOptions.headers;\n        delete safeFetchOptions.method;\n        delete safeFetchOptions.signal;\n        delete safeFetchOptions.duplex;\n        delete safeFetchOptions.credentials;\n      }\n\n      const resolvedOptions = Object.assign(Object.create(null), safeFetchOptions, {\n        signal: composedSignal,\n        method: method.toUpperCase(),\n        headers: toByteStringHeaderObject(headers.normalize()),\n        body: data,\n        duplex: 'half',\n        credentials: isCredentialsSupported ? withCredentials : undefined,\n      });\n\n      if (isRequestSupported) {\n        utils.forEach(DEFAULT_REQUEST_OPTIONS, (value, key) => {\n          if (resolvedOptions[key] === undefined) {\n            resolvedOptions[key] = value;\n          }\n        });\n\n        if (resolvedOptions.signal === undefined) {\n          resolvedOptions.signal = null;\n        }\n\n        if (resolvedOptions.body === undefined) {\n          resolvedOptions.body = null;\n        }\n      }\n\n      if (maxRedirects === 0) {\n        resolvedOptions.redirect = 'manual';\n\n        if (safeFetchOptions) {\n          safeFetchOptions.redirect = 'manual';\n        }\n      }\n\n      request = isRequestSupported && new Request(url, resolvedOptions);\n\n      let response = await (isRequestSupported\n        ? _fetch(request, safeFetchOptions)\n        : _fetch(url, resolvedOptions));\n\n      const responseHeaders = AxiosHeaders.from(response.headers);\n\n      // Cheap pre-check: if the server honestly declares a content-length that\n      // already exceeds the cap, reject before we start streaming.\n      if (hasMaxContentLength) {\n        const declaredLength = utils.toFiniteNumber(responseHeaders.getContentLength());\n        if (declaredLength != null && declaredLength > maxContentLength) {\n          throw new AxiosError(\n            'maxContentLength size of ' + maxContentLength + ' exceeded',\n            AxiosError.ERR_BAD_RESPONSE,\n            config,\n            request\n          );\n        }\n      }\n\n      const isStreamResponse =\n        supportsResponseStream && (responseType === 'stream' || responseType === 'response');\n\n      if (\n        supportsResponseStream &&\n        response.body &&\n        (onDownloadProgress || hasMaxContentLength || (isStreamResponse && unsubscribe))\n      ) {\n        const options = {};\n\n        ['status', 'statusText', 'headers'].forEach((prop) => {\n          options[prop] = response[prop];\n        });\n\n        const responseContentLength = utils.toFiniteNumber(responseHeaders.getContentLength());\n\n        const [onProgress, flush] =\n          (onDownloadProgress &&\n            progressEventDecorator(\n              responseContentLength,\n              progressEventReducer(asyncDecorator(onDownloadProgress), true)\n            )) ||\n          [];\n\n        let bytesRead = 0;\n        const onChunkProgress = (loadedBytes) => {\n          if (hasMaxContentLength) {\n            bytesRead = loadedBytes;\n            if (bytesRead > maxContentLength) {\n              throw new AxiosError(\n                'maxContentLength size of ' + maxContentLength + ' exceeded',\n                AxiosError.ERR_BAD_RESPONSE,\n                config,\n                request\n              );\n            }\n          }\n          onProgress && onProgress(loadedBytes);\n        };\n\n        response = new Response(\n          trackStream(response.body, DEFAULT_CHUNK_SIZE, onChunkProgress, () => {\n            flush && flush();\n            unsubscribe && unsubscribe();\n          }),\n          options\n        );\n      }\n\n      responseType = responseType || 'text';\n\n      let responseData = await resolvers[utils.findKey(resolvers, responseType) || 'text'](\n        response,\n        config\n      );\n\n      // Fallback enforcement for environments without ReadableStream support\n      // (legacy runtimes). Detect materialized size from typed output; skip\n      // streams/Response passthrough since the user will read those themselves.\n      if (hasMaxContentLength && !supportsResponseStream && !isStreamResponse) {\n        let materializedSize;\n        if (responseData != null) {\n          if (typeof responseData.byteLength === 'number') {\n            materializedSize = responseData.byteLength;\n          } else if (typeof responseData.size === 'number') {\n            materializedSize = responseData.size;\n          } else if (typeof responseData === 'string') {\n            materializedSize =\n              typeof TextEncoder === 'function'\n                ? new TextEncoder().encode(responseData).byteLength\n                : responseData.length;\n          }\n        }\n        if (typeof materializedSize === 'number' && materializedSize > maxContentLength) {\n          throw new AxiosError(\n            'maxContentLength size of ' + maxContentLength + ' exceeded',\n            AxiosError.ERR_BAD_RESPONSE,\n            config,\n            request\n          );\n        }\n      }\n\n      !isStreamResponse && unsubscribe && unsubscribe();\n\n      return await new Promise((resolve, reject) => {\n        settle(resolve, reject, {\n          data: responseData,\n          headers: AxiosHeaders.from(response.headers),\n          status: response.status,\n          statusText: response.statusText,\n          config,\n          request,\n        });\n      });\n    } catch (err) {\n      unsubscribe && unsubscribe();\n\n      // Safari can surface fetch aborts as a DOMException-like object whose\n      // branded getters throw. Prefer our composed signal reason before reading\n      // the caught error, preserving timeout vs cancellation semantics.\n      if (composedSignal && composedSignal.aborted && composedSignal.reason instanceof AxiosError) {\n        const canceledError = composedSignal.reason;\n        canceledError.config = config;\n        request && (canceledError.request = request);\n        if (err !== canceledError) {\n          // Non-enumerable to match native Error `cause` semantics so loggers\n          // don't recurse into circular fetch internals (see #7205).\n          Object.defineProperty(canceledError, 'cause', {\n            __proto__: null,\n            value: err,\n            writable: true,\n            enumerable: false,\n            configurable: true,\n          });\n        }\n        throw canceledError;\n      }\n\n      // Surface a maxBodyLength violation we raised while the request body was\n      // being streamed. Matching by identity (rather than reading\n      // `err.cause.isAxiosError`) keeps the error deterministic across runtimes\n      // and avoids both prototype-pollution reads and mis-attributing a foreign\n      // AxiosError that merely happened to land in `err.cause`.\n      if (pendingBodyError) {\n        request && !pendingBodyError.request && (pendingBodyError.request = request);\n        throw pendingBodyError;\n      }\n\n      // Re-throw AxiosErrors we raised synchronously (data: URL / content-length\n      // pre-checks, response size enforcement) without re-wrapping them.\n      if (err instanceof AxiosError) {\n        request && !err.request && (err.request = request);\n        throw err;\n      }\n\n      if (err && err.name === 'TypeError' && /Load failed|fetch/i.test(err.message)) {\n        const networkError = new AxiosError(\n          'Network Error',\n          AxiosError.ERR_NETWORK,\n          config,\n          request,\n          err && err.response\n        );\n        // Non-enumerable to match native Error `cause` semantics so loggers\n        // don't recurse into circular fetch internals (see #7205).\n        Object.defineProperty(networkError, 'cause', {\n          __proto__: null,\n          value: err.cause || err,\n          writable: true,\n          enumerable: false,\n          configurable: true,\n        });\n        throw networkError;\n      }\n\n      throw AxiosError.from(err, err && err.code, config, request, err && err.response);\n    }\n  };\n};\n\nconst seedCache = new Map();\n\nexport const getFetch = (config) => {\n  let env = (config && config.env) || {};\n  const { fetch, Request, Response } = env;\n  const seeds = [Request, Response, fetch];\n\n  let len = seeds.length,\n    i = len,\n    seed,\n    target,\n    map = seedCache;\n\n  while (i--) {\n    seed = seeds[i];\n    target = map.get(seed);\n\n    target === undefined && map.set(seed, (target = i ? new Map() : factory(env)));\n\n    map = target;\n  }\n\n  return target;\n};\n\nconst adapter = getFetch();\n\nexport default adapter;\n", "import utils from '../utils.js';\nimport httpAdapter from './http.js';\nimport xhrAdapter from './xhr.js';\nimport * as fetchAdapter from './fetch.js';\nimport AxiosError from '../core/AxiosError.js';\n\n/**\n * Known adapters mapping.\n * Provides environment-specific adapters for Axios:\n * - `http` for Node.js\n * - `xhr` for browsers\n * - `fetch` for fetch API-based requests\n *\n * @type {Object<string, Function|Object>}\n */\nconst knownAdapters = {\n  http: httpAdapter,\n  xhr: xhrAdapter,\n  fetch: {\n    get: fetchAdapter.getFetch,\n  },\n};\n\n// Assign adapter names for easier debugging and identification\nutils.forEach(knownAdapters, (fn, value) => {\n  if (fn) {\n    try {\n      // Null-proto descriptors so a polluted Object.prototype.get cannot turn\n      // these data descriptors into accessor descriptors on the way in.\n      Object.defineProperty(fn, 'name', { __proto__: null, value });\n    } catch (e) {\n      // eslint-disable-next-line no-empty\n    }\n    Object.defineProperty(fn, 'adapterName', { __proto__: null, value });\n  }\n});\n\n/**\n * Render a rejection reason string for unknown or unsupported adapters\n *\n * @param {string} reason\n * @returns {string}\n */\nconst renderReason = (reason) => `- ${reason}`;\n\n/**\n * Check if the adapter is resolved (function, null, or false)\n *\n * @param {Function|null|false} adapter\n * @returns {boolean}\n */\nconst isResolvedHandle = (adapter) =>\n  utils.isFunction(adapter) || adapter === null || adapter === false;\n\n/**\n * Get the first suitable adapter from the provided list.\n * Tries each adapter in order until a supported one is found.\n * Throws an AxiosError if no adapter is suitable.\n *\n * @param {Array<string|Function>|string|Function} adapters - Adapter(s) by name or function.\n * @param {Object} config - Axios request configuration\n * @throws {AxiosError} If no suitable adapter is available\n * @returns {Function} The resolved adapter function\n */\nfunction getAdapter(adapters, config) {\n  adapters = utils.isArray(adapters) ? adapters : [adapters];\n\n  const { length } = adapters;\n  let nameOrAdapter;\n  let adapter;\n\n  const rejectedReasons = {};\n\n  for (let i = 0; i < length; i++) {\n    nameOrAdapter = adapters[i];\n    let id;\n\n    adapter = nameOrAdapter;\n\n    if (!isResolvedHandle(nameOrAdapter)) {\n      adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()];\n\n      if (adapter === undefined) {\n        throw new AxiosError(`Unknown adapter '${id}'`);\n      }\n    }\n\n    if (adapter && (utils.isFunction(adapter) || (adapter = adapter.get(config)))) {\n      break;\n    }\n\n    rejectedReasons[id || '#' + i] = adapter;\n  }\n\n  if (!adapter) {\n    const reasons = Object.entries(rejectedReasons).map(\n      ([id, state]) =>\n        `adapter ${id} ` +\n        (state === false ? 'is not supported by the environment' : 'is not available in the build')\n    );\n\n    let s = length\n      ? reasons.length > 1\n        ? 'since :\\n' + reasons.map(renderReason).join('\\n')\n        : ' ' + renderReason(reasons[0])\n      : 'as no adapter specified';\n\n    throw new AxiosError(\n      `There is no suitable adapter to dispatch the request ` + s,\n      AxiosError.ERR_NOT_SUPPORT\n    );\n  }\n\n  return adapter;\n}\n\n/**\n * Exports Axios adapters and utility to resolve an adapter\n */\nexport default {\n  /**\n   * Resolve an adapter from a list of adapter names or functions.\n   * @type {Function}\n   */\n  getAdapter,\n\n  /**\n   * Exposes all known adapters\n   * @type {Object<string, Function|Object>}\n   */\n  adapters: knownAdapters,\n};\n", "'use strict';\n\nimport transformData from './transformData.js';\nimport isCancel from '../cancel/isCancel.js';\nimport defaults from '../defaults/index.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport adapters from '../adapters/adapters.js';\nimport utils from '../utils.js';\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n *\n * @param {Object} config The config that is to be used for the request\n *\n * @returns {void}\n */\nfunction throwIfCancellationRequested(config) {\n  if (config.cancelToken) {\n    config.cancelToken.throwIfRequested();\n  }\n\n  if (config.signal && config.signal.aborted) {\n    throw new CanceledError(null, config);\n  }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n *\n * @returns {Promise} The Promise to be fulfilled\n */\nexport default function dispatchRequest(_config) {\n  // Interceptors may replace the merged config with an ordinary object. Flatten\n  // it at the dispatch boundary so shared prototype members cannot become\n  // request behavior, while preserving intentional template/class members.\n  const config = utils.toSafeFlatObject(_config);\n\n  throwIfCancellationRequested(config);\n\n  config.headers = AxiosHeaders.from(utils.getSafeProp(config, 'headers'));\n\n  // Transform request data\n  config.data = transformData.call(config, config.transformRequest);\n\n  if (['post', 'put', 'patch'].indexOf(config.method) !== -1) {\n    config.headers.setContentType('application/x-www-form-urlencoded', false);\n  }\n\n  const adapter = adapters.getAdapter(config.adapter || defaults.adapter, config);\n\n  return adapter(config).then(\n    function onAdapterResolution(response) {\n      throwIfCancellationRequested(config);\n\n      // Expose the current response on config so that transformResponse can\n      // attach it to any AxiosError it throws (e.g. on JSON parse failure).\n      // We clean it up afterwards to avoid polluting the config object.\n      config.response = response;\n      try {\n        response.data = transformData.call(config, config.transformResponse, response);\n      } finally {\n        delete config.response;\n      }\n\n      response.headers = AxiosHeaders.from(response.headers);\n\n      return response;\n    },\n    function onAdapterRejection(reason) {\n      if (!isCancel(reason)) {\n        throwIfCancellationRequested(config);\n\n        // Transform response data\n        if (reason && reason.response) {\n          config.response = reason.response;\n          try {\n            reason.response.data = transformData.call(\n              config,\n              config.transformResponse,\n              reason.response\n            );\n          } finally {\n            delete config.response;\n          }\n          reason.response.headers = AxiosHeaders.from(reason.response.headers);\n        }\n      }\n\n      return Promise.reject(reason);\n    }\n  );\n}\n", "'use strict';\n\nimport { VERSION } from '../env/data.js';\nimport AxiosError from '../core/AxiosError.js';\n\nconst validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => {\n  validators[type] = function validator(thing) {\n    return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n  };\n});\n\nconst deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n *\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n *\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n  function formatMessage(opt, desc) {\n    return (\n      '[Axios v' +\n      VERSION +\n      \"] Transitional option '\" +\n      opt +\n      \"'\" +\n      desc +\n      (message ? '. ' + message : '')\n    );\n  }\n\n  // eslint-disable-next-line func-names\n  return (value, opt, opts) => {\n    if (validator === false) {\n      throw new AxiosError(\n        formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\n        AxiosError.ERR_DEPRECATED\n      );\n    }\n\n    if (version && !deprecatedWarnings[opt]) {\n      deprecatedWarnings[opt] = true;\n      // eslint-disable-next-line no-console\n      console.warn(\n        formatMessage(\n          opt,\n          ' has been deprecated since v' + version + ' and will be removed in the near future'\n        )\n      );\n    }\n\n    return validator ? validator(value, opt, opts) : true;\n  };\n};\n\nvalidators.spelling = function spelling(correctSpelling) {\n  return (value, opt) => {\n    // eslint-disable-next-line no-console\n    console.warn(`${opt} is likely a misspelling of ${correctSpelling}`);\n    return true;\n  };\n};\n\n/**\n * Assert object's properties type\n *\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n *\n * @returns {object}\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n  if (typeof options !== 'object' || options === null) {\n    throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\n  }\n  const keys = Object.keys(options);\n  let i = keys.length;\n  while (i-- > 0) {\n    const opt = keys[i];\n    // Use hasOwnProperty so a polluted Object.prototype.<opt> cannot supply\n    // a non-function validator and cause a TypeError.\n    const validator = Object.prototype.hasOwnProperty.call(schema, opt) ? schema[opt] : undefined;\n    if (validator) {\n      const value = options[opt];\n      const result = value === undefined || validator(value, opt, options);\n      if (result !== true) {\n        throw new AxiosError(\n          'option ' + opt + ' must be ' + result,\n          AxiosError.ERR_BAD_OPTION_VALUE\n        );\n      }\n      continue;\n    }\n    if (allowUnknown !== true) {\n      throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);\n    }\n  }\n}\n\nexport default {\n  assertOptions,\n  validators,\n};\n", "'use strict';\n\nimport utils from '../utils.js';\nimport buildURL from '../helpers/buildURL.js';\nimport InterceptorManager from './InterceptorManager.js';\nimport dispatchRequest from './dispatchRequest.js';\nimport mergeConfig from './mergeConfig.js';\nimport buildFullPath from './buildFullPath.js';\nimport methodList from './methodList.js';\nimport validator from '../helpers/validator.js';\nimport AxiosHeaders from './AxiosHeaders.js';\nimport transitionalDefaults from '../defaults/transitional.js';\n\nconst validators = validator.validators;\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n *\n * @return {Axios} A new instance of Axios\n */\nclass Axios {\n  constructor(instanceConfig) {\n    this.defaults = instanceConfig || {};\n    this.interceptors = {\n      request: new InterceptorManager(),\n      response: new InterceptorManager(),\n    };\n  }\n\n  /**\n   * Dispatch a request\n   *\n   * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\n   * @param {?Object} config\n   *\n   * @returns {Promise} The Promise to be fulfilled\n   */\n  async request(configOrUrl, config) {\n    try {\n      return await this._request(configOrUrl, config);\n    } catch (err) {\n      if (err instanceof Error) {\n        try {\n          let dummy = {};\n\n          Error.captureStackTrace ? Error.captureStackTrace(dummy) : (dummy = new Error());\n\n          const dummyStack = dummy.stack;\n          let stack = '';\n\n          // slice off the Error: ... line\n          if (typeof dummyStack === 'string') {\n            const firstNewlineIndex = dummyStack.indexOf('\\n');\n\n            stack = firstNewlineIndex === -1 ? '' : dummyStack.slice(firstNewlineIndex + 1);\n          }\n\n          if (!err.stack) {\n            err.stack = stack;\n            // match without the 2 top stack lines\n          } else if (stack) {\n            const firstNewlineIndex = stack.indexOf('\\n');\n            const secondNewlineIndex =\n              firstNewlineIndex === -1 ? -1 : stack.indexOf('\\n', firstNewlineIndex + 1);\n            const stackWithoutTwoTopLines =\n              secondNewlineIndex === -1 ? '' : stack.slice(secondNewlineIndex + 1);\n\n            if (!String(err.stack).endsWith(stackWithoutTwoTopLines)) {\n              err.stack += '\\n' + stack;\n            }\n          }\n        } catch (e) {\n          // Ignore failures from custom stack hooks or un-writable stack properties.\n        }\n      }\n\n      throw err;\n    }\n  }\n\n  _request(configOrUrl, config) {\n    /*eslint no-param-reassign:0*/\n    // Allow for axios('example/url'[, config]) a la fetch API\n    if (typeof configOrUrl === 'string') {\n      config = config || {};\n      config.url = configOrUrl;\n    } else {\n      config = configOrUrl || {};\n    }\n\n    config = mergeConfig(this.defaults, config);\n\n    const { transitional, paramsSerializer, headers } = config;\n\n    if (transitional !== undefined) {\n      validator.assertOptions(\n        transitional,\n        {\n          silentJSONParsing: validators.transitional(validators.boolean),\n          forcedJSONParsing: validators.transitional(validators.boolean),\n          clarifyTimeoutError: validators.transitional(validators.boolean),\n          legacyInterceptorReqResOrdering: validators.transitional(validators.boolean),\n          advertiseZstdAcceptEncoding: validators.transitional(validators.boolean),\n          validateStatusUndefinedResolves: validators.transitional(validators.boolean),\n        },\n        false\n      );\n    }\n\n    if (paramsSerializer != null) {\n      if (utils.isFunction(paramsSerializer)) {\n        config.paramsSerializer = {\n          serialize: paramsSerializer,\n        };\n      } else {\n        validator.assertOptions(\n          paramsSerializer,\n          {\n            encode: validators.function,\n            serialize: validators.function,\n          },\n          true\n        );\n      }\n    }\n\n    // Set config.allowAbsoluteUrls\n    if (config.allowAbsoluteUrls !== undefined) {\n      // do nothing\n    } else if (this.defaults.allowAbsoluteUrls !== undefined) {\n      config.allowAbsoluteUrls = this.defaults.allowAbsoluteUrls;\n    } else {\n      config.allowAbsoluteUrls = true;\n    }\n\n    validator.assertOptions(\n      config,\n      {\n        baseUrl: validators.spelling('baseURL'),\n        withXsrfToken: validators.spelling('withXSRFToken'),\n      },\n      true\n    );\n\n    // Set config.method\n    config.method = (\n      utils.getSafeProp(config, 'method') ||\n      utils.getSafeProp(this.defaults, 'method') ||\n      'get'\n    ).toLowerCase();\n\n    // Flatten headers\n    let contextHeaders = headers && utils.merge(headers.common, headers[config.method]);\n\n    headers &&\n      utils.forEach(methodList.concat('common'), (method) => {\n        delete headers[method];\n      });\n\n    config.headers = AxiosHeaders.concat(contextHeaders, headers);\n\n    // filter out skipped interceptors\n    const requestInterceptorChain = [];\n    let synchronousRequestInterceptors = true;\n    this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n      if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n        return;\n      }\n\n      synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n      const transitional = config.transitional || transitionalDefaults;\n      const legacyInterceptorReqResOrdering =\n        transitional && transitional.legacyInterceptorReqResOrdering;\n\n      if (legacyInterceptorReqResOrdering) {\n        requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n      } else {\n        requestInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n      }\n    });\n\n    const responseInterceptorChain = [];\n    this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n      responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n    });\n\n    let promise;\n    let i = 0;\n    let len;\n\n    if (!synchronousRequestInterceptors) {\n      const chain = [dispatchRequest.bind(this), undefined];\n      chain.unshift(...requestInterceptorChain);\n      chain.push(...responseInterceptorChain);\n      len = chain.length;\n\n      promise = Promise.resolve(config);\n\n      while (i < len) {\n        promise = promise.then(chain[i++], chain[i++]);\n      }\n\n      return promise;\n    }\n\n    len = requestInterceptorChain.length;\n\n    let newConfig = config;\n\n    while (i < len) {\n      const onFulfilled = requestInterceptorChain[i++];\n      const onRejected = requestInterceptorChain[i++];\n      try {\n        newConfig = onFulfilled ? onFulfilled(newConfig) : newConfig;\n      } catch (error) {\n        if (!onRejected) {\n          promise = Promise.reject(error);\n          break;\n        }\n\n        try {\n          const rejectedResult = onRejected.call(this, error);\n\n          if (utils.isThenable(rejectedResult)) {\n            promise = Promise.resolve(rejectedResult).then(() =>\n              dispatchRequest.call(this, newConfig)\n            );\n          }\n        } catch (rejectedError) {\n          promise = Promise.reject(rejectedError);\n        }\n\n        break;\n      }\n    }\n\n    if (!promise) {\n      try {\n        promise = dispatchRequest.call(this, newConfig);\n      } catch (error) {\n        promise = Promise.reject(error);\n      }\n    }\n\n    i = 0;\n    len = responseInterceptorChain.length;\n\n    while (i < len) {\n      promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);\n    }\n\n    return promise;\n  }\n\n  getUri(config) {\n    config = mergeConfig(this.defaults, config);\n    const fullPath = buildFullPath(config.baseURL, config.url, config.allowAbsoluteUrls, config);\n    return buildURL(fullPath, config.params, config.paramsSerializer);\n  }\n}\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n  /*eslint func-names:0*/\n  Axios.prototype[method] = function (url, config) {\n    return this.request(\n      mergeConfig(config || {}, {\n        method,\n        url,\n        data: config && utils.hasOwnProp(config, 'data') ? config.data : undefined,\n      })\n    );\n  };\n});\n\nutils.forEach(['post', 'put', 'patch', 'query'], function forEachMethodWithData(method) {\n  function generateHTTPMethod(isForm) {\n    return function httpMethod(url, data, config) {\n      return this.request(\n        mergeConfig(config || {}, {\n          method,\n          headers: isForm\n            ? {\n                'Content-Type': 'multipart/form-data',\n              }\n            : {},\n          url,\n          data,\n        })\n      );\n    };\n  }\n\n  Axios.prototype[method] = generateHTTPMethod();\n\n  // QUERY is a safe/idempotent read method; multipart form bodies don't fit\n  // its semantics, so no queryForm shorthand is generated.\n  if (method !== 'query') {\n    Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n  }\n});\n\nexport default Axios;\n", "'use strict';\n\nimport CanceledError from './CanceledError.js';\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @param {Function} executor The executor function.\n *\n * @returns {CancelToken}\n */\nclass CancelToken {\n  constructor(executor) {\n    if (typeof executor !== 'function') {\n      throw new TypeError('executor must be a function.');\n    }\n\n    let resolvePromise;\n\n    this.promise = new Promise(function promiseExecutor(resolve) {\n      resolvePromise = resolve;\n    });\n\n    const token = this;\n\n    // eslint-disable-next-line func-names\n    this.promise.then((cancel) => {\n      if (!token._listeners) return;\n\n      let i = token._listeners.length;\n\n      while (i-- > 0) {\n        token._listeners[i](cancel);\n      }\n      token._listeners = null;\n    });\n\n    // eslint-disable-next-line func-names\n    this.promise.then = (onfulfilled) => {\n      let _resolve;\n      // eslint-disable-next-line func-names\n      const promise = new Promise((resolve) => {\n        token.subscribe(resolve);\n        _resolve = resolve;\n      }).then(onfulfilled);\n\n      promise.cancel = function reject() {\n        token.unsubscribe(_resolve);\n      };\n\n      return promise;\n    };\n\n    executor(function cancel(message, config, request) {\n      if (token.reason) {\n        // Cancellation has already been requested\n        return;\n      }\n\n      token.reason = new CanceledError(message, config, request);\n      resolvePromise(token.reason);\n    });\n  }\n\n  /**\n   * Throws a `CanceledError` if cancellation has been requested.\n   */\n  throwIfRequested() {\n    if (this.reason) {\n      throw this.reason;\n    }\n  }\n\n  /**\n   * Subscribe to the cancel signal\n   */\n\n  subscribe(listener) {\n    if (this.reason) {\n      listener(this.reason);\n      return;\n    }\n\n    if (this._listeners) {\n      this._listeners.push(listener);\n    } else {\n      this._listeners = [listener];\n    }\n  }\n\n  /**\n   * Unsubscribe from the cancel signal\n   */\n\n  unsubscribe(listener) {\n    if (!this._listeners) {\n      return;\n    }\n    const index = this._listeners.indexOf(listener);\n    if (index !== -1) {\n      this._listeners.splice(index, 1);\n    }\n  }\n\n  toAbortSignal() {\n    const controller = new AbortController();\n\n    const abort = (err) => {\n      controller.abort(err);\n    };\n\n    this.subscribe(abort);\n\n    controller.signal.unsubscribe = () => this.unsubscribe(abort);\n\n    return controller.signal;\n  }\n\n  /**\n   * Returns an object that contains a new `CancelToken` and a function that, when called,\n   * cancels the `CancelToken`.\n   */\n  static source() {\n    let cancel;\n    const token = new CancelToken(function executor(c) {\n      cancel = c;\n    });\n    return {\n      token,\n      cancel,\n    };\n  }\n}\n\nexport default CancelToken;\n", "'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n *  ```js\n *  function f(x, y, z) {}\n *  const args = [1, 2, 3];\n *  f.apply(null, args);\n *  ```\n *\n * With `spread` this example can be re-written.\n *\n *  ```js\n *  spread(function(x, y, z) {})([1, 2, 3]);\n *  ```\n *\n * @param {Function} callback\n *\n * @returns {Function}\n */\nexport default function spread(callback) {\n  return function wrap(arr) {\n    return callback.apply(null, arr);\n  };\n}\n", "'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n *\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nexport default function isAxiosError(payload) {\n  return utils.isObject(payload) && payload.isAxiosError === true;\n}\n", "const HttpStatusCode = {\n  Continue: 100,\n  SwitchingProtocols: 101,\n  Processing: 102,\n  EarlyHints: 103,\n  Ok: 200,\n  Created: 201,\n  Accepted: 202,\n  NonAuthoritativeInformation: 203,\n  NoContent: 204,\n  ResetContent: 205,\n  PartialContent: 206,\n  MultiStatus: 207,\n  AlreadyReported: 208,\n  ImUsed: 226,\n  MultipleChoices: 300,\n  MovedPermanently: 301,\n  Found: 302,\n  SeeOther: 303,\n  NotModified: 304,\n  UseProxy: 305,\n  Unused: 306,\n  TemporaryRedirect: 307,\n  PermanentRedirect: 308,\n  BadRequest: 400,\n  Unauthorized: 401,\n  PaymentRequired: 402,\n  Forbidden: 403,\n  NotFound: 404,\n  MethodNotAllowed: 405,\n  NotAcceptable: 406,\n  ProxyAuthenticationRequired: 407,\n  RequestTimeout: 408,\n  Conflict: 409,\n  Gone: 410,\n  LengthRequired: 411,\n  PreconditionFailed: 412,\n  /**\n   * @deprecated Use `ContentTooLarge` instead.\n   */\n  PayloadTooLarge: 413,\n  ContentTooLarge: 413,\n  UriTooLong: 414,\n  UnsupportedMediaType: 415,\n  RangeNotSatisfiable: 416,\n  ExpectationFailed: 417,\n  ImATeapot: 418,\n  MisdirectedRequest: 421,\n  /**\n   * @deprecated Use `UnprocessableContent` instead.\n   */\n  UnprocessableEntity: 422,\n  UnprocessableContent: 422,\n  Locked: 423,\n  FailedDependency: 424,\n  TooEarly: 425,\n  UpgradeRequired: 426,\n  PreconditionRequired: 428,\n  TooManyRequests: 429,\n  RequestHeaderFieldsTooLarge: 431,\n  UnavailableForLegalReasons: 451,\n  InternalServerError: 500,\n  NotImplemented: 501,\n  BadGateway: 502,\n  ServiceUnavailable: 503,\n  GatewayTimeout: 504,\n  HttpVersionNotSupported: 505,\n  VariantAlsoNegotiates: 506,\n  InsufficientStorage: 507,\n  LoopDetected: 508,\n  NotExtended: 510,\n  NetworkAuthenticationRequired: 511,\n  WebServerReturnsAnUnknownError: 520,\n  WebServerIsDown: 521,\n  ConnectionTimedOut: 522,\n  OriginIsUnreachable: 523,\n  TimeoutOccurred: 524,\n  SslHandshakeFailed: 525,\n  InvalidSslCertificate: 526,\n};\n\nObject.entries(HttpStatusCode).forEach(([key, value]) => {\n  if (HttpStatusCode[value] === undefined) {\n    HttpStatusCode[value] = key;\n  }\n});\n\nexport default HttpStatusCode;\n", "'use strict';\n\nimport utils from './utils.js';\nimport bind from './helpers/bind.js';\nimport Axios from './core/Axios.js';\nimport mergeConfig from './core/mergeConfig.js';\nimport defaults from './defaults/index.js';\nimport formDataToJSON from './helpers/formDataToJSON.js';\nimport CanceledError from './cancel/CanceledError.js';\nimport CancelToken from './cancel/CancelToken.js';\nimport isCancel from './cancel/isCancel.js';\nimport { VERSION } from './env/data.js';\nimport toFormData from './helpers/toFormData.js';\nimport AxiosError from './core/AxiosError.js';\nimport spread from './helpers/spread.js';\nimport isAxiosError from './helpers/isAxiosError.js';\nimport AxiosHeaders from './core/AxiosHeaders.js';\nimport adapters from './adapters/adapters.js';\nimport HttpStatusCode from './helpers/HttpStatusCode.js';\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n *\n * @returns {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n  const context = new Axios(defaultConfig);\n  const instance = bind(Axios.prototype.request, context);\n\n  // Copy axios.prototype to instance\n  utils.extend(instance, Axios.prototype, context, { allOwnKeys: true });\n\n  // Copy context to instance\n  utils.extend(instance, context, null, { allOwnKeys: true });\n\n  // Factory for creating new instances\n  instance.create = function create(instanceConfig) {\n    return createInstance(mergeConfig(defaultConfig, instanceConfig));\n  };\n\n  return instance;\n}\n\n// Create the default instance to be exported\nconst axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = CanceledError;\naxios.CancelToken = CancelToken;\naxios.isCancel = isCancel;\naxios.VERSION = VERSION;\naxios.toFormData = toFormData;\n\n// Expose AxiosError class\naxios.AxiosError = AxiosError;\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n  return Promise.all(promises);\n};\n\naxios.spread = spread;\n\n// Expose isAxiosError\naxios.isAxiosError = isAxiosError;\n\n// Expose mergeConfig\naxios.mergeConfig = mergeConfig;\n\naxios.AxiosHeaders = AxiosHeaders;\n\naxios.formToJSON = (thing) => formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing);\n\naxios.getAdapter = adapters.getAdapter;\n\naxios.HttpStatusCode = HttpStatusCode;\n\naxios.default = axios;\n\n// this module should only have a default export\nexport default axios;\n", "import axios from './lib/axios.js';\n\n// This module is intended to unwrap Axios default export as named.\n// Keep top-level export same with static properties\n// so that it can keep same with es module or cjs\nconst {\n  Axios,\n  AxiosError,\n  CanceledError,\n  isCancel,\n  CancelToken,\n  VERSION,\n  all,\n  Cancel,\n  isAxiosError,\n  spread,\n  toFormData,\n  AxiosHeaders,\n  HttpStatusCode,\n  formToJSON,\n  getAdapter,\n  mergeConfig,\n  create,\n} = axios;\n\nexport {\n  axios as default,\n  create,\n  Axios,\n  AxiosError,\n  CanceledError,\n  isCancel,\n  CancelToken,\n  VERSION,\n  all,\n  Cancel,\n  isAxiosError,\n  spread,\n  toFormData,\n  AxiosHeaders,\n  HttpStatusCode,\n  formToJSON,\n  getAdapter,\n  mergeConfig,\n};\n", "import axios from 'axios'\n\nexport const api = axios.create({\n  withCredentials: true,\n  xsrfCookieName: 'csrftoken',\n  xsrfHeaderName: 'X-CSRFTOKEN'\n})\n", "import { api } from './api'\n\ninterface IEnvironment {\n  VAPID_PUBLIC_KEY: string | null\n}\n\nexport const env: IEnvironment = {\n  VAPID_PUBLIC_KEY: null\n}\n\nasync function fetchEnvironment() {\n  const { data } = await api.get<IEnvironment>('/api/env/')\n  Object.assign(env, data)\n}\n\n/* Just fetch immediately, no error handling for now */\nfetchEnvironment()\n", "import type {\n  Heartbeat,\n  IChannelsMessage,\n  SocketOptions,\n  SocketState,\n  TypeHandler\n} from './types'\n\ntype ReadyState = (typeof SocketState)[keyof typeof SocketState]\ntype ReadyStateHandler = (readyState: ReadyState) => void\n\nexport default class Socket {\n  private readyStateHandlers: Set<ReadyStateHandler>\n  private heartbeats: Heartbeat[]\n  private options: SocketOptions\n  private _readyState?: ReadyState // last readyState value\n  private typeHandlers: Map<string, Set<TypeHandler>>\n  private url: string | URL\n  private ws?: WebSocket\n\n  constructor(url: string | URL, opts?: SocketOptions) {\n    this.readyStateHandlers = new Set()\n    this.heartbeats = []\n    this.options = opts || {}\n    this.typeHandlers = new Map()\n    this.url = url\n    if (!opts?.manual) this.connect()\n  }\n\n  public get readyState() {\n    return this.ws?.readyState as ReadyState\n  }\n\n  /**\n   * Listen to ready state changes\n   * @param handler Callback to handle changes\n   * @returns dispose method\n   */\n  public onReadyStateChanged(handler: ReadyStateHandler) {\n    this.readyStateHandlers.add(handler)\n    return () => {\n      this.readyStateHandlers.delete(handler)\n    }\n  }\n\n  /**\n   * Registers a type listener...\n   * @param name Type name\n   * @param handler Event handler\n   * @returns dispose method - call to remove handler\n   */\n  public registerTypeHandler(name: string, handler: TypeHandler) {\n    if (!this.typeHandlers.has(name)) this.typeHandlers.set(name, new Set())\n    const handlers = this.typeHandlers.get(name)!\n    handlers.add(handler)\n    return () => {\n      handlers.delete(handler)\n    }\n  }\n\n  private updateReadyState() {\n    if (this.readyState === undefined || this._readyState === this.readyState)\n      return\n    this._readyState = this.readyState\n    for (const handler of this.readyStateHandlers) handler(this.readyState)\n  }\n\n  public connect() {\n    this.ws = new WebSocket(this.url)\n    this.updateReadyState()\n\n    this.ws.onerror = this.updateReadyState.bind(this)\n    this.ws.onclose = () => {\n      this.updateReadyState()\n      this.heartbeat('off')\n    }\n    this.ws.onopen = () => {\n      this.updateReadyState()\n      this.heartbeat('incoming')\n      this.heartbeat('outgoing')\n    }\n    this.ws.onmessage = (event) => {\n      this.updateReadyState()\n      this.heartbeat('incoming')\n      const msg: IChannelsMessage = JSON.parse(event.data)\n\n      // Handle type message\n      this.handleTypeMessage(msg)\n    }\n  }\n\n  private handleTypeMessage(msg: IChannelsMessage) {\n    const [type, ...action] = msg.action.split('.')\n    const handlers = this.typeHandlers.get(type)\n    if (!handlers) {\n      if (this.options.debug)\n        console.warn(`No handler for message of type '${type}'`)\n      return\n    }\n    for (const handler of handlers)\n      handler({ action: action.join('.'), payload: msg.payload })\n  }\n\n  public close() {\n    // Unregister listeners here?\n    if (!this.ws) return\n    this.ws.onopen = () => {\n      throw new Error('Undead socket detected')\n    }\n    this.ws.onmessage = null\n    this.ws.onerror = null\n    // onclose is left in place, so that the ready state reaches Closed and\n    // whoever listens for it gets a chance to reconnect.\n    this.ws.close()\n    this.updateReadyState()\n  }\n\n  public get isOpen() {\n    return this.readyState === WebSocket.OPEN\n  }\n\n  /**\n   * Send a message to server, without listening to response\n   * @param action action name\n   * @param payload payload\n   */\n  public send(action: string, payload?: object) {\n    // Does not register a response listener\n    if (!this.isOpen)\n      throw new Error(`Socket not open (readyState ${this.readyState})`)\n    this.heartbeat('outgoing')\n    this.ws!.send(JSON.stringify({ action, payload }))\n  }\n\n  public removeHeartbeat(callback: Heartbeat['callback']) {\n    const finder = (beat: Heartbeat) => beat.callback === callback\n    const heartbeat = this.heartbeats.find(finder)\n    if (!heartbeat) return\n    // Clear timeout and drop from heartbeats\n    clearInterval(heartbeat.intervalID)\n    this.heartbeats = this.heartbeats.filter((beat) => !finder(beat))\n  }\n\n  private heartbeat(direction: NonNullable<Heartbeat['direction']> | 'off') {\n    if (direction === 'off') {\n      for (const beat of this.heartbeats) clearInterval(beat.intervalID)\n      return\n    }\n    for (const heartbeat of this.heartbeats) {\n      // Skip if heartbeat has a direction that doesn't match\n      if (heartbeat.direction && heartbeat.direction !== direction) continue\n      // Reset interval\n      clearInterval(heartbeat.intervalID)\n      heartbeat.intervalID = setInterval(\n        () => heartbeat.callback(this),\n        heartbeat.ms\n      )\n    }\n  }\n}\n", "import type Socket from './Socket'\n\nexport interface IChannelsMessage<T extends {} = {}> {\n  action: string\n  payload: T\n}\n\nexport type TypeHandler<T extends {} = {}> = (data: IChannelsMessage<T>) => void\n\nexport interface ChannelsConfig {\n  timeout?: number\n}\n\nexport const SocketState = {\n  Connecting: 0,\n  Open: 1,\n  Closing: 2,\n  Closed: 3\n} as const\n\nexport interface Heartbeat {\n  callback(socket: Socket): void\n  direction?: 'incoming' | 'outgoing'\n  ms: number\n  intervalID?: ReturnType<typeof setInterval>\n}\n\nexport interface SocketOptions {\n  config?: ChannelsConfig\n  debug?: boolean\n  manual?: boolean\n}\n", "import { userLoadedEvent } from '../events'\nimport Socket from './Socket'\nimport { SocketState, type SocketOptions } from './types'\n\nconst wsProtocol = location.protocol === 'https:' ? 'wss:' : 'ws:'\nconst DEFAULT_CONFIG: SocketOptions['config'] = {\n  timeout: 20_000 // 20 s, longer than server's 15 s\n}\nconst RECONNECT_DELAY = 5_000\nconst MAX_RETRIES = 5\nlet userIsLoaded = false\nlet reconnectTimeout: ReturnType<typeof setTimeout> | undefined\nlet retriesLeft = MAX_RETRIES\n\nexport const socket = new Socket(`${wsProtocol}//${location.host}/ws/`, {\n  config: DEFAULT_CONFIG,\n  manual: true\n})\n\n/**\n * Attempt to reconnect, then schedule the next attempt. Rescheduling from\n * within the ticker is what keeps a chain going, so only the chain itself can\n * extend it.\n */\nfunction reconnectTicker() {\n  reconnectTimeout = undefined\n  if (\n    !userIsLoaded ||\n    document.visibilityState !== 'visible' ||\n    retriesLeft <= 0 ||\n    socket.readyState !== SocketState.Closed\n  )\n    return\n  retriesLeft--\n  socket.connect()\n  scheduleReconnect(RECONNECT_DELAY)\n}\n\n/**\n * Queue a reconnect attempt, unless one is already queued. Every close event\n * asks for a reconnect, and without this guard each one would start a chain of\n * its own and they would multiply for as long as connecting keeps failing.\n */\nfunction scheduleReconnect(delay: number) {\n  if (reconnectTimeout !== undefined || retriesLeft <= 0) return\n  reconnectTimeout = setTimeout(reconnectTicker, delay)\n}\n\n/**\n * The user came back, or the device did. Whatever made the earlier attempts\n * fail may well be gone, so hand the socket a fresh budget of retries.\n */\nfunction restartReconnecting() {\n  retriesLeft = MAX_RETRIES\n  scheduleReconnect(0)\n}\n\nuserLoadedEvent.on(() => {\n  userIsLoaded = true\n  socket.connect()\n})\n\ndocument.addEventListener('visibilitychange', () => {\n  if (document.visibilityState === 'visible') restartReconnecting()\n})\n\nwindow.addEventListener('online', restartReconnecting)\n\nsocket.onReadyStateChanged((state) => {\n  switch (state) {\n    case SocketState.Open:\n      retriesLeft = MAX_RETRIES\n      socket.send('ping')\n      break\n    case SocketState.Closed:\n      scheduleReconnect(0)\n      break\n  }\n})\n", "import { sorted } from 'itertools'\nimport { getDocTitle } from './utils'\nimport SubscribeButton from './components/SubscribeButton'\nimport { api } from './api'\nimport type User from './User'\nimport type ServiceWorker from './ServiceWorker'\nimport { pageUpdateEvent } from './events'\nimport { INotification, INotificationData } from './types'\nimport { env } from './environment'\nimport { socket } from './socket'\nimport { IChannelsMessage } from './socket/types'\n\ndeclare const user: User\ndeclare const serviceWorker: ServiceWorker\n\nconst Endpoint = {\n  notificationList: '/api/notifications/',\n  add: '/api/notification-endpoints/',\n  readTimestampUpdate: '/api/notifications/read/'\n} as const\n\nconst elem = {\n  menu: undefined as undefined | NodeListOf<HTMLElement>,\n  list: undefined as undefined | NodeListOf<HTMLUListElement>\n}\n\nconst store = {\n  baseTitle: '',\n  count: undefined as undefined | number,\n  hooks: {},\n  isSubscribed: false,\n  notifications: new Map<number, INotification>(),\n  subscribeButtons: [] as SubscribeButton[],\n  subscription: null as null | PushSubscription,\n  userCanSubscribe: false\n}\n\nfunction isNotificationMessage(\n  msg: IChannelsMessage\n): msg is IChannelsMessage<INotification> {\n  return msg.action === 'upserted'\n}\n\nsocket.registerTypeHandler('notification', (msg) => {\n  if (!isNotificationMessage(msg)) return\n  const n = msg.payload\n  store.notifications.set(n.id, n)\n  if (n.unread) setCount((store.count ?? 0) + 1)\n  setNotifications([n])\n})\n\nfunction setNotifications(notifications: INotification[]) {\n  for (const n of notifications) store.notifications.set(n.id, n)\n  if (!elem.list) return\n  // Highest id first, should always be latest one\n  const ordered = sorted(store.notifications.values(), (n) => n.id, true)\n  for (const list of elem.list) {\n    list.innerHTML = ''\n    for (const n of ordered) {\n      const liElem = document.createElement('li')\n      const icon = n.icon ? `<i class=\"material-icons\">${n.icon}</i> ` : ''\n      const myClass = n.unread ? 'class=\"unread\"' : ''\n      liElem.innerHTML = `<a data-id=\"${n.id}\" href=\"${n.href}\" ${myClass}>${icon}${n.description}</a>`\n      liElem\n        .querySelector('a.unread')\n        ?.addEventListener('click', notificationMarkRead)\n      list.append(liElem)\n    }\n  }\n}\n\n// Show how many unread in <title>\nfunction setCount(count: number) {\n  store.count = count\n  elem.menu?.forEach((menu) => {\n    menu.querySelector<HTMLElement>('.count')!.innerText = count.toString()\n    menu.dataset.count = count.toString()\n    // menu.setAttribute('data-count', count.toString())\n  })\n  setTitle()\n}\n\n/**\n * Update latest read time and set count to 0\n */\nfunction clearCount() {\n  api.post(Endpoint.readTimestampUpdate)\n  setCount(0)\n}\n\nfunction loadSubscribeButtons() {\n  store.subscribeButtons = Array.from(\n    document.querySelectorAll<HTMLButtonElement>(SubscribeButton.selector)\n  ).map((button) => new SubscribeButton(button))\n}\n\nfunction setTitle(title?: string) {\n  if (title) store.baseTitle = title\n  document.querySelector('title')!.innerText = store.count\n    ? `(${store.count}) ${store.baseTitle}`\n    : store.baseTitle\n}\n\nasync function notificationMarkRead(event: Event) {\n  const elem = event.currentTarget\n  if (!isHtmlElement(elem)) return\n  await api.post(`/api/notifications/${elem.dataset.id}/read/`)\n  elem.classList.remove('unread')\n  elem.removeEventListener('click', notificationMarkRead)\n}\n\nasync function fetchNotifications() {\n  try {\n    const { data } = await api.get<INotificationData>(\n      Endpoint.notificationList,\n      {\n        params: { limit: 50 }\n      }\n    )\n    setCount(data.unread_count)\n    setNotifications(data.results)\n  } catch (e) {\n    // Fail here is ok\n  }\n}\n\nfunction isHtmlElement(target: EventTarget | null): target is HTMLElement {\n  return !!target && 'closest' in target\n}\n\nfunction init() {\n  elem.menu = document.querySelectorAll('.mp-notifications-display')\n  elem.list = document.querySelectorAll('ul.mp-notifications-list')\n  store.baseTitle = getDocTitle(document) ?? ''\n  loadSubscribeButtons()\n  pageUpdateEvent.on(loadSubscribeButtons)\n  // Fetch notifications\n  fetchNotifications()\n  // Ugly fix. This is because main menu is now bootstrap.\n  elem.menu.forEach((menu) =>\n    menu.addEventListener('click', (event) => {\n      if (\n        isHtmlElement(event.currentTarget) &&\n        !event.currentTarget.closest('.dropdown')?.classList.contains('open')\n      )\n        clearCount()\n    })\n  )\n}\n\nfunction checkVapidKey(subscription: PushSubscription) {\n  const isChrome = /googleapis|android/.test(subscription.endpoint)\n  return !isChrome || subscription.options.applicationServerKey\n}\n\nasync function initSubscription(swReg: ServiceWorkerRegistration) {\n  try {\n    const state = await swReg.pushManager.permissionState({\n      userVisibleOnly: true\n    })\n    store.userCanSubscribe = state !== 'denied'\n    if (state === 'denied') return\n    store.subscription = await swReg.pushManager.getSubscription()\n    setSubscribeState(!!store.subscription)\n    if (store.subscription) {\n      if (!checkVapidKey(store.subscription)) unsubscribe()\n    } else user.pushable()\n  } catch (e) {\n    console.log('Opera? :^(', e)\n  }\n}\n\nasync function subscribe() {\n  if (!env.VAPID_PUBLIC_KEY)\n    throw new Error(\"No VAPID public key: Can't subscribe.\")\n  if (!serviceWorker.registration)\n    throw new Error('No service worker registration.')\n  store.subscription = await serviceWorker.registration.pushManager.subscribe({\n    userVisibleOnly: true,\n    applicationServerKey: Uint8Array.from(atob(env.VAPID_PUBLIC_KEY), (c) =>\n      c.charCodeAt(0)\n    )\n  })\n  await api.post(Endpoint.add, store.subscription)\n  setSubscribeState(true)\n  console.log('Subscribed!', store.subscription)\n}\n\nasync function unsubscribe() {\n  try {\n    await store.subscription?.unsubscribe()\n  } catch (e) {\n    console.error('Error unsubscribing', e)\n  }\n  setSubscribeState(false)\n}\n\nfunction setSubscribeState(active: boolean) {\n  store.subscribeButtons.forEach((button) => {\n    button.setSubscribeState(active)\n  })\n  store.isSubscribed = active\n}\n\nexport default {\n  get canSubscribe() {\n    return store.userCanSubscribe\n  },\n  init,\n  initSubscription,\n  get isSubscribed() {\n    return store.isSubscribed\n  },\n  loadSubscribeButtons,\n  runUpdate: fetchNotifications,\n  setCount,\n  setTitle,\n  subscribe,\n  unsubscribe\n}\n", "import { api } from './api'\nimport { contentInsertedEvent, popupCloseEvent } from './events'\n\ninterface IPopup {\n  callback?(content: HTMLDivElement): any\n  method?: string\n  title: string\n  url: string\n}\n\nconst wrapper = document.createElement('div')\nwrapper.id = 'legacy-popup'\nwrapper.classList.add('popup')\nwrapper.setAttribute('aria-hidden', 'true')\nwrapper.innerHTML =\n  '<div class=\"box cream\" role=\"dialog\"><button role=\"button\" class=\"material-icons closer\">close</button><header><h1></h1></header><i class=\"material-icons working\">sync</i><div class=\"content\"></div></div>'\nconst content = wrapper.querySelector<HTMLDivElement>('.content')!\n\nlet active = false\nlet current: IPopup | undefined\nlet lastFocus: Element | null = null\nconst queue: IPopup[] = []\n\nfunction setTitle(title: string) {\n  wrapper.querySelector('h1')!.innerText = title\n}\n\nfunction isHtmlElement(target: EventTarget): target is HTMLElement {\n  return 'closest' in target\n}\n\nfunction init() {\n  document.body.appendChild(wrapper)\n  // A click fires on the common ancestor of press and release, so a drag\n  // from inside the box out to the backdrop would land on wrapper too.\n  let pressedOnBackdrop = false\n  wrapper.addEventListener('pointerdown', (ev) => {\n    pressedOnBackdrop = ev.target === wrapper\n  })\n  wrapper.addEventListener('click', (ev) => {\n    if (\n      pressedOnBackdrop &&\n      ev.target === wrapper &&\n      !wrapper.classList.contains('take-over')\n    )\n      next()\n  })\n  wrapper.querySelector('.closer')!.addEventListener('click', next)\n  document.addEventListener(\n    'focus',\n    (ev) => {\n      if (\n        active &&\n        !(isHtmlElement(ev.target!) && ev.target.closest('div.popup'))\n      ) {\n        ev.stopPropagation()\n        focusFirst()\n      }\n    },\n    true\n  )\n  document.addEventListener(\n    'keydown',\n    (ev) => {\n      if (\n        active &&\n        ev.key === 'Escape' &&\n        !wrapper.classList.contains('take-over')\n      )\n        next()\n    },\n    true\n  )\n}\n\nfunction _replaceContent(html: string) {\n  content.innerHTML = html\n  contentInsertedEvent.emit(content)\n}\n\nasync function open(popup: IPopup) {\n  if (!document.querySelector('#legacy-popup')) init()\n  if (current) return queue.push(popup)\n  current = popup\n  wrapper.classList.add('open')\n  setTitle(popup.title)\n  if (popup.url) {\n    wrapper.classList.add('loading')\n    try {\n      const { data } = await api.request({\n        method: popup.method ?? 'GET',\n        url: popup.url\n      })\n      wrapper.classList.remove('loading')\n      // A GET renders a template directly; an API action hands back {html},\n      // the same shape the embed and attachment serializers return.\n      content.innerHTML = typeof data === 'string' ? data : data.html\n      contentInsertedEvent.emit(content)\n      if (current.callback) current.callback(content)\n      focusFirst()\n    } catch (e) {\n      console.error(e)\n    }\n  }\n  active = true\n  wrapper.setAttribute('aria-hidden', 'false')\n  if (!lastFocus) lastFocus = document.activeElement\n}\n\nfunction focusFirst() {\n  wrapper.querySelector<HTMLButtonElement>('.focus')?.focus()\n}\n\nfunction next() {\n  wrapper.classList.remove('take-over')\n  content.innerHTML = ''\n  current = undefined\n  if (queue.length) open(queue.shift()!)\n  else close()\n}\n\nfunction isFocusable(elem: Element): elem is HTMLElement {\n  return 'focus' in elem\n}\n\nfunction close() {\n  wrapper.classList.remove('open')\n  active = false\n  wrapper.setAttribute('aria-hidden', 'true')\n  if (lastFocus && isFocusable(lastFocus)) {\n    lastFocus.focus()\n    lastFocus = null\n  }\n}\n\n// Something inside the popup is done with it - a form that has saved, say.\n// next() rather than close() so a queued popup still gets its turn, the way\n// the close button and Escape behave.\npopupCloseEvent.on(() => {\n  if (active) next()\n})\n\nfunction setTakeover(activate = true) {\n  if (activate) wrapper.classList.add('take-over')\n  else wrapper.classList.remove('take-over')\n}\n\nexport default class Popup {\n  callback?: (content: HTMLDivElement) => any\n  method?: string\n  title: string\n  url: string\n\n  constructor(\n    title: string,\n    url: string,\n    callback?: (content: HTMLDivElement) => any,\n    method?: string\n  ) {\n    this.title = title\n    this.url = url\n    this.callback = callback\n    this.method = method\n    open(this)\n  }\n\n  close() {\n    next()\n  }\n\n  takeover() {\n    setTakeover()\n  }\n\n  disableTakeover() {\n    setTakeover(false)\n  }\n\n  replaceContent(html: string) {\n    _replaceContent(html)\n  }\n\n  /** The popup body, for content built in the browser rather than fetched. */\n  get content() {\n    return content\n  }\n}\n", "import notifications from './notifications'\n\nexport default class ServiceWorker {\n  registration?: ServiceWorkerRegistration\n\n  constructor() {\n    if ('serviceWorker' in navigator) {\n      // Update notifications on push message.\n      navigator.serviceWorker.addEventListener('message', this.message)\n      navigator.serviceWorker\n        .register('/sw.js')\n        .then(this.register.bind(this))\n        .catch((err) => {\n          console.log(':^(', err)\n        })\n    }\n  }\n\n  message(ev: MessageEvent) {\n    if ('new_location' in ev.data) location.assign(ev.data.new_location)\n  }\n\n  register(serviceWorkerRegistration: ServiceWorkerRegistration) {\n    this.registration = serviceWorkerRegistration\n    if ('pushManager' in serviceWorkerRegistration) {\n      notifications.initSubscription(serviceWorkerRegistration)\n    }\n  }\n}\n", "import Popup from './Popup'\nimport { isMobile } from './utils'\nimport notifications from './notifications'\nimport ServiceWorker from './ServiceWorker'\nimport { api } from './api'\nimport { IUser } from './types'\nimport { userLoadedEvent } from './events'\n\nconst API = {\n  EULA: '/profil/eula/',\n  EDIT_NOTIFICATIONS: '/profil/edit-notifications'\n} as const\n\nexport default class User {\n  data?: IUser\n  eulaAccepted = false\n  loggedIn: boolean\n  noPushing = false\n\n  constructor() {\n    const bodyClasses = document.body.classList\n    this.loggedIn = bodyClasses.contains('logged-in')\n    if (!this.loggedIn) return\n    this.fetchUser()\n    this.eulaAccepted = bodyClasses.contains('eula-accepted')\n    this.noPushing = !!localStorage.noPushing\n    if (!this.eulaAccepted) this.openEulaAcceptDialog()\n    notifications.init()\n    // @ts-ignore\n    globalThis.serviceWorker = new ServiceWorker()\n  }\n\n  async fetchUser() {\n    const { data } = await api.get<IUser>('/api/user/')\n    this.data = data\n    userLoadedEvent.emit()\n  }\n\n  get fullName() {\n    return (\n      [this.data?.first_name, this.data?.last_name]\n        .filter((c) => c)\n        .join(' ') || '??'\n    )\n  }\n\n  openEulaAcceptDialog() {\n    const popup = new Popup('Anv\u00E4ndarvillkor', API.EULA, (root) => {\n      popup.takeover()\n      root\n        .querySelector('a.accept')\n        ?.addEventListener('click', async (event) => {\n          event.preventDefault()\n          // The link points at the accept action, which answers 204.\n          await api.post((event.currentTarget as HTMLAnchorElement).href)\n          popup.close()\n        })\n    })\n  }\n\n  pushable() {\n    if (this.noPushing) return\n    const title = isMobile.any()\n      ? 'Snabba uppdateringar i telefonen'\n      : 'Snabba uppdateringar i datorn'\n    const popup = new Popup(title, API.EDIT_NOTIFICATIONS, (content) => {\n      notifications.loadSubscribeButtons()\n      const stopElem = content.querySelector('.stop-asking')\n      stopElem?.classList.add('active')\n      stopElem?.addEventListener('click', (event) => {\n        event.preventDefault()\n        localStorage.noPushing = 1\n        popup.close()\n      })\n    })\n  }\n}\n", "import $ from 'jquery'\nimport { api } from '../api'\nimport { isHTMLElement } from '../utils'\nimport { goToPageEvent } from '../events'\nimport { showApiError } from '../formErrors'\n\nasync function performDelete(elem: HTMLElement) {\n  elem.setAttribute('disabled', 'disabled')\n  const { deleteApi, deleteRedirect } = elem.dataset\n  try {\n    await api.delete(deleteApi!)\n    if (deleteRedirect)\n      goToPageEvent.emit({ href: deleteRedirect, currentTarget: elem })\n    else {\n      const container = elem.closest('.json-delete')\n      if (container) {\n        // @ts-ignore\n        const $container = $(container)\n        $container.slideUp($container.remove)\n      }\n    }\n  } catch (e) {\n    showApiError(e, elem.closest('form'), 'Misslyckades att radera inneh\u00E5ll')\n  }\n  elem.removeAttribute('disabled')\n}\n\nexport default {\n  selector: '[data-delete-api]',\n  install() {\n    document.body.addEventListener('click', (event) => {\n      if (!isHTMLElement(event.target!)) return\n      const elem = event.target.closest(this.selector) as HTMLButtonElement\n      if (!elem || elem.disabled) return\n      event.preventDefault()\n      const confirmation = elem.dataset.confirm\n      if (!confirmation || confirm(confirmation)) performDelete(elem)\n    })\n  }\n}\n", "import { isAxiosError } from 'axios'\n\n/**\n * Render DRF validation errors onto a server-rendered Django form.\n *\n * DRF answers an invalid write with {field: [messages]}, plus\n * \"non_field_errors\" for form-wide problems and \"detail\" for the errors that\n * never reach a serializer (permission denied, throttling, 404). Django has\n * already rendered the same markup server-side for classic form posts, so we\n * reproduce it exactly and inherit the existing `.errorlist` styling:\n *\n *     <ul class=\"errorlist\" id=\"id_<field>_error\"><li>message</li></ul>\n *\n * placed before the field's row, with aria-invalid/aria-describedby on the\n * input, the way django/forms/p.html does it.\n */\n\nconst ERROR_CLASS = 'errorlist'\nconst NON_FIELD_KEYS = ['non_field_errors', 'detail']\n\ntype ErrorData = Record<string, unknown>\n\nfunction messagesFor(value: unknown): string[] {\n  if (typeof value === 'string') return [value]\n  if (Array.isArray(value)) return value.flatMap(messagesFor)\n  // A nested serializer answers with an object; flatten it rather than\n  // dropping the message on the floor.\n  if (value && typeof value === 'object')\n    return Object.values(value as ErrorData).flatMap(messagesFor)\n  return []\n}\n\nfunction buildList(messages: string[], id?: string, nonField = false) {\n  const list = document.createElement('ul')\n  list.className = nonField ? `${ERROR_CLASS} nonfield` : ERROR_CLASS\n  if (id) list.id = id\n  for (const message of messages) {\n    const item = document.createElement('li')\n    item.textContent = message\n    list.appendChild(item)\n  }\n  return list\n}\n\nfunction fieldElement(form: HTMLElement, name: string) {\n  return form.querySelector<HTMLElement>(`[name=\"${CSS.escape(name)}\"]`)\n}\n\n/**\n * The row Django wrapped the field in - what p.html puts the error list before.\n *\n * Found from the label rather than the input, because a widget may sit in a\n * wrapper of its own inside that row: CKEditor puts its textarea in a\n * div.ck-editor-container next to the label, and anchoring on the input would\n * leave the errors between the label and the editor.\n */\nfunction rowFor(form: HTMLElement, field: HTMLElement) {\n  const fieldId = field.getAttribute('id')\n  const label = fieldId\n    ? form.querySelector<HTMLElement>(`label[for=\"${CSS.escape(fieldId)}\"]`)\n    : null\n  return (label ?? field).closest('p, li, div')\n}\n\n/** Remove every error this module previously rendered. */\nexport function clearFormErrors(form: HTMLElement) {\n  form\n    .querySelectorAll(`.${ERROR_CLASS}`)\n    .forEach((list) => list.remove())\n  form.querySelectorAll('[aria-invalid=\"true\"]').forEach((field) => {\n    field.removeAttribute('aria-invalid')\n    field.removeAttribute('aria-describedby')\n  })\n}\n\n/**\n * Show `errors` on `form`. Returns the messages that had nowhere to go, so\n * the caller can decide how to surface them.\n */\nexport function renderFormErrors(\n  form: HTMLElement,\n  errors: ErrorData\n): string[] {\n  clearFormErrors(form)\n  const unplaced: string[] = []\n\n  for (const [name, value] of Object.entries(errors)) {\n    const messages = messagesFor(value)\n    if (!messages.length) continue\n\n    const field = NON_FIELD_KEYS.includes(name) ? null : fieldElement(form, name)\n    if (!field) {\n      unplaced.push(...messages)\n      continue\n    }\n    const id = `id_${name}_error`\n    field.setAttribute('aria-invalid', 'true')\n    field.setAttribute('aria-describedby', id)\n    // Django renders the list before the field's row, not the field itself.\n    const row = rowFor(form, field) ?? field\n    const anchor = form.contains(row) && row !== form ? row : field\n    anchor.parentElement?.insertBefore(buildList(messages, id), anchor)\n  }\n\n  if (unplaced.length)\n    form.insertBefore(buildList(unplaced, undefined, true), form.firstChild)\n\n  return unplaced\n}\n\n/**\n * Surface a failed API write. Renders field errors on `form` when the server\n * sent a validation body, and falls back to `fallback` for everything else -\n * a network drop, a 500, or a response we cannot place on any field.\n */\nexport function showApiError(\n  error: unknown,\n  form: HTMLElement | null,\n  fallback: string\n) {\n  const data = isAxiosError(error) ? error.response?.data : undefined\n  if (!form || !data || typeof data !== 'object' || Array.isArray(data)) {\n    alert(fallback)\n    return\n  }\n  // An empty body tells the user nothing; keep the generic message for it.\n  if (!Object.keys(data).length) {\n    alert(fallback)\n    return\n  }\n  // Anything renderFormErrors cannot place on a field still gets shown, in\n  // the non-field list at the top of the form.\n  renderFormErrors(form, data as ErrorData)\n}\n", "const METHODS = ['POST', 'DELETE', 'PUT', 'PATCH']\n\nexport function interpretApi(api: string) {\n  const [method, url] = api.split(/\\s+/)\n  return METHODS.includes(method.toUpperCase())\n    ? { method, url }\n    : { method: 'POST', url: method }\n}\n", "import { api } from '../api'\nimport { isHTMLElement } from '../utils'\nimport { goToPageEvent } from '../events'\nimport { interpretApi } from './utils'\nimport { showApiError } from '../formErrors'\n\nasync function performPost(elem: HTMLElement) {\n  elem.setAttribute('disabled', 'disabled')\n  const { postApi, postAssign, postRedirect, confirm, ...dataset } =\n    elem.dataset\n  const { method, url } = interpretApi(postApi!)\n  try {\n    await api.request({\n      method,\n      url,\n      data: dataset\n    })\n    if (postAssign) return location.assign(postAssign)\n    if (postRedirect)\n      goToPageEvent.emit({ href: postRedirect, currentTarget: elem })\n  } catch (e) {\n    showApiError(e, elem.closest('form'), 'Misslyckades att posta inneh\u00E5ll')\n  }\n  elem.removeAttribute('disabled')\n}\n\nexport default {\n  selector: '[data-post-api]',\n  install() {\n    document.body.addEventListener('click', (ev) => {\n      if (!isHTMLElement(ev.target!)) return\n      const elem = ev.target.closest(this.selector) as HTMLButtonElement\n      if (!elem || elem.disabled) return\n      ev.preventDefault()\n      const confirmation = elem.dataset.confirm\n      if (!confirmation || confirm(confirmation)) performPost(elem)\n    })\n  }\n}\n", "import { api } from '../api'\nimport { contentInsertedEvent } from '../events'\n\n/**\n * A filter toggle above a list. The change is saved through the API in\n * data-api on the <form>; the list is then fetched again from the form's\n * action, with ?page=1 asking for the list alone.\n */\nexport default class ContentFilterButton {\n  static selector = 'form.content-filter button.toggler'\n  action: string\n  apiUrl: string\n  contentElem: HTMLElement\n  elem: HTMLElement\n  form: HTMLFormElement\n  name: string\n\n  constructor(elem: HTMLElement) {\n    this.elem = elem\n    this.form = this.elem.closest('form')!\n    const { api: apiUrl, target } = this.form.dataset\n    if (!target)\n      throw new Error('Missing data-target from content-filter element')\n    if (!apiUrl) throw new Error('Missing data-api from content-filter element')\n    this.apiUrl = apiUrl\n    this.contentElem = document.querySelector(target)!\n    this.action = this.form.getAttribute('action')!\n    this.elem.addEventListener('click', (ev) => {\n      ev.preventDefault()\n      this.clickHandler()\n    })\n    this.name = this.elem.getAttribute('name')!\n  }\n\n  get active() {\n    return this.elem.classList.contains('active')\n  }\n\n  async clickHandler() {\n    if (this.active) this.elem.classList.remove('active')\n    else this.elem.classList.add('active')\n    await api.patch(this.apiUrl, { key: this.name, value: this.active })\n    const { data } = await api.get(this.action, { params: { page: 1 } })\n    this.contentElem.innerHTML = data\n    // Emit parent, because Pagination selector needs to find on child node\n    contentInsertedEvent.emit(this.contentElem.parentElement!)\n  }\n}\n", "import { isHTMLElement } from '../utils'\n\nexport default {\n  currentMenu: null as HTMLElement | null,\n\n  checkClickOutside(target: HTMLElement) {\n    if (!!this.currentMenu && !this.currentMenu.contains(target))\n      this.closeCurrent()\n  },\n\n  closeCurrent() {\n    this.currentMenu?.classList.remove('open')\n    this.currentMenu = null\n  },\n\n  toggle(menu: HTMLElement) {\n    const open = menu.classList.toggle('open')\n    this.currentMenu = open ? menu : null\n  },\n\n  install() {\n    document.addEventListener('click', (ev) => {\n      if (!ev.target || !isHTMLElement(ev.target)) return\n      this.checkClickOutside(ev.target)\n      const contextMenu = ev.target.closest<HTMLElement>('nav.context-menu')\n      if (!contextMenu) return\n      const toggler = ev.target.closest<HTMLButtonElement>('button.toggler')\n      if (toggler) this.toggle(contextMenu)\n    })\n  }\n}\n", "/**\n * Cropping and scaling of images in the browser, before upload.\n *\n * Ported from voteit's CropImageField. Coordinates are in the original\n * image's pixels; the UI scales pointer movement into them.\n */\n\nexport type ImageSize = { width: number; height: number }\nexport type CropArea = { sx: number; sy: number; sWidth: number; sHeight: number }\nexport type DragHandle =\n  | 'tl'\n  | 'tr'\n  | 'bl'\n  | 'br'\n  | 't'\n  | 'b'\n  | 'l'\n  | 'r'\n  | 'move'\n\nexport const DATA_TYPES = [\n  'image/jpeg',\n  'image/png',\n  'image/webp',\n  'image/svg+xml'\n]\n\nfunction withinBounds(value: number, min: number, max: number) {\n  return Math.max(min, Math.min(max, value))\n}\n\n/**\n * Aspect ratio as width/height.\n * @param aspectRatio A string, for example 1.234, 1 or 16/9\n */\nexport function parseAspectRatio(aspectRatio: string) {\n  const [wAsp, hAsp] = aspectRatio.split('/').map(Number)\n  // If only one value, that is the actual target ratio\n  return hAsp ? wAsp / hAsp : wAsp\n}\n\nexport function loadOriginalImage(\n  file: File\n): Promise<{ src: string; orig: ImageSize }> {\n  return new Promise((resolve, reject) => {\n    if (!file.type.match(/image.*/)) return reject(new Error('Not an image'))\n    const reader = new FileReader()\n    reader.onerror = reject\n    reader.onload = () => {\n      const dataURL = reader.result as string | null\n      if (!dataURL) return reject(new Error('No result'))\n      const img = new Image()\n      img.onerror = reject\n      img.onload = () =>\n        resolve({\n          src: dataURL,\n          orig: { width: img.naturalWidth, height: img.naturalHeight }\n        })\n      img.src = dataURL\n    }\n    reader.readAsDataURL(file)\n  })\n}\n\n/** The largest area of the target ratio, centered on the image. */\nexport function initCropArea(orig: ImageSize, ratio: number): CropArea {\n  const sWidth = Math.min(orig.width, orig.height * ratio)\n  const sHeight = sWidth / ratio\n  return {\n    sx: (orig.width - sWidth) / 2,\n    sy: (orig.height - sHeight) / 2,\n    sWidth,\n    sHeight\n  }\n}\n\n/** What is cut away on each side, as fractions of the image. */\nexport function cropFractions(area: CropArea, orig: ImageSize) {\n  const { sx, sy, sWidth, sHeight } = area\n  const { width: imgW, height: imgH } = orig\n  return {\n    left: sx / imgW,\n    top: sy / imgH,\n    right: (imgW - sx - sWidth) / imgW,\n    bottom: (imgH - sy - sHeight) / imgH\n  }\n}\n\n/**\n * The crop area after dragging `handle` by dx, dy (image pixels) from where\n * it was at `start`. Keeps the ratio and stays within the image.\n */\nexport function dragCropArea(\n  handle: DragHandle,\n  start: CropArea,\n  dx: number,\n  dy: number,\n  orig: ImageSize,\n  ratio: number\n): CropArea {\n  const { sx, sy, sWidth, sHeight } = start\n  const { width: imgW, height: imgH } = orig\n  const MIN = Math.min(imgW, imgH) * 0.1\n  const next: CropArea = { ...start }\n\n  switch (handle) {\n    case 'move': {\n      next.sx = withinBounds(sx + dx, 0, imgW - sWidth)\n      next.sy = withinBounds(sy + dy, 0, imgH - sHeight)\n      break\n    }\n    case 'br': {\n      const w = withinBounds(sWidth + dx, MIN, imgW - sx)\n      const h = w / ratio\n      if (sy + h <= imgH) {\n        next.sWidth = w\n        next.sHeight = h\n      }\n      break\n    }\n    case 'bl': {\n      const w = withinBounds(sWidth - dx, MIN, sx + sWidth)\n      const h = w / ratio\n      if (sy + h <= imgH) {\n        next.sx = sx + sWidth - w\n        next.sWidth = w\n        next.sHeight = h\n      }\n      break\n    }\n    case 'tr': {\n      const w = withinBounds(sWidth + dx, MIN, imgW - sx)\n      const h = w / ratio\n      if (sy + sHeight - h >= 0) {\n        next.sy = sy + sHeight - h\n        next.sWidth = w\n        next.sHeight = h\n      }\n      break\n    }\n    case 'tl': {\n      const w = withinBounds(sWidth - dx, MIN, sx + sWidth)\n      const h = w / ratio\n      if (sy + sHeight - h >= 0) {\n        next.sx = sx + sWidth - w\n        next.sy = sy + sHeight - h\n        next.sWidth = w\n        next.sHeight = h\n      }\n      break\n    }\n    case 'r': {\n      const w = withinBounds(sWidth + dx, MIN, imgW - sx)\n      const h = w / ratio\n      next.sWidth = w\n      next.sHeight = h\n      next.sy = withinBounds(sy + (sHeight - h) / 2, 0, imgH - h)\n      break\n    }\n    case 'l': {\n      const w = withinBounds(sWidth - dx, MIN, sx + sWidth)\n      const h = w / ratio\n      next.sx = sx + sWidth - w\n      next.sWidth = w\n      next.sHeight = h\n      next.sy = withinBounds(sy + (sHeight - h) / 2, 0, imgH - h)\n      break\n    }\n    case 'b': {\n      const h = withinBounds(sHeight + dy, MIN, imgH - sy)\n      const w = h * ratio\n      next.sHeight = h\n      next.sWidth = w\n      next.sx = withinBounds(sx + (sWidth - w) / 2, 0, imgW - w)\n      break\n    }\n    case 't': {\n      const h = withinBounds(sHeight - dy, MIN, sy + sHeight)\n      const w = h * ratio\n      next.sy = sy + sHeight - h\n      next.sHeight = h\n      next.sWidth = w\n      next.sx = withinBounds(sx + (sWidth - w) / 2, 0, imgW - w)\n      break\n    }\n  }\n  return next\n}\n\n/**\n * Find the most efficient file format the browser can encode, by testing\n * which type toDataURL actually produces.\n */\nconst formatPrio = ['image/webp', 'image/jpeg', 'image/png'] as const\nfunction toFormatDataURL(canvas: HTMLCanvasElement) {\n  for (const type of formatPrio) {\n    const dataURL = canvas.toDataURL(type)\n    if (dataURL.startsWith(`data:${type}`)) return [type, dataURL] as const\n  }\n  throw new Error('No supported image data format found!')\n}\n\nfunction getScaled({ width, height }: ImageSize, maxSize: number) {\n  const imageMax = Math.max(height, width)\n  const scale = Math.min(imageMax, maxSize) / imageMax\n  return { width: scale * width, height: scale * height }\n}\n\n/**\n * Cut `crop` out of the image at `src` and scale it down to fit `maxSize`.\n */\nexport function resizeImage(\n  src: string,\n  crop: CropArea,\n  maxSize = 640\n): Promise<{ blob: Blob; type: string; src: string }> {\n  return new Promise((resolve, reject) => {\n    const img = new Image()\n    img.onerror = reject\n    img.onload = () => {\n      const canvas = document.createElement('canvas')\n      const size = getScaled(\n        { width: crop.sWidth, height: crop.sHeight },\n        maxSize\n      )\n      canvas.width = size.width\n      canvas.height = size.height\n      const context = canvas.getContext('2d')\n      if (!context) return reject(new Error(\"Can't draw image, no 2d context\"))\n      context.drawImage(\n        img,\n        crop.sx,\n        crop.sy,\n        crop.sWidth,\n        crop.sHeight,\n        0,\n        0,\n        canvas.width,\n        canvas.height\n      )\n      const [type, dataURL] = toFormatDataURL(canvas)\n      canvas.toBlob(\n        (blob) => {\n          if (!blob)\n            return reject(new Error(\"Can't scale image, no blob generated\"))\n          resolve({ blob, type, src: dataURL })\n        },\n        type,\n        0.8\n      )\n    }\n    img.src = src\n  })\n}\n", "import { api } from \"../api\";\nimport { goToPageEvent } from \"../events\";\nimport { clearFormErrors, showApiError } from \"../formErrors\";\nimport {\n  CropArea,\n  DATA_TYPES,\n  DragHandle,\n  ImageSize,\n  cropFractions,\n  dragCropArea,\n  initCropArea,\n  loadOriginalImage,\n  parseAspectRatio,\n  resizeImage,\n} from \"../imageCrop\";\nimport Popup from \"../Popup\";\nimport { interpretApi } from \"./utils\";\n\n/**\n * A button that opens a popup for picking, cropping and uploading an image.\n *\n * The image is cropped and scaled down in the browser, so what reaches the\n * server is already the part the user chose. Works like voteit's\n * CropImageField, but in the legacy popup: the crop step takes over the popup\n * body instead of opening a dialog of its own.\n *\n * Attributes, all on the button:\n *   data-crop-image        \"[METHOD ]url\" to send the image to, as\n *                          interpretApi reads it. Marks the element.\n *   data-crop-image-field  Field name in the request body. Default \"image\".\n *   data-aspect-ratio      Width/height, \"1\" or \"16/9\". Default \"1\".\n *   data-crop-max-size     Longest side in pixels the image is scaled down\n *                          to. Default 640.\n *   data-current           URL of the current image, shown before a new one\n *                          is picked.\n *   data-rounded           Show the image and the crop frame as a circle.\n *   data-clearable         Offer removing the current image.\n *   data-title             Popup title. Falls back to the title attribute.\n *\n * Afterwards the page is reloaded, so every place showing the image updates.\n */\n\nconst ERROR_TEXT = \"Misslyckades med att spara bilden.\";\nconst HANDLES: DragHandle[] = [\"t\", \"b\", \"l\", \"r\", \"tl\", \"tr\", \"bl\", \"br\"];\n\nconst TEMPLATE = `\n<div class=\"crop-image\">\n  <div class=\"crop-image--select\">\n    <div class=\"crop-image--preview\">\n      <img alt=\"\" hidden>\n      <button type=\"button\" class=\"crop-image--placeholder\" data-action=\"select\">\n        <i class=\"material-icons\">photo_camera</i>\n        <span>V\u00E4lj eller sl\u00E4pp en bild</span>\n      </button>\n    </div>\n    <p class=\"meta\">Till\u00E5tna format \u00E4r JPEG, PNG, WebP och SVG. Du kan ocks\u00E5 sl\u00E4ppa en bild h\u00E4r.</p>\n    <p>\n      <button type=\"button\" data-action=\"select\"><i class=\"material-icons\">image</i> Byt bild</button>\n      <button type=\"button\" data-action=\"crop\" hidden><i class=\"material-icons\">crop</i> Besk\u00E4r</button>\n      <button type=\"button\" class=\"no\" data-action=\"clear\" hidden><i class=\"material-icons\">delete</i> Ta bort bild</button>\n    </p>\n    <p class=\"crop-image--buttons\">\n      <button type=\"button\" class=\"toggler\" data-action=\"close\">Avbryt</button>\n      <button type=\"button\" data-action=\"save\" disabled><i class=\"material-icons\">check</i> Spara</button>\n    </p>\n  </div>\n  <div class=\"crop-image--crop\" hidden>\n    <div class=\"crop-image--area\">\n      <img alt=\"\">\n      <div class=\"crop-frame\"></div>\n      <div class=\"crop-move\" data-handle=\"move\"></div>\n      ${HANDLES.map((h) => `<div class=\"handle handle-${h}\" data-handle=\"${h}\"></div>`).join(\"\")}\n    </div>\n    <p>Dra i rutan f\u00F6r att flytta den, och i h\u00F6rnen eller kanterna f\u00F6r att \u00E4ndra storleken.</p>\n    <p class=\"crop-image--buttons\">\n      <button type=\"button\" class=\"toggler\" data-action=\"crop-cancel\">Avbryt</button>\n      <button type=\"button\" data-action=\"crop-ok\"><i class=\"material-icons\">check</i> OK</button>\n    </p>\n  </div>\n  <input type=\"file\" hidden>\n</div>`;\n\nfunction isFileDrag(ev: DragEvent) {\n  return !!ev.dataTransfer?.types.includes(\"Files\");\n}\n\n/** The state of one opened popup. */\nclass CropImageDialog {\n  trigger: HTMLElement;\n  popup: Popup;\n  root: HTMLElement;\n  ratio: number;\n  field: string;\n  maxSize?: number;\n\n  file: File | null = null;\n  origSrc = \"\";\n  origSize: ImageSize | null = null;\n  cropArea: CropArea | null = null;\n  // The crop area when the crop step opened, to go back to on cancel.\n  cropStart: CropArea | null = null;\n  result: { blob: Blob; type: string } | null = null;\n  busy = false;\n\n  dragging: {\n    handle: DragHandle;\n    startX: number;\n    startY: number;\n    startArea: CropArea;\n  } | null = null;\n\n  constructor(trigger: HTMLElement) {\n    const { dataset } = trigger;\n    this.trigger = trigger;\n    this.ratio = parseAspectRatio(dataset.aspectRatio ?? \"1\");\n    this.field = dataset.cropImageField ?? \"image\";\n    this.maxSize = Number(dataset.cropMaxSize) || undefined;\n    this.popup = new Popup(dataset.title ?? trigger.title, \"\");\n    this.popup.content.innerHTML = TEMPLATE;\n    this.root = this.popup.content.querySelector(\".crop-image\")!;\n\n    if (dataset.rounded !== undefined) this.root.classList.add(\"is-rounded\");\n    this.root.style.setProperty(\"--aspect-ratio\", String(this.ratio));\n    this.$<HTMLInputElement>(\"input[type=file]\").accept = DATA_TYPES.join(\",\");\n    if (dataset.current) this.showPreview(dataset.current);\n    this.$(\"[data-action=clear]\").hidden =\n      dataset.clearable === undefined || !dataset.current;\n\n    this.root.addEventListener(\"click\", this.onClick.bind(this));\n    this.$(\"input[type=file]\").addEventListener(\"change\", (ev) => {\n      const file = (ev.target as HTMLInputElement).files?.[0];\n      if (file) this.selectFile(file);\n    });\n    this.$(\".crop-image--area\").addEventListener(\n      \"pointerdown\",\n      this.startDrag.bind(this),\n    );\n    this.onDrag = this.onDrag.bind(this);\n    this.stopDrag = this.stopDrag.bind(this);\n    this.setupDropZone();\n  }\n\n  $<T extends HTMLElement = HTMLElement>(selector: string) {\n    return this.root.querySelector<T>(selector)!;\n  }\n\n  onClick(ev: MouseEvent) {\n    const button = (ev.target as HTMLElement).closest<HTMLElement>(\n      \"[data-action]\",\n    );\n    if (!button || this.busy) return;\n    switch (button.dataset.action) {\n      case \"select\":\n        return this.$(\"input[type=file]\").click();\n      case \"crop\":\n        return this.showCrop();\n      case \"crop-cancel\":\n        this.cropArea = this.cropStart;\n        return this.showSelect();\n      case \"crop-ok\":\n        return this.applyCrop();\n      case \"clear\":\n        return this.clear();\n      case \"close\":\n        return this.popup.close();\n      case \"save\":\n        return this.save();\n    }\n  }\n\n  setupDropZone() {\n    const content = this.popup.content;\n    // dragenter and dragleave fire for every child passed over, so count\n    // them to know when the pointer actually leaves.\n    let depth = 0;\n    const setOver = (over: boolean) =>\n      this.root.classList.toggle(\"is-over\", over);\n    content.addEventListener(\"dragenter\", (ev) => {\n      if (!isFileDrag(ev)) return;\n      depth++;\n      setOver(true);\n    });\n    content.addEventListener(\"dragleave\", (ev) => {\n      if (!isFileDrag(ev)) return;\n      depth = Math.max(0, depth - 1);\n      if (!depth) setOver(false);\n    });\n    content.addEventListener(\"dragover\", (ev) => {\n      if (!isFileDrag(ev)) return;\n      ev.preventDefault();\n      const type = ev.dataTransfer!.items[0]?.type;\n      ev.dataTransfer!.dropEffect =\n        type && DATA_TYPES.includes(type) ? \"copy\" : \"none\";\n    });\n    content.addEventListener(\"drop\", (ev) => {\n      if (!isFileDrag(ev)) return;\n      ev.preventDefault();\n      depth = 0;\n      setOver(false);\n      const file = ev.dataTransfer!.files[0];\n      if (file && DATA_TYPES.includes(file.type) && !this.busy)\n        this.selectFile(file);\n    });\n  }\n\n  showPreview(src: string) {\n    const img = this.$<HTMLImageElement>(\".crop-image--preview img\");\n    img.src = src;\n    img.hidden = false;\n    this.$(\".crop-image--placeholder\").hidden = true;\n  }\n\n  showSelect() {\n    this.$(\".crop-image--crop\").hidden = true;\n    this.$(\".crop-image--select\").hidden = false;\n  }\n\n  showCrop() {\n    this.cropStart = this.cropArea;\n    this.$(\".crop-image--select\").hidden = true;\n    this.$(\".crop-image--crop\").hidden = false;\n    this.renderCrop();\n  }\n\n  setBusy(busy: boolean) {\n    this.busy = busy;\n    this.root.classList.toggle(\"is-busy\", busy);\n  }\n\n  async selectFile(file: File) {\n    this.setBusy(true);\n    clearFormErrors(this.root);\n    try {\n      const { src, orig } = await loadOriginalImage(file);\n      this.file = file;\n      this.origSrc = src;\n      this.origSize = orig;\n      this.cropArea = initCropArea(orig, this.ratio);\n      this.$<HTMLImageElement>(\".crop-image--area img\").src = src;\n      await this.updateResult();\n    } catch (e) {\n      console.error(e);\n      alert(\"Kunde inte l\u00E4sa bilden.\");\n      return;\n    } finally {\n      this.setBusy(false);\n    }\n    this.$(\"[data-action=crop]\").hidden = false;\n    this.$(\"[data-action=clear]\").hidden = true;\n    this.showCrop();\n  }\n\n  async updateResult() {\n    const { blob, type, src } = await resizeImage(\n      this.origSrc,\n      this.cropArea!,\n      this.maxSize,\n    );\n    this.result = { blob, type };\n    this.showPreview(src);\n    this.$<HTMLButtonElement>(\"[data-action=save]\").disabled = false;\n  }\n\n  async applyCrop() {\n    this.setBusy(true);\n    try {\n      await this.updateResult();\n    } finally {\n      this.setBusy(false);\n    }\n    this.showSelect();\n  }\n\n  renderCrop() {\n    if (!this.cropArea || !this.origSize) return;\n    const fractions = cropFractions(this.cropArea, this.origSize);\n    const area = this.$(\".crop-image--area\");\n    for (const [side, value] of Object.entries(fractions))\n      area.style.setProperty(`--crop-${side}`, `${value * 100}%`);\n  }\n\n  startDrag(ev: PointerEvent) {\n    const handle = (ev.target as HTMLElement).dataset.handle as\n      | DragHandle\n      | undefined;\n    if (!handle || !this.cropArea) return;\n    ev.preventDefault();\n    this.dragging = {\n      handle,\n      startX: ev.clientX,\n      startY: ev.clientY,\n      startArea: { ...this.cropArea },\n    };\n    window.addEventListener(\"pointermove\", this.onDrag);\n    window.addEventListener(\"pointerup\", this.stopDrag);\n    window.addEventListener(\"pointercancel\", this.stopDrag);\n  }\n\n  onDrag(ev: PointerEvent) {\n    if (!this.dragging || !this.origSize) return;\n    const img = this.$<HTMLImageElement>(\".crop-image--area img\");\n    const scaleX = this.origSize.width / img.clientWidth;\n    const scaleY = this.origSize.height / img.clientHeight;\n    const { handle, startX, startY, startArea } = this.dragging;\n    this.cropArea = dragCropArea(\n      handle,\n      startArea,\n      (ev.clientX - startX) * scaleX,\n      (ev.clientY - startY) * scaleY,\n      this.origSize,\n      this.ratio,\n    );\n    this.renderCrop();\n  }\n\n  stopDrag() {\n    this.dragging = null;\n    window.removeEventListener(\"pointermove\", this.onDrag);\n    window.removeEventListener(\"pointerup\", this.stopDrag);\n    window.removeEventListener(\"pointercancel\", this.stopDrag);\n  }\n\n  async clear() {\n    if (!confirm(\"Vill du ta bort bilden?\")) return;\n    const data = new FormData();\n    data.append(this.field, \"\");\n    await this.send(data);\n  }\n\n  async save() {\n    if (!this.result) return;\n    const { blob, type } = this.result;\n    const data = new FormData();\n    const ext = type.split(\"/\")[1];\n    data.append(this.field, new File([blob], `${this.field}.${ext}`, { type }));\n    await this.send(data);\n  }\n\n  async send(data: FormData) {\n    const { method, url } = interpretApi(this.trigger.dataset.cropImage!);\n    this.setBusy(true);\n    clearFormErrors(this.root);\n    try {\n      await api.request({ method, url, data });\n    } catch (e) {\n      showApiError(e, this.root, ERROR_TEXT);\n      return;\n    } finally {\n      this.setBusy(false);\n    }\n    this.popup.close();\n    goToPageEvent.emit({ href: location.href, currentTarget: this.trigger });\n  }\n}\n\nexport default class CropImage {\n  static selector = \"[data-crop-image]\";\n\n  constructor(elem: HTMLElement) {\n    elem.addEventListener(\"click\", (ev) => {\n      ev.preventDefault();\n      new CropImageDialog(elem);\n    });\n  }\n}\n", "import { userLoadedEvent } from '../events'\n\nexport default class DiscussPostAs {\n  static selector = '[data-post-as]'\n\n  linkElem: HTMLAnchorElement\n  listElem: HTMLUListElement\n  inputElem?: HTMLInputElement | null\n\n  get selected() {\n    return Number(localStorage['discuss:postingAs']) || 0\n  }\n\n  set selected(value: number) {\n    localStorage['discuss:postingAs'] = value\n    // Set input elem. 0 = indefined\n    if (this.inputElem) this.inputElem.value = value ? value.toString() : ''\n    this.linkElem.innerText = `${this.currentText} \u23F7`\n  }\n\n  get currentGroup() {\n    return user.data?.posting_groups.find((g) => g.id === this.selected)\n  }\n\n  get currentText() {\n    return this.currentGroup?.name ?? user.fullName\n  }\n\n  addListItem(text: string, value: number) {\n    const li = document.createElement('li')\n    const a = document.createElement('a')\n    a.href = '#'\n    a.innerText = text\n    a.addEventListener('click', (ev) => {\n      ev.preventDefault()\n      this.selected = value\n    })\n    li.append(a)\n    this.listElem.append(li)\n  }\n\n  /**\n   * To be run when user data is loaded\n   */\n  init() {\n    this.addListItem(user.fullName, 0)\n    for (const { id, name } of user.data!.posting_groups)\n      this.addListItem(name, id)\n    this.selected = Number(localStorage['discuss:postingAs']) || 0\n  }\n\n  constructor(elem: HTMLDivElement) {\n    this.linkElem = elem.querySelector('a.dropdown-toggle')!\n    this.listElem = elem.querySelector('ul')!\n    this.inputElem = elem\n      .closest('form')\n      ?.querySelector('input[name=\"posting_group\"]')\n    if (user.data) this.init()\n    else {\n      const ev = userLoadedEvent.on(() => {\n        ev.unregister()\n        this.init()\n      })\n    }\n  }\n}\n", "function setButtonsDisable(form: HTMLFormElement, disable = true) {\n  for (const button of form.querySelectorAll<HTMLButtonElement>(\n    '[type=\"submit\"]'\n  ))\n    button.disabled = disable\n}\n\n/** Let a form be submitted again. */\nexport function releaseSubmit(form: HTMLFormElement) {\n  delete form.dataset.submitting\n  setButtonsDisable(form, false)\n}\n\nexport default {\n  install() {\n    document.body.addEventListener('submit', (ev) => {\n      const form = ev.target as HTMLFormElement\n      if (form.dataset.submitting) {\n        ev.preventDefault()\n        return false\n      }\n      form.dataset.submitting = 'true'\n      setButtonsDisable(form)\n      // A .json-form releases itself as soon as the API answers. This is the\n      // fallback for a classic POST, where the page is expected to go away.\n      setTimeout(() => releaseSubmit(form), 5_000)\n    })\n  }\n}\n", "export default class DynamicChoices {\n  static selector = '.dynamic-choices'\n  api: string\n  choices: NodeListOf<HTMLButtonElement>\n  form: HTMLDivElement\n  wrapper: HTMLElement\n\n  constructor(elem: HTMLElement) {\n    this.wrapper = elem\n    this.form = this.wrapper.querySelector('#dynamic-form')!\n    this.api = this.wrapper.dataset.api!\n    this.initialize(this.wrapper)\n    this.choices = this.wrapper.querySelectorAll('button.choice')\n    for (const btn of this.choices)\n      btn.addEventListener('click', this.choiceHandler.bind(this))\n    this.onChoiceClick(this.wrapper)\n  }\n\n  choiceHandler(ev: PointerEvent) {\n    const button = ev.currentTarget as HTMLButtonElement\n    const wrapper = button.parentElement!\n    if (button.classList.contains('active')) return\n\n    for (const btn of this.choices) {\n      if (btn === button) button.classList.add('active')\n      else btn.classList.remove('active')\n    }\n\n    if (wrapper.classList.contains('chosen')) this.initialize(wrapper)\n    else wrapper.classList.add('chosen')\n    button.classList.add('on')\n\n    if (button.classList.contains('target')) {\n      for (const [key, value] of Object.entries(button.dataset))\n        this.form.querySelector(`#id_${key}`)?.setAttribute('value', value!)\n      this.form.style.display = 'block'\n    } else {\n      const target = this.wrapper.querySelector<HTMLElement>(\n        button.dataset.target!\n      )\n      if (!target) throw new Error('No target found for button')\n      target.classList.add('active')\n      this.onChoiceClick(target)\n    }\n  }\n\n  initialize(elem: HTMLElement) {\n    for (const div of elem.querySelectorAll('div'))\n      div.classList.remove('chosen', 'active')\n    for (const btn of elem.querySelectorAll('button.choice'))\n      btn.classList.remove('on')\n    this.form.style.display = 'none'\n  }\n\n  /**\n   * Automatically activate single button child\n   */\n  onChoiceClick(elem: HTMLElement) {\n    const buttons = elem.querySelectorAll<HTMLButtonElement>(':scope > button')\n    if (buttons.length === 1) buttons[0].click()\n  }\n}\n", "import { contentInsertedEvent } from '../events'\n\nlet delayTimeout: ReturnType<typeof setTimeout>\nfunction delayed(fn: () => unknown, ms = 100) {\n  return () => {\n    clearTimeout(delayTimeout)\n    delayTimeout = setTimeout(fn, ms)\n  }\n}\n\nexport default class DynamicForm {\n  static selector = 'form.dynamic-form'\n\n  form: HTMLFormElement\n  filterElement: HTMLInputElement | null\n  targetElement: HTMLDivElement | null\n\n  constructor(form: HTMLFormElement) {\n    this.form = form\n    form.addEventListener('submit', (e) => e.preventDefault())\n    this.filterElement = this.form.querySelector('input.dynamic-form--filter')\n    this.filterElement?.addEventListener(\n      'keyup',\n      delayed(this.handleFilter.bind(this))\n    )\n    this.targetElement = this.form.querySelector('.dynamic-form--target')\n  }\n\n  async handleFilter() {\n    if (!this.filterElement || !this.targetElement)\n      throw new Error('Missing filter or target elements')\n    const { action, method } = this.form\n    const data = {\n      [this.filterElement.name]: this.filterElement.value\n    }\n    const isGetMethod = method.toUpperCase() === 'GET'\n    const response = await (isGetMethod\n      ? fetch(`${action}?${new URLSearchParams(data)}`, { method })\n      : fetch(action, { body: JSON.stringify(data), method }))\n    const text = await response.text()\n    this.targetElement.innerHTML = text\n    contentInsertedEvent.emit(this.targetElement)\n  }\n}\n", "import { api } from '../api'\nimport { contentInsertedEvent, goToPageEvent, popupCloseEvent } from '../events'\nimport { clearFormErrors, showApiError } from '../formErrors'\nimport { getFormData } from '../utils'\nimport { releaseSubmit } from './FormSubmitOnce'\nimport { interpretApi } from './utils'\n\n/**\n * Post a server-rendered Django form to the REST API instead of to a view.\n *\n * The form keeps its Django markup and its {% csrf_token %}; this only takes\n * over the submit. Field errors are painted back onto the form by formErrors,\n * so an invalid write looks the way it always did.\n *\n * Attributes, all on the <form>:\n *   data-form-api     \"[METHOD ]url\", as interpretApi reads it. Naming the\n *                     endpoint is what marks the form, the way data-post-api\n *                     marks a button for ApiPost.\n *   data-redirect     Where to go afterwards, via the usual ajax navigation.\n *                     May contain {field} placeholders, filled in from the\n *                     response - a create learns the slug of the thing it just\n *                     made only from there. Which region that navigation\n *                     replaces comes from the nearest [data-ajax-target], and\n *                     closest() counts the form itself - so a form that edits\n *                     something rendered outside its own region can carry\n *                     data-ajax-target=\"#main-content\" and reload the lot.\n *   data-popup-close  Close the popup instead of navigating. For a form opened\n *                     in the popup whose result reaches the page by other\n *                     means, such as the comment socket.\n *   data-error-text   Message for the failures that cannot be shown per field.\n */\n\nconst SELECTOR = 'form[data-form-api]'\nconst PLACEHOLDER = /\\{(\\w+)\\}/g\nconst DEFAULT_ERROR = 'Misslyckades med att spara.'\n\n/**\n * Forms with a write in flight. FormSubmitOnce guards the *native* submit, but\n * it cannot stop this handler firing a second request, and which of the two\n * listeners runs first is an accident of registration order - so guard here too.\n */\nconst inFlight = new WeakSet<HTMLFormElement>()\n\nfunction resolveRedirect(template: string, data: unknown) {\n  return template.replace(PLACEHOLDER, (_match, key: string) => {\n    const value = (data as Record<string, unknown> | null)?.[key]\n    if (value === undefined || value === null)\n      throw new Error(`data-redirect needs \"${key}\", which the API did not send`)\n    return encodeURIComponent(String(value))\n  })\n}\n\nasync function submitForm(form: HTMLFormElement) {\n  const { formApi, popupClose, redirect, errorText } = form.dataset\n  const { method, url } = interpretApi(formApi!)\n  try {\n    const { data } = await api.request({ method, url, data: getFormData(form) })\n    clearFormErrors(form)\n    // Append mode: the serializer answers with rendered {html}, which goes at\n    // the end of the neighbouring container and the form starts over.\n    const container = form.parentElement?.querySelector('.json-add-container')\n    if (container) {\n      container.insertAdjacentHTML('beforeend', data.html)\n      // The inserted markup has components of its own - delete buttons, embeds.\n      contentInsertedEvent.emit(container as HTMLElement)\n      form.reset()\n      return\n    }\n    if (popupClose !== undefined) return popupCloseEvent.emit()\n    if (redirect)\n      goToPageEvent.emit({\n        href: resolveRedirect(redirect, data),\n        currentTarget: form\n      })\n  } catch (e) {\n    showApiError(e, form, errorText ?? DEFAULT_ERROR)\n  }\n}\n\nexport default {\n  selector: SELECTOR,\n  install() {\n    document.body.addEventListener('submit', async (ev) => {\n      const form = ev.target as HTMLFormElement\n      if (!form.matches(SELECTOR)) return\n      ev.preventDefault()\n      if (inFlight.has(form)) return\n      inFlight.add(form)\n      try {\n        await submitForm(form)\n      } finally {\n        inFlight.delete(form)\n        releaseSubmit(form)\n      }\n    })\n  }\n}\n", "import { isHTMLElement } from '../utils'\n\nlet currentMenu: Menu | null = null\n\n/**\n * Click outside reaction\n */\ndocument.addEventListener('click', (ev) => {\n  if (!currentMenu || !isHTMLElement(ev.target!)) return\n  if (!currentMenu.target.contains(ev.target)) currentMenu.close()\n})\n\nexport default class Menu {\n  static selector = 'nav a.toggler'\n  isOpen = false\n  target: HTMLElement\n  toggler: HTMLAnchorElement\n\n  constructor(toggler: HTMLAnchorElement) {\n    this.toggler = toggler\n    this.target = document.querySelector(toggler.getAttribute('href')!)!\n    toggler.addEventListener('click', this.click.bind(this))\n  }\n\n  click(event: PointerEvent) {\n    event.preventDefault()\n    const thisOpen = this.isOpen\n    if (currentMenu) currentMenu.close()\n    if (!thisOpen) this.open()\n    else currentMenu = null\n    this.toggler.blur()\n  }\n\n  close() {\n    this.target.classList.remove('open')\n    this.toggler.classList.remove('active')\n    this.isOpen = false\n    document.body.classList.remove(`${this.target.id}-is-open`)\n  }\n\n  open() {\n    this.target.classList.add('open')\n    this.toggler.classList.add('active')\n    this.isOpen = true\n    document.body.classList.add(`${this.target.id}-is-open`)\n    currentMenu = this\n  }\n}\n", "import { api } from '../api'\nimport { htmlStringToDom, isHTMLElement } from '../utils'\n\nexport default class Pagination {\n  static selector = '.pagination-container'\n  container: HTMLElement\n  moreButton: HTMLAnchorElement | HTMLButtonElement | null = null\n  observer: IntersectionObserver\n\n  constructor(container: HTMLElement) {\n    this.container = container\n    this.observer = new IntersectionObserver((entries) => {\n      for (const { isIntersecting, target } of entries) {\n        if (!isIntersecting || !isHTMLElement(target)) continue\n        this.observer.unobserve(target)\n        this.loadNext()\n      }\n    })\n    this.attachListener()\n  }\n\n  attachListener() {\n    this.moreButton = this.container.querySelector('.pagination')\n    if (!this.moreButton) return\n    this.moreButton.addEventListener('click', (ev) => {\n      ev.preventDefault()\n      this.loadNext()\n    })\n    if ('autoload' in this.moreButton.dataset)\n      this.observer.observe(this.moreButton)\n  }\n\n  async loadNext() {\n    if (!this.moreButton) throw new Error('No more to load?')\n    this.moreButton.setAttribute('disabled', '')\n    const href = this.moreButton.getAttribute('href')!\n    try {\n      const { data } = await api.get(href)\n      this.success(data)\n    } catch (e) {\n      // TODO\n      console.error(e)\n    }\n    this.moreButton?.removeAttribute('disabled')\n    this.attachListener()\n  }\n\n  success(html: string) {\n    const dom = htmlStringToDom(html)\n    this.moreButton?.parentElement?.remove()\n    dom.querySelectorAll('body > *').forEach((elem) => {\n      this.container.append(elem)\n    })\n    // TODO: Check if any paginator content need components. Could be a problem with multiple loads of components.\n    // contentInsertedEvent.emit(this.container)\n  }\n}\n", "import Popup from '../Popup'\nimport { isHTMLElement } from '../utils'\n\nexport default {\n  className: 'popup-link',\n\n  install() {\n    document.body.addEventListener('click', this.click.bind(this))\n  },\n\n  click(event: MouseEvent) {\n    if (!isHTMLElement(event.target!)) return\n    const linkTag = event.target.closest('a')\n    if (linkTag && linkTag.classList.contains(this.className)) {\n      event.preventDefault()\n      new Popup(\n        linkTag.title,\n        linkTag.href,\n        undefined,\n        linkTag.dataset.popupMethod\n      )\n    }\n  }\n}\n", "import { api } from '../api'\n\nexport default class RadioButtons {\n  url: string\n  attribute: string\n  container: HTMLElement\n  data: { [k: string]: string | undefined }\n  method: string\n  static selector = '.json-radio'\n\n  constructor(elem: HTMLElement) {\n    this.container = elem\n    const { api, attribute, ...data } = elem.dataset\n    if (!api) throw new Error('Missing data-api on json-radio element')\n    this.attribute = attribute ?? 'value'\n    if (api.includes(' ')) {\n      const [method, href] = api.split(/\\s+/)\n      this.url = href\n      this.method = method\n    } else {\n      this.url = api\n      this.method = 'POST'\n    }\n    this.data = data\n    delete this.data.api\n    for (const button of elem.querySelectorAll('button')) {\n      button.addEventListener('click', this.clickHandler.bind(this))\n    }\n  }\n\n  async clickHandler(event: PointerEvent) {\n    event.preventDefault()\n    const current = event.currentTarget as HTMLButtonElement\n    current.blur()\n    // The active button is the state we are already in: nothing to post.\n    if (current.classList.contains('active')) return\n    try {\n      await api.request({\n        method: this.method,\n        url: this.url,\n        data: {\n          ...this.data,\n          [this.attribute]: current.value\n        }\n      })\n      this.container.querySelector('.active')?.classList.remove('active')\n      current.classList.add('active')\n    } catch {}\n  }\n}\n", "import $ from 'jquery'\nimport { api } from '../api'\n\nexport default class ReadMarker {\n  static selector = '.click-read'\n\n  constructor(element: HTMLElement) {\n    const id = element.id\n    const storageKey = `has-read-${id}`\n\n    if (!localStorage[storageKey]) element.classList.add('open')\n    const closer = element.querySelector('a.closer')\n    if (!closer) throw new Error('Missing closer element to mark read-click')\n\n    closer.addEventListener('click', (ev) => {\n      ev.preventDefault()\n      $(element).slideUp()\n      if (element.classList.contains('json'))\n        api.post((ev.currentTarget as HTMLAnchorElement).href, { id })\n      else localStorage[storageKey] = 'True'\n    })\n  }\n}\n", "export default class ResponsiveEmbed {\n  static selector = '.embed-container.photo'\n  container: HTMLDivElement\n  retries = 100\n  retryDelay = 100\n  embed: HTMLIFrameElement | null = null\n  orig = { width: 0, height: 0, ratio: 0 }\n\n  constructor(elem: HTMLDivElement) {\n    this.container = elem\n    window.addEventListener('resize', this.resize.bind(this))\n    this.checkIt()\n  }\n\n  get parentWidth() {\n    return this.embed?.parentElement?.getBoundingClientRect().width ?? 0\n  }\n\n  setEmbedSize(width: number, height: number) {\n    if (!this.embed) return\n    this.embed.style.width = `${width}px`\n    this.embed.style.height = `${height}px`\n  }\n\n  resize() {\n    if (!this.embed) return\n\n    if (this.parentWidth > this.orig.width)\n      this.setEmbedSize(this.orig.width, this.orig.height)\n    else\n      this.setEmbedSize(\n        this.embed.parentElement!.clientWidth,\n        this.embed.parentElement!.clientWidth * this.orig.ratio\n      )\n  }\n\n  retry() {\n    if (this.retries <= 0) return\n    this.retries -= 1\n    setTimeout(this.checkIt.bind(this), this.retryDelay) // Try again\n  }\n\n  setOriginalSize(width: number, height: number) {\n    this.orig = { width, height, ratio: height / width }\n  }\n\n  checkIt() {\n    this.embed = this.container.querySelector('iframe')\n    if (!this.embed) return this.retry()\n\n    if (this.embed.classList.contains('flickr-embed-frame')) {\n      const { naturalWidth, naturalHeight } = this.embed.dataset\n      this.setOriginalSize(Number(naturalWidth), Number(naturalHeight))\n    } else {\n      const { width, height } = this.embed.getBoundingClientRect()\n      this.setOriginalSize(width, height)\n    }\n    this.embed.setAttribute('scrolling', 'no') // iOS fix\n    this.container.style.paddingBottom = `${this.orig.ratio * 100}%`\n    this.resize()\n  }\n}\n", "import $ from 'jquery'\nimport { getNamespace } from '../utils'\nimport { namespaceEvent, pageUpdateEvent } from '../events'\nimport { api } from '../api'\nimport { isAxiosError, isCancel } from 'axios'\n\nconst TIMEOUT = 250 // timeout in ms\nconst MIN_CHARS = 3 // Type minimum chars before searching\nconst MODES = ['searching', 'type-more']\nconst namespaces = ['news', 'discuss', 'knowledge']\nlet controller: AbortController | null = null\n\nexport default class SiteSearch {\n  static selector = '#site-search'\n  static onlyInitial = true\n  active = false\n  checkboxes: NodeListOf<HTMLInputElement>\n  elem: HTMLElement\n  timeout?: ReturnType<typeof setTimeout>\n  resultsElem: HTMLElement\n  qElem: HTMLInputElement\n  query: string\n\n  constructor(elem: HTMLElement) {\n    this.elem = elem\n    this.qElem = elem.querySelector<HTMLInputElement>('[name=\"q\"]')!\n    this.checkboxes = elem.querySelectorAll('[type=\"checkbox\"]')\n    this.resultsElem = elem.querySelector('#site-search-results')!\n    this.query = ''\n\n    namespaceEvent.on((namespace) => {\n      namespace = namespace && namespace.split(':')[0]\n      const setAll = namespaces.indexOf(namespace) === -1\n      this.checkboxes.forEach((element) => {\n        const setThis = setAll || element.name === namespace\n        if (element.checked !== setThis) {\n          element.checked = setThis\n          element.dispatchEvent(new Event('change'))\n        }\n      })\n    })\n    pageUpdateEvent.on(() => {\n      if (this.active) this.close()\n      // Because page loads resets body classes.\n      // this.addClass('site-search-active', 'body')\n    })\n    // Set initial namespace\n    namespaceEvent.emit(getNamespace(document))\n    elem.querySelector('.activate')?.addEventListener('click', () => {\n      if (this.active) this.close()\n      else this.open()\n    })\n    elem.querySelector('form')?.addEventListener('submit', (event) => {\n      event.preventDefault()\n    })\n    this.qElem.addEventListener('input', () => {\n      this.searchTimeout()\n    })\n    this.checkboxes.forEach((checkbox) => {\n      checkbox.addEventListener('change', () => {\n        this.searchTimeout(true)\n      })\n    })\n  }\n\n  searchTimeout(forceUpdate = false) {\n    if (!forceUpdate && this.query === this.qElem.value.trim()) return\n    this.query = this.qElem.value.trim()\n    this.resultsElem.innerHTML = ''\n    clearTimeout(this.timeout)\n    if (controller) {\n      controller.abort()\n      controller = null\n    }\n    if (!this.active) return\n\n    if (this.query.length === 0) this.setMode()\n    else if (this.query.length < MIN_CHARS) this.setMode('type-more')\n    else {\n      this.setMode('searching')\n      this.timeout = setTimeout(this.doSearch.bind(this), TIMEOUT)\n    }\n  }\n\n  close() {\n    this.removeClass('active')\n    this.removeClass('site-search-active', 'body')\n    this.active = false\n  }\n\n  open() {\n    this.addClass('active')\n    this.addClass('site-search-active', 'body')\n    this.elem.scrollIntoView(true)\n    this.active = true\n    this.qElem.focus()\n    this.searchTimeout(true)\n  }\n\n  addClass(name: string, selector?: string) {\n    const elem = selector ? document.querySelector(selector)! : this.elem\n    elem.classList.add(name)\n  }\n\n  removeClass(name: string, selector?: string) {\n    const elem = selector ? document.querySelector(selector)! : this.elem\n    elem.classList.remove(name)\n  }\n\n  setMode(mode?: 'searching' | 'type-more') {\n    MODES.forEach((m) => {\n      if (mode === m) this.addClass(m)\n      else this.removeClass(m)\n    })\n  }\n\n  setResults(html: string) {\n    this.resultsElem.innerHTML = html\n  }\n\n  setErrorText(text: string) {\n    this.setResults(`<span class=\"meta\"><strong>${text}</strong></span>`)\n  }\n\n  async doSearch() {\n    const namespaces = Array.from(this.checkboxes)\n      .filter((cb) => cb.checked)\n      .map((cb) => cb.name)\n    controller = new AbortController()\n    try {\n      const { data } = await api.get('/search/', {\n        signal: controller.signal,\n        params: { q: this.query, namespaces }\n      })\n      this.setResults(data)\n    } catch (e) {\n      if (!isAxiosError(e) || isCancel(e)) return\n      if (e.response) return this.setErrorText(e.message)\n      this.setErrorText('Inget n\u00E4tverk')\n    } finally {\n      this.setMode()\n    }\n  }\n}\n", "import { isHTMLElement } from '../utils'\n\nexport default {\n  buttonSelector: '[data-tab-name]',\n  containerselector: '[data-tabs]',\n\n  install() {\n    document.body.addEventListener('click', (ev) => {\n      if (!ev.target || !isHTMLElement(ev.target)) return\n      const button = ev.target.closest(this.buttonSelector)\n      if (!button || !isHTMLElement(button)) return\n      // Can't use closest(), dont know why.\n      const container = button.parentElement!\n      const name = button.dataset.tabName!\n      this.setActive(this.getButtons(container), name)\n      this.setActive(this.getContentTabs(container.dataset.tabs!), name)\n    })\n  },\n\n  getButtons(container: HTMLElement) {\n    return container.querySelectorAll<HTMLElement>(this.buttonSelector)\n  },\n\n  getContentTabs(id: string) {\n    return document.querySelectorAll<HTMLElement>(\n      `[data-tab-content=\"${id}\"] [data-tab-name]`\n    )\n  },\n\n  setActive(elements: NodeListOf<HTMLElement>, name: string) {\n    for (const { dataset } of elements) {\n      if (dataset.tabName === name) dataset.active = ''\n      else delete dataset.active\n    }\n  }\n}\n", "import { api } from '../api'\nimport { updateTarget } from '../navigation'\nimport { interpretApi } from './utils'\n\nexport default class ToggleButton {\n  button: HTMLAnchorElement | HTMLButtonElement\n  icon: { on?: string; off?: string }\n  iconElem: HTMLElement | null\n  offMethod?: string\n  once: boolean\n  reload: boolean\n  state: boolean\n  statusElem: HTMLSpanElement | null\n  updateTarget?: string\n  static selector = 'a[data-toggle-api],button[data-toggle-api]'\n\n  constructor(elem: HTMLAnchorElement | HTMLButtonElement) {\n    this.button = elem\n    const {\n      icon,\n      icon_on,\n      icon_off,\n      toggleApi,\n      toggleAttr,\n      toggleOffApi,\n      toggleOnce,\n      reload,\n      updateTarget,\n      ...dataset\n    } = elem.dataset\n    this.icon = {\n      off: icon_off ?? (icon && `${icon}_off`),\n      on: icon_on ?? (icon && `${icon}_on`)\n    }\n    this.state = elem.classList.contains('is-true')\n    this.iconElem = elem.querySelector('.material-icons')\n    // A one-way toggle, e.g. a ping: once it is on there is no turning it off.\n    this.once = typeof toggleOnce === 'string'\n    this.reload = typeof reload === 'string'\n    this.statusElem = elem.parentElement?.querySelector('.status') ?? null\n    this.updateTarget = updateTarget\n    this.setState(elem.classList.contains('is-true'))\n\n    const attribute = toggleAttr || 'state'\n    const offApi = toggleOffApi || toggleApi!\n\n    elem.addEventListener('click', async (ev) => {\n      ev.preventDefault()\n      if (this.once && this.state) return\n      const { method, url } = interpretApi(\n        this.state ? offApi : toggleApi!\n      )\n      const { data } = await api.request({\n        data: { [attribute]: !this.state, ...dataset },\n        method,\n        url\n      })\n      this.handleResponse(data, attribute)\n      this.button.blur()\n    })\n  }\n\n  setState(state: boolean) {\n    this.state = state\n    if (this.once && state) this.button.setAttribute('aria-disabled', 'true')\n    if (state) {\n      if (this.icon.on && this.iconElem) this.iconElem.innerHTML = this.icon.on\n      this.button.classList.add('is-true')\n    } else {\n      if (this.icon.off && this.iconElem)\n        this.iconElem.innerHTML = this.icon.off\n      this.button.classList.remove('is-true')\n    }\n  }\n\n  setStatus(status?: string | number) {\n    if (typeof status === 'undefined' || !this.statusElem) return\n    this.statusElem.innerHTML = String(status)\n  }\n\n  handleResponse(response: any, attribute: string) {\n    if (this.reload) return location.reload()\n    // A 204 has no body, and an action that only flips the toggle need not\n    // echo it back, so fall back to the state we asked for.\n    this.setState(response?.[attribute] ?? !this.state)\n    // \"status\" is the counter or label beside the toggle, e.g. a like count.\n    this.setStatus(response?.status)\n    if (this.updateTarget) updateTarget(this.updateTarget)\n  }\n}\n", "import { isHTMLElement } from '../utils'\n\nfunction isAnchorElement(elem: EventTarget): elem is HTMLAnchorElement {\n  return 'href' in elem\n}\n\nexport default class Toggler {\n  static selector = '#takeover .menu-toggler'\n  static onlyInitial = true\n\n  constructor(elem: HTMLAnchorElement) {\n    elem.addEventListener('click', (ev) => {\n      ev.preventDefault()\n      const container = document.querySelector('#takeover')!\n      const button = ev.currentTarget\n      if (!button || !isAnchorElement(button)) return\n      const target = document.querySelector(button.getAttribute('href')!)\n      if (!target) return\n\n      if (button.classList.contains('active')) {\n        container.classList.remove('open')\n        button.classList.remove('active')\n        target.classList.remove('open')\n      } else {\n        container.classList.add('open')\n        container.querySelector('.open')?.classList.remove('open')\n        container\n          .querySelector('.menu-toggler.active')\n          ?.classList.remove('active')\n        target.classList.add('open')\n        button.classList.add('active')\n      }\n    })\n  }\n}\n", "import { contentInsertedEvent } from '../events'\nimport ApiDelete from './ApiDelete'\nimport ApiPost from './ApiPost'\nimport ContentFilterButton from './ContentFilterButton'\nimport ContextMenu from './ContextMenu'\nimport CropImage from './CropImage'\nimport DiscussPostAs from './DiscussPostAs'\nimport FormSubmitOnce from './FormSubmitOnce'\nimport DynamicChoices from './DynamicChoices'\nimport DynamicForm from './DynamicForm'\nimport JsonForm from './JsonForm'\nimport Menu from './Menu'\nimport Pagination from './Pagination'\nimport PopupLink from './PopupLink'\nimport RadioButtons from './RadioButtons'\nimport ReadMarker from './ReadMarker'\nimport ResponsiveEmbed from './ResponsiveEmbed'\nimport SiteSearch from './SiteSearch'\nimport Tabs from './Tabs'\nimport ToggleButton from './ToggleButton'\nimport Toggler from './Toggler'\n\ndeclare class ClsComponent {\n  static selector: string\n  constructor(elem: HTMLElement)\n}\n\ndeclare class InitialOnlyComponent extends ClsComponent {\n  static onlyInitial: true\n}\n\ntype InstallComponent = { install(): void }\n\nconst allComponents: (typeof ClsComponent | InstallComponent)[] = [\n  ApiDelete,\n  ApiPost,\n  ContentFilterButton,\n  ContextMenu,\n  CropImage,\n  DiscussPostAs,\n  DynamicChoices,\n  DynamicForm,\n  FormSubmitOnce,\n  JsonForm,\n  Menu,\n  Pagination,\n  PopupLink,\n  RadioButtons,\n  ReadMarker,\n  ResponsiveEmbed,\n  SiteSearch,\n  Tabs,\n  ToggleButton,\n  Toggler\n]\n\nfunction isInstallComponent(\n  component: ClsComponent | InstallComponent\n): component is InstallComponent {\n  return 'install' in component\n}\n\nfunction isIntialOnlyComponent(\n  component: ClsComponent | InstallComponent\n): component is typeof InitialOnlyComponent {\n  return 'onlyInitial' in component\n}\n\nconst dynamicComponents = allComponents.filter(\n  (c) => !isInstallComponent(c) && !isIntialOnlyComponent(c)\n)\n\n// Function to create objects for elements that match selector,\nexport default function registerComponents(target?: HTMLElement) {\n  const components = target ? dynamicComponents : allComponents\n  for (const component of components) {\n    if (isInstallComponent(component)) component.install()\n    else {\n      for (const elem of (target ?? document).querySelectorAll<HTMLElement>(\n        component.selector\n      ))\n        new component(elem)\n    }\n  }\n}\n\n// Also dynamically inserted when content is inserted\ncontentInsertedEvent.on(registerComponents)\n", "import { isAxiosError } from 'axios'\nimport $ from 'jquery'\nimport * as events from './events'\nimport notifications from './notifications'\nimport defineChannel from './socket/defineChannel'\nimport { socket } from './socket'\nimport Popup from './Popup'\nimport { api } from './api'\nimport { beforeNextNavigate } from './navigation'\n\n// Must run before Bootstrap is imported: Bootstrap 3 throws unless it finds\n// jQuery on the global object at load time.\nObject.assign(globalThis, {\n  jQuery: $,\n  $,\n  notifications,\n  MP: {\n    api,\n    defineChannel,\n    events,\n    navigation: { beforeNextNavigate },\n    Popup,\n    socket,\n    isAxiosError\n  }\n})\n", "import { any } from 'itertools'\n\nimport { socket } from '.'\nimport { type IChannelsMessage, SocketState } from './types'\n\nfunction* count(): Generator<number, number> {\n  let n = 0\n  while (true) yield ++n\n}\n\nexport enum ErrorStatus {\n  NotFound = 404,\n  Timeout = 408\n}\n\ninterface ErrorMsg {\n  id: string\n}\n\nexport class SubscribeError extends Error {\n  public status: number\n\n  constructor(status: ErrorStatus, message?: string) {\n    super(message ?? ErrorStatus[status])\n    this.status = status\n  }\n}\n\nexport function isSubscribeError(err: unknown): err is SubscribeError {\n  return err instanceof SubscribeError\n}\n\ninterface IChannelOptions {\n  leaveDelay: number\n  subscribeTimeout: number\n}\n\nfunction isSubscribedMessage<P extends {}>(\n  msg: IChannelsMessage\n): msg is IChannelsMessage<P> {\n  return msg.action === 'subscribed'\n}\n\nfunction isSubscribeFailMessage(\n  msg: IChannelsMessage\n): msg is IChannelsMessage<ErrorMsg> {\n  return msg.action === 'subscribe_error'\n}\n\nconst DEFAULT_OPTIONS = {\n  leaveDelay: 5_000, // 5 secs\n  subscribeTimeout: 20_000 // 20 secs\n} as const\n\n/**\n * Create a subscribtion handler for a named channel.\n * @param name Namespace of this channel\n */\nexport default function defineChannel<\n  Payload extends { id: string } = { id: string }\n>(name: string, opts?: Partial<IChannelOptions>) {\n  const options = { ...DEFAULT_OPTIONS, ...opts }\n  const onSubscribedCallbacks = new Set<(payload: Payload) => void>()\n  // Map subscription id to channel id\n  const subscriptions = new Map<number, string>()\n  // Channels that are awaiting subscription\n  const subscribingIds = new Set<string>()\n  // Channels that have a successful subscription\n  const subscribedIds = new Set<string>()\n  const subscribedCallbacks = new Map<string, ((payload: Payload) => void)[]>()\n  const subscribeErrorCallbacks = new Map<string, (() => void)[]>()\n  const idGenerator = count()\n\n  /**\n   * Registers callback, setting callbacks Array when needed\n   */\n  function registerCallback<Fn extends Function>(\n    map: Map<string, Fn[]>,\n    id: string,\n    cb: Fn\n  ) {\n    if (!map.has(id)) map.set(id, [])\n    map.get(id)!.push(cb)\n  }\n\n  /**\n   * Forget the pending callbacks for a channel. Bookkeeping of what is\n   * subscribed lives outside them, so that it stays right for the\n   * subscriptions that a reconnect renews rather than a caller awaits.\n   */\n  function clearCallbacks(id: string) {\n    subscribeErrorCallbacks.delete(id)\n    subscribedCallbacks.delete(id)\n    subscribingIds.delete(id)\n  }\n\n  socket.registerTypeHandler(name, (msg) => {\n    if (isSubscribedMessage<Payload>(msg)) {\n      const callbacks = subscribedCallbacks.get(msg.payload.id) ?? []\n      clearCallbacks(msg.payload.id)\n      subscribedIds.add(msg.payload.id)\n      for (const cb of callbacks) cb(msg.payload)\n      for (const cb of onSubscribedCallbacks) cb(msg.payload)\n    }\n    if (isSubscribeFailMessage(msg)) {\n      const callbacks = subscribeErrorCallbacks.get(msg.payload.id) ?? []\n      clearCallbacks(msg.payload.id)\n      subscribedIds.delete(msg.payload.id)\n      for (const cb of callbacks) cb()\n    }\n  })\n\n  socket.onReadyStateChanged((readyState) => {\n    if (readyState !== SocketState.Open) {\n      // The server keeps no record of our subscriptions across a connection,\n      // and a subscribe that was in flight will never be answered. Dropping\n      // both lets the next open subscribe everything again from scratch.\n      subscribedIds.clear()\n      subscribingIds.clear()\n      return\n    }\n    const shouldSubscribeTo = new Set(subscriptions.values())\n    for (const id of shouldSubscribeTo) performSubscribe(id)\n  })\n\n  function send(action: string, payload: object) {\n    socket.send(`${name}.${action}`, payload)\n  }\n\n  /**\n   * Create a Promise that resolves when channel is properly subscribed or rejects on timeout.\n   */\n  function getSubscriptionPromise(id: string) {\n    return new Promise<void>((resolve, reject) => {\n      // If rejected, the promise will not resolve later, no matter what\n      const timeout = setTimeout(() => {\n        clearCallbacks(id)\n        reject(new SubscribeError(ErrorStatus.Timeout))\n      }, options.subscribeTimeout)\n      registerCallback(subscribedCallbacks, id, () => {\n        clearTimeout(timeout)\n        resolve()\n      })\n      registerCallback(subscribeErrorCallbacks, id, () => {\n        clearTimeout(timeout)\n        reject(new SubscribeError(ErrorStatus.NotFound))\n      })\n    })\n  }\n\n  /**\n   * Make sure channel is subscribed when there is a subscription.\n   * @returns true if subscription should be under way\n   */\n  function performSubscribe(id: string) {\n    // subscribing logic ensures that multiple subscribers can await the subscription\n    const isSubscribing = subscribingIds.has(id)\n    const isSubscribed = subscribedIds.has(id)\n    const shouldSubscribe = any(subscriptions.values(), (v) => v === id)\n    if (socket.isOpen) {\n      // A subscribe in flight counts as subscribed here, so that leaving\n      // before the server answered still sends the unsubscribe.\n      if (!shouldSubscribe && (isSubscribed || isSubscribing)) {\n        subscribedIds.delete(id)\n        subscribingIds.delete(id)\n        send('unsubscribe', { id })\n      }\n      if (shouldSubscribe && !isSubscribed && !isSubscribing) {\n        subscribingIds.add(id) // Hinders another subscription from triggering subscription message\n        send('subscribe', { id })\n      }\n    }\n    return shouldSubscribe && !isSubscribed\n  }\n\n  /**\n   * Subscribe to a channel. Caller must keep the leave() function in order to cancel subscription.\n   */\n  async function subscribe(id: string) {\n    const subscriptionId = idGenerator.next().value\n    subscriptions.set(subscriptionId, id)\n    if (performSubscribe(id)) await getSubscriptionPromise(id)\n    return {\n      leave() {\n        if (!subscriptions.has(subscriptionId))\n          throw new Error(`Subscription is already canceled`)\n        subscriptions.delete(subscriptionId)\n        setTimeout(() => performSubscribe(id), options.leaveDelay)\n      }\n    }\n  }\n\n  /**\n   * Listen for every successful subscription on this channel, the renewals\n   * made after a reconnect included.\n   * @returns dispose method - call to remove handler\n   */\n  function onSubscribe(cb: (payload: Payload) => void) {\n    onSubscribedCallbacks.add(cb)\n    return () => {\n      onSubscribedCallbacks.delete(cb)\n    }\n  }\n\n  return {\n    name,\n    onSubscribe,\n    send,\n    subscribe\n  }\n}\n", "// This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment.\nrequire('../../js/transition.js')\nrequire('../../js/alert.js')\nrequire('../../js/button.js')\nrequire('../../js/carousel.js')\nrequire('../../js/collapse.js')\nrequire('../../js/dropdown.js')\nrequire('../../js/modal.js')\nrequire('../../js/tooltip.js')\nrequire('../../js/popover.js')\nrequire('../../js/scrollspy.js')\nrequire('../../js/tab.js')\nrequire('../../js/affix.js')", "import './django'\nimport './navigation'\nimport User from './User'\nimport registerComponents from './components'\n// './globals' publishes jQuery on the global object and must stay ahead of\n// 'bootstrap', which throws at load time if jQuery is not already there.\nimport './globals'\nimport 'bootstrap'\n\ndocument.addEventListener('DOMContentLoaded', () => {\n  Object.assign(globalThis, { user: new User() })\n  registerComponents()\n})\n"],
  "mappings": "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",
  "names": ["require_jquery", "__commonJSMin", "exports", "module", "global", "factory", "w", "window", "noGlobal", "arr", "getProto", "slice", "flat", "array", "push", "indexOf", "class2type", "toString", "hasOwn", "fnToString", "ObjectFunctionString", "support", "isFunction", "obj", "isWindow", "document", "preservedScriptAttributes", "DOMEval", "code", "node", "doc", "i", "val", "script", "toType", "version", "jQuery", "selector", "context", "num", "elems", "ret", "callback", "elem", "_elem", "len", "j", "options", "name", "src", "copy", "copyIsArray", "clone", "target", "length", "deep", "msg", "proto", "Ctor", "isArrayLike", "results", "first", "second", "invert", "callbackInverse", "matches", "callbackExpect", "arg", "value", "_i", "type", "Sizzle", "Expr", "getText", "isXML", "tokenize", "compile", "select", "outermostContext", "sortInput", "hasDuplicate", "setDocument", "docElem", "documentIsHTML", "rbuggyQSA", "rbuggyMatches", "contains", "expando", "preferredDoc", "dirruns", "done", "classCache", "createCache", "tokenCache", "compilerCache", "nonnativeSelectorCache", "sortOrder", "a", "pop", "pushNative", "list", "booleans", "whitespace", "identifier", "attributes", "pseudos", "rwhitespace", "rtrim", "rcomma", "rcombinators", "rdescend", "rpseudo", "ridentifier", "matchExpr", "rhtml", "rinputs", "rheader", "rnative", "rquickExpr", "rsibling", "runescape", "funescape", "escape", "nonHex", "high", "rcssescape", "fcssescape", "ch", "asCodePoint", "unloadHandler", "inDisabledFieldset", "addCombinator", "els", "seed", "m", "nid", "match", "groups", "newSelector", "newContext", "nodeType", "testContext", "toSelector", "keys", "cache", "key", "markFunction", "fn", "assert", "el", "addHandle", "attrs", "handler", "siblingCheck", "cur", "diff", "createInputPseudo", "createButtonPseudo", "createDisabledPseudo", "disabled", "createPositionalPseudo", "argument", "matchIndexes", "namespace", "hasCompare", "subWindow", "id", "attrId", "tag", "tmp", "className", "input", "b", "adown", "bup", "compare", "aup", "ap", "bp", "expr", "elements", "sel", "duplicates", "excess", "unquoted", "nodeNameSelector", "nodeName", "pattern", "operator", "check", "result", "what", "_argument", "last", "simple", "forward", "ofType", "_context", "xml", "uniqueCache", "outerCache", "nodeIndex", "start", "dir", "parent", "useCache", "pseudo", "args", "idx", "matched", "matcher", "unmatched", "text", "lang", "elemLang", "hash", "attr", "_matchIndexes", "setFilters", "parseOnly", "tokens", "soFar", "preFilters", "cached", "combinator", "base", "skip", "checkNonElements", "doneName", "oldCache", "newCache", "elementMatcher", "matchers", "multipleContexts", "contexts", "condense", "map", "filter", "newUnmatched", "mapped", "setMatcher", "preFilter", "postFilter", "postFinder", "postSelector", "temp", "preMap", "postMap", "preexisting", "matcherIn", "matcherOut", "matcherFromTokens", "checkContext", "leadingRelative", "implicitRelative", "matchContext", "matchAnyContext", "matcherFromGroupMatchers", "elementMatchers", "setMatchers", "bySet", "byElement", "superMatcher", "outermost", "matchedCount", "setMatched", "contextBackup", "dirrunsUnique", "token", "find", "compiled", "_name", "until", "truncate", "siblings", "n", "rneedsContext", "rsingleTag", "winnow", "qualifier", "not", "self", "rootjQuery", "init", "root", "rparentsprev", "guaranteedUnique", "targets", "l", "selectors", "sibling", "rnothtmlwhite", "createOptions", "object", "_", "flag", "firing", "memory", "fired", "locked", "queue", "firingIndex", "fire", "add", "index", "Identity", "v", "Thrower", "ex", "adoptValue", "resolve", "reject", "noValue", "method", "func", "tuples", "state", "promise", "deferred", "fns", "newDefer", "tuple", "returned", "onFulfilled", "onRejected", "onProgress", "maxDepth", "depth", "special", "that", "mightThrow", "then", "process", "e", "stateString", "singleValue", "remaining", "resolveContexts", "resolveValues", "master", "updateFunc", "rerrorNames", "error", "stack", "readyList", "wait", "completed", "access", "chainable", "emptyGet", "raw", "bulk", "_key", "rmsPrefix", "rdashAlpha", "fcamelCase", "_all", "letter", "camelCase", "string", "acceptData", "owner", "Data", "data", "prop", "dataPriv", "dataUser", "rbrace", "rmultiDash", "getData", "dataAttr", "startLength", "hooks", "next", "setter", "count", "defer", "pnum", "rcssNum", "cssExpand", "documentElement", "isAttached", "composed", "isHiddenWithinTree", "adjustCSS", "valueParts", "tween", "adjusted", "scale", "maxIterations", "currentValue", "initial", "unit", "initialInUnit", "defaultDisplayMap", "getDefaultDisplay", "display", "showHide", "show", "values", "rcheckableType", "rtagName", "rscriptType", "fragment", "div", "wrapMap", "getAll", "setGlobalEval", "refElements", "buildFragment", "scripts", "selection", "ignored", "wrap", "attached", "nodes", "rkeyEvent", "rmouseEvent", "rtypenamespace", "returnTrue", "returnFalse", "expectSync", "safeActiveElement", "on", "types", "one", "origFn", "event", "handleObjIn", "eventHandle", "events", "t", "handleObj", "handlers", "namespaces", "origType", "elemData", "mappedTypes", "origCount", "nativeEvent", "handlerQueue", "matchedHandlers", "matchedSelectors", "delegateCount", "hook", "originalEvent", "leverageNative", "notAsync", "saved", "handle", "props", "button", "delegateType", "orig", "fix", "related", "rnoInnerhtml", "rchecked", "rcleanScript", "manipulationTarget", "content", "disableScript", "restoreScript", "cloneCopyEvent", "dest", "pdataOld", "udataOld", "udataCur", "fixInput", "domManip", "collection", "hasScripts", "iNoClone", "valueIsFunction", "remove", "keepData", "html", "dataAndEvents", "deepDataAndEvents", "srcElements", "destElements", "inPage", "original", "insert", "rnumnonpx", "getStyles", "view", "swap", "old", "rboxStyle", "computeStyleTests", "container", "divStyle", "pixelPositionVal", "reliableMarginLeftVal", "roundPixelMeasures", "pixelBoxStylesVal", "boxSizingReliableVal", "scrollboxSizeVal", "measure", "reliableTrDimensionsVal", "table", "tr", "trChild", "trStyle", "curCSS", "computed", "width", "minWidth", "maxWidth", "style", "addGetHookIf", "conditionFn", "hookFn", "cssPrefixes", "emptyStyle", "vendorProps", "vendorPropName", "capName", "finalPropName", "final", "rdisplayswap", "rcustomProp", "cssShow", "cssNormalTransform", "setPositiveNumber", "subtract", "boxModelAdjustment", "dimension", "box", "isBorderBox", "styles", "computedVal", "extra", "delta", "getWidthOrHeight", "boxSizingNeeded", "valueIsBorderBox", "offsetProp", "origName", "isCustomProp", "scrollboxSizeBuggy", "prefix", "suffix", "expanded", "parts", "Tween", "end", "easing", "percent", "eased", "p", "fxNow", "inProgress", "rfxtypes", "rrun", "schedule", "createFxNow", "genFx", "includeWidth", "which", "createTween", "animation", "Animation", "defaultPrefilter", "opts", "toggle", "oldfire", "propTween", "restoreDisplay", "isBox", "anim", "hidden", "dataShow", "propFilter", "specialEasing", "properties", "stopped", "tick", "currentTime", "gotoEnd", "prepend", "speed", "opt", "to", "empty", "optall", "doAnimation", "clearQueue", "stopQueue", "stop", "dequeue", "timers", "cssFn", "timer", "time", "timeout", "boolHook", "attrHandle", "nType", "attrNames", "getter", "lowercaseName", "rfocusable", "rclickable", "tabindex", "stripAndCollapse", "getClass", "classesToArray", "classes", "curValue", "clazz", "finalValue", "stateVal", "isValidValue", "classNames", "rreturn", "option", "max", "optionSet", "rfocusMorph", "stopPropagationCallback", "onlyHandlers", "bubbleType", "ontype", "lastElement", "eventPath", "attaches", "location", "nonce", "rquery", "rbracket", "rCRLF", "rsubmitterTypes", "rsubmittable", "buildParams", "traditional", "s", "valueOrFunction", "r20", "rhash", "rantiCache", "rheaders", "rlocalProtocol", "rnoContent", "rprotocol", "prefilters", "transports", "allTypes", "originAnchor", "addToPrefiltersOrTransports", "structure", "dataTypeExpression", "dataType", "dataTypes", "inspectPrefiltersOrTransports", "originalOptions", "jqXHR", "inspected", "seekingTransport", "inspect", "selected", "prefilterOrFactory", "dataTypeOrTransport", "ajaxExtend", "flatOptions", "ajaxHandleResponses", "responses", "ct", "finalDataType", "firstDataType", "contents", "ajaxConvert", "response", "isSuccess", "conv2", "current", "conv", "prev", "converters", "settings", "url", "transport", "cacheURL", "responseHeadersString", "responseHeaders", "timeoutTimer", "urlAnchor", "fireGlobals", "uncached", "callbackContext", "globalEventContext", "completeDeferred", "statusCode", "requestHeaders", "requestHeadersNames", "strAbort", "statusText", "finalText", "status", "nativeStatusText", "headers", "success", "modified", "htmlIsFunction", "xhrSuccessStatus", "xhrSupported", "errorCallback", "complete", "xhr", "evt", "oldCallbacks", "rjsonp", "originalSettings", "callbackName", "overwritten", "responseContainer", "jsonProp", "body", "keepScripts", "parsed", "params", "off", "responseText", "curPosition", "curLeft", "curCSSTop", "curTop", "curOffset", "curCSSLeft", "calculatePosition", "position", "curElem", "rect", "win", "offsetParent", "offset", "parentOffset", "top", "defaultExtra", "funcName", "margin", "fnOver", "fnOut", "proxy", "hold", "_jQuery", "_$", "require_transition", "__commonJSMin", "$", "transitionEnd", "el", "transEndEventNames", "name", "duration", "called", "$el", "callback", "e", "require_alert", "__commonJSMin", "$", "dismiss", "Alert", "el", "e", "$this", "selector", "$parent", "removeElement", "Plugin", "option", "data", "old", "require_button", "__commonJSMin", "$", "Button", "element", "options", "state", "d", "$el", "val", "data", "changed", "$parent", "$input", "Plugin", "option", "$this", "old", "e", "$btn", "require_carousel", "__commonJSMin", "$", "Carousel", "element", "options", "e", "item", "direction", "active", "activeIndex", "willWrap", "delta", "itemIndex", "pos", "that", "type", "next", "$active", "$next", "isCycling", "relatedTarget", "slideEvent", "$nextIndicator", "slidEvent", "Plugin", "option", "$this", "data", "action", "old", "clickHandler", "href", "target", "$target", "slideIndex", "$carousel", "require_collapse", "__commonJSMin", "$", "Collapse", "element", "options", "hasWidth", "activesData", "actives", "startEvent", "Plugin", "dimension", "complete", "scrollSize", "i", "$element", "getTargetFromTrigger", "$trigger", "isOpen", "href", "target", "option", "$this", "data", "old", "e", "$target", "require_dropdown", "__commonJSMin", "$", "backdrop", "toggle", "Dropdown", "element", "getParent", "$this", "selector", "$parent", "clearMenus", "e", "relatedTarget", "isActive", "desc", "$items", "index", "Plugin", "option", "data", "old", "require_modal", "__commonJSMin", "$", "Modal", "element", "options", "_relatedTarget", "that", "e", "transition", "callback", "animate", "doAnimate", "callbackRemove", "modalIsOverflowing", "fullWindowWidth", "documentElementRect", "bodyPad", "scrollbarWidth", "index", "actualPadding", "calculatedPadding", "padding", "scrollDiv", "Plugin", "option", "$this", "data", "old", "href", "target", "$target", "showEvent", "require_tooltip", "__commonJSMin", "$", "DISALLOWED_ATTRIBUTES", "uriAttrs", "ARIA_ATTRIBUTE_PATTERN", "DefaultWhitelist", "SAFE_URL_PATTERN", "DATA_URL_PATTERN", "allowedAttribute", "attr", "allowedAttributeList", "attrName", "regExp", "index", "value", "i", "l", "sanitizeHtml", "unsafeHtml", "whiteList", "sanitizeFn", "createdDocument", "whitelistKeys", "el", "elements", "len", "elName", "attributeList", "whitelistedAttributes", "j", "len2", "Tooltip", "element", "options", "type", "triggers", "trigger", "eventIn", "eventOut", "dataAttributes", "dataAttr", "defaults", "key", "obj", "self", "e", "inDom", "that", "$tip", "tipId", "placement", "autoToken", "autoPlace", "pos", "actualWidth", "actualHeight", "orgPlacement", "viewportDim", "calculatedOffset", "complete", "prevHoverState", "offset", "width", "height", "marginTop", "marginLeft", "props", "delta", "isVertical", "arrowDelta", "arrowOffsetPosition", "dimension", "title", "callback", "$e", "$element", "isBody", "elRect", "isSvg", "elOffset", "scroll", "outerDims", "viewportPadding", "viewportDimensions", "topEdgeOffset", "bottomEdgeOffset", "leftEdgeOffset", "rightEdgeOffset", "o", "prefix", "Plugin", "option", "$this", "data", "old", "require_popover", "__commonJSMin", "$", "Popover", "element", "options", "$tip", "title", "content", "typeContent", "$e", "o", "Plugin", "option", "$this", "data", "old", "require_scrollspy", "__commonJSMin", "$", "ScrollSpy", "element", "options", "that", "offsetMethod", "offsetBase", "$el", "href", "$href", "a", "b", "scrollTop", "scrollHeight", "maxScroll", "offsets", "targets", "activeTarget", "i", "target", "selector", "active", "Plugin", "option", "$this", "data", "old", "$spy", "require_tab", "__commonJSMin", "$", "Tab", "element", "$this", "$ul", "selector", "$previous", "hideEvent", "showEvent", "$target", "container", "callback", "$active", "transition", "next", "Plugin", "option", "data", "old", "clickHandler", "e", "require_affix", "__commonJSMin", "$", "Affix", "element", "options", "target", "scrollHeight", "height", "offsetTop", "offsetBottom", "scrollTop", "position", "targetHeight", "initializing", "colliderTop", "colliderHeight", "offset", "affix", "affixType", "e", "Plugin", "option", "$this", "data", "old", "$spy", "events_exports", "__export", "contentInsertedEvent", "goToPageEvent", "intervalUpdateEvent", "namespaceEvent", "pageUpdateEvent", "popupCloseEvent", "userLoadedEvent", "EventBus", "listeners", "listener", "value", "getCookie", "name", "cookieValue", "cookies", "i", "cookie", "isMobile", "getNamespace", "source", "_a", "elem", "getFormData", "form", "data", "key", "value", "htmlStringToDom", "html", "dom", "isInternalLink", "href", "getDocTitle", "_b", "isHTMLElement", "import_jquery", "csrftoken", "getCookie", "csrfSafeMethod", "method", "sameOrigin", "url", "host", "protocol", "srOrigin", "origin", "$", "xhr", "settings", "contentInsertedEvent", "elem", "STRIP_EDITOR_IDS", "stripStyle", "element", "editorCallback", "editor", "e", "data", "id", "import_jquery", "keyToCmp", "keyFn", "a", "b", "ka", "kb", "identityPredicate", "x", "primitiveIdentity", "x", "some", "iterable", "predicate", "identityPredicate", "index", "item", "any", "some", "sorted", "iterable", "keyFn", "primitiveIdentity", "reverse", "result", "keyToCmp", "SubscribeButton", "elem", "notifications_default", "active", "bind", "fn", "thisArg", "toString", "getPrototypeOf", "iterator", "toStringTag", "hasOwnProperty", "obj", "prop", "isUnsafeObjectKey", "isPrototypeBoundary", "prototype", "source", "isSafeAndFullyMutable", "props", "descriptor", "hasOwnInPrototypeChain", "thing", "seen", "getSafeProp", "toSafeFlatObject", "sourcePrototype", "result", "merged", "current", "kindOf", "cache", "str", "kindOfTest", "type", "typeOfTest", "isArray", "isUndefined", "isBuffer", "val", "isFunction", "isArrayBuffer", "isArrayBufferView", "isString", "isNumber", "isObject", "isBoolean", "isPlainObject", "isEmptyObject", "isDate", "isFile", "isReactNativeBlob", "value", "isReactNative", "formData", "isBlob", "isFileList", "isSet", "isStream", "getGlobal", "G", "FormDataCtor", "isFormData", "proto", "kind", "isURLSearchParams", "isReadableStream", "isRequest", "isResponse", "isHeaders", "trim", "forEach", "fn", "allOwnKeys", "i", "l", "keys", "len", "key", "findKey", "_key", "_global", "isContextDefined", "context", "merge", "objs", "caseless", "skipUndefined", "assignValue", "targetKey", "existing", "symbols", "j", "symbol", "propertyIsEnumerable", "extend", "a", "b", "thisArg", "bind", "stripBOM", "content", "inherits", "constructor", "superConstructor", "descriptors", "toFlatObject", "sourceObj", "destObj", "filter", "propFilter", "endsWith", "searchString", "position", "lastIndex", "toArray", "arr", "isTypedArray", "TypedArray", "forEachEntry", "_iterator", "pair", "matchAll", "regExp", "matches", "isHTMLForm", "toCamelCase", "m", "p1", "p2", "isRegExp", "reduceDescriptors", "reducer", "reducedDescriptors", "name", "ret", "freezeMethods", "toObjectSet", "arrayOrString", "delimiter", "define", "noop", "toFiniteNumber", "defaultValue", "isSpecCompliantForm", "toJSONObject", "visited", "visit", "target", "reducedValue", "isAsyncFn", "isThenable", "_setImmediate", "setImmediateSupported", "postMessageSupported", "token", "callbacks", "data", "cb", "asap", "isIterable", "isSafeIterable", "utils_default", "ignoreDuplicateOf", "utils_default", "parseHeaders_default", "rawHeaders", "parsed", "key", "val", "i", "line", "hasKey", "trimSPorHTAB", "str", "start", "end", "code", "INVALID_UNICODE_HEADER_VALUE_CHARS", "INVALID_BYTE_STRING_HEADER_VALUE_CHARS", "sanitizeValue", "value", "invalidChars", "utils_default", "item", "sanitizeHeaderValue", "sanitizeByteStringHeaderValue", "toByteStringHeaderObject", "headers", "byteStringHeaders", "header", "$internals", "normalizeHeader", "header", "normalizeValue", "value", "utils_default", "sanitizeHeaderValue", "parseTokens", "str", "tokens", "tokensRE", "match", "parameterNameRE", "trimOWS", "start", "end", "code", "decodeQuotedString", "last", "decoded", "i", "parseParameters", "parameters", "quoted", "escaped", "parseParameter", "part", "equals", "name", "normalizedName", "parameterValue", "isValidHeaderName", "matchHeaderValue", "context", "filter", "isHeaderNameFilter", "formatHeader", "w", "char", "buildAccessors", "obj", "accessorName", "methodName", "arg1", "arg2", "arg3", "AxiosHeaders", "headers", "valueOrRewrite", "rewrite", "self", "setHeader", "_value", "_header", "_rewrite", "lHeader", "key", "setHeaders", "parseHeaders_default", "dest", "entry", "parser", "matcher", "deleted", "deleteHeader", "keys", "format", "normalized", "targets", "asStrings", "thing", "first", "computed", "target", "accessors", "prototype", "defineAccessor", "mapped", "headerValue", "AxiosHeaders_default", "REDACTED", "hasOwnOrPrototypeToJSON", "source", "utils_default", "prototype", "redactConfig", "config", "redactKeys", "lowerKeys", "k", "seen", "visit", "AxiosHeaders_default", "result", "v", "i", "reducedValue", "key", "value", "stringifySafely", "aggregateErrorMessage", "error", "entry", "AxiosError", "_AxiosError", "code", "request", "response", "customProps", "message", "axiosError", "serializedConfig", "AxiosError_default", "null_default", "DEFAULT_FORM_DATA_MAX_DEPTH", "isVisitable", "thing", "utils_default", "removeBrackets", "key", "renderKey", "path", "dots", "token", "i", "isFlatArray", "arr", "predicates", "prop", "toFormData", "obj", "formData", "options", "null_default", "option", "name", "fallback", "value", "metaTokens", "visitor", "defaultVisitor", "indexes", "_Blob", "maxDepth", "useBlob", "stack", "convertValue", "AxiosError_default", "throwIfMaxDepthExceeded", "depth", "stringifyWithDepthLimit", "ancestors", "_key", "currentValue", "el", "index", "exposedHelpers", "build", "toFormData_default", "encode", "str", "charMap", "match", "AxiosURLSearchParams", "params", "options", "toFormData_default", "prototype", "name", "value", "encoder", "_encode", "pair", "AxiosURLSearchParams_default", "encode", "val", "buildURL", "url", "params", "options", "_options", "utils_default", "_encode", "serializeFn", "serializedParams", "AxiosURLSearchParams_default", "hashmarkIndex", "$internals", "countHandlers", "handlers", "trimHandlers", "syncHandlerEntries", "manager", "internals", "length", "entry", "id", "InterceptorManager", "fulfilled", "rejected", "options", "handler", "fn", "utils_default", "h", "InterceptorManager_default", "transitional_default", "URLSearchParams_default", "AxiosURLSearchParams_default", "FormData_default", "Blob_default", "browser_default", "URLSearchParams_default", "FormData_default", "Blob_default", "utils_exports", "__export", "hasBrowserEnv", "hasStandardBrowserEnv", "hasStandardBrowserWebWorkerEnv", "_navigator", "origin", "platform_default", "utils_exports", "browser_default", "toURLEncodedForm", "data", "options", "toFormData_default", "platform_default", "value", "key", "path", "helpers", "utils_default", "MAX_DEPTH", "DEFAULT_FORM_DATA_MAX_DEPTH", "throwIfDepthExceeded", "index", "AxiosError_default", "parsePropPath", "name", "path", "pattern", "match", "arrayToObject", "arr", "obj", "keys", "i", "len", "key", "formDataToJSON", "formData", "buildPath", "value", "target", "isNumericKey", "isLast", "utils_default", "formDataToJSON_default", "methodList", "methodList_default", "own", "obj", "key", "utils_default", "stringifySafely", "rawValue", "parser", "encoder", "e", "defaults", "transitional_default", "data", "headers", "contentType", "hasJSONContentType", "isObjectPayload", "formDataToJSON_default", "isFileList", "formSerializer", "toURLEncodedForm", "env", "_FormData", "toFormData_default", "transitional", "forcedJSONParsing", "responseType", "JSONRequested", "strictJSONParsing", "AxiosError_default", "platform_default", "status", "methodList_default", "method", "defaults_default", "transformData", "fns", "response", "config", "defaults_default", "context", "headers", "AxiosHeaders_default", "data", "utils_default", "fn", "isCancel", "value", "CanceledError", "AxiosError_default", "message", "config", "request", "CanceledError_default", "settle", "resolve", "reject", "response", "validateStatus", "AxiosError_default", "urlParserControlCharacters", "normalizeURLForProtocolCheck", "url", "start", "parseProtocol", "url", "match", "speedometer", "samplesCount", "min", "bytes", "timestamps", "head", "tail", "firstSampleTS", "chunkLength", "now", "startedAt", "i", "bytesCount", "passed", "speedometer_default", "throttle", "fn", "freq", "timestamp", "threshold", "lastArgs", "timer", "invoke", "args", "now", "passed", "throttle_default", "progressEventReducer", "listener", "isDownloadStream", "freq", "bytesNotified", "_speedometer", "speedometer_default", "throttle_default", "e", "utils_default", "rawLoaded", "total", "loaded", "progressBytes", "rate", "data", "progressEventDecorator", "throttled", "lengthComputable", "asyncDecorator", "fn", "scheduler", "args", "isURLSameOrigin_default", "platform_default", "origin", "isMSIE", "url", "cookies_default", "platform_default", "name", "value", "expires", "path", "domain", "secure", "sameSite", "cookie", "utils_default", "cookies", "eq", "isAbsoluteURL", "url", "combineURLs", "baseURL", "relativeURL", "end", "malformedHttpProtocol", "redactFragment", "fragment", "match", "separator", "parameterName", "REDACTED", "redactSensitiveURLParts", "url", "redactedURL", "fragmentIndex", "redactedURLWithoutFragment", "assertValidHttpProtocolURL", "config", "normalizedURL", "normalizeURLForProtocolCheck", "AxiosError_default", "buildFullPath", "baseURL", "requestedURL", "allowAbsoluteUrls", "isRelativeUrl", "isAbsoluteURL", "combineURLs", "headersToObject", "thing", "AxiosHeaders_default", "ownEnumerableKeys", "symbol", "mergeConfig", "config1", "config2", "config", "getMergedValue", "target", "source", "prop", "caseless", "utils_default", "mergeDeepProperties", "a", "b", "valueFromConfig2", "defaultToConfig2", "getMergedTransitionalOption", "transitional2", "transitional1", "mergeDirectKeys", "mergeMap", "merge", "configValue", "FORM_DATA_CONTENT_HEADERS", "setFormDataHeaders", "headers", "formHeaders", "policy", "key", "val", "encodeUTF8", "str", "_", "hex", "resolveConfig", "config", "newConfig", "mergeConfig", "own", "key", "utils_default", "data", "withXSRFToken", "xsrfHeaderName", "xsrfCookieName", "headers", "auth", "baseURL", "allowAbsoluteUrls", "url", "AxiosHeaders_default", "buildURL", "buildFullPath", "username", "password", "e", "AxiosError_default", "getHeaders", "platform_default", "setFormDataHeaders", "isURLSameOrigin_default", "xsrfValue", "cookies_default", "resolveConfig_default", "isXHRAdapterSupported", "xhr_default", "config", "resolve", "reject", "_config", "resolveConfig_default", "requestData", "requestHeaders", "AxiosHeaders_default", "responseType", "onUploadProgress", "onDownloadProgress", "onCanceled", "uploadThrottled", "downloadThrottled", "flushUpload", "flushDownload", "flushDownloadWithEvent", "done", "request", "onloadend", "event", "parseProtocol", "normalizeURLForProtocolCheck", "platform_default", "AxiosError_default", "err", "responseHeaders", "response", "settle", "value", "msg", "timeoutErrorMessage", "transitional", "transitional_default", "utils_default", "toByteStringHeaderObject", "val", "key", "progressEventReducer", "cancel", "CanceledError_default", "protocol", "composeSignals", "signals", "timeout", "controller", "aborted", "onabort", "reason", "unsubscribe", "err", "AxiosError_default", "CanceledError_default", "timer", "signal", "utils_default", "composeSignals_default", "streamChunk", "chunk", "chunkSize", "len", "pos", "end", "readBytes", "iterable", "readStream", "stream", "reader", "done", "value", "trackStream", "onProgress", "onFinish", "iterator", "bytes", "_onFinish", "e", "controller", "loadedBytes", "err", "reason", "isHexDigit", "charCode", "isPercentEncodedByte", "str", "i", "len", "hexValue", "isBase64Char", "isBase64Whitespace", "base64Bytes", "significant", "groups", "remainder", "estimateBase64BufferAllocation", "body", "padding", "estimatePercentDecodedBase64Bytes", "invalid", "code", "estimateDataURLBytes", "url", "estimateBase64", "comma", "meta", "bytes", "c", "next", "estimateDataURLDecodedBytes", "fragmentIndex", "VERSION", "DEFAULT_CHUNK_SIZE", "DEFAULT_REQUEST_OPTIONS", "isFunction", "utils_default", "encodeUTF8", "str", "_", "hex", "decodeURIComponentSafe", "value", "test", "fn", "args", "maybeWithAuthCredentials", "url", "protocolIndex", "urlToCheck", "factory", "env", "globalObject", "ReadableStream", "TextEncoder", "envFetch", "Request", "Response", "isFetchSupported", "isRequestSupported", "isResponseSupported", "isReadableStreamSupported", "encodeText", "encoder", "supportsRequestStream", "duplexAccessed", "request", "platform_default", "hasContentType", "supportsResponseStream", "resolvers", "res", "type", "config", "method", "AxiosError_default", "getBodyLength", "body", "resolveBodyLength", "headers", "length", "data", "signal", "cancelToken", "timeout", "onDownloadProgress", "onUploadProgress", "responseType", "withCredentials", "fetchOptions", "maxContentLength", "maxBodyLength", "maxRedirects", "resolveConfig_default", "hasMaxContentLength", "hasMaxBodyLength", "own", "key", "_fetch", "composedSignal", "composeSignals_default", "unsubscribe", "requestContentLength", "pendingBodyError", "maxBodyLengthError", "auth", "configAuth", "username", "password", "parsedURL", "urlUsername", "urlPassword", "estimateDataURLDecodedBytes", "outboundLength", "mustEnforceStreamBody", "trackRequestStream", "stream", "onProgress", "flush", "trackStream", "loadedBytes", "_request", "contentTypeHeader", "progressEventDecorator", "progressEventReducer", "asyncDecorator", "isCredentialsSupported", "contentType", "VERSION", "safeFetchOptions", "resolvedOptions", "toByteStringHeaderObject", "response", "responseHeaders", "AxiosHeaders_default", "declaredLength", "isStreamResponse", "options", "prop", "responseContentLength", "bytesRead", "onChunkProgress", "responseData", "materializedSize", "resolve", "reject", "settle", "err", "canceledError", "networkError", "seedCache", "getFetch", "fetch", "seeds", "len", "i", "seed", "target", "map", "adapter", "knownAdapters", "null_default", "xhr_default", "getFetch", "utils_default", "fn", "value", "renderReason", "reason", "isResolvedHandle", "adapter", "getAdapter", "adapters", "config", "length", "nameOrAdapter", "rejectedReasons", "i", "id", "AxiosError_default", "reasons", "state", "s", "adapters_default", "throwIfCancellationRequested", "config", "CanceledError_default", "dispatchRequest", "_config", "utils_default", "AxiosHeaders_default", "transformData", "adapters_default", "defaults_default", "response", "reason", "isCancel", "validators", "type", "i", "thing", "deprecatedWarnings", "validator", "version", "message", "formatMessage", "opt", "desc", "VERSION", "value", "opts", "AxiosError_default", "correctSpelling", "assertOptions", "options", "schema", "allowUnknown", "keys", "result", "validator_default", "validators", "validator_default", "Axios", "instanceConfig", "InterceptorManager_default", "configOrUrl", "config", "err", "dummy", "dummyStack", "stack", "firstNewlineIndex", "secondNewlineIndex", "stackWithoutTwoTopLines", "mergeConfig", "transitional", "paramsSerializer", "headers", "utils_default", "contextHeaders", "methodList_default", "method", "AxiosHeaders_default", "requestInterceptorChain", "synchronousRequestInterceptors", "interceptor", "transitional_default", "responseInterceptorChain", "promise", "i", "len", "chain", "dispatchRequest", "newConfig", "onFulfilled", "onRejected", "error", "rejectedResult", "rejectedError", "fullPath", "buildFullPath", "buildURL", "url", "generateHTTPMethod", "isForm", "data", "Axios_default", "CancelToken", "_CancelToken", "executor", "resolvePromise", "resolve", "token", "cancel", "i", "onfulfilled", "_resolve", "promise", "message", "config", "request", "CanceledError_default", "listener", "index", "controller", "abort", "err", "c", "CancelToken_default", "spread", "callback", "arr", "isAxiosError", "payload", "utils_default", "HttpStatusCode", "key", "value", "HttpStatusCode_default", "createInstance", "defaultConfig", "context", "Axios_default", "instance", "bind", "utils_default", "instanceConfig", "mergeConfig", "axios", "defaults_default", "CanceledError_default", "CancelToken_default", "isCancel", "VERSION", "toFormData_default", "AxiosError_default", "promises", "spread", "isAxiosError", "AxiosHeaders_default", "thing", "formDataToJSON_default", "adapters_default", "HttpStatusCode_default", "axios_default", "Axios", "AxiosError", "CanceledError", "isCancel", "CancelToken", "VERSION", "all", "Cancel", "isAxiosError", "spread", "toFormData", "AxiosHeaders", "HttpStatusCode", "formToJSON", "getAdapter", "mergeConfig", "create", "axios_default", "api", "axios_default", "env", "fetchEnvironment", "data", "api", "Socket", "url", "opts", "_a", "handler", "name", "handlers", "event", "msg", "type", "action", "payload", "callback", "finder", "beat", "heartbeat", "direction", "SocketState", "wsProtocol", "DEFAULT_CONFIG", "RECONNECT_DELAY", "MAX_RETRIES", "userIsLoaded", "reconnectTimeout", "retriesLeft", "socket", "Socket", "reconnectTicker", "SocketState", "scheduleReconnect", "delay", "restartReconnecting", "userLoadedEvent", "state", "Endpoint", "elem", "store", "isNotificationMessage", "msg", "socket", "_a", "setCount", "setNotifications", "notifications", "n", "ordered", "sorted", "list", "liElem", "icon", "myClass", "notificationMarkRead", "count", "menu", "setTitle", "clearCount", "api", "loadSubscribeButtons", "SubscribeButton", "button", "title", "event", "isHtmlElement", "fetchNotifications", "data", "target", "init", "getDocTitle", "pageUpdateEvent", "checkVapidKey", "subscription", "initSubscription", "swReg", "state", "setSubscribeState", "unsubscribe", "e", "subscribe", "env", "c", "active", "notifications_default", "DEFAULT_TARGET", "HASH_RE", "BEFORE_NAVIGATE_TIMEOUT", "beforeNavigateHooks", "beforeNextNavigate", "hook", "runBeforeNavigate", "hooks", "resolve", "contentInsertedEvent", "element", "hash", "el", "displayNamespace", "source", "namespace", "getNamespace", "elem", "namespaceEvent", "handlePopState", "event", "partial", "data", "api", "updateContentFromData", "pageUpdateEvent", "htmlStringToDom", "insertWithScriptTags", "target", "scriptEl", "newScript", "updateFromResponse", "targetId", "html", "content", "updateTarget", "endpoint", "getContentBySelector", "selectors", "selector", "contentEl", "setTitle", "_a", "targetEl", "notifications_default", "getDocTitle", "bodyClasses", "openInTab", "href", "openInMenu", "menu", "menuItem", "subMenu", "unfoldInMenu", "knowledgeNavHandler", "currentTarget", "NON_AJAX", "insertContent", "dom", "container", "ajaxTarget", "loadExtraTarget", "goToPage", "_b", "goToPageEvent", "internalClickHandler", "isHTMLElement", "cls", "isInternalLink", "closeClickHandler", "addClickEvent", "callback", "$", "evt", "wrapper", "content", "active", "current", "lastFocus", "queue", "setTitle", "title", "isHtmlElement", "target", "init", "pressedOnBackdrop", "ev", "next", "focusFirst", "_replaceContent", "html", "contentInsertedEvent", "open", "popup", "_a", "data", "api", "e", "close", "isFocusable", "elem", "popupCloseEvent", "setTakeover", "activate", "Popup", "url", "callback", "method", "ServiceWorker", "err", "ev", "serviceWorkerRegistration", "notifications_default", "API", "User", "bodyClasses", "notifications_default", "ServiceWorker", "data", "api", "userLoadedEvent", "_a", "_b", "c", "popup", "Popup", "root", "event", "title", "isMobile", "content", "stopElem", "import_jquery", "ERROR_CLASS", "NON_FIELD_KEYS", "messagesFor", "value", "buildList", "messages", "id", "nonField", "list", "message", "item", "fieldElement", "form", "name", "rowFor", "field", "fieldId", "label", "clearFormErrors", "renderFormErrors", "errors", "_a", "_b", "unplaced", "row", "anchor", "showApiError", "error", "fallback", "data", "isAxiosError", "performDelete", "elem", "deleteApi", "deleteRedirect", "api", "goToPageEvent", "container", "$container", "$", "e", "showApiError", "ApiDelete_default", "event", "isHTMLElement", "confirmation", "METHODS", "interpretApi", "api", "method", "url", "performPost", "elem", "postApi", "postAssign", "postRedirect", "confirm", "dataset", "method", "url", "interpretApi", "api", "goToPageEvent", "e", "showApiError", "ApiPost_default", "ev", "isHTMLElement", "confirmation", "ContentFilterButton", "elem", "apiUrl", "target", "ev", "api", "data", "contentInsertedEvent", "ContextMenu_default", "target", "_a", "menu", "open", "ev", "isHTMLElement", "contextMenu", "DATA_TYPES", "withinBounds", "value", "min", "max", "parseAspectRatio", "aspectRatio", "wAsp", "hAsp", "loadOriginalImage", "file", "resolve", "reject", "reader", "dataURL", "img", "initCropArea", "orig", "ratio", "sWidth", "sHeight", "cropFractions", "area", "sx", "sy", "imgW", "imgH", "dragCropArea", "handle", "start", "dx", "dy", "MIN", "next", "w", "h", "formatPrio", "toFormatDataURL", "canvas", "type", "getScaled", "width", "height", "maxSize", "imageMax", "scale", "resizeImage", "src", "crop", "size", "context", "blob", "ERROR_TEXT", "HANDLES", "TEMPLATE", "h", "isFileDrag", "ev", "_a", "CropImageDialog", "trigger", "_b", "_c", "dataset", "parseAspectRatio", "Popup", "DATA_TYPES", "file", "selector", "button", "content", "depth", "setOver", "over", "type", "src", "img", "busy", "clearFormErrors", "orig", "loadOriginalImage", "initCropArea", "e", "blob", "resizeImage", "fractions", "cropFractions", "area", "side", "value", "handle", "scaleX", "scaleY", "startX", "startY", "startArea", "dragCropArea", "data", "ext", "method", "url", "interpretApi", "api", "showApiError", "goToPageEvent", "CropImage", "elem", "DiscussPostAs", "value", "_a", "g", "_b", "text", "li", "a", "ev", "id", "name", "elem", "userLoadedEvent", "setButtonsDisable", "form", "disable", "button", "releaseSubmit", "FormSubmitOnce_default", "ev", "DynamicChoices", "elem", "btn", "ev", "_a", "button", "wrapper", "key", "value", "target", "div", "buttons", "delayTimeout", "delayed", "fn", "ms", "DynamicForm", "form", "_a", "e", "action", "method", "data", "text", "contentInsertedEvent", "SELECTOR", "PLACEHOLDER", "DEFAULT_ERROR", "inFlight", "resolveRedirect", "template", "data", "_match", "key", "value", "submitForm", "form", "_a", "formApi", "popupClose", "redirect", "errorText", "method", "url", "interpretApi", "api", "getFormData", "clearFormErrors", "container", "contentInsertedEvent", "popupCloseEvent", "goToPageEvent", "e", "showApiError", "JsonForm_default", "ev", "releaseSubmit", "currentMenu", "ev", "isHTMLElement", "Menu", "toggler", "event", "thisOpen", "Pagination", "container", "entries", "isIntersecting", "target", "isHTMLElement", "ev", "_a", "href", "data", "api", "e", "html", "_b", "dom", "htmlStringToDom", "elem", "PopupLink_default", "event", "isHTMLElement", "linkTag", "Popup", "RadioButtons", "elem", "api", "attribute", "data", "method", "href", "button", "event", "_a", "current", "import_jquery", "ReadMarker", "element", "id", "storageKey", "closer", "ev", "$", "api", "ResponsiveEmbed", "elem", "_a", "_b", "_c", "width", "height", "naturalWidth", "naturalHeight", "TIMEOUT", "MIN_CHARS", "MODES", "namespaces", "controller", "SiteSearch", "elem", "_a", "_b", "namespaceEvent", "namespace", "setAll", "element", "setThis", "pageUpdateEvent", "getNamespace", "event", "checkbox", "forceUpdate", "name", "selector", "mode", "m", "html", "text", "cb", "data", "api", "e", "isAxiosError", "isCancel", "Tabs_default", "ev", "isHTMLElement", "button", "container", "name", "id", "elements", "dataset", "ToggleButton", "elem", "_a", "_b", "icon", "icon_on", "icon_off", "toggleApi", "toggleAttr", "toggleOffApi", "toggleOnce", "reload", "updateTarget", "dataset", "attribute", "offApi", "ev", "method", "url", "interpretApi", "data", "api", "state", "status", "response", "isAnchorElement", "elem", "Toggler", "ev", "_a", "_b", "container", "button", "target", "allComponents", "ApiDelete_default", "ApiPost_default", "ContentFilterButton", "ContextMenu_default", "CropImage", "DiscussPostAs", "DynamicChoices", "DynamicForm", "FormSubmitOnce_default", "JsonForm_default", "Menu", "Pagination", "PopupLink_default", "RadioButtons", "ReadMarker", "ResponsiveEmbed", "SiteSearch", "Tabs_default", "ToggleButton", "Toggler", "isInstallComponent", "component", "isIntialOnlyComponent", "dynamicComponents", "c", "registerComponents", "target", "components", "elem", "contentInsertedEvent", "import_jquery", "count", "n", "ErrorStatus", "SubscribeError", "status", "message", "isSubscribedMessage", "msg", "isSubscribeFailMessage", "DEFAULT_OPTIONS", "defineChannel", "name", "opts", "options", "onSubscribedCallbacks", "subscriptions", "subscribingIds", "subscribedIds", "subscribedCallbacks", "subscribeErrorCallbacks", "idGenerator", "count", "registerCallback", "map", "id", "cb", "clearCallbacks", "socket", "_a", "_b", "callbacks", "readyState", "SocketState", "shouldSubscribeTo", "performSubscribe", "send", "action", "payload", "getSubscriptionPromise", "resolve", "reject", "timeout", "SubscribeError", "isSubscribing", "isSubscribed", "shouldSubscribe", "any", "v", "subscribe", "subscriptionId", "onSubscribe", "$", "notifications_default", "api", "defineChannel", "events_exports", "beforeNextNavigate", "Popup", "socket", "isAxiosError", "User", "registerComponents"]
}
